110 lines
3.4 KiB
Bash
110 lines
3.4 KiB
Bash
#!/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 <<EOF
|
|
Usage: $0 <cluster> --envtype <dev|prod|workload>
|
|
|
|
Fetch (or reuse) a kubeconfig for the given cluster.
|
|
Platform is read from the cluster prefix (<platform>-...).
|
|
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: <cluster> argument required"; usage 1; }
|
|
[[ -z "$ENVTYPE" ]] && { echo "Error: --envtype <dev|prod|workload> 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
|