Files
bf-infra/docs/tp15-crs326-session-handoff-prompt.md

8.1 KiB
Raw Blame History

TP15 — Handoff-Prompt: CRS326-Bring-up + Branch-Tausch (neue Session)

✅ ERLEDIGT am 2026-07-23 — beide CRS326 grundkonfiguriert, branch produktiv gegen sw2 getauscht, Nautobot modelliert. As-built s. docs/teilprojekte.md TP15. Nächster Schritt = Core-Tausch/L3-Umzug: docs/tp15-core-swap-session-handoff-prompt.md. (Dieses Dokument nur noch als Historie.)

Zweck: Kopierfertiger Auftrag für eine frische Session, die die beiden CRS326 in Betrieb nimmt und crs326-branch produktiv gegen sw2 tauscht. Der Core-Tausch (= gleichzeitig der L3-Umzug) ist bewusst NICHT Teil dieses Auftrags.

Empfohlenes Modell: Opus. Nicht wegen der Befehle — die sind Standard-RouterOS — sondern weil in der Session laufend zwischen „Ist-Zustand am Gerät", „Modell in Nautobot" und „Zielbild" abgeglichen werden muss und die sw1-Belegung nur teilweise verifiziert ist.

So übergibst du es: Neue Session öffnen, als ersten Prompt schicken: „Lies docs/tp15-crs326-session-handoff-prompt.md und arbeite den Auftrag darin ab."

--- PROMPT ---

TP15 — CRS326 in Betrieb nehmen: beide grundkonfigurieren, Portplan in Nautobot
modellieren, danach NUR crs326-branch produktiv gegen sw2 tauschen.

KONTEXT ZUERST LESEN (in dieser Reihenfolge):
1. docs/teilprojekte.md — TP15 (Hardware/Standorte/Portfakten/Risiko), TP21 (Nautobot-Stand),
   TP3 (WLAN-Neuaufbau ohne CAPsMAN) + die beiden Governance-Callouts im Kopfbereich.
2. CLAUDE.md (Projekt) — Hardware/Zugänge/Gotchas.
3. nautobot/README.md — die Nautobot-API-Fallen. NICHT überspringen: `tagged_vlans` liest
   sich per REST als `null`, OBWOHL korrekt gespeichert. Wer das nicht weiß, sucht eine
   Stunde einen Fehler, den es nicht gibt. Verifikation immer per GraphQL.
4. docs/tp16.1-warp-mesh-native-crs326.md — was später auf dem Core terminieren soll.

ZIEL DIESER SESSION (Scope-Grenze hart einhalten):
 (a) beide CRS326 grundkonfigurieren (Mgmt-IP, Bridge, vlan-filtering, Trunks/Access),
 (b) den Portplan beider Switches in Nautobot modellieren,
 (c) crs326-branch physisch gegen sw2 tauschen (Technik OG).
NICHT in dieser Session: crs326-core produktiv setzen, L3-Umzug (Routing/DHCP/DNS von ap1),
CAPsMAN-Abbau, ap2-Neuprovisionierung. Das sind eigene, spätere Sessions.

‼️ WARUM DER CORE TABU IST — DAS IST KEINE VORSICHT, DAS IST DIE TOPOLOGIE ‼️
crs326-core ersetzt sw1 UND wird der neue L3-Router. An sw1 hängt auf Port 15 ap1 — also
Gateway, DHCP, DNS und der WAN-Trunk fürs GESAMTE Netz. Wer sw1 anfasst, nimmt das ganze
Haus offline, inklusive des eigenen Management-Pfads. Core-Tausch und L3-Umzug sind faktisch
dasselbe Ereignis und brauchen ein geplantes Ausfallfenster. Deshalb: Branch zuerst.

GOVERNANCE — AUSNAHME BEREITS ERTEILT (Christoph, 2026-07-22):
Die Regel "Config ausschließlich über Nautobot" gilt weiter, ABER für den CRS326-BRING-UP
hat Christoph eine Ausnahme erteilt: Mgmt-IP, Bridge, VLAN-Filtering, Trunks/Access-Ports
dürfen direkt via MikroMCP/Winbox gesetzt werden (Henne-Ei: GC kann nicht auf ein Gerät ohne
erreichbare IP pushen, und die GC-Templates existieren noch nicht).
AUFLAGE: den entstandenen Ist-Stand danach als intended config nach Nautobot zurückschreiben.
Die Ausnahme deckt das Bootstrapping, NICHT den Dauerbetrieb, und gilt NICHT für ap1/ap2.

GERÄTE-IDENTITÄT (beide sind bereits am Netz, RouterOS 7.19.5, Werkszustand):
  crs326-core   = MAC 04:F4:1C:B4:17:76, software-id 4W04-URHT
  crs326-branch = MAC 04:F4:1C:B4:15:58, software-id RGZJ-UK0T
⚠️ BEIDE hören auf die Werks-IP 192.168.88.1 im SELBEN L2-Segment = IP-Konflikt.
   Immer nur eines nach dem anderen adressieren; Unterscheidung ausschließlich per MAC
   (MAC-Telnet/Winbox-Neighbor). Christoph hat die Geräte griffbereit neben sich, der
   Erstzugriff ist deshalb unkritisch — kein Lockout-Szenario, notfalls physisch.
⚠️ crs326-branch ist BEREITS PHYSISCH INLINE: ap2 hängt an dessen Port 24 (deshalb war es
   überhaupt per MNDP von ap1 aus sichtbar). Das ist kein Greenfield-Einbau.

