IoC for my homelab using opentofu
| ansible | ||
| docs | ||
| opentofu | ||
| services/zigbee | ||
| .env.example | ||
| .gitignore | ||
| 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.
Quick Start:
cd opentofu
tofu init
tofu plan
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