69 lines
1.8 KiB
Bash
Executable File
69 lines
1.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
DST="/opt/hx-ki/com2-stack/docker-compose.yml"
|
|
[ -f "$DST" ] || { echo "FEHLT: $DST"; exit 1; }
|
|
|
|
pick_src() {
|
|
# 1) 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
|
|
|
|
# 2) COM-Stack
|
|
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
|
|
|
|
# 3) 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)"
|
|
[ -n "$SRC" ] || { echo "FAIL: Keine Quelle mit hxki-web gefunden"; exit 1; }
|
|
|
|
export SRC DST
|
|
|
|
echo "=== COM2 RESTORE hxki-web ==="
|
|
echo "SRC=$SRC"
|
|
echo "DST=$DST"
|
|
|
|
python3 <<'PY'
|
|
import re, pathlib, os
|
|
|
|
src = pathlib.Path(os.environ["SRC"]).read_text()
|
|
dstp = pathlib.Path(os.environ["DST"])
|
|
dst = dstp.read_text()
|
|
|
|
m = re.search(r'(?ms)^services:\s*\n(.*?)(?=^\S|\Z)', src)
|
|
if not m:
|
|
raise SystemExit("FEHLT: services: im Source")
|
|
|
|
block = m.group(1)
|
|
|
|
pat = r'(?ms)^\s{2}hxki-web:\s*\n(?:^\s{4}.*\n|^\s{6}.*\n|^\s{8}.*\n|^\s*\n)*?(?=^\s{2}[A-Za-z0-9_.-]+:\s*$|\Z)'
|
|
mm = re.search(pat, block)
|
|
if not mm:
|
|
raise SystemExit("FEHLT: hxki-web Block")
|
|
|
|
web = mm.group(0)
|
|
|
|
if 'hxki-web:' in dst:
|
|
print("OK: hxki-web bereits vorhanden")
|
|
raise SystemExit(0)
|
|
|
|
dst = re.sub(r'(?m)^(services:\s*\n)', r'\1' + web + '\n', dst, count=1)
|
|
dstp.write_text(dst)
|
|
|
|
print("OK: hxki-web eingefügt")
|
|
PY
|
|
|
|
docker compose -f "$DST" config >/dev/null
|
|
echo "OK: Compose valide."
|