#!/usr/bin/env bash set -euo pipefail cd /opt/hx-ki/com2-stack F="docker-compose.yml" [ -f "$F" ] || { echo "FEHLT: /opt/hx-ki/com2-stack/$F"; exit 1; } echo "=== COM2: REMOVE GRAFANA ===" # Stop/Remove nur über Compose (Orchester-Prinzip) docker compose down # Entferne Service-Block "grafana:" (YAML-Block) python3 - <<'PY' import re, pathlib p = pathlib.Path("/opt/hx-ki/com2-stack/docker-compose.yml") s = p.read_text() # Serviceblock grafana (unter services:) entfernen # simpel & deterministisch: von " grafana:" bis zum nächsten " :" auf gleicher Einrückung s2 = re.sub(r'(?ms)^\s{2}grafana:\s*\n(?:^\s{4}.*\n|^\s{6}.*\n|^\s{8}.*\n|^\s*\n)*?(?=^\s{2}[A-Za-z0-9_.-]+:\s*$|\Z)', '', s) # Volume grafana_data entfernen (unter volumes:) s2 = re.sub(r'(?ms)^\s{2}grafana_data:\s*\n(?:^\s{4}.*\n|^\s*\n)*?(?=^\s{2}[A-Za-z0-9_.-]+:\s*$|\Z)', '', s2) p.write_text(s2) print("OK: grafana service/volume entfernt (falls vorhanden).") PY echo "[VALIDATE]" docker compose config >/dev/null echo "OK: Compose valide." echo "[UP]" docker compose up -d --remove-orphans echo "=== DONE ===" docker ps --format 'NAME={{.Names}} STATUS={{.Status}}'