| Ievgeniia Zadorozhna | 68ba4f3 | 2024-01-27 02:51:59 +0100 | [diff] [blame] | 1 | #!/bin/bash |
| Alex | e67127e | 2022-10-03 14:42:30 -0500 | [diff] [blame] | 2 | ### initial folders |
| 3 | function ewriteln() { |
| 4 | echo ${1} | tee -a $MY_PROJFOLDER/env.sh |
| 5 | } |
| 6 | |
| Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 7 | exec 2> >(while read line; do echo -e "\033[0;31m$line\033[0m" >&2; done) |
| Alex | e67127e | 2022-10-03 14:42:30 -0500 | [diff] [blame] | 8 | export MY_PROJFOLDER=/artifacts |
| 9 | echo "# Using folder '$MY_PROJFOLDER'" |
| 10 | cd $MY_PROJFOLDER |
| Alex | 2c8b880 | 2022-10-20 14:07:15 -0500 | [diff] [blame] | 11 | [ ! -d envs ] && mkdir envs |
| 12 | [ ! -d yamls ] && mkdir yamls |
| 13 | [ ! -d reports ] && mkdir reports |
| 14 | [ ! -d tmp ] && mkdir tmp |
| Alex | e67127e | 2022-10-03 14:42:30 -0500 | [diff] [blame] | 15 | |
| Ievgeniia Zadorozhna | ecb41be | 2025-11-26 22:46:12 +0100 | [diff] [blame] | 16 | ## |
| 17 | # re-creating the envs/kubeconfigs in case of update and rerunning the init script |
| 18 | if [ -f "$MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml" ]; then |
| 19 | cp "$MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml" "$MY_PROJFOLDER/mgmt-kubeconfig.yaml" |
| 20 | fi |
| 21 | rm -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) |
| 23 | rm -rf envs/checkers && mkdir -p envs/checkers |
| 24 | # deleting all envs/*rc files to remove all obsolete data |
| 25 | rm -f envs/*rc |
| 26 | ## |
| 27 | |
| Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 28 | # move mgmt (k0rdent mothership) k8s konfig to default place |
| 29 | if [ -f $MY_PROJFOLDER/mgmt-kubeconfig.yaml ]; then |
| 30 | mv $MY_PROJFOLDER/mgmt-kubeconfig.yaml $MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml |
| Alex | e67127e | 2022-10-03 14:42:30 -0500 | [diff] [blame] | 31 | fi |
| Alex | 2c8b880 | 2022-10-20 14:07:15 -0500 | [diff] [blame] | 32 | if [ -f $MY_PROJFOLDER/node.key ]; then |
| 33 | mv $MY_PROJFOLDER/node.key $MY_PROJFOLDER/envs/node.key |
| 34 | fi |
| Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 35 | if [ ! -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'" |
| Alex | 2c8b880 | 2022-10-20 14:07:15 -0500 | [diff] [blame] | 37 | exit 1 |
| Alex | e67127e | 2022-10-03 14:42:30 -0500 | [diff] [blame] | 38 | fi |
| 39 | echo " " |
| 40 | |
| 41 | ### prepare needed variables |
| 42 | echo "# Updating '$MY_PROJFOLDER/env.sh'" |
| Alex | f7f0a15 | 2022-10-10 16:17:32 -0500 | [diff] [blame] | 43 | |
| Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 44 | export KUBECONFIG=$MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml |
| Alex | e67127e | 2022-10-03 14:42:30 -0500 | [diff] [blame] | 45 | if [ ! -f $MY_PROJFOLDER/env.sh ]; then |
| 46 | touch $MY_PROJFOLDER/env.sh |
| 47 | else |
| 48 | truncate -s 0 $MY_PROJFOLDER/env.sh |
| 49 | echo "$MY_PROJFOLDER/env.sh has been truncated" |
| 50 | fi |
| Ievgeniia Zadorozhna | 3d76186 | 2024-10-01 19:28:04 +0200 | [diff] [blame] | 51 | |
| 52 | ### Edit the following lines to set the client name, floating network name, IAM writer password |
| Ievgeniia Zadorozhna | 90a8070 | 2025-09-17 22:21:50 +0200 | [diff] [blame] | 53 | ewriteln "export MY_CLIENTNAME='${MY_CLIENTNAME:-ClientName}'" |
| 54 | ewriteln "export MY_CLIENTSHORTNAME='${MY_CLIENTSHORTNAME:-clname}'" |
| Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 55 | ewriteln "export MY_PROJNAME='K0RDENT_DEPLOY'" |
| Ievgeniia Zadorozhna | 3d76186 | 2024-10-01 19:28:04 +0200 | [diff] [blame] | 56 | |
| 57 | ### Setting the project directory |
| Alex | e67127e | 2022-10-03 14:42:30 -0500 | [diff] [blame] | 58 | ewriteln "export MY_PROJFOLDER=/artifacts" |
| Alex | f7f0a15 | 2022-10-10 16:17:32 -0500 | [diff] [blame] | 59 | |
| Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 60 | printf "\n\n# Getting ready ClusterDeployments" |
| Ievgeniia Zadorozhna | ecb41be | 2025-11-26 22:46:12 +0100 | [diff] [blame] | 61 | printf "\n# For each ready cld, getting namespace and cluster\n" |
| Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 62 | kubectl 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" |
| Alex | a0053b9 | 2022-10-14 16:38:28 -0500 | [diff] [blame] | 66 | |
| Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 67 | 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 |
| 75 | export KUBECONFIG=$MY_PROJFOLDER/envs/kubeconfigs/${name}-kubeconfig.yaml |
| 76 | export CHILD_CLUSTER_NAME=${name} |
| 77 | export CHILD_CLUSTER_NS=${namespace} |
| Ievgeniia Zadorozhna | 3b0a5e2 | 2025-11-28 17:37:39 +0100 | [diff] [blame^] | 78 | source envs/target-child |
| Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 79 | EOF |
| 80 | |
| 81 | chmod +x "$rc_file" |
| 82 | done |
| 83 | |
| 84 | printf "\n\n# Writing additional options\n" |
| Alex | e67127e | 2022-10-03 14:42:30 -0500 | [diff] [blame] | 85 | ewriteln "export SI_BINARIES_DIR=$(which helm | rev | cut -d'/' -f2- | rev)" |
| 86 | ewriteln "export HELM_BINARY_PATH=$(which helm)" |
| Ievgeniia Zadorozhna | 86ab37a | 2025-09-11 12:58:49 +0200 | [diff] [blame] | 87 | ewriteln "export SONOBUOY_IMAGE_VERSION=v0.57" |
| 88 | ewriteln "export SONOBUOY_LOGS_IMAGE_VERSION=v0.4" |
| Alex | e67127e | 2022-10-03 14:42:30 -0500 | [diff] [blame] | 89 | |
| Alex | e67127e | 2022-10-03 14:42:30 -0500 | [diff] [blame] | 90 | |
| 91 | # generate additional files |
| Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 92 | printf "\n\n# Preparing additional files\n" |
| Alex | e67127e | 2022-10-03 14:42:30 -0500 | [diff] [blame] | 93 | # copy files |
| 94 | cp -v /opt/res-files/k8s/workspace/* $MY_PROJFOLDER/envs/ |
| Alex | a0053b9 | 2022-10-14 16:38:28 -0500 | [diff] [blame] | 95 | [ ! -d $MY_PROJFOLDER/scripts ] && mkdir $MY_PROJFOLDER/scripts |
| 96 | mv -v $MY_PROJFOLDER/envs/*.sh $MY_PROJFOLDER/scripts/ |
| Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 97 | mv -v $MY_PROJFOLDER/envs/*.env $MY_PROJFOLDER/envs/checkers |
| Alex | 2c8b880 | 2022-10-20 14:07:15 -0500 | [diff] [blame] | 98 | |
| 99 | cp -v /opt/res-files/k8s/yamls/qa-rally.yaml $MY_PROJFOLDER/yamls |
| 100 | cp -v /opt/res-files/k8s/yamls/qa-res.yaml $MY_PROJFOLDER/yamls |
| Alex | 2c8b880 | 2022-10-20 14:07:15 -0500 | [diff] [blame] | 101 | cp -v /opt/res-files/k8s/yamls/qa-toolset.yaml $MY_PROJFOLDER/yamls |
| 102 | |
| Alex | a0053b9 | 2022-10-14 16:38:28 -0500 | [diff] [blame] | 103 | # remove duplicate init |
| 104 | rm -v $MY_PROJFOLDER/scripts/init-workspace.sh |
| Alex | f7f0a15 | 2022-10-10 16:17:32 -0500 | [diff] [blame] | 105 | # update IP Addresses |
| Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 106 | mgmt_ip=$(cat $MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml | grep server | cut -d':' -f3 | cut -d'/' -f3) |
| 107 | echo " -> MGMT (Mothership) Server IP is: ${mgmt_ip}" |
| 108 | sed -i "s/ip_address/$mgmt_ip/g" $MY_PROJFOLDER/envs/checkers/mgmt-checker.env |
| Alex | f7f0a15 | 2022-10-10 16:17:32 -0500 | [diff] [blame] | 109 | |
| Alex | a0053b9 | 2022-10-14 16:38:28 -0500 | [diff] [blame] | 110 | |
| Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 111 | printf "\n\n# Preparing checker.env files for each child cluster, getting default SC...\n" |
| 112 | ENV_DIR="$MY_PROJFOLDER/envs" |
| 113 | CHECKERS_DIR="$MY_PROJFOLDER/envs/checkers" |
| 114 | for kubeconfig_path in "$ENV_DIR"/kubeconfigs/*-kubeconfig.yaml; do |
| 115 | [[ -e "$kubeconfig_path" ]] || continue |
| 116 | name=$(basename "$kubeconfig_path" -kubeconfig.yaml) |
| Alex | a0053b9 | 2022-10-14 16:38:28 -0500 | [diff] [blame] | 117 | |
| Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 118 | 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}" |
| Alex | a0053b9 | 2022-10-14 16:38:28 -0500 | [diff] [blame] | 121 | |
| Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 122 | 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 Zadorozhna | 68ba4f3 | 2024-01-27 02:51:59 +0100 | [diff] [blame] | 126 | |
| Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 127 | 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 Zadorozhna | 7bc5405 | 2024-02-20 00:15:35 +0100 | [diff] [blame] | 132 | else |
| Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 133 | vSC="" |
| 134 | echo " -> No default storage class found." |
| Ievgeniia Zadorozhna | 7bc5405 | 2024-02-20 00:15:35 +0100 | [diff] [blame] | 135 | fi |
| Alex | 3594573 | 2023-04-07 10:03:59 -0500 | [diff] [blame] | 136 | |
| Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 137 | 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 | |
| 146 | done |
| Alex | e67127e | 2022-10-03 14:42:30 -0500 | [diff] [blame] | 147 | |
| Alex | a0053b9 | 2022-10-14 16:38:28 -0500 | [diff] [blame] | 148 | # Aliases |
| 149 | ewriteln 'alias k=kubectl' |
| 150 | |
| Alex | e67127e | 2022-10-03 14:42:30 -0500 | [diff] [blame] | 151 | # end |
| 152 | echo " " |
| Ievgeniia Zadorozhna | bed5b40 | 2025-09-04 13:36:16 +0200 | [diff] [blame] | 153 | echo "# ✅ Done!" |