diff --git a/control/Dockerfile b/control/Dockerfile index 6384756..fb8845d 100644 --- a/control/Dockerfile +++ b/control/Dockerfile @@ -3,5 +3,4 @@ WORKDIR /app RUN apt-get update && apt-get install -y curl systemd && rm -rf /var/lib/apt/lists/* RUN pip install fastapi uvicorn requests-unixsocket pyyaml pytest httpx COPY app.py . -#COPY tests/ ./tests/ CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"] diff --git a/control/app.py b/control/app.py index 6922b76..2b87cac 100644 --- a/control/app.py +++ b/control/app.py @@ -468,32 +468,43 @@ def _extract_published_ports(container: dict) -> list[str]: @app.get("/containers-dashboard") def containers_dashboard(): dashboard = [] + defined = find_defined_containers() - # A) echte containers (UNCHANGED) + # A) echte containers (runtime) real = _podman_get_json(f"{PODMAN_API_BASE}/libpod/containers/json?all=true") for c in real: _ensure_container_status_field(c) - c["_dashboard_source"] = "podman" + + # Published ports: behoud jouw hotfix c["_dashboard_published_ports"] = _extract_published_ports(c) + + # Normaliseer naam: Podman kan "/name" geven + rname = ((c.get("Names") or ["?"])[0] or "").lstrip("/") + + # Managed: systemd als er een .container definitie bestaat, anders podman + if rname in defined: + c["_dashboard_source"] = "systemd" + c["_dashboard_unit"] = f"{rname}.service" + c["_dashboard_def_path"] = defined[rname] + else: + c["_dashboard_source"] = "podman" + dashboard.append(c) - # B) Dedup set (HOTFIX 3.3) — exact extraction, no sorting - runtime_names = set((c.get("Names") or ["?"])[0] for c in real) + # B) Dedup set: ook genormaliseerd (voorkomt /name vs name doublures) + runtime_names = set((((c.get("Names") or ["?"])[0] or "").lstrip("/")) for c in real) # C) defined containers from systemd/*.container (skip duplicates) - defined = find_defined_containers() for name, relpath in defined.items(): if name in runtime_names: continue row = _make_defined_container_dashboard_row(name, relpath) - # fill Status from systemd is-active (existing hotfix 3.1 behavior) code, out = _systemctl(["systemctl", "--user", "is-active", f"{name}.service"]) row["Status"] = (out or "").strip() dashboard.append(row) return dashboard - @app.get("/containers") def list_containers(): # Ook hier ?all=true voor gestopte containers