From 3877c23505e1417dd591d3418120bd0d29f36d47 Mon Sep 17 00:00:00 2001 From: Christoph Emsenhuber Date: Sat, 12 Sep 2026 12:36:48 +0200 Subject: [PATCH] =?UTF-8?q?GC-Backup:=20t=C3=A4glicher=20Scheduler=20angel?= =?UTF-8?q?egt=20(vorher=20gab=20es=20keinen)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Diagnose: die GC-Backups standen seit 2026-09-04, weil NIE ein Scheduler existierte — Backup/Intended/Compliance liefen nur manuell aus Sessions. Die "2×/Tag per SSH"-Annahme (CLAUDE.md Bot-Master-Zeile + gc-snapshot.py-Docstring) war nie real; beide korrigiert. Fix: Nautobot-Job "Execute All Golden Configuration Jobs - Multiple Device" enabled + ScheduledJob "GC Backup+Compliance – taeglich" (platform=RouterOS, täglich 03:30 UTC, Backup→Intended→Compliance). Sofort-Lauf SUCCESS, alle 5 Geräte backup/compliance auf 2026-09-12 10:35, frischer bf-golden-config-Commit. Announcement-Eintrag ergänzt. Co-Authored-By: Claude Opus 4.8 --- CLAUDE.md | 2 +- docs/announcements.md | 8 ++++++++ nautobot/gc-snapshot.py | 8 +++++--- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 27bd9d3..86008da 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -53,7 +53,7 @@ DNS/DHCP-Ablösung, WLAN via **CAPsMAN auf dem Core** (TP28, 2026-08-17 — der - **`bf-infra`** ist aktiver Master **mit Gitea-Remote**: `origin` = `https://gitea.emsenhuber.net/admin/bf-infra.git` (live verifiziert 2026-08-30). ⚠️ **Die frühere Zeile „lokal, kein Gitea-Remote → verloren bei Festplattencrash" ist überholt** — sie stammt aus der Inventur vom 2026-08-27 und war damals richtig; das Remote existiert seit spätestens 2026-08-28 (`origin/main` = `b917691`). **Die Backup-Lücke ist damit keine Struktur-, sondern eine Disziplinfrage: `git push`.** Am 2026-08-30 lagen vier Commits nur lokal. 🔴 **Das Remote ist nur so viel wert wie der letzte Push** — der Backup-Guard (`~/dev/.bin/backup-guard.sh`, TP35 Schicht 5) bricht Commits ab, solange kein Backup markiert ist; **das ist die Erinnerung ans Pushen, kein Hindernis.** Nicht mit `--no-verify` umgehen. 🔴 **Merkregel:** diese Zeile hat eine Session dazu gebracht, „kein Remote" zu behaupten, statt `git remote -v` zu tippen — vor jeder Aussage über Remotes/Backups **live prüfen**. - **`admin/bf-network-r6`** (Gitea) ist Archiv, letzte aktive Commits 2026-08-25 → read-only-Header. -- **`admin/bf-golden-config`** (Gitea) ist Bot-Master (Nautobot 2×/Tag), nicht manuell. +- **`admin/bf-golden-config`** (Gitea) ist Bot-Master, nicht manuell. 🔴 **Korrigiert 2026-09-12:** die frühere Angabe „2×/Tag" war nie real — es gab **keinen** Scheduler, Backup/Intended/Compliance liefen nur manuell aus Sessions (zuletzt 09-04, 8 Tage Stillstand). Jetzt **täglich 03:30 UTC** per ScheduledJob **„GC Backup+Compliance – taeglich"** (Nautobot-Job *Execute All Golden Configuration Jobs - Multiple Device*, Scope `platform=RouterOS`, Reihenfolge Backup→Intended→Compliance). Stand prüfen: `backup_last_success_date` am Gerät bzw. `scheduled-jobs` in Nautobot. - **`admin/blaueblueten-n8n`** (Gitea) ist Master für terpene-Repo. - **`inventory/` ist tot** (Pipeline seit 2025-06 stale). Live-Daten aus MikroMCP/CF/Portainer. - **`mcp/INVENTORY.md`** ist BF-Netz-SSoT; `~/.claude.json`/`opencode.jsonc` sind globalere Werkzeugkästen. diff --git a/docs/announcements.md b/docs/announcements.md index 18d9e2a..9658212 100644 --- a/docs/announcements.md +++ b/docs/announcements.md @@ -13,6 +13,14 @@ zeigt die Einträge, die seit dem letzten `/news`-Lauf dazugekommen sind (Rest a --- +## 2026-09-12 — Golden-Config-Backups laufen jetzt täglich (vorher KEIN Scheduler) +**Betrifft:** alle, die sich auf GC-Backups/Compliance oder `gc-snapshot.py`-Werte verlassen. +**Aktion:** Es gab **nie** einen automatischen GC-Backup-Zeitplan — Backup/Intended/Compliance liefen +nur manuell aus Sessions (zuletzt 09-04 → 8 Tage Stillstand). Jetzt ScheduledJob **„GC Backup+Compliance +– taeglich"** (Nautobot, *Execute All GC Jobs - Multiple Device*, `platform=RouterOS`, täglich 03:30 UTC, +Reihenfolge Backup→Intended→Compliance). Wenn `backup_last_success_date` eines Geräts alt ist: zuerst +prüfen, ob der ScheduledJob noch `enabled` ist (`/api/extras/scheduled-jobs/`), nicht das Gerät verdächtigen. + ## 2026-09-12 — claude.json-Secrets laufen über `{env:}` (TP35 Schicht 2 ✅) **Betrifft:** alle, die `~/.claude.json` oder `~/.secrets/exports.zsh` anfassen. **Aktion:** Keine Klartext-Secrets mehr in `~/.claude.json` — MCP-Credentials referenzieren jetzt diff --git a/nautobot/gc-snapshot.py b/nautobot/gc-snapshot.py index 53fae62..fbdac9f 100644 --- a/nautobot/gc-snapshot.py +++ b/nautobot/gc-snapshot.py @@ -13,9 +13,11 @@ Nautobot selbst — es wird KEIN Gerät kontaktiert: mgmt_ip device.primary_ip4 (ohne /prefix) Warum aus Nautobot statt live vom Gerät: der MGMT-/REST-Weg (VLAN99:80) ist -nicht aus jedem Vantage erreichbar; die GC-Backups werden ohnehin 2×/Tag per -SSH gezogen und sind die Doku-SSoT. Damit ist der Snapshot cron-fest und -braucht keine Geräte-Credentials. Aktualität steht in `backup_last_success_date`. +nicht aus jedem Vantage erreichbar; die GC-Backups werden täglich (03:30 UTC, +ScheduledJob "GC Backup+Compliance – taeglich") per SSH gezogen und sind die +Doku-SSoT. Damit braucht der Snapshot keine Geräte-Credentials. Aktualität steht +in `backup_last_success_date` — ist die alt, steht der Backup-Schedule (2026-09-12 +war er 8 Tage aus, weil es vorher gar keinen gab). Der Backup-Config-Text wird nur INTERN geparst (Zähler/Modus abgeleitet) und NIE ausgegeben — er kann gescrubte Reste enthalten (PSK-Leak-Regel).