Automate the PuppetDB reality import (issue #1) by querying pdbmux — the
PuppetDB multiplexer whose HTTPS gateway is reachable from CI/workstations,
unlike raw PuppetDB — instead of PuppetDB directly, and shaping the result to
the NetBox reality side the devices module reconciles.
- Add tools/backfill (Go): query pdbmux /pdb/query/v4/facts for the 13 existing
physicals and emit per-host reality YAML — serial/model/UUID, every recordable
interface (real NICs plus overlay/loopback/kube-lb) with MAC and CIDR IPs, and
CPU/RAM/disk inventory. Filter ephemeral Calico veths and Ceph RBD volumes;
take interface names from Facter, never assume them.
- Emit deterministic, idempotent, yamllint-clean output into
config/au/syd1/reality/<host>.yaml, generated for prodnxsr0001-0013.
- Extend modules/infra with a reality variable and reality.tf creating
netbox_device_interface/netbox_mac_address/netbox_ip_address/
netbox_inventory_item and device serial; wire reality only for hosts that also
have an intent device.
- Load reality/*.yaml in the terragrunt env; add `make backfill`; add a
go vet/test woodpecker job; drop the in-cluster-only Python script.
Closes#1
Claude-Session: https://claude.ai/code/session_01JUoARVdmhxKQHyyyp1pxeT
Manage NetBox prefixes and Kea DHCP scopes together from a single subnet
definition under config/<region>/<dc>/subnets/<name>.yaml.
- modules/ipam: netbox_prefix + netbox_ip_range (dhcp role) + gateway/managed
netbox_ip_address + kea_subnet; tokens read from Vault KV via the vault provider
- environments/au/syd1 terragrunt env, Consul state backend
- config seed: five DHCP subnets (198.18.13-17) + local netbox-only 198.18.25.0/24
- .woodpecker pre-commit+plan on PR, apply on main; Makefile Vault auth pattern
Claude-Session: https://claude.ai/code/session_01JUoARVdmhxKQHyyyp1pxeT