#!/usr/bin/env bash set -euo pipefail # init_kong.sh # Purpose: # - Deploy Kong API Gateway (DB-less) into the prole-db 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 # # Usage: # ./init_kong.sh [--mode MODE] [-n NAMESPACE] SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) # shellcheck disable=SC1090 source "$SCRIPT_DIR/prole_cfg.sh" if [[ "${1:-}" == "--mode" || "${1:-}" == "-m" ]]; then prole_set_mode "${2:-}" shift 2 elif [[ "${1:-}" == --mode=* || "${1:-}" == -m=* ]]; then prole_set_mode "${1#*=}" shift fi NAMESPACE="${NAMESPACE:-default}" while [[ $# -gt 0 ]]; do case "$1" in -n|--namespace) shift if [[ -z "${1:-}" ]]; then echo "ERROR: -n/--namespace requires a value" >&2 exit 2 fi NAMESPACE="$1" ;; -n=*|--namespace=*) NAMESPACE="${1#*=}" ;; start|stop|status|restart) ACTION="$1" ;; -h|--help) usage ;; *) echo "ERROR: Unknown argument: $1" >&2 exit 2 ;; esac shift done ACTION="${ACTION:-start}" PROLE_HOME=${PROLE_HOME:-$(cd "$SCRIPT_DIR/.." && pwd)} KONG_IMAGE="${KONG_IMAGE:-kong:3.9}" KONG_NAME="${KONG_NAME:-prole-db-kong}" KONG_PROXY_PORT="${KONG_PROXY_PORT:-8000}" KONG_ADMIN_PORT="${KONG_ADMIN_PORT:-8001}" KONG_CONFIG_NAME="${KONG_CONFIG_NAME:-prole-db-kong-config}" # Upstream service defaults DB_MANAGER_SERVICE="${DB_MANAGER_SERVICE:-prole-db-manager}" DB_MANAGER_PORT="${DB_MANAGER_PORT:-80}" usage() { cat < Actions: start Create ConfigMap and deploy Kong to the prole-db namespace stop Remove Kong deployment, service, and ConfigMap status Show Kong pod/service status restart Restart Kong pods USAGE exit 1 } ensure_tools() { for t in kubectl; do command -v "$t" >/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." } case "$ACTION" in start) ensure_tools ensure_namespace create_kong_config deploy ;; stop) ensure_tools stop ;; status) ensure_tools status ;; restart) ensure_tools restart ;; *) usage ;; esac