diff --git a/docs/transaktionen/TEST-ether3-trunk-ap1-sideboard.commands-fix40.rsc b/docs/transaktionen/TEST-ether3-trunk-ap1-sideboard.commands-fix40.rsc new file mode 100644 index 0000000..848cb96 --- /dev/null +++ b/docs/transaktionen/TEST-ether3-trunk-ap1-sideboard.commands-fix40.rsc @@ -0,0 +1,4 @@ +# Nachtrag zum ether3-Trunk: VLAN 40 hatte ether3 als UNTAGGED-Mitglied. +# Ein Port kann in derselben VLAN nicht zugleich tagged und untagged sein — deshalb ist +# genau diese eine Zeile im ersten Deploy gescheitert, waehrend die sechs anderen liefen. +/interface bridge vlan set [find where vlan-ids=40 and !dynamic] tagged=ether1,ether3,ether8,ether13,ether15 untagged=ether2,ether4,ether5 diff --git a/nautobot/gc-transaktion.py b/nautobot/gc-transaktion.py index 162c1e9..0248b31 100644 --- a/nautobot/gc-transaktion.py +++ b/nautobot/gc-transaktion.py @@ -92,12 +92,16 @@ def compliance(device): """Feature -> compliant? fuer ein Geraet.""" d = nb_get("/api/plugins/golden-config/config-compliance/?limit=200&depth=1" "&device=%s" % device) + # 🔴 Der Feature-Name steht bei depth=1 NICHT ausgeschrieben in rule.feature — dort + # kommt nur eine URL. Verwendbar ist rule.display ("RouterOS - bridge-vlan"); + # der Teil nach dem letzten " - " ist der Regelname. Ohne das landete jeder Drift + # als "ausserhalb des Scopes" im Bericht, obwohl er genau der Scope war. out = {} for r in d["results"]: - feat = r.get("rule") or {} - feat = (feat.get("feature") or {}) if isinstance(feat, dict) else {} - name = feat.get("name") or feat.get("display") or r.get("rule") - out[str(name)] = bool(r.get("compliance")) + rule = r.get("rule") or {} + anzeige = rule.get("display") if isinstance(rule, dict) else str(rule) + name = (anzeige or "").split(" - ")[-1].strip() + out[name] = bool(r.get("compliance")) return out