blob: 2f3be5552c43bc2b8d93432e61e2e9ae69f4cb35 [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}
Alexa0053b92022-10-14 16:38:28 -05006function qkeystone() {
7 keystone_pod=$(kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml get pod -n openstack -o=custom-columns=NAME:.metadata.name | grep keystone-client)
8 # echo "# Running 'kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml -n openstack exec {} -c keystone-client --stdin -- "${1}"'"
9 kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml -n openstack exec ${keystone_pod} -c keystone-client --stdin -- '${1}'
10}
Ievgeniia Zadorozhna68ba4f32024-01-27 02:51:59 +010011function get_conformance_image_tag() {
12 kubeconfig_path=$1
13 k8s_server_version=$(kubectl --kubeconfig="$kubeconfig_path" version -o json 2>/dev/null | jq -r '.serverVersion.gitVersion')
14 k8s_short_version=${k8s_server_version:1:4}
15 image_tag=""
16 case $k8s_short_version in
17 "1.18")
18 image_tag="1.18.9-16"
19 ;;
20 "1.19")
21 image_tag="1.19.2-1"
22 ;;
23 "1.20")
24 image_tag="1.20.6-4"
25 ;;
26 "1.21")
27 image_tag="1.21.9-4"
28 ;;
29 "1.24")
30 image_tag="1.24.4-2"
31 ;;
32 "1.27")
Ievgeniia Zadorozhnac60448c2024-12-23 19:33:20 +010033 image_tag="1.27.16-4"
Ievgeniia Zadorozhna68ba4f32024-01-27 02:51:59 +010034 ;;
Ievgeniia Zadorozhnab9b2afa2025-12-02 18:32:29 +010035 "1.30")
36 image_tag="1.30.13-1"
37 ;;
Ievgeniia Zadorozhna68ba4f32024-01-27 02:51:59 +010038 esac
39 echo "$image_tag"
40}
Alexe67127e2022-10-03 14:42:30 -050041
42export MY_PROJFOLDER=/artifacts
43echo "# Using folder '$MY_PROJFOLDER'"
44cd $MY_PROJFOLDER
Alex2c8b8802022-10-20 14:07:15 -050045[ ! -d envs ] && mkdir envs
46[ ! -d yamls ] && mkdir yamls
47[ ! -d reports ] && mkdir reports
48[ ! -d tmp ] && mkdir tmp
Alexe67127e2022-10-03 14:42:30 -050049
50# move mcc konfig to default place
51if [ -f $MY_PROJFOLDER/mcc-kubeconfig.yaml ]; then
52 mv $MY_PROJFOLDER/mcc-kubeconfig.yaml $MY_PROJFOLDER/envs/mcc-kubeconfig.yaml
53fi
Alex2c8b8802022-10-20 14:07:15 -050054if [ -f $MY_PROJFOLDER/node.key ]; then
55 mv $MY_PROJFOLDER/node.key $MY_PROJFOLDER/envs/node.key
56fi
Alexe67127e2022-10-03 14:42:30 -050057if [ ! -f $MY_PROJFOLDER/envs/mcc-kubeconfig.yaml ]; then
58 echo "ERROR: MCC kubeconfig not found either at '$MY_PROJFOLDER/mcc-kubeconfig.yaml' or '$MY_PROJFOLDER/envs/mcc-kubeconfig.yaml'"
Alex2c8b8802022-10-20 14:07:15 -050059 exit 1
Alexe67127e2022-10-03 14:42:30 -050060fi
61echo " "
62
63### prepare needed variables
64echo "# Updating '$MY_PROJFOLDER/env.sh'"
Alexf7f0a152022-10-10 16:17:32 -050065
Alexe67127e2022-10-03 14:42:30 -050066export KUBECONFIG=$MY_PROJFOLDER/envs/mcc-kubeconfig.yaml
67if [ ! -f $MY_PROJFOLDER/env.sh ]; then
68 touch $MY_PROJFOLDER/env.sh
69else
70 truncate -s 0 $MY_PROJFOLDER/env.sh
71 echo "$MY_PROJFOLDER/env.sh has been truncated"
72fi
Ievgeniia Zadorozhna3d761862024-10-01 19:28:04 +020073
74### Edit the following lines to set the client name, floating network name, IAM writer password
Alexf7f0a152022-10-10 16:17:32 -050075ewriteln "export MY_CLIENTNAME='ClientName'"
76ewriteln "export MY_CLIENTSHORTNAME='clname'"
77ewriteln "export MY_PROJNAME='MOS_DEPLOY'"
Ievgeniia Zadorozhna7bc54052024-02-20 00:15:35 +010078CUSTOM_PUBLIC_NET_NAME=""
Ievgeniia Zadorozhna3d761862024-10-01 19:28:04 +020079ewriteln "export WRITER_PASSWORD=''" # IAM (Keycloak) writer password
80
81### Setting the project directory
Alexe67127e2022-10-03 14:42:30 -050082ewriteln "export MY_PROJFOLDER=/artifacts"
Alexf7f0a152022-10-10 16:17:32 -050083
Alexe67127e2022-10-03 14:42:30 -050084# NS & CLUSTER
Alexa0053b92022-10-14 16:38:28 -050085printf "\n\n# Getting namespace and cluster"
86nn=( $(kubectl get cluster -A --no-headers -o=custom-columns=NAME:.metadata.name,NAMESPACE:.metadata.namespace | grep -v default) )
87echo "# Extracted data: '${nn[@]}'"
Alexd1ac2262023-03-31 13:53:33 -050088vNS="${nn[1]}"
89vCLUSTER="${nn[0]}"
Alexa0053b92022-10-14 16:38:28 -050090ewriteln "export MOS_NS=${vNS}"
91ewriteln "export MOS_CLUSTER=${vCLUSTER}"
92echo "# Extracted NS: '${vNS}'"
93echo "# Extracted CLUSTER: '${vCLUSTER}'"
94
95printf "\n\n# Writing additional options"
Alexe67127e2022-10-03 14:42:30 -050096ewriteln "export SI_BINARIES_DIR=$(which helm | rev | cut -d'/' -f2- | rev)"
97ewriteln "export HELM_BINARY_PATH=$(which helm)"
Alex876e93a2022-12-21 12:02:13 -060098ewriteln "export K8S_CONFORMANCE_CONCURRENCY=10"
Alexe67127e2022-10-03 14:42:30 -050099
Ievgeniia Zadorozhna68ba4f32024-01-27 02:51:59 +0100100printf "\n\n# Writing additional options for K8S conformance tests for MCC cluster...\n"
101mcc_kubeconfig_path="$MY_PROJFOLDER/envs/mcc-kubeconfig.yaml"
102mcc_conformance_image_tag=$(get_conformance_image_tag "$mcc_kubeconfig_path")
103if [ -z "$mcc_conformance_image_tag" ]; then
104 echo "Could not identify K8S_CONFORMANCE_IMAGE_VERSION for MCC."
105fi
106mcc_conformance_image_url="mirantis.azurecr.io/lcm/kubernetes/k8s-conformance:v${mcc_conformance_image_tag}"
107ewriteln "export MCC_K8S_CONFORMANCE_IMAGE_VERSION='${mcc_conformance_image_tag}'"
108ewriteln "export MCC_K8S_CONFORMANCE_IMAGE_URL='${mcc_conformance_image_url}'"
109
Ievgeniia Zadorozhna3d761862024-10-01 19:28:04 +0200110# getting IAM Keycloak URL
111ewriteln "export KEYCLOAK_URL=$(kubectl get cluster kaas-mgmt -o jsonpath='{.status.providerStatus.helm.releases.iam.keycloak.url}')"
112
Alexe67127e2022-10-03 14:42:30 -0500113# extract MOS kubeconfig
114echo " "
Alexa0053b92022-10-14 16:38:28 -0500115printf "\n\nExtracting mos-kubeconfig.yaml"
116if [[ ! -z ${vCLUSTER+x} ]]; then
117 kubectl --kubeconfig $MY_PROJFOLDER/envs/mcc-kubeconfig.yaml -n ${vNS} get secrets ${vCLUSTER}-kubeconfig -o jsonpath='{.data.admin\.conf}' | base64 -d | sed 's/:5443/:443/g' | tee $MY_PROJFOLDER/envs/mos-kubeconfig.yaml
Alexe67127e2022-10-03 14:42:30 -0500118else
Alexa0053b92022-10-14 16:38:28 -0500119 echo "MOS_CLUSTER variable empty/invalid: '${vCLUSTER}'"
Alexe67127e2022-10-03 14:42:30 -0500120fi
121
122# generate additional files
Alexa0053b92022-10-14 16:38:28 -0500123printf "\n\nPreparing additional files"
Alexe67127e2022-10-03 14:42:30 -0500124# copy files
125cp -v /opt/res-files/k8s/workspace/* $MY_PROJFOLDER/envs/
Alexa0053b92022-10-14 16:38:28 -0500126[ ! -d $MY_PROJFOLDER/scripts ] && mkdir $MY_PROJFOLDER/scripts
127mv -v $MY_PROJFOLDER/envs/*.sh $MY_PROJFOLDER/scripts/
Alex2c8b8802022-10-20 14:07:15 -0500128
129cp -v /opt/res-files/k8s/yamls/qa-rally.yaml $MY_PROJFOLDER/yamls
130cp -v /opt/res-files/k8s/yamls/qa-res.yaml $MY_PROJFOLDER/yamls
131cp -v /opt/res-files/k8s/yamls/qa-toolset-bare.yaml $MY_PROJFOLDER/yamls
132cp -v /opt/res-files/k8s/yamls/qa-toolset.yaml $MY_PROJFOLDER/yamls
133
Alexa0053b92022-10-14 16:38:28 -0500134# remove duplicate init
135rm -v $MY_PROJFOLDER/scripts/init-workspace.sh
Alexf7f0a152022-10-10 16:17:32 -0500136# update IP Addresses
137mccip=$(cat $MY_PROJFOLDER/envs/mcc-kubeconfig.yaml | grep server | cut -d':' -f3 | cut -d'/' -f3)
138echo "-> MCC Server IP is: ${mccip}"
139sed -i "s/ip_address/$mccip/g" $MY_PROJFOLDER/envs/mcc-checker.env
140
141if [ -f $MY_PROJFOLDER/envs/mos-kubeconfig.yaml ]; then
142 mosip=$(cat $MY_PROJFOLDER/envs/mos-kubeconfig.yaml | grep server | cut -d':' -f3 | cut -d'/' -f3)
143 echo "-> MOS Server IP is: ${mosip}"
144 sed -i "s/ip_address/$mosip/g" $MY_PROJFOLDER/envs/mos-checker.env
Alexa0053b92022-10-14 16:38:28 -0500145
146 vSC="$(kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml get sc | grep default | cut -d' ' -f1)"
147 echo "-> Storage class is ${vSC}"
148 echo "# Updating resources yaml "
149 sed -i "s/storage_class/${vSC}/g" $MY_PROJFOLDER/yamls/qa-res.yaml
150 echo " "
151 ewriteln "export MOS_SC=${vSC}"
152
153 ewriteln "export OSH_DEPLOYMENT_NAME=$(kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml -n openstack get openstackdeployment --no-headers | cut -d' ' -f1)"
154 ewriteln "export SI_BINARIES_DIR=$(which helm | rev | cut -d'/' -f2- | rev)"
155 ewriteln "export HELM_BINARY_PATH=$(which helm)"
156
Ievgeniia Zadorozhna68ba4f32024-01-27 02:51:59 +0100157 printf "\n\n# Writing additional options for K8S conformance tests for MOS cluster...\n"
158 mos_kubeconfig_path="$MY_PROJFOLDER/envs/mos-kubeconfig.yaml"
159 mos_conformance_image_tag=$(get_conformance_image_tag "$mos_kubeconfig_path")
160 if [ -z "$mos_conformance_image_tag" ]; then
161 echo "Could not identify K8S_CONFORMANCE_IMAGE_VERSION for MOS."
162 fi
163 mos_conformance_image_url="mirantis.azurecr.io/lcm/kubernetes/k8s-conformance:v${mos_conformance_image_tag}"
164 ewriteln "export MOS_K8S_CONFORMANCE_IMAGE_VERSION='${mos_conformance_image_tag}'"
165 ewriteln "export MOS_K8S_CONFORMANCE_IMAGE_URL='${mos_conformance_image_url}'"
166
Alexa0053b92022-10-14 16:38:28 -0500167 echo " "
Alexa0053b92022-10-14 16:38:28 -0500168 keystone_pod=$(kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml get pod -n openstack -o=custom-columns=NAME:.metadata.name | grep keystone-client)
Ievgeniia Zadorozhna7bc54052024-02-20 00:15:35 +0100169 if [ -n "${CUSTOM_PUBLIC_NET_NAME:-}" ]; then
170 # if CUSTOM_PUBLIC_NET_NAME is set to some specific net, check it is present on the cloud
171 echo "# Checking that the external network ${CUSTOM_PUBLIC_NET_NAME} is present on the cloud"
172 cmd="openstack network show ${CUSTOM_PUBLIC_NET_NAME} -c id -f value 2>/dev/null"
173 echo "# Running 'kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml -n openstack exec ${keystone_pod} -c keystone-client --stdin -- sh -c '${cmd}'"
174 network_exists=$(kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml -n openstack exec "${keystone_pod}" -c keystone-client --stdin -- sh -c "${cmd}")
175 if [ -n "$network_exists" ]; then
176 echo "# Setting TEMPEST_CUSTOM_PUBLIC_NET to ${CUSTOM_PUBLIC_NET_NAME}"
177 ewriteln "export TEMPEST_CUSTOM_PUBLIC_NET=${CUSTOM_PUBLIC_NET_NAME}"
178 else
179 echo "The custom external (floating) network ${CUSTOM_PUBLIC_NET_NAME} is not found on the cloud. Set CUSTOM_PUBLIC_NET_NAME=\"\" to automatically pick some public network."
180 exit 1
181 fi
182 else
183 # else if it is not set by the QA engineer, let's extract the first external network and use it
184 echo "# Extracting network: taking the first found external network"
185 cmd="openstack network list --external -c Name -f value | head -n1"
186 echo "# Running 'kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml -n openstack exec ${keystone_pod} -c keystone-client --stdin -- sh -c '${cmd}'"
187 vPUBNET=$(kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml -n openstack exec ${keystone_pod} -c keystone-client --stdin -- sh -c "${cmd}")
188 echo "-> 'openstack network list --external -c Name -f value | head -n1': '${vPUBNET}'"
189 ewriteln "export TEMPEST_CUSTOM_PUBLIC_NET=${vPUBNET}"
190 fi
Alex35945732023-04-07 10:03:59 -0500191
192 echo "# Extracting volume types"
193 cmd_all="openstack volume type list -f value -c Name"
194 vVOLTYPES=( $(kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml -n openstack exec ${keystone_pod} -c keystone-client --stdin -- ${cmd_all}) )
195 echo "# Volume types available: ${vVOLTYPES[@]}"
196 cmd_default="openstack volume type list -f value -c Name --default"
197 vVOLTYPE=$(kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml -n openstack exec ${keystone_pod} -c keystone-client --stdin -- ${cmd_default})
198 echo "# Default volume type used: ${vVOLTYPE}"
199 ewriteln "export TEMPEST_CUSTOM_VOLUME_TYPE=${vVOLTYPE}"
200 # hardcoded values
Ievgeniia Zadorozhna7bc54052024-02-20 00:15:35 +0100201 ewriteln "# export TEMPEST_CUSTOM_FLAVOR=cvp.tiny"
202 ewriteln "# export TEMPEST_CUSTOM_IMAGE=cvp.cirros.61"
203 ewriteln "# export TEMPEST_CUSTOM_IMAGE_ALT=cvp.cirros.62"
Alexf7f0a152022-10-10 16:17:32 -0500204 #prepare tempest custom yaml
205 cp /opt/res-files/k8s/yamls/tempest_custom.yaml.clean $MY_PROJFOLDER/yamls/tempest_custom.yaml
206 ewriteln 'export TEMPEST_CUSTOM_PARAMETERS=$(cat $MY_PROJFOLDER/yamls/tempest_custom.yaml)'
207fi
Alexe67127e2022-10-03 14:42:30 -0500208
Alexa0053b92022-10-14 16:38:28 -0500209# Aliases
210ewriteln 'alias k=kubectl'
211
Alexe67127e2022-10-03 14:42:30 -0500212# end
213echo " "
214echo "# Done!"