#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ROOT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)" CLIENT_ENV_FILE="${ROOT_DIR}/deploy/client/.env" MODE="${RPKI_RTR_CLIENT_MODE:-tcp}" COMPOSE_PROJECT="${RPKI_RTR_CLIENT_COMPOSE_PROJECT:-rpki-rtr-client}" usage() { cat <<'EOF' Usage: scripts/12_shutdown_client.sh [options] Stop the RTR debug client started by scripts/11_start_client.sh. Options: --mode MODE Client mode: tcp|tls|ssh. Default: tcp -h, --help Show this help. EOF } log() { printf '[12_shutdown_client] %s\n' "$*" >&2 } stage() { printf '\n====== %s ======\n' "$*" >&2 } die() { printf '[12_shutdown_client] ERROR: %s\n' "$*" >&2 exit 1 } compose_file_for_mode() { case "$1" in tcp) printf '%s\n' "${ROOT_DIR}/deploy/client/docker-compose.tcp.yml" ;; tls) printf '%s\n' "${ROOT_DIR}/deploy/client/docker-compose.tls.yml" ;; ssh) printf '%s\n' "${ROOT_DIR}/deploy/client/docker-compose.ssh.yml" ;; *) die "unsupported mode '$1', expected tcp|tls|ssh" ;; esac } while [ "$#" -gt 0 ]; do case "$1" in --mode) [ "$#" -ge 2 ] || die "--mode requires a value" MODE="$2" shift 2 ;; -h|--help) usage exit 0 ;; *) die "unknown option: $1" ;; esac done CLIENT_COMPOSE_FILE="$(compose_file_for_mode "${MODE}")" stage "Checking Docker" command -v docker >/dev/null 2>&1 || die "docker command not found" if docker compose version >/dev/null 2>&1; then COMPOSE_BIN=(docker compose) elif command -v docker-compose >/dev/null 2>&1 && docker-compose version >/dev/null 2>&1; then COMPOSE_BIN=(docker-compose) else die "docker compose is not available" fi stage "Stopping RTR Debug Client" log "mode: ${MODE}" if [ -f "${CLIENT_ENV_FILE}" ] && [ -f "${CLIENT_COMPOSE_FILE}" ]; then "${COMPOSE_BIN[@]}" --env-file "${CLIENT_ENV_FILE}" -p "${COMPOSE_PROJECT}" -f "${CLIENT_COMPOSE_FILE}" down --remove-orphans else log "client compose/env not found, skip" fi stage "Client Shutdown Finished"