#!/usr/bin/env bash set -euo pipefail F="/opt/hx-ki/com2-stack/docker-compose.yml" NET="hxki-internal" [ -f "$F" ] || { echo "FEHLT: $F"; exit 1; } echo "=== COM2: FORCE NETWORK external:true ===" echo "[0] Quick-Scan (wo steht networks: gerade?)" grep -nE '^(networks:| networks:| networks:)' "$F" || echo "INFO: kein networks:-Block gefunden" echo "[1] Docker-Netzwerk auf Host sicherstellen: $NET" docker network inspect "$NET" >/dev/null 2>&1 || docker network create "$NET" >/dev/null echo "[2] Compose reparieren: entferne Top-Level networks:-Block (falls vorhanden) und setze sauber neu" python3 - <<'PY' from pathlib import Path import re p = Path("/opt/hx-ki/com2-stack/docker-compose.yml") s = p.read_text() # Entferne NUR Top-Level "networks:" Block (beginnt ganz links) # Annahme: networks ist Top-Level Key. Falls er kaputt eingerückt ist, wird er später durch sauberen Block überschrieben. s = re.sub(r'(?ms)^\s*networks:\s*\n(?:^[ \t].*\n)*', '', s) # Hänge kanonischen Block an s = s.rstrip() + "\n\nnetworks:\n hxki-internal:\n external: true\n" p.write_text(s) print("OK: networks/hxki-internal external:true erzwungen.") PY echo "[3] VALIDATE (muss clean sein)" docker compose -f "$F" config >/dev/null echo "OK: Compose valide." echo "=== ENDE ==="