IoC for my homelab using opentofu
Find a file
2026-02-01 19:21:51 +01:00
ansible Change proxmox Debian Template and add arr-stack VM 2026-02-01 19:21:51 +01:00
docs Create TODOs for zigbee2mqtt 2026-01-31 20:45:56 +01:00
opentofu Change proxmox Debian Template and add arr-stack VM 2026-02-01 19:21:51 +01:00
services/zigbee feat: deploy devices.yaml file and groups.yaml file independently 2026-01-31 20:45:42 +01:00
.env.example feat: include Asnible mosquitto role and authorize to MQTT broker 2026-01-25 14:01:46 +01:00
.gitignore init implementation ansible still figuring things out 2026-01-13 20:05:47 +01:00
README.md init implementation ansible still figuring things out 2026-01-13 20:05:47 +01:00
Taskfile.yml feat: move Role configuration out of ansible into /services and use 2026-01-31 18:26:52 +01:00

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.tf and vms-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

Documentation