#!/usr/bin/env bash set -euo pipefail F="/opt/hx-ki/com2-stack/docker-compose.yml" [ -f "$F" ] || { echo "FEHLT: $F"; exit 1; } echo "=== COM2: FIX MAUTIC DB SERVICE REF (deterministisch) ===" python3 - <<'PY' from pathlib import Path import re p = Path("/opt/hx-ki/com2-stack/docker-compose.yml") s = p.read_text() # 1) Services auf Top-Level unter "services:" einsammeln (2-space indentation) m = re.search(r'(?ms)^services:\s*\n(.*?)(?=^\S|\Z)', s) if not m: raise SystemExit("FEHLT: Top-Level 'services:' Block") services_block = m.group(1) service_names = re.findall(r'(?m)^\s{2}([A-Za-z0-9_.-]+):\s*$', services_block) print("[A] Gefundene Services:", ", ".join(service_names) if service_names else "KEINE?!") # 2) Kandidaten für MariaDB finden candidates = [n for n in service_names if "mariadb" in n.lower() or n.lower() in ("db","mysql")] if not candidates: raise SystemExit("FEHLT: Kein DB-Service gefunden (mariadb/db/mysql). Du musst den DB-Service im Compose haben.") db_service = candidates[0] print("[B] DB-Service gewählt:", db_service) # 3) Mautic-Block finden ma = re.search(r'(?ms)^\s{2}mautic:\s*\n(.*?)(?=^\s{2}[A-Za-z0-9_.-]+:\s*$|\Z)', services_block) if not ma: raise SystemExit("FEHLT: Service 'mautic' existiert nicht im Compose.") mautic_block = ma.group(0) # 4) depends_on im mautic-Block patchen: # - mapping style: # depends_on: # hxki-mariadb: # condition: service_started # - list style: # depends_on: # - hxki-mariadb def patch_depends_on(block: str, db_service: str) -> str: # mapping key ersetzen: " :" direkt unter depends_on block = re.sub( r'(?ms)(^\s{4}depends_on:\s*\n)(?:^\s{6}[A-Za-z0-9_.-]+:\s*\n(?:^\s{8}.*\n)*)', lambda m: m.group(1) + f" {db_service}:\n condition: service_started\n", block, count=1 ) # list style: "- " unter depends_on block = re.sub( r'(?ms)(^\s{4}depends_on:\s*\n)(?:^\s{6}-\s*[A-Za-z0-9_.-]+\s*\n)+', lambda m: m.group(1) + f" - {db_service}\n", block, count=1 ) return block patched = patch_depends_on(mautic_block, db_service) # 5) Optional: MAUTIC_DB_HOST/DB_HOST im mautic env patchen (nur wenn vorhanden) patched = re.sub(r'(?m)^(\s{6}(MAUTIC_DB_HOST|DB_HOST|MYSQL_HOST)\s*:\s*).*$', rf'\1{db_service}', patched) # 6) Compose wieder zusammensetzen services_block_new = services_block.replace(mautic_block, patched) s_new = s[:m.start(1)] + services_block_new + s[m.end(1):] p.write_text(s_new) print("[C] OK: mautic referenziert jetzt DB-Service:", db_service) PY echo "[D] VALIDATE" docker compose -f "$F" config >/dev/null echo "OK: Compose valide." echo "=== ENDE ==="