{"id":50842844,"url":"https://github.com/kpeacocke/terraable","last_synced_at":"2026-06-14T07:34:55.470Z","repository":{"id":345269580,"uuid":"1183970209","full_name":"kpeacocke/terraable","owner":"kpeacocke","description":"Reference demo showing HCP Terraform provisioning and Ansible Automation Platform operationalising, validating, and remediating environments.","archived":false,"fork":false,"pushed_at":"2026-04-29T21:18:37.000Z","size":439,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-14T07:34:48.765Z","etag":null,"topics":["aap","ansible","awx","demo","hcp","iac","openshift","terraform","tfe"],"latest_commit_sha":null,"homepage":"https://github.com/kpeacocke/terraable","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kpeacocke.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":".github/AGENTS.md","dco":null,"cla":null}},"created_at":"2026-03-17T05:52:21.000Z","updated_at":"2026-04-29T21:18:39.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/kpeacocke/terraable","commit_stats":null,"previous_names":["kpeacocke/terraable"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kpeacocke/terraable","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kpeacocke%2Fterraable","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kpeacocke%2Fterraable/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kpeacocke%2Fterraable/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kpeacocke%2Fterraable/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kpeacocke","download_url":"https://codeload.github.com/kpeacocke/terraable/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kpeacocke%2Fterraable/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34313515,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-14T02:00:07.365Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aap","ansible","awx","demo","hcp","iac","openshift","terraform","tfe"],"created_at":"2026-06-14T07:34:54.781Z","updated_at":"2026-06-14T07:34:55.463Z","avatar_url":"https://github.com/kpeacocke.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# terraable\n\nReference demo showing HCP Terraform provisioning and Ansible Automation Platform operationalising, validating, and remediating environments.\n\n## Quick Start\n\nGet an offline demo running in under five minutes — no live credentials required:\n\n```bash\ngit clone https://github.com/\u003cyour-username\u003e/terraable.git \u0026\u0026 cd terraable\ncp .env.example .env          # Optional: sample credential template\npython3 -m venv .venv \u0026\u0026 source .venv/bin/activate\npip install poetry \u0026\u0026 poetry install\nTERRAABLE_MOCK_MODE=true python -m terraable.api_server --host 127.0.0.1 --port 8000\n```\n\nOpen `http://127.0.0.1:8000`. All actions (create, baseline, scan, drift, remediate) return\npre-seeded responses — no HCP Terraform or Ansible credentials required.\n\nFor the full walkthrough, credential setup, and advancing to live execution, see\n[docs/lab-guide.md](docs/lab-guide.md).\n\n## Status\n\nLocal-lab now has an executable end-to-end path: UI -\u003e Python API -\u003e Terraform contract apply -\u003e Ansible operational workflows against workspace-local lab files.\n\n## MVP Scope\n\n- Deterministic Terraform-to-Ansible handoff contract.\n- Initial OpenShift substrate Terraform module.\n- HCP Terraform run status and output retrieval support.\n- AAP-style operational playbooks for baseline, scan, and remediation.\n- Selectable portal path for `rhdh` and `backstage`.\n- SSH root login hardening control with validation and remediation flow.\n- Control-plane MVP UI with action and evidence panels.\n\n## Phase 3 Additions\n\n- Added substrate modules for `gcp`, `vmware`, `parallels`, and `hyper-v`.\n- Added local target auto-detection helper and UI suggestion rendering.\n- Added synthetic incident feed action and UI panel for demo storytelling.\n- Added expanded compliance control visibility beyond SSH root login.\n- Added observability dashboard panel for Terraform and workflow stage tracing.\n\n## Repository Layout\n\n- `terraform/`: provisioning modules and contract-oriented outputs.\n- `ansible/`: playbooks and roles for operationalisation controls.\n- `integration/`: handoff and orchestration integration assets.\n- `ui/`: control-plane demo user interface.\n- `docs/`: architecture, contract, and runbook documentation.\n- `terraable/`: typed Python models and orchestration support code.\n\n## Modes\n\n- Showcase mode: live provisioning and workflow execution.\n- Lab mode: reduced-complexity local target path.\n- Offline/mock mode: deterministic demo replay using simulated outcomes.\n\n## Source Of Truth\n\n- Scripted MVP flow: `local-lab + backstage` is the default presenter path.\n- Extended live targets: `aws`, `azure`, `okd`, `gcp`, `vmware`, `parallels`, and `hyper-v` are executable when credentials and platform prerequisites are satisfied.\n- Scaffold-only in this branch: `openshift` remains contract/module scaffolding and is not selectable as a live control-plane target.\n- Token convention: use `TF_TOKEN_\u003chostname\u003e` as primary. `HCP_TERRAFORM_TOKEN` is supported as a backwards-compatible alias in UI-driven auth flows.\n- Machine-readable target matrix: `docs/target-capabilities.json` is validated in CI to keep docs and executable scope aligned.\n\n## Running The Control Plane\n\nPreconditions:\n\n- `terraform` available on `PATH`.\n- Python environment has `ansible` installed.\n\nRun:\n\n```bash\npython -m terraable.api_server --host 127.0.0.1 --port 8000\n```\n\nThen open `http://127.0.0.1:8000`.\n\nCredential authentication:\n\n- Credentials can be provided from `.env` and/or entered in the UI Authentication panel.\n- Action buttons stay disabled until the selected target and portal are authenticated and executable.\n- For the current executable path (`local-lab`), provide an HCP Terraform token via Terraform CLI convention (`TF_TOKEN_\u003chostname\u003e`, with `TERRAABLE_TFC_HOSTNAME` defaulting to `app.terraform.io`). The UI also accepts `HCP_TERRAFORM_TOKEN` as a backwards-compatible alias.\n\nCurrent executable scope:\n\n- `local-lab + backstage` is wired end-to-end.\n- `local-lab + rhdh` is wired end-to-end.\n- `gcp`, `vmware`, `parallels`, and `hyper-v` are wired through executable Terraform contract applies in live mode.\n- AWS, Azure, and OKD execute via their dedicated backend classes.\n- OpenShift remains module-level contract scaffolding in this branch.\n\n## Key Documentation\n\n- [Architecture overview](docs/architecture-overview.md)\n- [Credential matrix](docs/credentials-matrix.md)\n- [Handoff contract](docs/handoff-contract.md)\n- [HCP Terraform integration](docs/hcp-terraform.md)\n- [MVP demo runbook](docs/mvp-demo-runbook.md)\n- [Repository labels](docs/repository-labels.md)\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for workflow and local setup guidance, including Snyk user-local configuration in the [Snyk Configuration section](CONTRIBUTING.md#snyk-configuration).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkpeacocke%2Fterraable","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkpeacocke%2Fterraable","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkpeacocke%2Fterraable/lists"}