Skip to content

(Proof-of-concept) REST API framework to *aaSify terraform + ansible stacks

Notifications You must be signed in to change notification settings

shalomb/terrestrial

Repository files navigation

terrestrial

Proof-of-Concept: Thin REST API shim for your existing terraform + ansible IaC codebase.

Use Cases

  • IaaS/PaaS. Exposing IaC code projects over REST APIs such that instances (your IaC deliverables) can be created, managed, lifecycled, etc. e.g. Port your Terraform + Ansible that manages PostgreSQL clusters into Terrestrial and realize your Database-as-a-Service.
  • Defining custom operational and system boundaries around IaC. e.g. Use Terrestrial + $your_favourite_reverse_proxy in place of Gitlab hacked-up pipelines to manage infrastructure.

Goals

  • Provide a thin "API Service" layer around any (within reason) Terraform and/or Ansible IaC codebase to realize a X-as-a-Service offering. Define a nominal interface the hosted IaC codebase should implement to be Onboarded into Terrestrial.
  • Provide a full CRUD Interface using established REST patterns (e.g. POST-PUT to allow long-running terraform/ansible processes to create the technical resource).
  • Easy deployment: Build a docker image containing the complete bundle of Terrestrial + IaC code to deploy the "service". Allow sourcing of IaC projects from remote git repositories.
  • Dynamic Inventory: Refactor shalomb/tofu to provide a dynamic inventory of terraform resources to ansible, etc.
  • Allow for integrations into load-balancers/reverse-proxies/ADCs to augment system and operational needs. Support for OAuth/OIDC/Logging.

HOWTO

A write-up required but see scripts in bin/ to get started.

IaC Interface

TODO: This section is incomplete.

  • Use tfvars.json to pass resource attributes as variables from terrestrial to terraform.
  • Use terraform outputs from terraform to state created resources.
  • Use the terraform state to describe the full IaC inventory to technologies further up the stack (e.g. ansible, etc).
  • Use group_vars/all to pass resource attributes as variables to ansible.
  • Use JSON outputs to capture output from terraform's plan, apply, destroy, etc.
  • Use custom callbacks (and so JSON) to capture output from ansible playbook runs.

About

(Proof-of-concept) REST API framework to *aaSify terraform + ansible stacks

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published