#!/usr/bin/env bash # # Minimaler GitOps-Abgleich: holt den Sollzustand und stellt ihn her. # set -euo pipefail REPO="${HOME}/kfz-betrieb" UMGEBUNG="produktion" LOG_TAG="gitops" log() { logger -t "$LOG_TAG" "$*"; echo "$*"; } cd "$REPO" # --- 1. Sollzustand holen --- ALT="$(git rev-parse HEAD)" git fetch --quiet origin git reset --quiet --hard origin/main NEU="$(git rev-parse HEAD)" # --- 2. Gewünschtes Image aus der Konfiguration lesen --- SOLL_IMAGE="$(grep '^image:' "${UMGEBUNG}/kfz-rechner.yaml" | awk '{print $2}')" # --- 3. Ist-Zustand ermitteln --- IST_IMAGE="$(podman inspect kfz-rechner --format '{{.ImageName}}' 2>/dev/null || echo "keiner")" if [[ "$SOLL_IMAGE" == "$IST_IMAGE" ]]; then exit 0 # Soll = Ist, nichts zu tun fi log "Abweichung erkannt: ist=${IST_IMAGE} soll=${SOLL_IMAGE} (commit ${NEU:0:8})" # --- 4. Sollzustand herstellen --- podman pull "$SOLL_IMAGE" sed -i "s|^Image=.*|Image=${SOLL_IMAGE}|" \ "${HOME}/.config/containers/systemd/kfz-rechner.container" systemctl --user daemon-reload systemctl --user restart kfz-rechner.service # --- 5. Ergebnis prüfen, sonst zurückrollen --- sleep 5 if ! curl -fsS --max-time 5 http://127.0.0.1:8081/health > /dev/null; then log "FEHLER: Dienst antwortet nicht. Rolle zurück auf ${IST_IMAGE}." sed -i "s|^Image=.*|Image=${IST_IMAGE}|" \ "${HOME}/.config/containers/systemd/kfz-rechner.container" systemctl --user daemon-reload systemctl --user restart kfz-rechner.service exit 1 fi log "Abgleich erfolgreich: ${SOLL_IMAGE} (commit ${NEU:0:8})"