fix the manager

This commit is contained in:
2026-07-06 12:18:41 +02:00
parent 8891e78b1d
commit 948f209436
20 changed files with 1069 additions and 468 deletions

116
uninstall.sh Executable file
View File

@@ -0,0 +1,116 @@
#!/bin/bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
MANAGER_DIR="${ROOT_DIR}/manager-solution"
CONFIG_FILE="${MANAGER_DIR}/manager/config.json"
ENV_FILE="${MANAGER_DIR}/.env"
if [[ ! -f "${CONFIG_FILE}" ]]; then
echo "Missing config file: ${CONFIG_FILE}" >&2
exit 1
fi
load_env_file() {
local file="$1"
if [[ -f "${file}" ]]; then
set -a
# shellcheck disable=SC1090
source "${file}"
set +a
fi
}
docker_container_exists() {
docker container inspect "$1" >/dev/null 2>&1
}
docker_volume_exists() {
docker volume inspect "$1" >/dev/null 2>&1
}
docker_image_exists() {
docker image inspect "$1" >/dev/null 2>&1
}
load_env_file "${ENV_FILE}"
MANAGER_CONTAINER_NAME="${FIS_MANAGER_CONTAINER_NAME:-fis_manager}"
MANAGER_IMAGE_NAME="${FIS_MANAGER_IMAGE:-fis-manager:local}"
echo "Stopping manager stack"
if [[ -f "${MANAGER_DIR}/docker-compose.yml" ]]; then
(
cd "${MANAGER_DIR}"
docker compose down --remove-orphans || true
)
fi
if docker_container_exists "${MANAGER_CONTAINER_NAME}"; then
echo "Removing manager container ${MANAGER_CONTAINER_NAME}"
docker rm -f "${MANAGER_CONTAINER_NAME}" || true
fi
if docker_image_exists "${MANAGER_IMAGE_NAME}"; then
echo "Removing manager image ${MANAGER_IMAGE_NAME}"
docker rmi -f "${MANAGER_IMAGE_NAME}" || true
fi
mapfile -t USER_RESOURCES < <(
python3 - "${CONFIG_FILE}" <<'PY'
import json
import sys
with open(sys.argv[1], encoding="utf-8") as handle:
config = json.load(handle)
defaults = config.get("defaults", {})
container_prefix = defaults.get("container_prefix", "fis-")
default_volumes = defaults.get("volumes", {})
for user in config.get("users", []):
user_id = str(user["id"])
container_name = user.get("container_name") or f"{container_prefix}{user_id}"
volumes = {}
volumes.update(default_volumes)
volumes.update(user.get("volumes", {}))
resolved_volumes = []
for volume_name in volumes:
resolved_volumes.append(volume_name.format(id=user_id, port=user["port"]))
print(f"CONTAINER\t{container_name}")
for volume_name in resolved_volumes:
print(f"VOLUME\t{volume_name}")
PY
)
declare -A USER_CONTAINERS=()
declare -A USER_VOLUMES=()
for resource in "${USER_RESOURCES[@]}"; do
kind="${resource%%$'\t'*}"
value="${resource#*$'\t'}"
if [[ "${kind}" == "CONTAINER" ]]; then
USER_CONTAINERS["${value}"]=1
elif [[ "${kind}" == "VOLUME" ]]; then
USER_VOLUMES["${value}"]=1
fi
done
for container_name in "${!USER_CONTAINERS[@]}"; do
if docker_container_exists "${container_name}"; then
echo "Removing user container ${container_name}"
docker rm -f "${container_name}" || true
fi
done
for volume_name in "${!USER_VOLUMES[@]}"; do
if docker_volume_exists "${volume_name}"; then
echo "Removing user volume ${volume_name}"
docker volume rm "${volume_name}" || true
fi
done
echo "Cleanup completed"