seed: add 14 A records + 3 Kea reservations for homelab services #5
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feature/seed-additional-dns"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Adds the 14 homelab services that the new
scripts/discover-undns-vms.pyflagged as missing DNS after the VLAN 102 cutover settled. Three of them are dynamic CTs (git,forgejo-runner,patchmon) that needed to be pinned with Kea reservations before getting DNS — otherwise their pool-assigned IP could shift on next renewal and DNS would go stale. The pin uses the MAC and IP each CT already has, so it's a no-op for the running guest.Changes
netbox/seed-data/objects.yamlip_addressesentries (all on10.0.2.0/24)dns_records(adsbalready existed via legacy migration)kea_reservationsfor the dynamic CTsansible/roles/kea/defaults/main.ymlkea_reservationsmirroring the seed-data additions (live source of truth for Kea config render)scripts/discover-undns-vms.py/lxc/{vmid}/interfaces) before falling back to the staticip=config block, matching what the PVE GUI showsRecords added (all under
infra.strscrm.io)bc:24:11:29:17:15bc:24:11:d2:55:02bc:24:11:74:11:d5Skipped (operator decision)
pdm(proxmox-datacenter-manager) — to be deleteddns-01,dns-02— legacy ISC pair, decom on 2026-05-24 (14-day soak)rhel— offline / placeholderadsb-feeder— already has DNS via the existingadsbreservation at 10.0.2.141Test plan
python3 -c "import yaml; yaml.safe_load(open('netbox/seed-data/objects.yaml'))"passespython3 -c "import yaml; yaml.safe_load(open('ansible/roles/kea/defaults/main.yml'))"passesansible-checkworkflow greennetbox-seed.ymlworkflow runs idempotently against live NetBox; 14 new IPAM + 13 new DNS records appearansible-applyreloads Kea on both nodes (changed=2) andkea-dhcp4 -tvalidation passesdig @10.0.2.230 git.infra.strscrm.ioreturns10.0.2.146(and similar spot-check for at least one other new record)🤖 Generated with Claude Code
Discovered via scripts/discover-undns-vms.py against the live Proxmox cluster after VLAN 102 cutover settled. The script also gained a small fix to read CT runtime IPs (the same source the PVE GUI uses) instead of just the static lxc config. Added (all under infra.strscrm.io): Static IPs (configured on the host directly, status=active) pegaprox 10.0.2.3 (Pegapox PVE automation) authelia 10.0.2.5 tunnel 10.0.2.6 pbs 10.0.2.40 (Proxmox Backup Server) ttrss 10.0.2.105 DHCP-assigned IPs on Kea (status=dhcp) frigate 10.0.2.9 pulse 10.0.2.12 unpoller 10.0.2.13 apt-cacher-ng 10.0.2.15 kuma 10.0.2.16 Dynamic CTs pinned to current Kea lease (status=dhcp + reservation) git 10.0.2.146 (MAC bc:24:11:29:17:15) forgejo-runner 10.0.2.147 (MAC bc:24:11:d2:55:02) patchmon 10.0.2.148 (MAC bc:24:11:74:11:d5) The three reservations are added to both `netbox/seed-data/objects.yaml` and `ansible/roles/kea/defaults/main.yml` (the live source of truth for Kea config). Each pin uses the MAC the CT already has and the IP it's already on, so the cutover from "dynamic in pool" to "fixed reservation" is a no-op for the running guest. Skipped per operator: pdm (about to delete), dns-01 / dns-02 (will decom in 14 days), rhel (offline). adsb-feeder VM already has DNS via the existing `adsb` reservation at 10.0.2.141 — no new entry needed.ansible-lint embeds yamllint with its own evaluation path, so the .yamllint policy doesn't propagate. Three classes of fix: 1. Real code-quality fixes: - playbooks/kea-render-prod.yml: name the play and the template task (name[play] / name[missing]). - roles/monitor/tasks/main.yml: refactor the orphan-dashboard removal step. The previous `loop:` was a 234-char single-line expression that double-substituted `{{ monitor_install_dir }}` inside a regex_replace argument (jinja[spacing] warning + line length). Split into two `set_fact` steps that compute the orphan list cleanly, then loop over a short list. 2. Lint policy: - .ansible-lint skip_list grows by yaml[commas] and yaml[line-length] to mirror .yamllint (which already disables these). Inline-flow records align fields by padding extra spaces after commas; long URLs in get_url tasks naturally exceed 160 chars. Both are pre-existing patterns across the codebase, not new debt. ansible-lint now passes with 0 failures / 0 warnings on the basic profile (also clean against production).