Add a structured `netbox` fact that reads this node's IP/interface data
from NetBox, and profiles::netbox::facts to seed its credentials.
- netbox fact: queries NetBox (devices + VMs) by fqdn/hostname, emits
interfaces (name, mac, ips, primary) and primary_ip.
- Caches every success to /var/cache/puppet-netbox/facts.json (0600).
On any failure (short timeouts, DNS, non-200, parse) it serves the
cached payload with cached=true; static IPs never change so stale is
always safe. A never-cached host returns nothing; the fact never raises.
- profiles::netbox::facts: inert until $api_token is set; writes the
root-only token/url files and the cache dir. Confined off (no-op) on
hosts without the token. Included from profiles::base.
Claude-Session: https://claude.ai/code/session_01JUoARVdmhxKQHyyyp1pxeT