92/92 compliant, 0 Drifts (vorher 71/76 bei 19 Rules -- jetzt 23 Rules). NTP: die Wurzel war doppelt. Der Core hatte keinen eigenen Client, UND sein Server hielt Stratum 16 fest, weil er eingeschaltet wurde, bevor der Client synchron war. Der Test, der es aufgeklaert hat: branch einmal auf at.pool.ntp.org zeigen lassen -- 20 Sekunden bis synchronized, also war der Client heil und der Server schwieg. Jetzt im Template, per DHCP-Option 42 an alle Clients ausgeliefert und mit der Rule system-ntp ueberwacht. TP7.1: SSDP-Relay laeuft als LXC 108 auf pve, zweibeinig in VLAN10+40. User-bestaetigt: "sonos ist da!". core ether13 traegt dafuer jetzt beide VLANs. TP28: die APs trugen noch die komplette Standalone-WLAN-Config aus TP3 -- wirkungslos, aber sie haette als Soll totes Zeug zur Absicht erklaert. Abgeraeumt, ohne einen einzigen Client zu verlieren (30 vorher, 30 nachher). Die fuenf wifi-*-Features haengen jetzt am Core, dazu drei neue Rules (wifi-capsman, wifi-provisioning, wifi-cap). Gelernt: [find !dynamic] ist auf /interface wifi configuration ein SYNTAXFEHLER, kein Filter -- der erste Anlauf aenderte nichts und meldete trotzdem "Plan Completed". Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Nautobot-Tooling
ingest-baseline.py
Idempotenter Basisdaten-Ingest (Locations, Rollen, Device-Types, Devices, VLANs/Prefixes, ap1-Interfaces + IPs, WLAN-Modelle). Bildet den Ist-Zustand ab, nicht den Zielzustand.
export NAUTOBOT_TOKEN=... # aus docs/nas-vlan20/stacks/210-nautobot.yml (gitignored)
python3 nautobot/ingest-baseline.py # Dry-Run
python3 nautobot/ingest-baseline.py --apply # schreiben
API-Fallen (teuer gelernt)
tagged_vlansliest sich per REST alsnull, obwohl korrekt gespeichert. Verifikation nur über GraphQL:POST /api/graphql/mit{interfaces(device:"ap1"){name mode untagged_vlan{vid} tagged_vlans{vid}}}.- Relationen kommen ohne
?depth=1ohnedisplay→ ein voll gepflegtes Device sieht leer aus. LocationType.content_typesmussipam.vlangroup/ipam.vlan/ipam.prefix/dcim.controllerenthalten, sonst 400 beim Anlegen.parent_interfacenur für virtuelle Interfaces — WLAN-VAPs können ihren Master nicht als Parent tragen.WirelessNetworkhat kein VLAN-Feld; die VLAN-Bindung hängt anwireless/controller-managed-device-group-wireless-network-assignmentsund braucht zwingend einenController(bei uns logisch,controller_deviceleer — kein CAPsMAN).RadioProfile.channel_widthwill Integer ([20,40,80]), nicht"20mhz".- IP↔Interface läuft über
/ipam/ip-address-to-interface/.