ZIELBILD BRANCH = die heutige sw2-Belegung (aus TP2) 1:1 übernehmen:
  P1 Uplink-Trunk (→ sw1 gi8) | P2 ap2 | P3 frei | P4 Dock/Monitor | P5 Drucker
  P6 frei | P7 Mac mini | P8 NAS (2. Port)
  ⚠️ P4/P7/P8 sind in TP2 ausdrücklich als "nicht anfassen" markiert (fixe IPs, Lifeline).
  VLANs laut kanonischem Modell: Uplink+ap2 = Trunk all; Rest Access auf dem jeweiligen VLAN.

CONNECTIVITY — VOR DEM KABELZIEHEN LESEN:
Christophs Notebook hängt aktuell NUR per WLAN über cudy1, und cudy1 hängt am CORE (Port 11).
Der kabelgebundene Plan B (Dock/Monitor im Arbeitszimmer) hängt am sw2/BRANCH (P4).
Beim Branch-Tausch stirbt also der Kabelweg, das WLAN über cudy1 überlebt — die Pfade liegen
günstig auf verschiedenen Switches. Trotzdem: vor dem Ziehen von sw2 ansagen.

WAS VERIFIZIERT IST UND WAS NICHT (nicht raten, nicht als Fakt ausgeben):
  ✅ sw1 #15 = ap1, sw1 #11 = cudy1 (von Christoph bestätigt 2026-07-22)
  ⚠️ sw1 gi16 (Arris/VLAN100) und gi8 (Trunk → sw2) stammen aus der Doku, sind NICHT am
     Gerät gelesen — in Nautobot als "UNVERIFIZIERT" markiert. Falls für den Branch-Uplink
     relevant: von Christoph bestätigen lassen, er macht sw1 ohnehin selbst.
  ❌ switch/cli/03-trunk-ap-ports.cli (gi1 = ap1) ist STALE — vom Edge-Cutover 2026-07-01
     überholt. Nicht als Quelle verwenden.
  ❌ switch/state-backups/sw1-running-config-*.txt sind 214-Byte-Fehlschläge (toter
     claudecode-Login), switch/cli/running-PRE.txt ist Pre-TP1.

NAUTOBOT (SoT, http://10.40.20.30:8080):
  Token: NAUTOBOT_SUPERUSER_API_TOKEN in docs/nas-vlan20/stacks/210-nautobot.yml (gitignored).
  Bereits gepflegt: 8 Devices mit Bereich/Rolle/Platform, 9 VLANs, 8 Prefixes, ap1 vollständig
  (26 Interfaces + IPs), 6 SSIDs mit VLAN-Bindung, sw1 gi8/gi11/gi15/gi16, crs326-core ether4.
  Wiederverwenden: nautobot/ingest-baseline.py (idempotentes goc()/patch()-Muster) —
  nicht neu erfinden. Neue Ports als Interfaces am jeweiligen Device anlegen.

ROUTEROS-FAKTEN, DIE ZEIT SPAREN:
- Interface-Nummerierung beginnt bei 1 (ether1…ether24). Es gibt KEIN ether0.
- hAP ax²: PoE-Port ist ether1, aber PASSIV 18–28 V, NICHT 802.3af/at. Der CRS326 hat gar
  kein PoE → Strom käme aus einem Inline-Injektor. ether1 am hAP steht auf poe-out=auto-on;
  wenn ether1 künftig der versorgte Uplink wird, muss poe-out dort auf off.
  (PoE ist laut Christoph "vorerst kein Thema", die Config soll es nur vorsehen.)
- MikroMCP kennt in routers.yaml nur ap1/ap2 → die CRS326 dort ergänzen, sonst kein
  MCP-Zugriff. Writes immer erst dryRun/plan_changes, dann apply_plan.

NICHT ANFASSEN:
- ap1-Config (der CAPsMAN-Abbau kommt erst NACH dem Core-Tausch, s. TP3).
- ap2 (aktuell unerreichbar, meldet 10.40.40.2 = falsches VLAN; wird ohnehin neu
  provisioniert — nicht diagnostizieren, nicht reparieren).
- sw1 (Christoph macht sw1 selbst; siehe Feedback-Memory).

ABNAHME:
- Beide CRS326 unter ihrer neuen Mgmt-IP erreichbar, per MAC eindeutig zugeordnet, IP-Konflikt
  aufgelöst.
- Nach dem Branch-Tausch: ap2-Port, Dock/Monitor, Drucker, Mac mini und NAS wieder erreichbar;
  jeder in seinem korrekten VLAN (nicht ungetaggt in VLAN1 — das ist die Fehlerklasse, die
  dieses Projekt seit Wochen verfolgt).
- Nautobot bildet die tatsächliche Portbelegung ab; Verifikation per GraphQL, nicht REST.

DOKU (Pflicht am Ende): teilprojekte.md TP15 fortschreiben (As-built Portplan, was tatsächlich
lief/nicht lief), Nautobot-Stand nachziehen, Gotchas festhalten. Danach committen + pushen
(Commit-Msg-Konvention siehe git log: deutsch, Bullet-Struktur, Co-Authored-By).

--- ENDE PROMPT ---

Was Christoph zur Session parat haben sollte

  • Beide CRS326 griffbereit (Erstzugriff/IP-Konflikt wird physisch aufgelöst).
  • Bestätigung der sw1-Ports gi16 und gi8, falls der Branch-Uplink daran hängt — aktuell nur aus der Doku, nicht vom Gerät gelesen.
  • Zeitfenster für den sw2-Ausfall (Dock/Monitor, Drucker, Mac mini, NAS-2. Port sind währenddessen weg; WLAN über cudy1 bleibt).
  • Klarheit, ob der NAS-2.-Port (sw2 P8) und der Mac mini (P7) während des Tauschs ausfallen dürfen — beide sind in TP2 als „nicht anfassen" markiert.