Seit dem CAPsMAN-Cutover (2026-08-17) war `/interface wifi cap slaves-datapath` auf ap1 und ap2 leer. Das ist das einzige Feld, das die vom Manager erzeugten Slave-VAPs lokal in die Bridge haengt: der Core schickt `datapath.bridge=bridge` zwar mit, der CAP uebernimmt davon aber nur die vlan-id. Ergebnis: -iot, -media, -untrusted und -guest hingen in gar keiner Bridge — Clients assoziierten sauber und bekamen nie DHCP. `dirtyvader-main` lief weiter, weil wifi1/wifi2 statische Bridge-Ports sind; genau das hat den Ausfall getarnt. Fix live auf beiden APs: dp-caps-slaves (bridge=bridge, bewusst ohne vlan-id) + slaves-datapath darauf. Die VAPs stehen seither als dynamische Bridge-Ports mit pvid 30/40/50/90 in der Bridge. Nicht die TP5-Haertung: torch auf vlan30 am Core leer UND kein einziger DHCP-Eintrag im Drop-Log — es wurde nichts verworfen, es kam nichts an. tp28-ap-wifi-reste-abraeumen.rsc hat den Ausfall nicht ausgeloest, aber zementiert: mit den geloeschten datapath-Objekten gab es lokal nichts mehr, worauf slaves-datapath haette zeigen koennen. Die TP28-Abnahme "ohne jeden Aussetzer" ist korrigiert — sie zaehlte Registrations, also genau die Metrik, die hier luegt. Abnahmekriterium fuer WLAN-Umbauten ist ab jetzt eine frische DHCP-Lease pro SSID. 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/.