The brief
The homelab was growing past what I wanted to maintain by hand. Every reinstall meant running the same dozen commands, slightly differently each time. The fix was to stop doing that.
What I built
- Bootstrap role that takes a freshly installed Linux host to a known-good baseline, covering users, hardening, packages and monitoring agents.
- BIND DNS role for the internal authoritative name servers.
- GitLab CI running every change through pipelines that lint, dry-run and then apply.
Why it mattered
The discipline of writing idempotent roles that produce a known-good state, every time, regardless of what was on the host before, is the same discipline that matters when you are doing Ansible-driven config management on a PCI fleet with an active audit cycle. The homelab is where I built that muscle before it had consequences.