blob: f8ec98aa480fc599ce71e4fe560933d0571269c8 [file] [log] [blame]
Ievgeniia Zadorozhna68ba4f32024-01-27 02:51:59 +01001#!/bin/bash
Alexe67127e2022-10-03 14:42:30 -05002### initial folders
3function ewriteln() {
4 echo ${1} | tee -a $MY_PROJFOLDER/env.sh
5}
6
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +02007exec 2> >(while read line; do echo -e "\033[0;31m$line\033[0m" >&2; done)
Alexe67127e2022-10-03 14:42:30 -05008export MY_PROJFOLDER=/artifacts
9echo "# Using folder '$MY_PROJFOLDER'"
10cd $MY_PROJFOLDER
Alex2c8b8802022-10-20 14:07:15 -050011[ ! -d envs ] && mkdir envs
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +020012[ ! -d envs/checkers ] && mkdir envs/checkers
13[ ! -d envs/kubeconfigs ] && mkdir envs/kubeconfigs
Alex2c8b8802022-10-20 14:07:15 -050014[ ! -d yamls ] && mkdir yamls
15[ ! -d reports ] && mkdir reports
16[ ! -d tmp ] && mkdir tmp
Alexe67127e2022-10-03 14:42:30 -050017
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +020018# move mgmt (k0rdent mothership) k8s konfig to default place
19if [ -f $MY_PROJFOLDER/mgmt-kubeconfig.yaml ]; then
20 mv $MY_PROJFOLDER/mgmt-kubeconfig.yaml $MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml
Alexe67127e2022-10-03 14:42:30 -050021fi
Alex2c8b8802022-10-20 14:07:15 -050022if [ -f $MY_PROJFOLDER/node.key ]; then
23 mv $MY_PROJFOLDER/node.key $MY_PROJFOLDER/envs/node.key
24fi
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +020025if [ ! -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'"
Alex2c8b8802022-10-20 14:07:15 -050027 exit 1
Alexe67127e2022-10-03 14:42:30 -050028fi
29echo " "
30
31### prepare needed variables
32echo "# Updating '$MY_PROJFOLDER/env.sh'"
Alexf7f0a152022-10-10 16:17:32 -050033
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +020034export KUBECONFIG=$MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml
Alexe67127e2022-10-03 14:42:30 -050035if [ ! -f $MY_PROJFOLDER/env.sh ]; then
36 touch $MY_PROJFOLDER/env.sh
37else
38 truncate -s 0 $MY_PROJFOLDER/env.sh
39 echo "$MY_PROJFOLDER/env.sh has been truncated"
40fi
Ievgeniia Zadorozhna3d761862024-10-01 19:28:04 +020041
42### Edit the following lines to set the client name, floating network name, IAM writer password
Alexf7f0a152022-10-10 16:17:32 -050043ewriteln "export MY_CLIENTNAME='ClientName'"
44ewriteln "export MY_CLIENTSHORTNAME='clname'"
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +020045ewriteln "export MY_PROJNAME='K0RDENT_DEPLOY'"
Ievgeniia Zadorozhna3d761862024-10-01 19:28:04 +020046
47### Setting the project directory
Alexe67127e2022-10-03 14:42:30 -050048ewriteln "export MY_PROJFOLDER=/artifacts"
Alexf7f0a152022-10-10 16:17:32 -050049
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +020050printf "\n\n# Getting ready ClusterDeployments"
51printf "\n# For each ready cld, getting namespace and cluster"
52kubectl 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"
Alexa0053b92022-10-14 16:38:28 -050056
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +020057 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
65export KUBECONFIG=$MY_PROJFOLDER/envs/kubeconfigs/${name}-kubeconfig.yaml
66export CHILD_CLUSTER_NAME=${name}
67export CHILD_CLUSTER_NS=${namespace}
68EOF
69
70 chmod +x "$rc_file"
71done
72
73printf "\n\n# Writing additional options\n"
Alexe67127e2022-10-03 14:42:30 -050074ewriteln "export SI_BINARIES_DIR=$(which helm | rev | cut -d'/' -f2- | rev)"
75ewriteln "export HELM_BINARY_PATH=$(which helm)"
Alexe67127e2022-10-03 14:42:30 -050076
Alexe67127e2022-10-03 14:42:30 -050077
78# generate additional files
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +020079printf "\n\n# Preparing additional files\n"
Alexe67127e2022-10-03 14:42:30 -050080# copy files
81cp -v /opt/res-files/k8s/workspace/* $MY_PROJFOLDER/envs/
Alexa0053b92022-10-14 16:38:28 -050082[ ! -d $MY_PROJFOLDER/scripts ] && mkdir $MY_PROJFOLDER/scripts
83mv -v $MY_PROJFOLDER/envs/*.sh $MY_PROJFOLDER/scripts/
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +020084mv -v $MY_PROJFOLDER/envs/*.env $MY_PROJFOLDER/envs/checkers
Alex2c8b8802022-10-20 14:07:15 -050085
86cp -v /opt/res-files/k8s/yamls/qa-rally.yaml $MY_PROJFOLDER/yamls
87cp -v /opt/res-files/k8s/yamls/qa-res.yaml $MY_PROJFOLDER/yamls
88cp -v /opt/res-files/k8s/yamls/qa-toolset-bare.yaml $MY_PROJFOLDER/yamls
89cp -v /opt/res-files/k8s/yamls/qa-toolset.yaml $MY_PROJFOLDER/yamls
90
Alexa0053b92022-10-14 16:38:28 -050091# remove duplicate init
92rm -v $MY_PROJFOLDER/scripts/init-workspace.sh
Alexf7f0a152022-10-10 16:17:32 -050093# update IP Addresses
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +020094mgmt_ip=$(cat $MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml | grep server | cut -d':' -f3 | cut -d'/' -f3)
95echo " -> MGMT (Mothership) Server IP is: ${mgmt_ip}"
96sed -i "s/ip_address/$mgmt_ip/g" $MY_PROJFOLDER/envs/checkers/mgmt-checker.env
Alexf7f0a152022-10-10 16:17:32 -050097
Alexa0053b92022-10-14 16:38:28 -050098
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +020099printf "\n\n# Preparing checker.env files for each child cluster, getting default SC...\n"
100ENV_DIR="$MY_PROJFOLDER/envs"
101CHECKERS_DIR="$MY_PROJFOLDER/envs/checkers"
102for kubeconfig_path in "$ENV_DIR"/kubeconfigs/*-kubeconfig.yaml; do
103 [[ -e "$kubeconfig_path" ]] || continue
104 name=$(basename "$kubeconfig_path" -kubeconfig.yaml)
Alexa0053b92022-10-14 16:38:28 -0500105
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200106 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}"
Alexa0053b92022-10-14 16:38:28 -0500109
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200110 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 Zadorozhna68ba4f32024-01-27 02:51:59 +0100114
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200115 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 Zadorozhna7bc54052024-02-20 00:15:35 +0100120 else
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200121 vSC=""
122 echo " -> No default storage class found."
Ievgeniia Zadorozhna7bc54052024-02-20 00:15:35 +0100123 fi
Alex35945732023-04-07 10:03:59 -0500124
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200125 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
134done
Alexe67127e2022-10-03 14:42:30 -0500135
Alexa0053b92022-10-14 16:38:28 -0500136# Aliases
137ewriteln 'alias k=kubectl'
138
Alexe67127e2022-10-03 14:42:30 -0500139# end
140echo " "
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200141echo "# ✅ Done!"