81 lines
2.7 KiB
Bash
Executable File
81 lines
2.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
cd /opt/hx-ki/com2-stack
|
|
F="docker-compose.yml"
|
|
NET="hxki-internal"
|
|
|
|
[ -f "$F" ] || { echo "FEHLT: $PWD/$F"; exit 1; }
|
|
|
|
echo "=== COM2: FIX NETWORK (hxki-internal external) ==="
|
|
|
|
# 1) Docker-Netzwerk auf Host sicherstellen
|
|
if ! docker network ls --format '{{.Name}}' | grep -q "^${NET}$"; then
|
|
echo "[1] Erzeuge Docker-Netzwerk: ${NET}"
|
|
docker network create "${NET}" >/dev/null
|
|
else
|
|
echo "[1] OK: Docker-Netzwerk existiert: ${NET}"
|
|
fi
|
|
|
|
# 2) Compose patchen: networks: hxki-internal: external: true
|
|
python3 - <<'PY'
|
|
from pathlib import Path
|
|
import re
|
|
|
|
p = Path("/opt/hx-ki/com2-stack/docker-compose.yml")
|
|
s = p.read_text()
|
|
|
|
net = "hxki-internal"
|
|
|
|
def ensure_network_block(txt: str) -> str:
|
|
# Wenn schon networks: existiert -> sicherstellen, dass hxki-internal drin ist + external:true
|
|
if re.search(r'(?m)^\s*networks:\s*$', txt):
|
|
# hat bereits hxki-internal block?
|
|
if re.search(r'(?m)^\s{2}' + re.escape(net) + r'\s*:\s*$', txt):
|
|
# ensure external: true darunter
|
|
# falls external fehlt, einfügen direkt nach net-block header
|
|
def repl(m):
|
|
block = m.group(0)
|
|
if re.search(r'(?m)^\s{4}external:\s*true\s*$', block):
|
|
return block
|
|
# external: true nach header einfügen
|
|
return block + " external: true\n"
|
|
txt = re.sub(
|
|
r'(?ms)^\s{2}' + re.escape(net) + r'\s*:\s*\n(?:^\s{4}.*\n)*',
|
|
repl,
|
|
txt
|
|
)
|
|
else:
|
|
# networks existiert, aber hxki-internal fehlt -> am Ende der networks-sektion einfügen
|
|
# wir hängen es direkt nach "networks:" an, falls keine weiteren networks existieren,
|
|
# ansonsten ans Ende der networks-liste (deterministisch: nach networks:-Header)
|
|
txt = re.sub(r'(?m)^(networks:\s*)$',
|
|
r'\1\n ' + net + ':\n external: true',
|
|
txt, count=1)
|
|
return txt
|
|
|
|
# Wenn networks fehlt -> ans Ende anhängen
|
|
return txt.rstrip() + f"\n\nnetworks:\n {net}:\n external: true\n"
|
|
|
|
s2 = ensure_network_block(s)
|
|
|
|
# Minimaler sanity cleanup: doppelte Leerzeilen nicht eskalieren
|
|
s2 = re.sub(r'\n{4,}', '\n\n\n', s2)
|
|
|
|
p.write_text(s2)
|
|
print("OK: networks/hxki-internal als external:true gesetzt.")
|
|
PY
|
|
|
|
echo "[3] VALIDATE"
|
|
docker compose config >/dev/null
|
|
echo "OK: Compose ist valide."
|
|
|
|
echo "[4] UP"
|
|
docker compose up -d --remove-orphans
|
|
|
|
echo "=== STATUS ==="
|
|
docker ps --format 'NAME={{.Names}} STATUS={{.Status}} PORTS={{.Ports}}'
|
|
echo "=== HXKI-INTERNAL ==="
|
|
docker network inspect "${NET}" --format '{{range $id,$c := .Containers}}{{println $c.Name}}{{end}}' | sort
|
|
echo "=== ENDE ==="
|