- Beide CRS326 grundkonfiguriert via REST (Governance-Ausnahme #2): core-zuerst als L2-Pfad, Zugriff auf Werks-.88.1 über temporäre ap1-.88.2+Masquerade (nach Bring-up entfernt). Winbox-MAC scheiterte (sync-timeout). - branch produktiv, volle SOLL-Portbelegung (ether1 Uplink→sw1#8, 2/8 NAS-20T, 3 Drucker/4 Dock VLAN10, 5/6 Sonos VLAN40, 7 macmini VLAN20, 24 ap2), mgmt .99.13; core grundkonfiguriert nicht produktiv (mgmt .99.11, an sw1#12). - Branch-Tausch: sw2 physisch raus, Lifelines auf branch; Abnahme grün (NAS/ macmini VLAN20, Dock VLAN10, Sonos VLAN40). Gotcha: ether3/5-Kabel vertauscht (Sonos-VLAN10-Leck/Dual-Homing) → gefixt. - Nautobot modelliert + GraphQL-verifiziert (nautobot/ingest-crs326-ports.py): branch Active + Ports, core Planned + tentativ, sw1 verifizierte 16-Port- Belegung (löst UNVERIFIZIERT), sw2 Decommissioning. - CRS326 in MikroMCP routers.yaml; Creds in ~/.secrets. Doku (teilprojekte/ CLAUDE/ip-plan) nachgezogen; Core-Swap-Handoff-Prompt neu. Co-Authored-By: Claude Opus 4.8 <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/.