"""Корень данных kind-k8s: каталог ``clusters/`` и пути в meta.json. ``KIND_K8S_WORKDIR`` — рабочий каталог, внутри него создаётся ``clusters/<имя>/``. В Docker-образе задаётся ``/work``, куда монтируется том с хоста (только данные). Локальный запуск из ``kind-k8s/app/*.py``: переменную не задаём — корнем данных считается **родитель** каталога ``app/`` (каталог ``kind-k8s/``, рядом с ``clusters/``). Автор: Сергей Антропов Сайт: https://devops.org.ru """ from __future__ import annotations import os from pathlib import Path # Каталог пакета: kind-k8s/app/; в образе: /opt/kind-k8s/app _LIB = Path(__file__).resolve().parent # Корень репозитория kind-k8s (рядом с clusters/), если KIND_K8S_WORKDIR не задан _REPO_KIND_K8S = _LIB.parent def data_root() -> Path: """Корень данных (родитель для ``clusters/``).""" w = (os.environ.get("KIND_K8S_WORKDIR") or "").strip() if w: return Path(w).resolve() return _REPO_KIND_K8S def clusters_dir() -> Path: """``/clusters``.""" return data_root() / "clusters" def container_cli_name() -> str: """ Имя исполняемого файла для вызовов к движку контейнеров (``docker`` / ``podman``). В образе веб-UI ставится только **docker-cli** (Alpine ``apk add docker-cli``); бинарника ``podman`` в контейнере нет. На хост при этом может быть смонтирован сокет **Podman** (см. ``CONTAINER_SOCKET``): API совместим с Docker, клиент ``docker`` обращается к нему через ``DOCKER_HOST`` и смонтированный ``/var/run/docker.sock``. Поэтому при ``KIND_K8S_IN_CONTAINER`` всегда возвращаем ``"docker"`` — независимо от ``CONTAINER_CLI`` в ``.env`` (его имеет смысл задавать ``podman`` только при локальном запуске приложения на хосте без контейнера). """ raw_in = (os.environ.get("KIND_K8S_IN_CONTAINER") or "").strip().lower() if raw_in in ("1", "true", "yes", "on"): return "docker" return (os.environ.get("CONTAINER_CLI") or "docker").strip() or "docker"