#!/usr/bin/env bash set -euo pipefail # init_kong.sh # Purpose: # - Deploy Kong API Gateway (DB-less) into the service namespace # - Replaces the prole nginx deployment as the API endpoint # - Routes /backup/* to prole-db-manager # - Creates the kong declarative config as a ConfigMap # - Applies the kong deployment and service manifests # - Provides start/stop/status/restart actions SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) # Shared option parsing for common core scripts # shellcheck disable=SC1090 source "$SCRIPT_DIR/common_core_lib.sh" # Inject default config if not provided _has_config=0 for _arg in "$@"; do [[ "$_arg" == "-c" || "$_arg" == "--config" || "$_arg" == -c=* || "$_arg" == --config=* ]] && _has_config=1 done if [[ $_has_config -eq 0 && -f "$SCRIPT_DIR/../conf/prole.cfg" ]]; then set -- "-c" "$SCRIPT_DIR/../conf/prole.cfg" "$@" fi unset _has_config _arg common_core_preparse_config "$@" # shellcheck disable=SC1090 source "$SCRIPT_DIR/prole_cfg.sh" set -- "${COMMON_CORE_ARGS[@]}" common_core_parse_args "$@" if [[ -z "${PROLE_MODE:-}" ]]; then export PROLE_MODE="k3s" fi if [[ "${COMMON_CORE_HELP:-0}" == 1 ]]; then common_core_usage "$0" exit 0 fi if [[ -n "${COMMON_CORE_PARSE_ERROR:-}" ]]; then echo "ERROR: ${COMMON_CORE_PARSE_ERROR}" >&2 common_core_usage "$0" exit 2 fi ACTION="$COMMON_CORE_ACTION" NAMESPACE="$(common_core_resolve_namespace "default")" common_core_apply_namespace "$NAMESPACE" PROLE_HOME=${PROLE_HOME:-$(cd "$SCRIPT_DIR/.." && pwd)} KONG_IMAGE="${KONG_IMAGE:-kong:3.9}" KONG_NAME="${KONG_NAME:-prole-svc-kong}" KONG_PROXY_PORT="${KONG_PROXY_PORT:-8000}" KONG_ADMIN_PORT="${KONG_ADMIN_PORT:-8001}" KONG_CONFIG_NAME="${KONG_CONFIG_NAME:-prole-svc-kong-config}" # Upstream service defaults DB_MANAGER_SERVICE="${DB_MANAGER_SERVICE:-prole-db-manager}" DB_MANAGER_PORT="${DB_MANAGER_PORT:-80}" usage() { cat </dev/null || { echo "Missing required tool: $t" >&2; exit 1; } done } ensure_namespace() { if ! kubectl get namespace "$NAMESPACE" >/dev/null 2>&1; then echo "Creating namespace '$NAMESPACE' ..." kubectl create namespace "$NAMESPACE" >/dev/null 2>&1 || true fi } create_kong_config() { echo "Creating/updating Kong declarative config '$KONG_CONFIG_NAME' in namespace '$NAMESPACE' ..." local kong_yml kong_yml=$(cat </dev/null || echo "No pods found" echo "" echo "=== $KONG_NAME service ===" kubectl get svc "$KONG_NAME" -n "$NAMESPACE" 2>/dev/null || echo "No service found" } restart() { echo "Restarting $KONG_NAME ..." kubectl rollout restart deployment/"$KONG_NAME" -n "$NAMESPACE" kubectl rollout status deployment/"$KONG_NAME" -n "$NAMESPACE" --timeout=120s echo "$KONG_NAME restarted." } action_update() { ensure_tools ensure_namespace create_kong_config deploy } case "$ACTION" in start|initialize|update|reload) action_update ;; stop) ensure_tools stop ;; status) ensure_tools status ;; restart) ensure_tools restart ;; *) usage ;; esac