Files
bf-infra/nautobot
Christoph Emsenhuber 77553c94af TP25: Drift-Luecke geschlossen (72/72) — und zwei fehlende Compliance-Sektionen aufgedeckt
Die neuen Funkparameter stehen jetzt in der SoT, nicht nur auf dem Geraet:
radios[5g].width 20/40/80mhz -> 20/40mhz, DEVICE_CHANNELS[ap2][5g] 149 -> 44.
Config-Context gepatcht, dann Backup -> Intended -> Compliance: 72/72, keine
Drifts. Ein kuenftiger Deploy kann die Fixes damit nicht zurueckdrehen.

Bemerkenswert: width fuer 2,4 GHz stand im Config-Context die ganze Zeit
korrekt auf 20mhz. Die SoT war richtig, das Geraet hat sie nicht befolgt —
der Beweis, dass das Problem der Inline-Override war und nicht die Datenlage.

Beim Nachpruefen, ob "72/72" die Funkparameter ueberhaupt abdeckt, sind zwei
Luecken aufgefallen (18 Compliance-Rules abgefragt):

- /interface wifi (Interface-Sektion) hat KEINE Rule. Die fuenf wifi-*-Features
  decken nur die Profilobjekte ab. Die Inline-Overrides leben in der
  Interface-Sektion — deshalb blieben Fund A und D seit 2026-08-08 unentdeckt,
  waehrend die Flotte durchgehend "compliant" meldete.

- /ip firewall filter hat KEINE Rule, es gibt nur ip-firewall-nat. Die
  TP5-Zeile "laeuft ueber ip-firewall-*-Features aus TP22" war damit
  irreführend. Die 11 Etappe-2-Regeln und der kommende Deny-by-default sind
  nicht drift-ueberwacht; "72/72" sagt ueber die Firewall nichts aus.
  -> als Vorbedingung fuer TP5 Etappe 3 eingetragen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 15:01:00 +02:00
..

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_vlans liest sich per REST als null, 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=1 ohne display → ein voll gepflegtes Device sieht leer aus.
  • LocationType.content_types muss ipam.vlangroup/ipam.vlan/ipam.prefix/dcim.controller enthalten, sonst 400 beim Anlegen.
  • parent_interface nur für virtuelle Interfaces — WLAN-VAPs können ihren Master nicht als Parent tragen.
  • WirelessNetwork hat kein VLAN-Feld; die VLAN-Bindung hängt an wireless/controller-managed-device-group-wireless-network-assignments und braucht zwingend einen Controller (bei uns logisch, controller_device leer — kein CAPsMAN).
  • RadioProfile.channel_width will Integer ([20,40,80]), nicht "20mhz".
  • IP↔Interface läuft über /ipam/ip-address-to-interface/.