#!/bin/bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" TOFU_ROOT="$(dirname "$SCRIPT_DIR")" PROJECT_ROOT="$(dirname "$TOFU_ROOT")" usage() { cat < --envtype Fetch (or reuse) a kubeconfig for the given cluster. Platform is read from the cluster prefix (-...). Env type must be supplied explicitly — it is no longer inferred from the cluster name, so names like 'upc-forte-group' work. Examples: $0 aks-dev --envtype dev $0 upc-forte-group --envtype prod $0 eks-workload --envtype workload EOF exit "${1:-0}" } CLUSTER="" ENVTYPE="" while [[ $# -gt 0 ]]; do case "$1" in --envtype) ENVTYPE="${2:-}"; shift 2 ;; --envtype=*) ENVTYPE="${1#*=}"; shift ;; -h|--help) usage 0 ;; -*) echo "Unknown option: $1"; usage 1 ;; *) if [[ -z "$CLUSTER" ]]; then CLUSTER="$1"; shift else echo "Error: unexpected argument '$1'"; usage 1 fi ;; esac done [[ -z "$CLUSTER" ]] && { echo "Error: argument required"; usage 1; } [[ -z "$ENVTYPE" ]] && { echo "Error: --envtype required"; usage 1; } case "$ENVTYPE" in dev|prod|workload) ;; *) echo "Error: invalid --envtype '$ENVTYPE'. Expected: dev, prod, workload"; exit 1 ;; esac PLATFORM="${CLUSTER%%-*}" ENV="$ENVTYPE" case "$PLATFORM" in aks|eks|gke|upc) ;; *) echo "Error: unknown platform '$PLATFORM'. Expected: aks, eks, gke, upc"; exit 1 ;; esac KUBECONFIG_FILE="$PROJECT_ROOT/private/$CLUSTER/kubeconfig" if [[ -f "$KUBECONFIG_FILE" ]]; then echo "Kubeconfig already exists: $KUBECONFIG_FILE" echo "" echo " export KUBECONFIG=$KUBECONFIG_FILE" else echo "No cached kubeconfig. Fetching from platform..." # Load platform credentials ENV_FILE="$TOFU_ROOT/configs/$PLATFORM.env" if [[ -f "$ENV_FILE" ]]; then set -a; source "$ENV_FILE"; set +a fi TOFU_DIR="$TOFU_ROOT/platforms/$PLATFORM/$ENV" mkdir -p "$(dirname "$KUBECONFIG_FILE")" case "$PLATFORM" in aks) cd "$TOFU_DIR" RG=$(tofu output -raw resource_group_name 2>/dev/null || echo "$CLUSTER-rg") NAME=$(tofu output -raw cluster_name 2>/dev/null || echo "$CLUSTER") az aks get-credentials --resource-group "$RG" --name "$NAME" --file "$KUBECONFIG_FILE" --overwrite-existing ;; eks) cd "$TOFU_DIR" NAME=$(tofu output -raw cluster_name 2>/dev/null || echo "$CLUSTER") REGION=$(tofu output -raw aws_region 2>/dev/null || echo "${AWS_REGION:-eu-west-1}") aws eks update-kubeconfig --name "$NAME" --region "$REGION" --kubeconfig "$KUBECONFIG_FILE" ;; gke) cd "$TOFU_DIR" NAME=$(tofu output -raw cluster_name 2>/dev/null || echo "$CLUSTER") REGION=$(tofu output -raw region 2>/dev/null || echo "${GCP_REGION:-europe-west4}") PROJECT=$(tofu output -raw project_id 2>/dev/null || echo "${GCP_PROJECT_ID:-}") gcloud container clusters get-credentials "$NAME" --region "$REGION" --project "$PROJECT" cp ~/.kube/config "$KUBECONFIG_FILE" ;; upc) cd "$TOFU_DIR" CLUSTER_ID=$(tofu output -raw cluster_id 2>/dev/null || echo "${UPCLOUD_CLUSTER_ID:-}") upctl kubernetes config "$CLUSTER_ID" > "$KUBECONFIG_FILE" ;; esac chmod 600 "$KUBECONFIG_FILE" echo "Kubeconfig saved: $KUBECONFIG_FILE" echo "" echo " export KUBECONFIG=$KUBECONFIG_FILE" fi