{"id":50521109,"url":"https://github.com/dryvist/terraform-proxmox","last_synced_at":"2026-06-14T02:04:15.450Z","repository":{"id":295302773,"uuid":"989729188","full_name":"dryvist/terraform-proxmox","owner":"dryvist","description":"Infrastructure-as-Code automating Proxmox VE provisioning with Terraform/Terragrunt. Declarative management of VMs, LXC containers, networking, firewall rules. Includes cloud-init, Packer image building for Splunk, and AWS S3/DynamoDB state management for safe concurrent operations.","archived":false,"fork":false,"pushed_at":"2026-05-28T23:15:40.000Z","size":1022,"stargazers_count":0,"open_issues_count":33,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-29T01:16:44.937Z","etag":null,"topics":["automation","aws-s3","cloud-init","devops","docker","homelab","hypervisor","iac","infrastructure-as-code","k3s","lxc-containers","packer","proxmox","splunk","state-management","terraform","terragrunt","virtualization"],"latest_commit_sha":null,"homepage":null,"language":"HCL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dryvist.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-05-24T17:48:38.000Z","updated_at":"2026-05-28T23:15:43.000Z","dependencies_parsed_at":"2026-02-02T06:00:24.959Z","dependency_job_id":"cec5e9ac-a12d-4088-9024-7466e816e87b","html_url":"https://github.com/dryvist/terraform-proxmox","commit_stats":null,"previous_names":["jacobpevans/terraform-proxmox","dryvist/terraform-proxmox"],"tags_count":25,"template":false,"template_full_name":null,"purl":"pkg:github/dryvist/terraform-proxmox","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dryvist%2Fterraform-proxmox","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dryvist%2Fterraform-proxmox/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dryvist%2Fterraform-proxmox/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dryvist%2Fterraform-proxmox/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dryvist","download_url":"https://codeload.github.com/dryvist/terraform-proxmox/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dryvist%2Fterraform-proxmox/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33847265,"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-03T02:00:06.370Z","response_time":59,"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":["automation","aws-s3","cloud-init","devops","docker","homelab","hypervisor","iac","infrastructure-as-code","k3s","lxc-containers","packer","proxmox","splunk","state-management","terraform","terragrunt","virtualization"],"created_at":"2026-06-03T04:03:04.637Z","updated_at":"2026-06-03T04:03:13.073Z","avatar_url":"https://github.com/dryvist.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Terraform Proxmox Infrastructure\n\nTerraform/Terragrunt IaC for the Proxmox VE homelab. Provisions VMs, LXC\ncontainers, resource pools, firewall rules, and ACME certificates. State is\nstored in S3 with DynamoDB locking.\n\n## Requirements\n\nAll tooling ships via the Nix devshell — activate once per worktree, then\nautomatic on every `cd`.\n\n```bash\ndirenv allow        # one-time; requires direnv + nix-direnv\n```\n\nManual activation:\n\n```bash\nnix develop \"github:JacobPEvans/nix-devenv?dir=shells/terraform\"\n```\n\nTooling provided: `terragrunt`, `opentofu`, `terraform-docs`, `tflint`,\n`tfsec`, `trivy`, `sops`, `age`, `awscli2`, `jq`, `yq`, `pre-commit`.\n\n## Usage\n\nEvery credentialed command requires AWS credentials (state backend) and\nDoppler (provider secrets). Run all commands through the wrapper:\n\n```bash\naws-vault exec tf-proxmox -- doppler run -- terragrunt \u003cCOMMAND\u003e\n```\n\nCommon operations:\n\n```bash\ndoppler run -- terragrunt validate\ndoppler run -- terragrunt plan\ndoppler run -- terragrunt apply\ndoppler run -- terragrunt show\n```\n\nNote: `aws-vault exec` triggers a keychain prompt on each invocation. Batch\nall credentialed work in a single `aws-vault exec tf-proxmox -- claude`\nsession rather than re-invoking repeatedly.\n\n## Configuration\n\nConfig is split across three layers:\n\n| Source | Contents | How to edit |\n| ------ | -------- | ----------- |\n| `deployment.json` | Container/VM definitions, pools, node placement | Edit directly and commit |\n| `terraform.sops.json` | Per-VLAN network CIDRs, domain, SSH key paths | Decrypt with SOPS, edit, re-encrypt |\n| Doppler (`iac-conf-mgmt/prd`) | `PROXMOX_VE_*`, SSH key content, credentials | Doppler web UI or CLI |\n\n`terraform.tfvars` is gitignored and must not exist — it silently overrides\n`deployment.json` via Terraform variable precedence.\n\nSee [docs/SOPS_SETUP.md](./docs/SOPS_SETUP.md) for the full three-layer setup.\n\n## IP derivation\n\nEvery guest IP is `cidrhost(\u003cvlan CIDR\u003e, vm_id)`. No literal IPs are\ncommitted anywhere in this repo — they are derived at plan-time from\nDoppler-supplied `NETWORK_CIDR_*` values.\n\n## Testing\n\n```bash\ntofu test           # mock-provider contract tests (no credentials needed)\n```\n\nThe full suite runs automatically in CI on every PR.\n\n## Documentation\n\n| Doc | Purpose |\n| --- | ------- |\n| [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md) | Pipeline architecture, downstream repos, IP derivation |\n| [docs/SOPS_SETUP.md](./docs/SOPS_SETUP.md) | SOPS + age setup, Doppler integration |\n| [TROUBLESHOOTING.md](./TROUBLESHOOTING.md) | Operational guidance, timeout/debug logging |\n\n## License\n\nApache License 2.0 — see [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdryvist%2Fterraform-proxmox","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdryvist%2Fterraform-proxmox","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdryvist%2Fterraform-proxmox/lists"}