Initial commit
This commit is contained in:
116
stop.sh
Executable file
116
stop.sh
Executable 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"
|
||||
Reference in New Issue
Block a user