85 lines
2.7 KiB
Bash
Executable File
85 lines
2.7 KiB
Bash
Executable File
#!/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: " <something>:" 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: "- <something>" 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 ==="
|