blob: eab4a1d9fde2356a0e15ebd83ce05cfed1355f9c [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
Ievgeniia Zadorozhna90a80702025-09-17 22:21:50 +020043ewriteln "export MY_CLIENTNAME='${MY_CLIENTNAME:-ClientName}'"
44ewriteln "export MY_CLIENTSHORTNAME='${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)"
Ievgeniia Zadorozhna86ab37a2025-09-11 12:58:49 +020076ewriteln "export SONOBUOY_IMAGE_VERSION=v0.57"
77ewriteln "export SONOBUOY_LOGS_IMAGE_VERSION=v0.4"
Alexe67127e2022-10-03 14:42:30 -050078
Alexe67127e2022-10-03 14:42:30 -050079
80# generate additional files
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +020081printf "\n\n# Preparing additional files\n"
Alexe67127e2022-10-03 14:42:30 -050082# copy files
83cp -v /opt/res-files/k8s/workspace/* $MY_PROJFOLDER/envs/
Alexa0053b92022-10-14 16:38:28 -050084[ ! -d $MY_PROJFOLDER/scripts ] && mkdir $MY_PROJFOLDER/scripts
85mv -v $MY_PROJFOLDER/envs/*.sh $MY_PROJFOLDER/scripts/
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +020086mv -v $MY_PROJFOLDER/envs/*.env $MY_PROJFOLDER/envs/checkers
Alex2c8b8802022-10-20 14:07:15 -050087
88cp -v /opt/res-files/k8s/yamls/qa-rally.yaml $MY_PROJFOLDER/yamls
89cp -v /opt/res-files/k8s/yamls/qa-res.yaml $MY_PROJFOLDER/yamls
Alex2c8b8802022-10-20 14:07:15 -050090cp -v /opt/res-files/k8s/yamls/qa-toolset.yaml $MY_PROJFOLDER/yamls
91
Alexa0053b92022-10-14 16:38:28 -050092# remove duplicate init
93rm -v $MY_PROJFOLDER/scripts/init-workspace.sh
Alexf7f0a152022-10-10 16:17:32 -050094# update IP Addresses
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +020095mgmt_ip=$(cat $MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml | grep server | cut -d':' -f3 | cut -d'/' -f3)
96echo " -> MGMT (Mothership) Server IP is: ${mgmt_ip}"
97sed -i "s/ip_address/$mgmt_ip/g" $MY_PROJFOLDER/envs/checkers/mgmt-checker.env
Alexf7f0a152022-10-10 16:17:32 -050098
Alexa0053b92022-10-14 16:38:28 -050099
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200100printf "\n\n# Preparing checker.env files for each child cluster, getting default SC...\n"
101ENV_DIR="$MY_PROJFOLDER/envs"
102CHECKERS_DIR="$MY_PROJFOLDER/envs/checkers"
103for kubeconfig_path in "$ENV_DIR"/kubeconfigs/*-kubeconfig.yaml; do
104 [[ -e "$kubeconfig_path" ]] || continue
105 name=$(basename "$kubeconfig_path" -kubeconfig.yaml)
Alexa0053b92022-10-14 16:38:28 -0500106
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200107 echo "# Processing cluster - getting K8S IP: $name"
108 child_ip=$(grep server "$kubeconfig_path" | cut -d':' -f3 | cut -d'/' -f3)
109 echo " -> Cluster ${name} Server IP is: ${child_ip}"
Alexa0053b92022-10-14 16:38:28 -0500110
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200111 checker_env="$CHECKERS_DIR/${name}-checker.env"
112 cp $CHECKERS_DIR/child-checker.env ${checker_env}
113 echo " -> Generating checker.env for $name"
114 sed -i "s/ip_address/${child_ip}/g" "$checker_env"
Ievgeniia Zadorozhna68ba4f32024-01-27 02:51:59 +0100115
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200116 default_sc=$(kubectl --kubeconfig "$kubeconfig_path" get sc 2>/dev/null | grep 'default' || true)
117
118 if [[ -n "$default_sc" ]]; then
119 vSC=$(echo "$default_sc" | awk '{print $1}')
120 echo " -> Default storage class: $vSC"
Ievgeniia Zadorozhna7bc54052024-02-20 00:15:35 +0100121 else
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200122 vSC=""
123 echo " -> No default storage class found."
Ievgeniia Zadorozhna7bc54052024-02-20 00:15:35 +0100124 fi
Alex35945732023-04-07 10:03:59 -0500125
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200126 rc_file="$ENV_DIR/${name}rc"
127
128 if [[ -f "$rc_file" ]]; then
129 echo " -> Updating RC file: $rc_file"
130 echo "export CHILD_SC=${vSC}" >> "$rc_file"
131 else
132 echo "# RC file not found for $name — skipping."
133 fi
134
135done
Alexe67127e2022-10-03 14:42:30 -0500136
Alexa0053b92022-10-14 16:38:28 -0500137# Aliases
138ewriteln 'alias k=kubectl'
139
Alexe67127e2022-10-03 14:42:30 -0500140# end
141echo " "
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200142echo "# ✅ Done!"