blob: ad476a8509aa7f73cd4b5806f3b804164eaa0566 [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
90cp -v /opt/res-files/k8s/yamls/qa-toolset-bare.yaml $MY_PROJFOLDER/yamls
91cp -v /opt/res-files/k8s/yamls/qa-toolset.yaml $MY_PROJFOLDER/yamls
92
Alexa0053b92022-10-14 16:38:28 -050093# remove duplicate init
94rm -v $MY_PROJFOLDER/scripts/init-workspace.sh
Alexf7f0a152022-10-10 16:17:32 -050095# update IP Addresses
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +020096mgmt_ip=$(cat $MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml | grep server | cut -d':' -f3 | cut -d'/' -f3)
97echo " -> MGMT (Mothership) Server IP is: ${mgmt_ip}"
98sed -i "s/ip_address/$mgmt_ip/g" $MY_PROJFOLDER/envs/checkers/mgmt-checker.env
Alexf7f0a152022-10-10 16:17:32 -050099
Alexa0053b92022-10-14 16:38:28 -0500100
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200101printf "\n\n# Preparing checker.env files for each child cluster, getting default SC...\n"
102ENV_DIR="$MY_PROJFOLDER/envs"
103CHECKERS_DIR="$MY_PROJFOLDER/envs/checkers"
104for kubeconfig_path in "$ENV_DIR"/kubeconfigs/*-kubeconfig.yaml; do
105 [[ -e "$kubeconfig_path" ]] || continue
106 name=$(basename "$kubeconfig_path" -kubeconfig.yaml)
Alexa0053b92022-10-14 16:38:28 -0500107
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200108 echo "# Processing cluster - getting K8S IP: $name"
109 child_ip=$(grep server "$kubeconfig_path" | cut -d':' -f3 | cut -d'/' -f3)
110 echo " -> Cluster ${name} Server IP is: ${child_ip}"
Alexa0053b92022-10-14 16:38:28 -0500111
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200112 checker_env="$CHECKERS_DIR/${name}-checker.env"
113 cp $CHECKERS_DIR/child-checker.env ${checker_env}
114 echo " -> Generating checker.env for $name"
115 sed -i "s/ip_address/${child_ip}/g" "$checker_env"
Ievgeniia Zadorozhna68ba4f32024-01-27 02:51:59 +0100116
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200117 default_sc=$(kubectl --kubeconfig "$kubeconfig_path" get sc 2>/dev/null | grep 'default' || true)
118
119 if [[ -n "$default_sc" ]]; then
120 vSC=$(echo "$default_sc" | awk '{print $1}')
121 echo " -> Default storage class: $vSC"
Ievgeniia Zadorozhna7bc54052024-02-20 00:15:35 +0100122 else
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200123 vSC=""
124 echo " -> No default storage class found."
Ievgeniia Zadorozhna7bc54052024-02-20 00:15:35 +0100125 fi
Alex35945732023-04-07 10:03:59 -0500126
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200127 rc_file="$ENV_DIR/${name}rc"
128
129 if [[ -f "$rc_file" ]]; then
130 echo " -> Updating RC file: $rc_file"
131 echo "export CHILD_SC=${vSC}" >> "$rc_file"
132 else
133 echo "# RC file not found for $name — skipping."
134 fi
135
136done
Alexe67127e2022-10-03 14:42:30 -0500137
Alexa0053b92022-10-14 16:38:28 -0500138# Aliases
139ewriteln 'alias k=kubectl'
140
Alexe67127e2022-10-03 14:42:30 -0500141# end
142echo " "
Ievgeniia Zadorozhnabed5b402025-09-04 13:36:16 +0200143echo "# ✅ Done!"