blob: 861912880cbe4039917687eef00505cf4f211681 [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
12[ ! -d yamls ] && mkdir yamls
13[ ! -d reports ] && mkdir reports
14[ ! -d tmp ] && mkdir tmp
Alexe67127e2022-10-03 14:42:30 -050015
Ievgeniia Zadorozhnaecb41be2025-11-26 22:46:12 +010016##
17# re-creating the envs/kubeconfigs in case of update and rerunning the init script
18if [ -f "$MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml" ]; then
19 cp "$MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml" "$MY_PROJFOLDER/mgmt-kubeconfig.yaml"
20fi
21rm -rf envs/kubeconfigs && mkdir -p envs/kubeconfigs
22# re-creating to collect from scratch and do not keep obsolete configs (clds might have the same names)
23rm -rf envs/checkers && mkdir -p envs/checkers
24# deleting all envs/*rc files to remove all obsolete data
25rm -f envs/*rc
26##
27
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +020028# move mgmt (k0rdent mothership) k8s konfig to default place
29if [ -f $MY_PROJFOLDER/mgmt-kubeconfig.yaml ]; then
30 mv $MY_PROJFOLDER/mgmt-kubeconfig.yaml $MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml
Alexe67127e2022-10-03 14:42:30 -050031fi
Alex2c8b8802022-10-20 14:07:15 -050032if [ -f $MY_PROJFOLDER/node.key ]; then
33 mv $MY_PROJFOLDER/node.key $MY_PROJFOLDER/envs/node.key
34fi
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +020035if [ ! -f $MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml ]; then
36 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 -050037 exit 1
Alexe67127e2022-10-03 14:42:30 -050038fi
39echo " "
40
41### prepare needed variables
42echo "# Updating '$MY_PROJFOLDER/env.sh'"
Alexf7f0a152022-10-10 16:17:32 -050043
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +020044export KUBECONFIG=$MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml
Alexe67127e2022-10-03 14:42:30 -050045if [ ! -f $MY_PROJFOLDER/env.sh ]; then
46 touch $MY_PROJFOLDER/env.sh
47else
48 truncate -s 0 $MY_PROJFOLDER/env.sh
49 echo "$MY_PROJFOLDER/env.sh has been truncated"
50fi
Ievgeniia Zadorozhna3d761862024-10-01 19:28:04 +020051
52### Edit the following lines to set the client name, floating network name, IAM writer password
Ievgeniia Zadorozhna90a80702025-09-17 22:21:50 +020053ewriteln "export MY_CLIENTNAME='${MY_CLIENTNAME:-ClientName}'"
54ewriteln "export MY_CLIENTSHORTNAME='${MY_CLIENTSHORTNAME:-clname}'"
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +020055ewriteln "export MY_PROJNAME='K0RDENT_DEPLOY'"
Ievgeniia Zadorozhna3d761862024-10-01 19:28:04 +020056
57### Setting the project directory
Alexe67127e2022-10-03 14:42:30 -050058ewriteln "export MY_PROJFOLDER=/artifacts"
Alexf7f0a152022-10-10 16:17:32 -050059
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +020060printf "\n\n# Getting ready ClusterDeployments"
Ievgeniia Zadorozhnaecb41be2025-11-26 22:46:12 +010061printf "\n# For each ready cld, getting namespace and cluster\n"
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +020062kubectl get cld -A --no-headers | awk '$3 == "True" {print $1, $2}' | while read -r namespace name; do
63 echo " -> Processing $name in namespace $namespace..."
64 kubeconfig_secret="${name}-kubeconfig"
65 kubeconfig_file="$MY_PROJFOLDER/envs/kubeconfigs/${name}-kubeconfig.yaml"
Alexa0053b92022-10-14 16:38:28 -050066
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +020067 echo " -> Fetching kubeconfig to $kubeconfig_file"
68 kubectl -n "$namespace" get secret "$kubeconfig_secret" \
69 -o jsonpath='{.data.value}' | base64 -d > "$kubeconfig_file"
70
71 rc_file="$MY_PROJFOLDER/envs/${name}rc"
72 echo " -> Generating RC file at $rc_file"
73 cat <<EOF > "$rc_file"
74#!/bin/bash
75export KUBECONFIG=$MY_PROJFOLDER/envs/kubeconfigs/${name}-kubeconfig.yaml
76export CHILD_CLUSTER_NAME=${name}
77export CHILD_CLUSTER_NS=${namespace}
78EOF
79
80 chmod +x "$rc_file"
81done
82
83printf "\n\n# Writing additional options\n"
Alexe67127e2022-10-03 14:42:30 -050084ewriteln "export SI_BINARIES_DIR=$(which helm | rev | cut -d'/' -f2- | rev)"
85ewriteln "export HELM_BINARY_PATH=$(which helm)"
Ievgeniia Zadorozhna86ab37a2025-09-11 12:58:49 +020086ewriteln "export SONOBUOY_IMAGE_VERSION=v0.57"
87ewriteln "export SONOBUOY_LOGS_IMAGE_VERSION=v0.4"
Alexe67127e2022-10-03 14:42:30 -050088
Alexe67127e2022-10-03 14:42:30 -050089
90# generate additional files
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +020091printf "\n\n# Preparing additional files\n"
Alexe67127e2022-10-03 14:42:30 -050092# copy files
93cp -v /opt/res-files/k8s/workspace/* $MY_PROJFOLDER/envs/
Alexa0053b92022-10-14 16:38:28 -050094[ ! -d $MY_PROJFOLDER/scripts ] && mkdir $MY_PROJFOLDER/scripts
95mv -v $MY_PROJFOLDER/envs/*.sh $MY_PROJFOLDER/scripts/
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +020096mv -v $MY_PROJFOLDER/envs/*.env $MY_PROJFOLDER/envs/checkers
Alex2c8b8802022-10-20 14:07:15 -050097
98cp -v /opt/res-files/k8s/yamls/qa-rally.yaml $MY_PROJFOLDER/yamls
99cp -v /opt/res-files/k8s/yamls/qa-res.yaml $MY_PROJFOLDER/yamls
Alex2c8b8802022-10-20 14:07:15 -0500100cp -v /opt/res-files/k8s/yamls/qa-toolset.yaml $MY_PROJFOLDER/yamls
101
Alexa0053b92022-10-14 16:38:28 -0500102# remove duplicate init
103rm -v $MY_PROJFOLDER/scripts/init-workspace.sh
Alexf7f0a152022-10-10 16:17:32 -0500104# update IP Addresses
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200105mgmt_ip=$(cat $MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml | grep server | cut -d':' -f3 | cut -d'/' -f3)
106echo " -> MGMT (Mothership) Server IP is: ${mgmt_ip}"
107sed -i "s/ip_address/$mgmt_ip/g" $MY_PROJFOLDER/envs/checkers/mgmt-checker.env
Alexf7f0a152022-10-10 16:17:32 -0500108
Alexa0053b92022-10-14 16:38:28 -0500109
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200110printf "\n\n# Preparing checker.env files for each child cluster, getting default SC...\n"
111ENV_DIR="$MY_PROJFOLDER/envs"
112CHECKERS_DIR="$MY_PROJFOLDER/envs/checkers"
113for kubeconfig_path in "$ENV_DIR"/kubeconfigs/*-kubeconfig.yaml; do
114 [[ -e "$kubeconfig_path" ]] || continue
115 name=$(basename "$kubeconfig_path" -kubeconfig.yaml)
Alexa0053b92022-10-14 16:38:28 -0500116
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200117 echo "# Processing cluster - getting K8S IP: $name"
118 child_ip=$(grep server "$kubeconfig_path" | cut -d':' -f3 | cut -d'/' -f3)
119 echo " -> Cluster ${name} Server IP is: ${child_ip}"
Alexa0053b92022-10-14 16:38:28 -0500120
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200121 checker_env="$CHECKERS_DIR/${name}-checker.env"
122 cp $CHECKERS_DIR/child-checker.env ${checker_env}
123 echo " -> Generating checker.env for $name"
124 sed -i "s/ip_address/${child_ip}/g" "$checker_env"
Ievgeniia Zadorozhna68ba4f32024-01-27 02:51:59 +0100125
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200126 default_sc=$(kubectl --kubeconfig "$kubeconfig_path" get sc 2>/dev/null | grep 'default' || true)
127
128 if [[ -n "$default_sc" ]]; then
129 vSC=$(echo "$default_sc" | awk '{print $1}')
130 echo " -> Default storage class: $vSC"
Ievgeniia Zadorozhna7bc54052024-02-20 00:15:35 +0100131 else
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200132 vSC=""
133 echo " -> No default storage class found."
Ievgeniia Zadorozhna7bc54052024-02-20 00:15:35 +0100134 fi
Alex35945732023-04-07 10:03:59 -0500135
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200136 rc_file="$ENV_DIR/${name}rc"
137
138 if [[ -f "$rc_file" ]]; then
139 echo " -> Updating RC file: $rc_file"
140 echo "export CHILD_SC=${vSC}" >> "$rc_file"
141 else
142 echo "# RC file not found for $name — skipping."
143 fi
144
145done
Alexe67127e2022-10-03 14:42:30 -0500146
Alexa0053b92022-10-14 16:38:28 -0500147# Aliases
148ewriteln 'alias k=kubectl'
149
Alexe67127e2022-10-03 14:42:30 -0500150# end
151echo " "
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200152echo "# ✅ Done!"