mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-27 05:37:42 +02:00
feat(infra): colima-VM-Liveness-Guard in ensure-containers
Schließt das letzte SPOF-Loch: stirbt die colima-VM im laufenden Betrieb (Crash/OOM), brachte bisher nichts sie zurück — startup.sh läuft nur beim Boot, ensure-containers nahm an, docker sei oben (exit 1 bei totem docker). Neu: vor dem docker-info-Check prüft das Script `colima status` und startet die VM bei Bedarf. Sicherungen: - Wartungs-Lock `/tmp/mana-colima-maintenance` (touch = Guard pausiert) — damit bewusste colima-Stopps (egress-/ssh-mux-Debug) nicht überschrieben werden. - Backoff: nach 3 Fehlstarts in Folge KEIN Auto-Start mehr + urgent-Notification (z.B. stale in_use_by-Symlink → manueller Eingriff). - send_notification bei Auto-Restart + bei Backoff-Stopp. - set-e-sicher (if/else statt nacktem &&). Deployed auf mana-server (Backup .bak-pre-colima-guard-20260525), bash -n grün, einmal real ausgeführt (colima running → Guard no-op). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
800a91f1b5
commit
4e26637464
1 changed files with 39 additions and 0 deletions
|
|
@ -67,6 +67,45 @@ send_notification() {
|
|||
fi
|
||||
}
|
||||
|
||||
# --- colima-VM-Liveness-Guard ---------------------------------------------
|
||||
# Wenn die colima-VM im laufenden Betrieb stirbt (Crash/OOM), bringt sonst
|
||||
# nichts sie zurueck — startup.sh laeuft nur beim Boot. Dieser Guard heilt
|
||||
# einen Mid-Run-Crash. Schutz vor ungewollten Starts in bewussten Wartungs-/
|
||||
# Debug-Stopps (colima restart/stop gegen die egress-/ssh-mux-Bugs): das
|
||||
# Lock-File pausiert den Guard. Backoff verhindert Endlos-Haemmern, wenn
|
||||
# colima nicht hochkommt (z.B. stale in_use_by-Symlink auf der ManaData-Disk).
|
||||
COLIMA_MAINT_LOCK="/tmp/mana-colima-maintenance" # `touch` = Guard pausiert
|
||||
COLIMA_FAIL_TRACKER="/tmp/mana-colima-start-fails"
|
||||
COLIMA_MAX_FAILS=3
|
||||
|
||||
if ! colima status >/dev/null 2>&1; then
|
||||
if [ -f "$COLIMA_MAINT_LOCK" ]; then
|
||||
log "colima-Guard: VM down, aber Wartungs-Lock aktiv ($COLIMA_MAINT_LOCK) — kein Auto-Start"
|
||||
exit 0
|
||||
fi
|
||||
FAILS=$(cat "$COLIMA_FAIL_TRACKER" 2>/dev/null || echo 0)
|
||||
case "$FAILS" in '' | *[!0-9]*) FAILS=0 ;; esac
|
||||
if [ "$FAILS" -ge "$COLIMA_MAX_FAILS" ]; then
|
||||
log "colima-Guard: VM down + bereits $FAILS Fehlstarts — KEIN weiterer Auto-Start, manueller Eingriff noetig (z.B. in_use_by-Symlink loeschen, dann '$COLIMA_FAIL_TRACKER' entfernen)"
|
||||
send_notification "colima-VM down + $FAILS Fehlstarts auf mana-server — manueller Eingriff noetig" "urgent"
|
||||
exit 1
|
||||
fi
|
||||
log "colima-Guard: VM ist DOWN — starte colima (Versuch $((FAILS + 1))/$COLIMA_MAX_FAILS)"
|
||||
if colima start >/dev/null 2>&1; then
|
||||
log "colima-Guard: colima start erfolgreich — VM wieder oben"
|
||||
send_notification "colima-VM war down, automatisch neu gestartet (mana-server)" "high"
|
||||
rm -f "$COLIMA_FAIL_TRACKER"
|
||||
else
|
||||
echo $((FAILS + 1)) > "$COLIMA_FAIL_TRACKER"
|
||||
log "colima-Guard: colima start FEHLGESCHLAGEN (Fehlstart $((FAILS + 1))/$COLIMA_MAX_FAILS)"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
# VM laeuft normal — Fehlerzaehler zuruecksetzen
|
||||
rm -f "$COLIMA_FAIL_TRACKER" 2>/dev/null || true
|
||||
fi
|
||||
# --- Ende colima-Guard ----------------------------------------------------
|
||||
|
||||
# Check if docker is running
|
||||
if ! docker info >/dev/null 2>&1; then
|
||||
log "ERROR: Docker is not running"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue