- HCL 61.7%
- Jinja 35.5%
- Shell 2.8%
|
|
||
|---|---|---|
| ansible | ||
| docs | ||
| opentofu | ||
| services | ||
| .env.example | ||
| .gitignore | ||
| AGENTS.md | ||
| README.md | ||
| Taskfile.yml | ||
Infrastructure Monorepo
This repository manages my home lab infrastructure using OpenTofu for provisioning and Ansible for configuration management.
Structure
.
├── opentofu/ # Infrastructure Provisioning (VMs, Storage, DNS)
│ ├── main.tf
│ └── ...
├── ansible/ # Configuration Management (Software, Docker, Mounts)
│ ├── inventory/
│ ├── roles/
│ └── site.yml
└── ...
1. Provisioning (OpenTofu)
The opentofu/ directory contains the Infrastructure as Code definitions for Proxmox.
VM templates use the upstream Debian cloud image. The downloaded image is not overwritten during routine OpenTofu plans, so template refreshes stay explicit and reviewable. New Debian VMs receive cloud-init vendor-data that installs qemu-guest-agent during first boot so Proxmox can use the guest agent without a separate Ansible bootstrap toggle.
Quick Start:
task tofu:init
task tofu:plan
task tofu:apply
Key Resources:
- VMs: Defined in
main.tfandvms-new.tf. - Templates: Debian 13 cloud image template.
- State: Local state file (backed up, git-ignored).
2. Configuration (Ansible)
The ansible/ directory manages the software and configuration inside the VMs.
Prerequisites:
cd ansible
ansible-galaxy install -r requirements.yml
Dynamic Inventory: This project uses the Proxmox dynamic inventory plugin to find VMs. You must export your Proxmox credentials as environment variables before running playbooks:
export PROXMOX_API_ENDPOINT="https://192.168.1.10:8006/"
export PROXMOX_USER="root@pam"
export PROXMOX_TOKEN_ID="your-token-id"
export PROXMOX_TOKEN_SECRET="your-token-secret"
Running Playbooks:
# Verify inventory
ansible-inventory -i inventory/proxmox.yml --graph
# Run the main playbook
ansible-playbook -i inventory/proxmox.yml site.yml