Welle 3 · Wartungsfenster und Update-Regel je Gerät (So 03:00–04:15, Start: Sicherheitsupdates automatisch)

Der Steward des Homelab-Teils prüft jede Minute, ob das Fenster offen ist, und arbeitet dann einmal je Tag den Plan ab:
je Gerät nach seiner Regel — nur melden, Sicherheitsupdates automatisch (Standard, User-Entscheid) oder alles im
Fenster —, mit den bekannten Update-Läufen (Rückweg vorher, Prüfung danach, bei Rot zurück). Nach dem Fenster beginnt
kein Schritt mehr, Erfolge kommen als eine Meldung am Ende, Fehler sofort; der Proxmox-Host startet nie von selbst neu.
Der Ausführer meldet dafür die Namen der Sicherheitspakete und spielt auf Wunsch nur diese ein (Gäste und Host);
neuer Baustein „sicherheit“. Dazu „Version überspringen“ je App, die Einstellungen unter Einstellungen → Homelab und
„Wartung“ statt „Störung“ im Cockpit, solange das Fenster läuft.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-09-25 18:33:38 +02:00
co-authored by Claude Opus 5.5
parent 363bc211e1
commit 9da666d04e
18 changed files with 717 additions and 26 deletions
+33
View File
@@ -14,6 +14,9 @@
POST /api/homelab/sicherungen/probe Probe-Wiederherstellung jetzt (nur lesend, sonst einmal die Woche)
GET /api/homelab/zertifikate https-Zertifikate (NPMplus, Proxmox-Host, PBS) mit Stufe
GET /api/homelab/neu „Neu entdeckt“: Geräte und Docker-Stacks, die er noch nicht kennt
GET /api/homelab/wartung Wartungsfenster, Regel je Gerät, übersprungene Versionen, letzter Lauf
POST /api/homelab/wartung {"fenster"?, "standard"?, "regeln"?} ändern
POST /api/homelab/ziele/{id}/ueberspringen {"baustein": "app", "version": …}; DELETE bietet sie wieder an
GET /api/homelab/docker Docker-Dienste unter Arcane je Stack: Zustand, Gesundheit, Update
POST /api/homelab/neu/{id} {"wahl": freigeben | beobachten | ausschliessen} — übernehmen
GET /api/homelab/hinweise Hinweise des Wächters dieser Instanz
@@ -183,6 +186,36 @@ def neuerungen(ziel_id: str, baustein: str = "app") -> dict:
return neu.fuer(ziel_id, baustein)
@router.get("/wartung")
def wartung_lage() -> dict:
"""Wartungsfenster und Update-Regel je Gerät (seit 25.09.2026)."""
from services.homelab import wartung
return wartung.lage()
@router.post("/wartung")
def wartung_setzen(daten: dict) -> dict:
from services.homelab import wartung
return _antwort(wartung.setzen(daten))
class Ueberspringen(BaseModel):
baustein: str = "app"
version: str
@router.post("/ziele/{ziel_id}/ueberspringen")
def version_ueberspringen(ziel_id: str, u: Ueberspringen) -> dict:
from services.homelab import wartung
return _antwort(wartung.ueberspringen(ziel_id, u.baustein, u.version))
@router.delete("/ziele/{ziel_id}/ueberspringen")
def version_wieder_anbieten(ziel_id: str, baustein: str = "app") -> dict:
from services.homelab import wartung
return _antwort(wartung.ueberspringen(ziel_id, baustein, None))
@router.get("/neu")
def neu_entdeckt() -> dict:
"""Geräte, die der Orchestrator noch nicht kennt, mit Vorschlägen (seit 25.09.2026)."""