#!/usr/bin/env bash source .utils DRY_RUN=0 NAMESPACE="org-giantswarm" RELEASE="20.0.0-alpha1" PROVIDER="aws" AZS="eu-west-1a" DESCRIPTION="$(whoami)'s test cluster" print_usage() { orange "gs-create-cluster - create a Giant Swarm managed CAPI workload cluster" echo " " underline "Usage:" echo "gs-create-cluster [cluster-name]" echo " " echo " " underline "Options:" echo "-h, --help show this help text" echo "-n, --namespace the namespace the cluster is in (default: org-giantswarm)" echo "-r, --release the namespace the cluster is in (default: 20.0.0-alpha1)" echo "-p, --provider the cloud provider to use (default: aws)" } while test $# -gt 0; do case "$1" in -n|--namespace) shift NAMESPACE=$1 shift ;; -r|--release) shift RELEASE=$1 shift ;; -p|--provider) shift PROVIDER=$1 shift ;; --dry-run) DRY_RUN=1 shift ;; -h|--help) print_usage exit 0 ;; *) break ;; esac done # Positional args NAME=${1:-wc001} PREFIXED_NAMESPACE="org-$NAMESPACE" case $NAMESPACE in org-*) PREFIXED_NAMESPACE="$NAMESPACE" NAMESPACE=${NAMESPACE#"org-"} esac CAPI_CLUSTER="--provider aws --release ${RELEASE}" CAPZ_CLUSTER="--provider azure --release ${RELEASE}" CAPG_CLUSTER="--provider gcp --project capi-test-phoenix --region europe-west3 --gcp-failure-domains europe-west3-a --gcp-machine-deployment-failure-domain europe-west3-a" TEMPLATE_ARGS="--name ${NAME:0:5} --organization ${NAMESPACE}" case "${PROVIDER}" in aws) TEMPLATE_ARGS="${TEMPLATE_ARGS} ${CAPI_CLUSTER}" ;; gcp) TEMPLATE_ARGS="${TEMPLATE_ARGS} ${CAPG_CLUSTER}" ;; azure) TEMPLATE_ARGS="${TEMPLATE_ARGS} ${CAPZ_CLUSTER}" ;; *) echo "Unsupported provider type" exit 1 ;; esac echo "✨ Pre-flight checks" gs-get-cluster --namespace ${PREFIXED_NAMESPACE} ${NAME} &>/dev/null if [ $? -eq 0 ]; then echo "Cluster named '${NAME}' already exists" exit 1 elif [[ "${PROVIDER}" = "aws" ]]; then echo "Cleaning up any old awsclusterroleidentities..." kubectl delete --namespace ${PREFIXED_NAMESPACE} awsclusterroleidentities ${NAME} 2>/dev/null fi echo "✨ Creating a new ${PROVIDER} cluster called '${NAMESPACE}/${NAME}' with release '${RELEASE}'" if [[ $DRY_RUN = 1 ]]; then echo kubectl-gs template cluster ${TEMPLATE_ARGS} --description "${DESCRIPTION}" kubectl-gs template cluster ${TEMPLATE_ARGS} --description "${DESCRIPTION}" else kubectl-gs template cluster ${TEMPLATE_ARGS} --description "${DESCRIPTION}" | kubectl apply -f - fi if [[ $DRY_RUN = 0 ]]; then sleep 10 echo "✨ Checking status..." gs-get-cluster --namespace ${PREFIXED_NAMESPACE} ${NAME} fi