Ievgeniia Zadorozhna | 68ba4f3 | 2024-01-27 02:51:59 +0100 | [diff] [blame] | 1 | #!/bin/bash |
Alex | e67127e | 2022-10-03 14:42:30 -0500 | [diff] [blame] | 2 | ### initial folders |
| 3 | function ewriteln() { |
| 4 | echo ${1} | tee -a $MY_PROJFOLDER/env.sh |
| 5 | } |
| 6 | |
Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 7 | exec 2> >(while read line; do echo -e "\033[0;31m$line\033[0m" >&2; done) |
Alex | e67127e | 2022-10-03 14:42:30 -0500 | [diff] [blame] | 8 | export MY_PROJFOLDER=/artifacts |
| 9 | echo "# Using folder '$MY_PROJFOLDER'" |
| 10 | cd $MY_PROJFOLDER |
Alex | 2c8b880 | 2022-10-20 14:07:15 -0500 | [diff] [blame] | 11 | [ ! -d envs ] && mkdir envs |
Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 12 | [ ! -d envs/checkers ] && mkdir envs/checkers |
| 13 | [ ! -d envs/kubeconfigs ] && mkdir envs/kubeconfigs |
Alex | 2c8b880 | 2022-10-20 14:07:15 -0500 | [diff] [blame] | 14 | [ ! -d yamls ] && mkdir yamls |
| 15 | [ ! -d reports ] && mkdir reports |
| 16 | [ ! -d tmp ] && mkdir tmp |
Alex | e67127e | 2022-10-03 14:42:30 -0500 | [diff] [blame] | 17 | |
Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 18 | # move mgmt (k0rdent mothership) k8s konfig to default place |
| 19 | if [ -f $MY_PROJFOLDER/mgmt-kubeconfig.yaml ]; then |
| 20 | mv $MY_PROJFOLDER/mgmt-kubeconfig.yaml $MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml |
Alex | e67127e | 2022-10-03 14:42:30 -0500 | [diff] [blame] | 21 | fi |
Alex | 2c8b880 | 2022-10-20 14:07:15 -0500 | [diff] [blame] | 22 | if [ -f $MY_PROJFOLDER/node.key ]; then |
| 23 | mv $MY_PROJFOLDER/node.key $MY_PROJFOLDER/envs/node.key |
| 24 | fi |
Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 25 | if [ ! -f $MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml ]; then |
| 26 | echo "ERROR: k0rdent mgmt cluster (mothership) kubeconfig was not found either at '$MY_PROJFOLDER/mgmt-kubeconfig.yaml' or '$MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml'" |
Alex | 2c8b880 | 2022-10-20 14:07:15 -0500 | [diff] [blame] | 27 | exit 1 |
Alex | e67127e | 2022-10-03 14:42:30 -0500 | [diff] [blame] | 28 | fi |
| 29 | echo " " |
| 30 | |
| 31 | ### prepare needed variables |
| 32 | echo "# Updating '$MY_PROJFOLDER/env.sh'" |
Alex | f7f0a15 | 2022-10-10 16:17:32 -0500 | [diff] [blame] | 33 | |
Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 34 | export KUBECONFIG=$MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml |
Alex | e67127e | 2022-10-03 14:42:30 -0500 | [diff] [blame] | 35 | if [ ! -f $MY_PROJFOLDER/env.sh ]; then |
| 36 | touch $MY_PROJFOLDER/env.sh |
| 37 | else |
| 38 | truncate -s 0 $MY_PROJFOLDER/env.sh |
| 39 | echo "$MY_PROJFOLDER/env.sh has been truncated" |
| 40 | fi |
Ievgeniia Zadorozhna | 3d76186 | 2024-10-01 19:28:04 +0200 | [diff] [blame] | 41 | |
| 42 | ### Edit the following lines to set the client name, floating network name, IAM writer password |
Alex | f7f0a15 | 2022-10-10 16:17:32 -0500 | [diff] [blame] | 43 | ewriteln "export MY_CLIENTNAME='ClientName'" |
| 44 | ewriteln "export MY_CLIENTSHORTNAME='clname'" |
Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 45 | ewriteln "export MY_PROJNAME='K0RDENT_DEPLOY'" |
Ievgeniia Zadorozhna | 3d76186 | 2024-10-01 19:28:04 +0200 | [diff] [blame] | 46 | |
| 47 | ### Setting the project directory |
Alex | e67127e | 2022-10-03 14:42:30 -0500 | [diff] [blame] | 48 | ewriteln "export MY_PROJFOLDER=/artifacts" |
Alex | f7f0a15 | 2022-10-10 16:17:32 -0500 | [diff] [blame] | 49 | |
Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 50 | printf "\n\n# Getting ready ClusterDeployments" |
| 51 | printf "\n# For each ready cld, getting namespace and cluster" |
| 52 | kubectl get cld -A --no-headers | awk '$3 == "True" {print $1, $2}' | while read -r namespace name; do |
| 53 | echo " -> Processing $name in namespace $namespace..." |
| 54 | kubeconfig_secret="${name}-kubeconfig" |
| 55 | kubeconfig_file="$MY_PROJFOLDER/envs/kubeconfigs/${name}-kubeconfig.yaml" |
Alex | a0053b9 | 2022-10-14 16:38:28 -0500 | [diff] [blame] | 56 | |
Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 57 | echo " -> Fetching kubeconfig to $kubeconfig_file" |
| 58 | kubectl -n "$namespace" get secret "$kubeconfig_secret" \ |
| 59 | -o jsonpath='{.data.value}' | base64 -d > "$kubeconfig_file" |
| 60 | |
| 61 | rc_file="$MY_PROJFOLDER/envs/${name}rc" |
| 62 | echo " -> Generating RC file at $rc_file" |
| 63 | cat <<EOF > "$rc_file" |
| 64 | #!/bin/bash |
| 65 | export KUBECONFIG=$MY_PROJFOLDER/envs/kubeconfigs/${name}-kubeconfig.yaml |
| 66 | export CHILD_CLUSTER_NAME=${name} |
| 67 | export CHILD_CLUSTER_NS=${namespace} |
| 68 | EOF |
| 69 | |
| 70 | chmod +x "$rc_file" |
| 71 | done |
| 72 | |
| 73 | printf "\n\n# Writing additional options\n" |
Alex | e67127e | 2022-10-03 14:42:30 -0500 | [diff] [blame] | 74 | ewriteln "export SI_BINARIES_DIR=$(which helm | rev | cut -d'/' -f2- | rev)" |
| 75 | ewriteln "export HELM_BINARY_PATH=$(which helm)" |
Alex | e67127e | 2022-10-03 14:42:30 -0500 | [diff] [blame] | 76 | |
Alex | e67127e | 2022-10-03 14:42:30 -0500 | [diff] [blame] | 77 | |
| 78 | # generate additional files |
Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 79 | printf "\n\n# Preparing additional files\n" |
Alex | e67127e | 2022-10-03 14:42:30 -0500 | [diff] [blame] | 80 | # copy files |
| 81 | cp -v /opt/res-files/k8s/workspace/* $MY_PROJFOLDER/envs/ |
Alex | a0053b9 | 2022-10-14 16:38:28 -0500 | [diff] [blame] | 82 | [ ! -d $MY_PROJFOLDER/scripts ] && mkdir $MY_PROJFOLDER/scripts |
| 83 | mv -v $MY_PROJFOLDER/envs/*.sh $MY_PROJFOLDER/scripts/ |
Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 84 | mv -v $MY_PROJFOLDER/envs/*.env $MY_PROJFOLDER/envs/checkers |
Alex | 2c8b880 | 2022-10-20 14:07:15 -0500 | [diff] [blame] | 85 | |
| 86 | cp -v /opt/res-files/k8s/yamls/qa-rally.yaml $MY_PROJFOLDER/yamls |
| 87 | cp -v /opt/res-files/k8s/yamls/qa-res.yaml $MY_PROJFOLDER/yamls |
| 88 | cp -v /opt/res-files/k8s/yamls/qa-toolset-bare.yaml $MY_PROJFOLDER/yamls |
| 89 | cp -v /opt/res-files/k8s/yamls/qa-toolset.yaml $MY_PROJFOLDER/yamls |
| 90 | |
Alex | a0053b9 | 2022-10-14 16:38:28 -0500 | [diff] [blame] | 91 | # remove duplicate init |
| 92 | rm -v $MY_PROJFOLDER/scripts/init-workspace.sh |
Alex | f7f0a15 | 2022-10-10 16:17:32 -0500 | [diff] [blame] | 93 | # update IP Addresses |
Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 94 | mgmt_ip=$(cat $MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml | grep server | cut -d':' -f3 | cut -d'/' -f3) |
| 95 | echo " -> MGMT (Mothership) Server IP is: ${mgmt_ip}" |
| 96 | sed -i "s/ip_address/$mgmt_ip/g" $MY_PROJFOLDER/envs/checkers/mgmt-checker.env |
Alex | f7f0a15 | 2022-10-10 16:17:32 -0500 | [diff] [blame] | 97 | |
Alex | a0053b9 | 2022-10-14 16:38:28 -0500 | [diff] [blame] | 98 | |
Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 99 | printf "\n\n# Preparing checker.env files for each child cluster, getting default SC...\n" |
| 100 | ENV_DIR="$MY_PROJFOLDER/envs" |
| 101 | CHECKERS_DIR="$MY_PROJFOLDER/envs/checkers" |
| 102 | for kubeconfig_path in "$ENV_DIR"/kubeconfigs/*-kubeconfig.yaml; do |
| 103 | [[ -e "$kubeconfig_path" ]] || continue |
| 104 | name=$(basename "$kubeconfig_path" -kubeconfig.yaml) |
Alex | a0053b9 | 2022-10-14 16:38:28 -0500 | [diff] [blame] | 105 | |
Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 106 | echo "# Processing cluster - getting K8S IP: $name" |
| 107 | child_ip=$(grep server "$kubeconfig_path" | cut -d':' -f3 | cut -d'/' -f3) |
| 108 | echo " -> Cluster ${name} Server IP is: ${child_ip}" |
Alex | a0053b9 | 2022-10-14 16:38:28 -0500 | [diff] [blame] | 109 | |
Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 110 | checker_env="$CHECKERS_DIR/${name}-checker.env" |
| 111 | cp $CHECKERS_DIR/child-checker.env ${checker_env} |
| 112 | echo " -> Generating checker.env for $name" |
| 113 | sed -i "s/ip_address/${child_ip}/g" "$checker_env" |
Ievgeniia Zadorozhna | 68ba4f3 | 2024-01-27 02:51:59 +0100 | [diff] [blame] | 114 | |
Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 115 | default_sc=$(kubectl --kubeconfig "$kubeconfig_path" get sc 2>/dev/null | grep 'default' || true) |
| 116 | |
| 117 | if [[ -n "$default_sc" ]]; then |
| 118 | vSC=$(echo "$default_sc" | awk '{print $1}') |
| 119 | echo " -> Default storage class: $vSC" |
Ievgeniia Zadorozhna | 7bc5405 | 2024-02-20 00:15:35 +0100 | [diff] [blame] | 120 | else |
Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 121 | vSC="" |
| 122 | echo " -> No default storage class found." |
Ievgeniia Zadorozhna | 7bc5405 | 2024-02-20 00:15:35 +0100 | [diff] [blame] | 123 | fi |
Alex | 3594573 | 2023-04-07 10:03:59 -0500 | [diff] [blame] | 124 | |
Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 125 | rc_file="$ENV_DIR/${name}rc" |
| 126 | |
| 127 | if [[ -f "$rc_file" ]]; then |
| 128 | echo " -> Updating RC file: $rc_file" |
| 129 | echo "export CHILD_SC=${vSC}" >> "$rc_file" |
| 130 | else |
| 131 | echo "# RC file not found for $name — skipping." |
| 132 | fi |
| 133 | |
| 134 | done |
Alex | e67127e | 2022-10-03 14:42:30 -0500 | [diff] [blame] | 135 | |
Alex | a0053b9 | 2022-10-14 16:38:28 -0500 | [diff] [blame] | 136 | # Aliases |
| 137 | ewriteln 'alias k=kubectl' |
| 138 | |
Alex | e67127e | 2022-10-03 14:42:30 -0500 | [diff] [blame] | 139 | # end |
| 140 | echo " " |
Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 141 | echo "# ✅ Done!" |