#!/usr/bin/env bash set -euo pipefail ROOT="/opt/hx-ki" DIR="$ROOT/com2-stack" COMPOSE_DST="$DIR/docker-compose.yml" NET="hxki-internal" TS="$(date +%Y%m%d-%H%M%S)" BK="$ROOT/backups/com2-original-restore-$TS" mkdir -p "$BK" echo "=== COM2 · RESTORE ORIGINAL STATE (one-shot, no guessing) ===" echo "DST compose: $COMPOSE_DST" echo "Backup: $BK" echo [ -f "$COMPOSE_DST" ] || { echo "FAIL: missing $COMPOSE_DST"; exit 1; } cp -a "$COMPOSE_DST" "$BK/docker-compose.yml.pre" || true echo "[1] Suche Compose-Quelle mit hxki-web (ohne Raten)…" pick_src() { # COM2 Backups (neueste zuerst) for f in $(ls -1t /opt/hx-ki/com2-stack/docker-compose.yml.bak.* 2>/dev/null); do grep -qE '^[[:space:]]{2}hxki-web:[[:space:]]*$' "$f" && { echo "$f"; return 0; } done # COM1 compose + backups for f in /opt/hx-ki/com-stack/docker-compose.yml /opt/hx-ki/com-stack/docker-compose.yml.bak.*; do [ -f "$f" ] || continue grep -qE '^[[:space:]]{2}hxki-web:[[:space:]]*$' "$f" && { echo "$f"; return 0; } done # docker Backups for f in /opt/hx-ki/docker/docker-compose.yml*; do [ -f "$f" ] || continue grep -qE '^[[:space:]]{2}hxki-web:[[:space:]]*$' "$f" && { echo "$f"; return 0; } done return 1 } SRC="$(pick_src || true)" [ -n "${SRC:-}" ] || { echo "FAIL: keine Compose-Quelle mit hxki-web gefunden"; exit 1; } echo "OK: SRC=$SRC" cp -a "$SRC" "$BK/docker-compose.source.used" cp -a "$SRC" "$COMPOSE_DST" echo "[2] hxki-internal als external sicherstellen (nur ergänzen, nichts raten)" docker network inspect "$NET" >/dev/null 2>&1 || docker network create "$NET" >/dev/null # Falls am Ende kein networks:-Block existiert: minimal anhängen if ! grep -qE '^networks:' "$COMPOSE_DST"; then cat >> "$COMPOSE_DST" < bitte manuell prüfen (ich ändere hier nicht kreativ)." fi fi echo "[3] Validate compose" docker compose -f "$COMPOSE_DST" config >/dev/null echo "OK: compose valid" echo "DONE. Backup: $BK"