blob: f1f31c3c023b042b72ea1d5a1e7cb17ba1f1268b [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}
Ievgeniia Zadorozhna3b0a5e22025-11-28 17:37:39 +010078source envs/target-child
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +020079EOF
80
81 chmod +x "$rc_file"
82done
83
84printf "\n\n# Writing additional options\n"
Alexe67127e2022-10-03 14:42:30 -050085ewriteln "export SI_BINARIES_DIR=$(which helm | rev | cut -d'/' -f2- | rev)"
86ewriteln "export HELM_BINARY_PATH=$(which helm)"
Ievgeniia Zadorozhna86ab37a2025-09-11 12:58:49 +020087ewriteln "export SONOBUOY_IMAGE_VERSION=v0.57"
88ewriteln "export SONOBUOY_LOGS_IMAGE_VERSION=v0.4"
Alexe67127e2022-10-03 14:42:30 -050089
Alexe67127e2022-10-03 14:42:30 -050090
91# generate additional files
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +020092printf "\n\n# Preparing additional files\n"
Alexe67127e2022-10-03 14:42:30 -050093# copy files
94cp -v /opt/res-files/k8s/workspace/* $MY_PROJFOLDER/envs/
Alexa0053b92022-10-14 16:38:28 -050095[ ! -d $MY_PROJFOLDER/scripts ] && mkdir $MY_PROJFOLDER/scripts
96mv -v $MY_PROJFOLDER/envs/*.sh $MY_PROJFOLDER/scripts/
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +020097mv -v $MY_PROJFOLDER/envs/*.env $MY_PROJFOLDER/envs/checkers
Alex2c8b8802022-10-20 14:07:15 -050098
99cp -v /opt/res-files/k8s/yamls/qa-rally.yaml $MY_PROJFOLDER/yamls
100cp -v /opt/res-files/k8s/yamls/qa-res.yaml $MY_PROJFOLDER/yamls
Alex2c8b8802022-10-20 14:07:15 -0500101cp -v /opt/res-files/k8s/yamls/qa-toolset.yaml $MY_PROJFOLDER/yamls
102
Alexa0053b92022-10-14 16:38:28 -0500103# remove duplicate init
104rm -v $MY_PROJFOLDER/scripts/init-workspace.sh
Alexf7f0a152022-10-10 16:17:32 -0500105# update IP Addresses
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200106mgmt_ip=$(cat $MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml | grep server | cut -d':' -f3 | cut -d'/' -f3)
107echo " -> MGMT (Mothership) Server IP is: ${mgmt_ip}"
108sed -i "s/ip_address/$mgmt_ip/g" $MY_PROJFOLDER/envs/checkers/mgmt-checker.env
Alexf7f0a152022-10-10 16:17:32 -0500109
Alexa0053b92022-10-14 16:38:28 -0500110
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200111printf "\n\n# Preparing checker.env files for each child cluster, getting default SC...\n"
112ENV_DIR="$MY_PROJFOLDER/envs"
113CHECKERS_DIR="$MY_PROJFOLDER/envs/checkers"
114for kubeconfig_path in "$ENV_DIR"/kubeconfigs/*-kubeconfig.yaml; do
115 [[ -e "$kubeconfig_path" ]] || continue
116 name=$(basename "$kubeconfig_path" -kubeconfig.yaml)
Alexa0053b92022-10-14 16:38:28 -0500117
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200118 echo "# Processing cluster - getting K8S IP: $name"
119 child_ip=$(grep server "$kubeconfig_path" | cut -d':' -f3 | cut -d'/' -f3)
120 echo " -> Cluster ${name} Server IP is: ${child_ip}"
Alexa0053b92022-10-14 16:38:28 -0500121
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200122 checker_env="$CHECKERS_DIR/${name}-checker.env"
123 cp $CHECKERS_DIR/child-checker.env ${checker_env}
124 echo " -> Generating checker.env for $name"
125 sed -i "s/ip_address/${child_ip}/g" "$checker_env"
Ievgeniia Zadorozhna68ba4f32024-01-27 02:51:59 +0100126
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200127 default_sc=$(kubectl --kubeconfig "$kubeconfig_path" get sc 2>/dev/null | grep 'default' || true)
128
129 if [[ -n "$default_sc" ]]; then
130 vSC=$(echo "$default_sc" | awk '{print $1}')
131 echo " -> Default storage class: $vSC"
Ievgeniia Zadorozhna7bc54052024-02-20 00:15:35 +0100132 else
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200133 vSC=""
134 echo " -> No default storage class found."
Ievgeniia Zadorozhna7bc54052024-02-20 00:15:35 +0100135 fi
Alex35945732023-04-07 10:03:59 -0500136
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200137 rc_file="$ENV_DIR/${name}rc"
138
139 if [[ -f "$rc_file" ]]; then
140 echo " -> Updating RC file: $rc_file"
141 echo "export CHILD_SC=${vSC}" >> "$rc_file"
142 else
143 echo "# RC file not found for $name — skipping."
144 fi
145
146done
Alexe67127e2022-10-03 14:42:30 -0500147
Alexa0053b92022-10-14 16:38:28 -0500148# Aliases
149ewriteln 'alias k=kubectl'
150
Alexe67127e2022-10-03 14:42:30 -0500151# end
152echo " "
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200153echo "# ✅ Done!"