# HomeLab Ansible Ansible is the control plane for HomeLab infrastructure changes. ## Contract - The operator keeps passwords, SSH access and network reachability working. - The agent changes infrastructure only through inventory, roles and playbooks in this directory. - Manual server changes are allowed only for break-glass recovery; afterwards they must be captured in Ansible. - Secrets stay outside git. Use `.env`, vault files or local prompt input, not committed variables. ## Layout - `inventory/hosts.yml` — canonical host list and host-specific facts. - `playbooks/` — entry points for tasks. - `roles/` — reusable configuration units. ## Current Groups - `ru-vps` — public VPS, JumpHost, qdevice, ZeroTier member. - `pve_nodes` — Proxmox hosts: `cloud-pc`, `mini-pc`. - `lxc_infra` — infrastructure LXC containers: `pbs`, `zt-cloud`, `zt-mini`. - `vpn_openvpn` — OpenVPN transport hosts: `ru-vps`, `wg-mini`. - `shell_hosts` — hosts with unified bash config: `ru-vps`, `cloud-pc`, `mini-pc`. - `servers` — all managed hosts. ## First Checks Install control-node dependencies locally: ```bash python3 -m venv .venv . .venv/bin/activate pip install -r requirements.txt ansible-galaxy collection install -r requirements.yml -p collections ``` Run from `ansible/`: ```bash ansible-playbook playbooks/check.yml ``` For Proxmox API playbooks, create ignored `.env` from `.env.example` and load it: ```bash cp .env.example .env . ./.env .venv/bin/ansible-playbook playbooks/pve-wg-mini.yml ``` Or bootstrap the token from `mini-pc` with sudo: ```bash .venv/bin/ansible-playbook playbooks/bootstrap-pve-api-token.yml -K ``` OpenVPN transport: ```bash .venv/bin/ansible-playbook playbooks/openvpn-vps-mini.yml -K .venv/bin/ansible-playbook playbooks/openvpn-check.yml ``` Bootstrap the Ansible service account on shell hosts: ```bash .venv/bin/ansible-playbook -i inventory/hosts.yml playbooks/bootstrap-ansible-user.yml -K ``` When a task needs privilege escalation: ```bash ansible-playbook playbooks/.yml -K ``` ## Workflow 1. Describe the desired infrastructure change. 2. Add or update a role/playbook. 3. Run the smallest safe check or playbook. 4. Document non-obvious decisions in the project notes.