Initial version of the k0rdent toolset
Main changes:
* fixed init-workspace.sh to be executed on k0rdent
* fixed running of cfg-checker for nets and pings
* removed some openstack-related scripts
* created the Dockerfile docker-container-toolset-full
Related-PROD: K0RQA-15
Change-Id: Ib57a3b2a1d47e3a0f48951eb3def71839322a46d
diff --git a/k8s/workspace/mcc-checker.env b/k8s/workspace/child-checker.env
similarity index 91%
rename from k8s/workspace/mcc-checker.env
rename to k8s/workspace/child-checker.env
index 0d16295..667fcfb 100644
--- a/k8s/workspace/mcc-checker.env
+++ b/k8s/workspace/child-checker.env
@@ -5,12 +5,12 @@
# please, use ~/.ssh/config
# SSH hostname of salt/k8s master node
MCP_SSH_KEY=/artifacts/envs/node.key
-MCP_SSH_USER=mcc-user
+MCP_SSH_USER=ubuntu
MCP_SSH_HOST=ip_address
MCP_ENV_HOST=ip_address
### K8s section
# All vars start with KUBE
KUBE_CONFIG_ROOT=/root
KUBE_SCRIPTS_FOLDER=cfg-checker-scripts
-KUBE_NODE_USER=mcc-user
+KUBE_NODE_USER=ubuntu
KUBE_NODE_KEYPATH=/artifacts/envs/node.key
diff --git a/k8s/workspace/functions.sh b/k8s/workspace/functions.sh
index e6c6a1a..a1f3f10 100644
--- a/k8s/workspace/functions.sh
+++ b/k8s/workspace/functions.sh
@@ -7,4 +7,92 @@
update_latest_report_to() {
cp "$1" "$(echo $1|sed s/20[0-9]\\{2\\}.*/latest.html/)"
-}
\ No newline at end of file
+}
+
+check_cluster_deployment_exists() {
+ local cluster_name="$1"
+ echo ""
+ echo "Checking if ClusterDeployment '$cluster_name' exists..."
+ if ! kubectl get cld -A -o name | grep -q "/$cluster_name$"; then
+ echo "Error: ClusterDeployment '$cluster_name' not found in any namespace"
+ return 1
+ fi
+ echo -e "ClusterDeployment '$cluster_name' found"
+ return 0
+}
+
+check_file_exists() {
+ local path="$1"
+ local desc="$2"
+ if [[ ! -f "$path" ]]; then
+ echo "Error: $desc file not found at $path"
+ return 1
+ fi
+}
+
+txt2html_net_ping_report() {
+ local in="$1"
+ local cluster_name="$2"
+ local out="$3"
+
+ [[ -z "$in" ]] && { echo "Usage: txt2html_net_ping_report <input.txt> [cluster_name] [output.html]"; return 2; }
+ [[ ! -f "$in" ]] && { echo "No such file: $in"; return 2; }
+
+ if [[ -z "$out" ]]; then
+ out="${in%.txt}.html"
+ [[ "$out" == "$in" ]] && out="$in.html"
+ fi
+ mkdir -p "$(dirname "$out")" || return 1
+
+ local ts
+ ts="$(get_timestamp)"
+ local cluster_esc_name="$cluster_name"
+ cluster_esc_name="${cluster_esc_name//&/&}"
+ cluster_esc_name="${cluster_esc_name//</<}"
+ cluster_esc_name="${cluster_esc_name//>/>}"
+ local title="Network Ping Report"
+ [[ -n "$cluster_esc_name" ]] && title="Network Ping Report [$cluster_esc_name]"
+
+ {
+
+ cat <<EOF
+<!doctype html>
+<html lang="en"><head>
+<meta charset="utf-8">
+<title>$title</title>
+<style>
+ body { font:14px/1.45 system-ui, -apple-system, Segoe UI, Roboto, sans-serif; margin:20px; }
+ .summary { font-weight:600; margin:0 0 8px; }
+ .net { color:#0366d6; font-weight:600; }
+ .from { color:#555; font-weight:600; display:block; margin-top: 18px; margin-bottom: -12px; }
+ .pass { color:#1a7f37; font-weight:600; }
+ .fail { color:#e53935; font-weight:600; }
+ pre { background:#fafafa; border:1px solid #e5e5e5; padding:12px; overflow:auto; }
+</style>
+</head><body>
+<h2>$title</h2>
+<p style="color: gray; font-style: italic; font-size: 10px;">Generated at $ts</p>
+<pre>
+EOF
+
+ awk '
+ function esc(s){ gsub("&","&",s); gsub("<","<"); gsub(">",">"); return s }
+ {
+ raw=$0
+ line=esc(raw)
+ gsub(/\+ PASS:/,"<span class=\"pass\">+ PASS:</span>",line)
+ gsub(/\- FAIL:/,"<span class=\"fail\">- FAIL:</span>",line)
+ if (raw ~ /^# Summary/) { print "<span class=\"summary\">" line "</span>"; next }
+ if (raw ~ /^--->/) { print "<span class=\"net\">" line "</span>"; next }
+ if (raw ~ /^=+/) { print "<span class=\"from\">" line "</span>"; next }
+ print line
+ }' "$in"
+
+ cat <<'EOF'
+</pre>
+</body></html>
+EOF
+ } > "$out"
+
+ echo "Done: $out"
+}
diff --git a/k8s/workspace/init-workspace.sh b/k8s/workspace/init-workspace.sh
index e85b0c3..f8ec98a 100644
--- a/k8s/workspace/init-workspace.sh
+++ b/k8s/workspace/init-workspace.sh
@@ -3,56 +3,27 @@
function ewriteln() {
echo ${1} | tee -a $MY_PROJFOLDER/env.sh
}
-function qkeystone() {
- keystone_pod=$(kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml get pod -n openstack -o=custom-columns=NAME:.metadata.name | grep keystone-client)
- # echo "# Running 'kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml -n openstack exec {} -c keystone-client --stdin -- "${1}"'"
- kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml -n openstack exec ${keystone_pod} -c keystone-client --stdin -- '${1}'
-}
-function get_conformance_image_tag() {
- kubeconfig_path=$1
- k8s_server_version=$(kubectl --kubeconfig="$kubeconfig_path" version -o json 2>/dev/null | jq -r '.serverVersion.gitVersion')
- k8s_short_version=${k8s_server_version:1:4}
- image_tag=""
- case $k8s_short_version in
- "1.18")
- image_tag="1.18.9-16"
- ;;
- "1.19")
- image_tag="1.19.2-1"
- ;;
- "1.20")
- image_tag="1.20.6-4"
- ;;
- "1.21")
- image_tag="1.21.9-4"
- ;;
- "1.24")
- image_tag="1.24.4-2"
- ;;
- "1.27")
- image_tag="1.27.16-4"
- ;;
- esac
- echo "$image_tag"
-}
+exec 2> >(while read line; do echo -e "\033[0;31m$line\033[0m" >&2; done)
export MY_PROJFOLDER=/artifacts
echo "# Using folder '$MY_PROJFOLDER'"
cd $MY_PROJFOLDER
[ ! -d envs ] && mkdir envs
+[ ! -d envs/checkers ] && mkdir envs/checkers
+[ ! -d envs/kubeconfigs ] && mkdir envs/kubeconfigs
[ ! -d yamls ] && mkdir yamls
[ ! -d reports ] && mkdir reports
[ ! -d tmp ] && mkdir tmp
-# move mcc konfig to default place
-if [ -f $MY_PROJFOLDER/mcc-kubeconfig.yaml ]; then
- mv $MY_PROJFOLDER/mcc-kubeconfig.yaml $MY_PROJFOLDER/envs/mcc-kubeconfig.yaml
+# move mgmt (k0rdent mothership) k8s konfig to default place
+if [ -f $MY_PROJFOLDER/mgmt-kubeconfig.yaml ]; then
+ mv $MY_PROJFOLDER/mgmt-kubeconfig.yaml $MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml
fi
if [ -f $MY_PROJFOLDER/node.key ]; then
mv $MY_PROJFOLDER/node.key $MY_PROJFOLDER/envs/node.key
fi
-if [ ! -f $MY_PROJFOLDER/envs/mcc-kubeconfig.yaml ]; then
- echo "ERROR: MCC kubeconfig not found either at '$MY_PROJFOLDER/mcc-kubeconfig.yaml' or '$MY_PROJFOLDER/envs/mcc-kubeconfig.yaml'"
+if [ ! -f $MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml ]; then
+ 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'"
exit 1
fi
echo " "
@@ -60,7 +31,7 @@
### prepare needed variables
echo "# Updating '$MY_PROJFOLDER/env.sh'"
-export KUBECONFIG=$MY_PROJFOLDER/envs/mcc-kubeconfig.yaml
+export KUBECONFIG=$MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml
if [ ! -f $MY_PROJFOLDER/env.sh ]; then
touch $MY_PROJFOLDER/env.sh
else
@@ -71,57 +42,46 @@
### Edit the following lines to set the client name, floating network name, IAM writer password
ewriteln "export MY_CLIENTNAME='ClientName'"
ewriteln "export MY_CLIENTSHORTNAME='clname'"
-ewriteln "export MY_PROJNAME='MOS_DEPLOY'"
-CUSTOM_PUBLIC_NET_NAME=""
-ewriteln "export WRITER_PASSWORD=''" # IAM (Keycloak) writer password
+ewriteln "export MY_PROJNAME='K0RDENT_DEPLOY'"
### Setting the project directory
ewriteln "export MY_PROJFOLDER=/artifacts"
-# NS & CLUSTER
-printf "\n\n# Getting namespace and cluster"
-nn=( $(kubectl get cluster -A --no-headers -o=custom-columns=NAME:.metadata.name,NAMESPACE:.metadata.namespace | grep -v default) )
-echo "# Extracted data: '${nn[@]}'"
-vNS="${nn[1]}"
-vCLUSTER="${nn[0]}"
-ewriteln "export MOS_NS=${vNS}"
-ewriteln "export MOS_CLUSTER=${vCLUSTER}"
-echo "# Extracted NS: '${vNS}'"
-echo "# Extracted CLUSTER: '${vCLUSTER}'"
+printf "\n\n# Getting ready ClusterDeployments"
+printf "\n# For each ready cld, getting namespace and cluster"
+kubectl get cld -A --no-headers | awk '$3 == "True" {print $1, $2}' | while read -r namespace name; do
+ echo " -> Processing $name in namespace $namespace..."
+ kubeconfig_secret="${name}-kubeconfig"
+ kubeconfig_file="$MY_PROJFOLDER/envs/kubeconfigs/${name}-kubeconfig.yaml"
-printf "\n\n# Writing additional options"
+ echo " -> Fetching kubeconfig to $kubeconfig_file"
+ kubectl -n "$namespace" get secret "$kubeconfig_secret" \
+ -o jsonpath='{.data.value}' | base64 -d > "$kubeconfig_file"
+
+ rc_file="$MY_PROJFOLDER/envs/${name}rc"
+ echo " -> Generating RC file at $rc_file"
+ cat <<EOF > "$rc_file"
+#!/bin/bash
+export KUBECONFIG=$MY_PROJFOLDER/envs/kubeconfigs/${name}-kubeconfig.yaml
+export CHILD_CLUSTER_NAME=${name}
+export CHILD_CLUSTER_NS=${namespace}
+EOF
+
+ chmod +x "$rc_file"
+done
+
+printf "\n\n# Writing additional options\n"
ewriteln "export SI_BINARIES_DIR=$(which helm | rev | cut -d'/' -f2- | rev)"
ewriteln "export HELM_BINARY_PATH=$(which helm)"
-ewriteln "export K8S_CONFORMANCE_CONCURRENCY=10"
-printf "\n\n# Writing additional options for K8S conformance tests for MCC cluster...\n"
-mcc_kubeconfig_path="$MY_PROJFOLDER/envs/mcc-kubeconfig.yaml"
-mcc_conformance_image_tag=$(get_conformance_image_tag "$mcc_kubeconfig_path")
-if [ -z "$mcc_conformance_image_tag" ]; then
- echo "Could not identify K8S_CONFORMANCE_IMAGE_VERSION for MCC."
-fi
-mcc_conformance_image_url="mirantis.azurecr.io/lcm/kubernetes/k8s-conformance:v${mcc_conformance_image_tag}"
-ewriteln "export MCC_K8S_CONFORMANCE_IMAGE_VERSION='${mcc_conformance_image_tag}'"
-ewriteln "export MCC_K8S_CONFORMANCE_IMAGE_URL='${mcc_conformance_image_url}'"
-
-# getting IAM Keycloak URL
-ewriteln "export KEYCLOAK_URL=$(kubectl get cluster kaas-mgmt -o jsonpath='{.status.providerStatus.helm.releases.iam.keycloak.url}')"
-
-# extract MOS kubeconfig
-echo " "
-printf "\n\nExtracting mos-kubeconfig.yaml"
-if [[ ! -z ${vCLUSTER+x} ]]; then
- 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
-else
- echo "MOS_CLUSTER variable empty/invalid: '${vCLUSTER}'"
-fi
# generate additional files
-printf "\n\nPreparing additional files"
+printf "\n\n# Preparing additional files\n"
# copy files
cp -v /opt/res-files/k8s/workspace/* $MY_PROJFOLDER/envs/
[ ! -d $MY_PROJFOLDER/scripts ] && mkdir $MY_PROJFOLDER/scripts
mv -v $MY_PROJFOLDER/envs/*.sh $MY_PROJFOLDER/scripts/
+mv -v $MY_PROJFOLDER/envs/*.env $MY_PROJFOLDER/envs/checkers
cp -v /opt/res-files/k8s/yamls/qa-rally.yaml $MY_PROJFOLDER/yamls
cp -v /opt/res-files/k8s/yamls/qa-res.yaml $MY_PROJFOLDER/yamls
@@ -131,81 +91,51 @@
# remove duplicate init
rm -v $MY_PROJFOLDER/scripts/init-workspace.sh
# update IP Addresses
-mccip=$(cat $MY_PROJFOLDER/envs/mcc-kubeconfig.yaml | grep server | cut -d':' -f3 | cut -d'/' -f3)
-echo "-> MCC Server IP is: ${mccip}"
-sed -i "s/ip_address/$mccip/g" $MY_PROJFOLDER/envs/mcc-checker.env
+mgmt_ip=$(cat $MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml | grep server | cut -d':' -f3 | cut -d'/' -f3)
+echo " -> MGMT (Mothership) Server IP is: ${mgmt_ip}"
+sed -i "s/ip_address/$mgmt_ip/g" $MY_PROJFOLDER/envs/checkers/mgmt-checker.env
-if [ -f $MY_PROJFOLDER/envs/mos-kubeconfig.yaml ]; then
- mosip=$(cat $MY_PROJFOLDER/envs/mos-kubeconfig.yaml | grep server | cut -d':' -f3 | cut -d'/' -f3)
- echo "-> MOS Server IP is: ${mosip}"
- sed -i "s/ip_address/$mosip/g" $MY_PROJFOLDER/envs/mos-checker.env
- vSC="$(kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml get sc | grep default | cut -d' ' -f1)"
- echo "-> Storage class is ${vSC}"
- echo "# Updating resources yaml "
- sed -i "s/storage_class/${vSC}/g" $MY_PROJFOLDER/yamls/qa-res.yaml
- echo " "
- ewriteln "export MOS_SC=${vSC}"
+printf "\n\n# Preparing checker.env files for each child cluster, getting default SC...\n"
+ENV_DIR="$MY_PROJFOLDER/envs"
+CHECKERS_DIR="$MY_PROJFOLDER/envs/checkers"
+for kubeconfig_path in "$ENV_DIR"/kubeconfigs/*-kubeconfig.yaml; do
+ [[ -e "$kubeconfig_path" ]] || continue
+ name=$(basename "$kubeconfig_path" -kubeconfig.yaml)
- ewriteln "export OSH_DEPLOYMENT_NAME=$(kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml -n openstack get openstackdeployment --no-headers | cut -d' ' -f1)"
- ewriteln "export SI_BINARIES_DIR=$(which helm | rev | cut -d'/' -f2- | rev)"
- ewriteln "export HELM_BINARY_PATH=$(which helm)"
+ echo "# Processing cluster - getting K8S IP: $name"
+ child_ip=$(grep server "$kubeconfig_path" | cut -d':' -f3 | cut -d'/' -f3)
+ echo " -> Cluster ${name} Server IP is: ${child_ip}"
- printf "\n\n# Writing additional options for K8S conformance tests for MOS cluster...\n"
- mos_kubeconfig_path="$MY_PROJFOLDER/envs/mos-kubeconfig.yaml"
- mos_conformance_image_tag=$(get_conformance_image_tag "$mos_kubeconfig_path")
- if [ -z "$mos_conformance_image_tag" ]; then
- echo "Could not identify K8S_CONFORMANCE_IMAGE_VERSION for MOS."
- fi
- mos_conformance_image_url="mirantis.azurecr.io/lcm/kubernetes/k8s-conformance:v${mos_conformance_image_tag}"
- ewriteln "export MOS_K8S_CONFORMANCE_IMAGE_VERSION='${mos_conformance_image_tag}'"
- ewriteln "export MOS_K8S_CONFORMANCE_IMAGE_URL='${mos_conformance_image_url}'"
+ checker_env="$CHECKERS_DIR/${name}-checker.env"
+ cp $CHECKERS_DIR/child-checker.env ${checker_env}
+ echo " -> Generating checker.env for $name"
+ sed -i "s/ip_address/${child_ip}/g" "$checker_env"
- echo " "
- keystone_pod=$(kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml get pod -n openstack -o=custom-columns=NAME:.metadata.name | grep keystone-client)
- if [ -n "${CUSTOM_PUBLIC_NET_NAME:-}" ]; then
- # if CUSTOM_PUBLIC_NET_NAME is set to some specific net, check it is present on the cloud
- echo "# Checking that the external network ${CUSTOM_PUBLIC_NET_NAME} is present on the cloud"
- cmd="openstack network show ${CUSTOM_PUBLIC_NET_NAME} -c id -f value 2>/dev/null"
- echo "# Running 'kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml -n openstack exec ${keystone_pod} -c keystone-client --stdin -- sh -c '${cmd}'"
- network_exists=$(kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml -n openstack exec "${keystone_pod}" -c keystone-client --stdin -- sh -c "${cmd}")
- if [ -n "$network_exists" ]; then
- echo "# Setting TEMPEST_CUSTOM_PUBLIC_NET to ${CUSTOM_PUBLIC_NET_NAME}"
- ewriteln "export TEMPEST_CUSTOM_PUBLIC_NET=${CUSTOM_PUBLIC_NET_NAME}"
- else
- 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."
- exit 1
- fi
+ default_sc=$(kubectl --kubeconfig "$kubeconfig_path" get sc 2>/dev/null | grep 'default' || true)
+
+ if [[ -n "$default_sc" ]]; then
+ vSC=$(echo "$default_sc" | awk '{print $1}')
+ echo " -> Default storage class: $vSC"
else
- # else if it is not set by the QA engineer, let's extract the first external network and use it
- echo "# Extracting network: taking the first found external network"
- cmd="openstack network list --external -c Name -f value | head -n1"
- echo "# Running 'kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml -n openstack exec ${keystone_pod} -c keystone-client --stdin -- sh -c '${cmd}'"
- vPUBNET=$(kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml -n openstack exec ${keystone_pod} -c keystone-client --stdin -- sh -c "${cmd}")
- echo "-> 'openstack network list --external -c Name -f value | head -n1': '${vPUBNET}'"
- ewriteln "export TEMPEST_CUSTOM_PUBLIC_NET=${vPUBNET}"
+ vSC=""
+ echo " -> No default storage class found."
fi
- echo "# Extracting volume types"
- cmd_all="openstack volume type list -f value -c Name"
- vVOLTYPES=( $(kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml -n openstack exec ${keystone_pod} -c keystone-client --stdin -- ${cmd_all}) )
- echo "# Volume types available: ${vVOLTYPES[@]}"
- cmd_default="openstack volume type list -f value -c Name --default"
- vVOLTYPE=$(kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml -n openstack exec ${keystone_pod} -c keystone-client --stdin -- ${cmd_default})
- echo "# Default volume type used: ${vVOLTYPE}"
- ewriteln "export TEMPEST_CUSTOM_VOLUME_TYPE=${vVOLTYPE}"
- # hardcoded values
- ewriteln "# export TEMPEST_CUSTOM_FLAVOR=cvp.tiny"
- ewriteln "# export TEMPEST_CUSTOM_IMAGE=cvp.cirros.61"
- ewriteln "# export TEMPEST_CUSTOM_IMAGE_ALT=cvp.cirros.62"
- #prepare tempest custom yaml
- cp /opt/res-files/k8s/yamls/tempest_custom.yaml.clean $MY_PROJFOLDER/yamls/tempest_custom.yaml
- ewriteln 'export TEMPEST_CUSTOM_PARAMETERS=$(cat $MY_PROJFOLDER/yamls/tempest_custom.yaml)'
-fi
+ rc_file="$ENV_DIR/${name}rc"
+
+ if [[ -f "$rc_file" ]]; then
+ echo " -> Updating RC file: $rc_file"
+ echo "export CHILD_SC=${vSC}" >> "$rc_file"
+ else
+ echo "# RC file not found for $name — skipping."
+ fi
+
+done
# Aliases
ewriteln 'alias k=kubectl'
# end
echo " "
-echo "# Done!"
+echo "# ✅ Done!"
diff --git a/k8s/workspace/mccrc b/k8s/workspace/mccrc
deleted file mode 100644
index 45f408e..0000000
--- a/k8s/workspace/mccrc
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/bash
-export KUBECONFIG=$MY_PROJFOLDER/envs/mcc-kubeconfig.yaml
diff --git a/k8s/workspace/mcc-checker.env b/k8s/workspace/mgmt-checker.env
similarity index 91%
copy from k8s/workspace/mcc-checker.env
copy to k8s/workspace/mgmt-checker.env
index 0d16295..667fcfb 100644
--- a/k8s/workspace/mcc-checker.env
+++ b/k8s/workspace/mgmt-checker.env
@@ -5,12 +5,12 @@
# please, use ~/.ssh/config
# SSH hostname of salt/k8s master node
MCP_SSH_KEY=/artifacts/envs/node.key
-MCP_SSH_USER=mcc-user
+MCP_SSH_USER=ubuntu
MCP_SSH_HOST=ip_address
MCP_ENV_HOST=ip_address
### K8s section
# All vars start with KUBE
KUBE_CONFIG_ROOT=/root
KUBE_SCRIPTS_FOLDER=cfg-checker-scripts
-KUBE_NODE_USER=mcc-user
+KUBE_NODE_USER=ubuntu
KUBE_NODE_KEYPATH=/artifacts/envs/node.key
diff --git a/k8s/workspace/mgmtrc b/k8s/workspace/mgmtrc
new file mode 100644
index 0000000..615236c
--- /dev/null
+++ b/k8s/workspace/mgmtrc
@@ -0,0 +1,2 @@
+#!/bin/bash
+export KUBECONFIG=$MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml
diff --git a/k8s/workspace/mos-checker.env b/k8s/workspace/mos-checker.env
deleted file mode 100644
index 0d16295..0000000
--- a/k8s/workspace/mos-checker.env
+++ /dev/null
@@ -1,16 +0,0 @@
-# Main log file of the tests
-MCP_LOGFILE = 'client-cfg-check.log'
-# SSH is used when environment is not local to get salt password
-# in order set options and user for the ssh,
-# please, use ~/.ssh/config
-# SSH hostname of salt/k8s master node
-MCP_SSH_KEY=/artifacts/envs/node.key
-MCP_SSH_USER=mcc-user
-MCP_SSH_HOST=ip_address
-MCP_ENV_HOST=ip_address
-### K8s section
-# All vars start with KUBE
-KUBE_CONFIG_ROOT=/root
-KUBE_SCRIPTS_FOLDER=cfg-checker-scripts
-KUBE_NODE_USER=mcc-user
-KUBE_NODE_KEYPATH=/artifacts/envs/node.key
diff --git a/k8s/workspace/mosrc b/k8s/workspace/mosrc
deleted file mode 100644
index 80d8cf9..0000000
--- a/k8s/workspace/mosrc
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/bash
-export KUBECONFIG=$MY_PROJFOLDER/envs/mos-kubeconfig.yaml
diff --git a/k8s/workspace/run-networks-child.sh b/k8s/workspace/run-networks-child.sh
new file mode 100644
index 0000000..973cdcd
--- /dev/null
+++ b/k8s/workspace/run-networks-child.sh
@@ -0,0 +1,51 @@
+#!/bin/bash
+
+set -euo pipefail
+
+. "$(dirname "$0")/functions.sh"
+cd /artifacts
+. env.sh
+. envs/mgmtrc
+. /opt/cfg-checker/.checkervenv/bin/activate
+
+if [[ $# -lt 1 ]]; then
+ echo -e "\nError: No cluster name provided."
+ echo "Usage: $0 <cluster-name>"
+ echo ""
+ exit 1
+fi
+
+CLUSTER_NAME="$1"
+
+echo ""
+echo "Checking if ClusterDeployment '$CLUSTER_NAME' exists..."
+
+if ! kubectl get cld -A -o name | grep -q "/$CLUSTER_NAME$"; then
+ echo -e "Error: ClusterDeployment '$CLUSTER_NAME' not found in any namespace"
+ exit 1
+fi
+
+echo -e "ClusterDeployment '$CLUSTER_NAME' found"
+
+KUBECONFIG_PATH="$MY_PROJFOLDER/envs/kubeconfigs/${CLUSTER_NAME}-kubeconfig.yaml"
+CHECKER_ENV_PATH="$MY_PROJFOLDER/envs/checkers/${CLUSTER_NAME}-checker.env"
+
+if [[ ! -f "$KUBECONFIG_PATH" ]]; then
+ echo -e "Error: kubeconfig file not found at $KUBECONFIG_PATH"
+ exit 1
+fi
+
+if [[ ! -f "$CHECKER_ENV_PATH" ]]; then
+ echo -e "Error: checker.env file not found at $CHECKER_ENV_PATH"
+ exit 1
+fi
+
+echo -e "Cluster configuration files found\n"
+
+fname="/artifacts/reports/$MY_CLIENTSHORTNAME-${CLUSTER_NAME}-networks-$(get_timestamp).html"
+
+mos-checker --env-name $MY_CLIENTSHORTNAME-child --env-config $CHECKER_ENV_PATH --kube-config $KUBECONFIG_PATH network check
+mos-checker --env-name $MY_CLIENTSHORTNAME-child --env-config $CHECKER_ENV_PATH --kube-config $KUBECONFIG_PATH network report --html "${fname}"
+
+update_latest_report_to "${fname}"
+deactivate
diff --git a/k8s/workspace/run-networks-mcc.sh b/k8s/workspace/run-networks-mcc.sh
deleted file mode 100644
index d3aadc1..0000000
--- a/k8s/workspace/run-networks-mcc.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/bash
-
-. "$(dirname "$0")/functions.sh"
-cd /artifacts
-. env.sh
-. /opt/cfg-checker/.checkervenv/bin/activate
-fname="/artifacts/reports/$MY_CLIENTSHORTNAME-mcc-networks-$(get_timestamp).html"
-mos-checker --env-name $MY_CLIENTSHORTNAME-mcc --env-config /artifacts/envs/mcc-checker.env --kube-config /artifacts/envs/mcc-kubeconfig.yaml network check
-mos-checker --env-name $MY_CLIENTSHORTNAME-mcc --env-config /artifacts/envs/mcc-checker.env --kube-config /artifacts/envs/mcc-kubeconfig.yaml network report --html "${fname}"
-update_latest_report_to "${fname}"
-
-deactivate
diff --git a/k8s/workspace/run-networks-mgmt.sh b/k8s/workspace/run-networks-mgmt.sh
new file mode 100644
index 0000000..e7965f6
--- /dev/null
+++ b/k8s/workspace/run-networks-mgmt.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+. "$(dirname "$0")/functions.sh"
+cd /artifacts
+. env.sh
+. /opt/cfg-checker/.checkervenv/bin/activate
+
+fname="/artifacts/reports/$MY_CLIENTSHORTNAME-mgmt-networks-$(get_timestamp).html"
+
+CHECKER_ENV="$MY_PROJFOLDER/envs/checkers/mgmt-checker.env"
+KUBECONF="$MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml"
+
+mos-checker --env-name $MY_CLIENTSHORTNAME-mgmt --env-config $CHECKER_ENV --kube-config $KUBECONF network check
+mos-checker --env-name $MY_CLIENTSHORTNAME-mgmt --env-config $CHECKER_ENV --kube-config $KUBECONF network report --html "${fname}"
+update_latest_report_to "${fname}"
+
+deactivate
diff --git a/k8s/workspace/run-networks-mos.sh b/k8s/workspace/run-networks-mos.sh
deleted file mode 100644
index d538ae0..0000000
--- a/k8s/workspace/run-networks-mos.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/bash
-
-. "$(dirname "$0")/functions.sh"
-cd /artifacts
-. env.sh
-. /opt/cfg-checker/.checkervenv/bin/activate
-
-fname="/artifacts/reports/$MY_CLIENTSHORTNAME-mos-networks-$(get_timestamp).html"
-mos-checker --env-name $MY_CLIENTSHORTNAME-mos --env-config /artifacts/envs/mos-checker.env --kube-config /artifacts/envs/mos-kubeconfig.yaml network check
-mos-checker --env-name $MY_CLIENTSHORTNAME-mos --env-config /artifacts/envs/mos-checker.env --kube-config /artifacts/envs/mos-kubeconfig.yaml network report --html "${fname}"
-update_latest_report_to "${fname}"
-deactivate
diff --git a/k8s/workspace/run-networks-ping-child.sh b/k8s/workspace/run-networks-ping-child.sh
new file mode 100644
index 0000000..1b5b106
--- /dev/null
+++ b/k8s/workspace/run-networks-ping-child.sh
@@ -0,0 +1,52 @@
+#!/bin/bash
+
+set -euo pipefail
+. "$(dirname "$0")/functions.sh"
+cd /artifacts
+. env.sh
+. envs/mgmtrc
+. /opt/cfg-checker/.checkervenv/bin/activate
+
+if [[ $# -lt 1 ]]; then
+ echo -e "\nError: No cluster name provided."
+ echo "Usage: $0 <cluster-name>" && echo ""
+ exit 1
+fi
+
+CLUSTER_NAME="$1"
+if ! check_cluster_deployment_exists "$CLUSTER_NAME"; then
+ exit 1
+fi
+
+
+KUBECONFIG_PATH="$MY_PROJFOLDER/envs/kubeconfigs/${CLUSTER_NAME}-kubeconfig.yaml"
+CHECKER_ENV_PATH="$MY_PROJFOLDER/envs/checkers/${CLUSTER_NAME}-checker.env"
+check_file_exists "$KUBECONFIG_PATH" "kubeconfig file" || exit 1
+check_file_exists "$CHECKER_ENV_PATH" "checker.env file" || exit 1
+echo -e "Cluster configuration files found\n"
+
+
+fname="/artifacts/reports/$MY_CLIENTSHORTNAME-${CLUSTER_NAME}-networks-ping-$(get_timestamp)"
+nets=$(mos-checker --env-name $MY_CLIENTSHORTNAME-child --env-config $CHECKER_ENV_PATH --kube-config $KUBECONFIG_PATH network list 2>&1 | grep -A20 "# Runtime networks list" | grep "\:" | grep -v 'o-hm0' | awk '{print $1}')
+nets=$(echo "$nets" | tr ' ' '\n' | grep -v '/32' | grep -v '10.99.')
+
+echo "The following CIRDs will be pinged:"
+printf "%s\n\n" "$nets"
+
+cidr_options=""
+for net in $nets; do
+ cidr_options+="--cidr $net " # Append each network to the list
+done
+
+summary=$(mos-checker --env-name $MY_CLIENTSHORTNAME-child --env-config $CHECKER_ENV_PATH --kube-config $KUBECONFIG_PATH network ping --detailed $cidr_options 2>&1 | awk '/Summary/ {flag=1} flag')
+
+
+printf "%s\n" "$summary"
+printf "%s\n" "$summary" > $fname.txt
+
+txt2html_net_ping_report $fname.txt $CLUSTER_NAME $fname.html
+
+echo ""
+echo "The raw txt output is saved to $fname.txt"
+echo "The HTML report is saved to $fname.html"
+deactivate
diff --git a/k8s/workspace/run-networks-ping-mcc.sh b/k8s/workspace/run-networks-ping-mcc.sh
deleted file mode 100644
index 769c437..0000000
--- a/k8s/workspace/run-networks-ping-mcc.sh
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/bash
-
-. "$(dirname "$0")/functions.sh"
-cd /artifacts
-. env.sh
-. /opt/cfg-checker/.checkervenv/bin/activate
-fname="/artifacts/reports/$MY_CLIENTSHORTNAME-mcc-networks-ping-$(get_timestamp).txt"
-nets=$(mos-checker --env-name $MY_CLIENTSHORTNAME-mcc --env-config /artifacts/envs/mcc-checker.env --kube-config /artifacts/envs/mcc-kubeconfig.yaml network list 2>&1 | grep -A20 "# Runtime networks list" | grep "\:" | awk '{print $1}')
-nets=$(echo "$nets" | tr ' ' '\n' | grep -v '/32' | grep -v '10.99.')
-
-echo "The following CIRDs will be pinged:"
-printf "%s\n\n" "$nets"
-
-cidr_options=""
-for net in $nets; do
- cidr_options+="--cidr $net " # Append each network to the list
-done
-
-summary=$(mos-checker --env-name $MY_CLIENTSHORTNAME-mcc --env-config /artifacts/envs/mcc-checker.env --kube-config /artifacts/envs/mcc-kubeconfig.yaml network ping --detailed $cidr_options 2>&1 | awk '/Summary/ {flag=1} flag')
-
-printf "%s\n" "$summary"
-printf "%s\n" "$summary" > $fname
-echo ""
-echo "The report is saved to $fname"
-
-deactivate
diff --git a/k8s/workspace/run-networks-ping-mgmt.sh b/k8s/workspace/run-networks-ping-mgmt.sh
new file mode 100644
index 0000000..d75f6c5
--- /dev/null
+++ b/k8s/workspace/run-networks-ping-mgmt.sh
@@ -0,0 +1,36 @@
+#!/bin/bash
+
+. "$(dirname "$0")/functions.sh"
+cd /artifacts
+. env.sh
+. /opt/cfg-checker/.checkervenv/bin/activate
+
+fname="/artifacts/reports/$MY_CLIENTSHORTNAME-mgmt-networks-ping-$(get_timestamp)"
+
+CHECKER_ENV="$MY_PROJFOLDER/envs/checkers/mgmt-checker.env"
+KUBECONF="$MY_PROJFOLDER/envs/kubeconfigs/mgmt-kubeconfig.yaml"
+
+nets=$(mos-checker --env-name $MY_CLIENTSHORTNAME-mgmt --env-config $CHECKER_ENV --kube-config $KUBECONF network list 2>&1 | grep -A20 "# Runtime networks list" | grep "\:" | awk '{print $1}')
+nets=$(echo "$nets" | tr ' ' '\n' | grep -v '/32' | grep -v '10.99.')
+
+echo "The following CIRDs will be pinged:"
+printf "%s\n\n" "$nets"
+
+cidr_options=""
+for net in $nets; do
+ cidr_options+="--cidr $net " # Append each network to the list
+done
+
+summary=$(mos-checker --env-name $MY_CLIENTSHORTNAME-mgmt --env-config $CHECKER_ENV --kube-config $KUBECONF network ping --detailed $cidr_options 2>&1 | awk '/Summary/ {flag=1} flag')
+
+printf "%s\n" "$summary"
+printf "%s\n" "$summary" > $fname.txt
+
+CLUSTER_NAME=mgmt
+txt2html_net_ping_report $fname.txt $CLUSTER_NAME $fname.html
+
+echo ""
+echo "The raw txt output is saved to $fname.txt"
+echo "The HTML report is saved to $fname.html"
+
+deactivate
diff --git a/k8s/workspace/run-networks-ping-mos.sh b/k8s/workspace/run-networks-ping-mos.sh
deleted file mode 100644
index 093d699..0000000
--- a/k8s/workspace/run-networks-ping-mos.sh
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/bash
-
-. "$(dirname "$0")/functions.sh"
-cd /artifacts
-. env.sh
-. /opt/cfg-checker/.checkervenv/bin/activate
-fname="/artifacts/reports/$MY_CLIENTSHORTNAME-mos-networks-ping-$(get_timestamp).txt"
-nets=$(mos-checker --env-name $MY_CLIENTSHORTNAME-mos --env-config /artifacts/envs/mos-checker.env --kube-config /artifacts/envs/mos-kubeconfig.yaml network list 2>&1 | grep -A20 "# Runtime networks list" | grep "\:" | grep -v 'o-hm0' | awk '{print $1}')
-nets=$(echo "$nets" | tr ' ' '\n' | grep -v '/32' | grep -v '10.99.')
-
-echo "The following CIRDs will be pinged:"
-printf "%s\n\n" "$nets"
-
-cidr_options=""
-for net in $nets; do
- cidr_options+="--cidr $net " # Append each network to the list
-done
-
-summary=$(mos-checker --env-name $MY_CLIENTSHORTNAME-mos --env-config /artifacts/envs/mos-checker.env --kube-config /artifacts/envs/mos-kubeconfig.yaml network ping --detailed $cidr_options 2>&1 | awk '/Summary/ {flag=1} flag')
-
-printf "%s\n" "$summary"
-printf "%s\n" "$summary" > $fname
-
-echo ""
-echo "The report is saved to $fname"
-deactivate
diff --git a/k8s/workspace/run-openstack-end-to-end.sh b/k8s/workspace/run-openstack-end-to-end.sh
deleted file mode 100644
index 169f879..0000000
--- a/k8s/workspace/run-openstack-end-to-end.sh
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/bash
-tenv=mos
-. $MY_PROJFOLDER/envs/${tenv}rc
-##
-echo "### Checking openstack resources"
-status=$(kubectl -n qa-space get pod | grep toolset | tr -s " " | cut -d' ' -f3)
-if [ ${status} != "Running" ]; then
- echo "# 'toolset' container is not Running"
- exit 1
-fi
-admin_uuid=$(kubectl exec toolset --stdin -n qa-space -- bash -c "openstack user show cvp.admin -c id -f value")
-if [ ! -z admin_uuid ]; then
- echo "# Running check"
- echo " "
- kubectl exec toolset --stdin -n qa-space -- bash -c "cd /artifacts/cmp-check; bash /opt/cmp-check/cmp_check.sh -a"
-else
- echo "# Consider creating resources using 'create-openstack-resources.sh'"
- exit 1
-fi
diff --git a/k8s/workspace/run-openstack-func-full.sh b/k8s/workspace/run-openstack-func-full.sh
deleted file mode 100644
index a567ab2..0000000
--- a/k8s/workspace/run-openstack-func-full.sh
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/bin/bash
-
-. "$(dirname "$0")/functions.sh"
-tenv=mos
-. /opt/si-tests/.sivenv/bin/activate
-cd $MY_PROJFOLDER/tmp
-. $MY_PROJFOLDER/env.sh
-. $MY_PROJFOLDER/envs/${tenv}rc
-
-if grep -q "public_subnet_uuid" "$MY_PROJFOLDER/yamls/tempest_custom.yaml"; then
- echo "The ${MY_PROJFOLDER}/yamls/tempest_custom.yaml file is not updated, it has the placeholders. Please run '. $MY_PROJFOLDER/env.sh && . $MY_PROJFOLDER/envs/mosrc && bash $MY_PROJFOLDER/scripts/update-openstack-resources.sh' before running tempest."
- exit 1
-fi
-
-# Just in case
-unset TARGET_CLUSTER
-unset TARGET_NAMESPACE
-# Cleaning up
-echo "# Cleaning up '/artifacts/tmp/artifacts/'"
-[ -d "/artifacts/tmp/artifacts/" ] && rm -rf "/artifacts/tmp/artifacts/"
-[ -f "/artifacts/tmp/nosetests.xml" ] && rm "/artifacts/tmp/nosetests.xml"
-mkdir "/artifacts/tmp/artifacts/"
-
-#
-echo "# Creating schema"
-[ -f "/artifacts/tmp/artifacts/test_scheme.yaml" ] && rm -v $MY_PROJFOLDER/tmp/artifacts/test_scheme.yaml
-cat <<'EOF' >artifacts/test_scheme.yaml
----
-smoke: false
-concurrency: 4
-blacklist-file: /etc/tempest/test-blacklist
-enabled: true
-fail_on_test: true
-type: tempest
-# regex: test
-EOF
-cat artifacts/test_scheme.yaml
-echo " "
-env | grep TEMPEST_
-echo " "
-#
-echo "# Checking auto-allocation"
-cmd="openstack network auto allocated topology create --check-resources"
-kubectl -n qa-space exec toolset --stdin -- $cmd
-if [ $? -ne 0 ]; then
- cmd="openstack network set --default --external ${TEMPEST_CUSTOM_PUBLIC_NET}"
- echo "# Trying to set network: '${cmd}'"
- kubectl -n qa-space exec toolset --stdin -- $cmd
- echo "# Checking again"
- cmd="openstack network auto allocated topology create --check-resources"
- kubectl -n qa-space exec toolset --stdin -- $cmd
- [ $? -ne 0 ] && printf "\n\n# WARNING: Check functional tests pod for errors on test init\n\n"
-fi
-
-# run tests
-pytest -vv /opt/si-tests/si_tests/tests/lcm/test_run_tempest.py
-deactivate
-
-# report
-if [ -d $MY_PROJFOLDER/reports/${tenv}-func ]; then
- echo "# Generating repors"
- yes | rm $MY_PROJFOLDER/reports/${tenv}-func/*
-else
- mkdir $MY_PROJFOLDER/reports/${tenv}-func
-fi
-cp ./artifacts/*.xml $MY_PROJFOLDER/reports/${tenv}-func/
-cd $MY_PROJFOLDER/reports/
-fname="$MY_CLIENTSHORTNAME-${tenv}-openstack-func-full-$(get_timestamp).html"
-tparser -f r_xml -d -r "${fname}" $MY_PROJFOLDER/reports/${tenv}-func/
-update_latest_report_to "${fname}"
-cd $MY_PROJFOLDER
diff --git a/k8s/workspace/run-openstack-func-smoke.sh b/k8s/workspace/run-openstack-func-smoke.sh
deleted file mode 100644
index 1119b28..0000000
--- a/k8s/workspace/run-openstack-func-smoke.sh
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/bin/bash
-
-. "$(dirname "$0")/functions.sh"
-tenv=mos
-. /opt/si-tests/.sivenv/bin/activate
-cd $MY_PROJFOLDER/tmp
-. $MY_PROJFOLDER/env.sh
-. $MY_PROJFOLDER/envs/${tenv}rc
-
-if grep -q "public_subnet_uuid" "$MY_PROJFOLDER/yamls/tempest_custom.yaml"; then
- echo "The ${MY_PROJFOLDER}/yamls/tempest_custom.yaml file is not updated, it has the placeholders. Please run '. $MY_PROJFOLDER/env.sh && . $MY_PROJFOLDER/envs/mosrc && bash $MY_PROJFOLDER/scripts/update-openstack-resources.sh' before running tempest."
- exit 1
-fi
-
-# Just in case
-unset TARGET_CLUSTER
-unset TARGET_NAMESPACE
-# Cleaning up
-echo "# Cleaning up '/artifacts/tmp/artifacts/'"
-[ -d "/artifacts/tmp/artifacts/" ] && rm -rf "/artifacts/tmp/artifacts/"
-[ -f "/artifacts/tmp/nosetests.xml" ] && rm "/artifacts/tmp/nosetests.xml"
-mkdir "/artifacts/tmp/artifacts/"
-
-#
-echo "# Creating schema"
-[ -f "/artifacts/tmp/artifacts/test_scheme.yaml" ] && rm -v $MY_PROJFOLDER/tmp/artifacts/test_scheme.yaml
-cat <<'EOF' >artifacts/test_scheme.yaml
----
-smoke: true
-concurrency: 4
-blacklist-file: /etc/tempest/test-blacklist
-enabled: true
-fail_on_test: true
-type: tempest
-# regex: test
-EOF
-cat artifacts/test_scheme.yaml
-echo " "
-env | grep TEMPEST_
-echo " "
-#
-echo "# Checking auto-allocation"
-cmd="openstack network auto allocated topology create --check-resources"
-kubectl -n qa-space exec toolset --stdin -- $cmd
-if [ $? -ne 0 ]; then
- cmd="openstack network set --default --external ${TEMPEST_CUSTOM_PUBLIC_NET}"
- echo "# Trying to set network: '${cmd}'"
- kubectl -n qa-space exec toolset --stdin -- $cmd
- echo "# Checking again"
- cmd="openstack network auto allocated topology create --check-resources"
- kubectl -n qa-space exec toolset --stdin -- $cmd
- [ $? -ne 0 ] && printf "\n\n# WARNING: Check functional tests pod for errors on test init\n\n"
-fi
-
-# run tests
-pytest -vv /opt/si-tests/si_tests/tests/lcm/test_run_tempest.py
-deactivate
-
-# report
-if [ -d $MY_PROJFOLDER/reports/${tenv}-func ]; then
- echo "# Generating repors"
- yes | rm $MY_PROJFOLDER/reports/${tenv}-func/*
-else
- mkdir $MY_PROJFOLDER/reports/${tenv}-func
-fi
-cp ./artifacts/*.xml $MY_PROJFOLDER/reports/${tenv}-func/
-cd $MY_PROJFOLDER/reports/
-fname="$MY_CLIENTSHORTNAME-${tenv}-openstack-func-smoke-$(get_timestamp).html"
-tparser -f r_xml -d -r "${fname}" $MY_PROJFOLDER/reports/${tenv}-func/
-update_latest_report_to "${fname}"
-cd $MY_PROJFOLDER
diff --git a/k8s/workspace/run-openstack-perf.sh b/k8s/workspace/run-openstack-perf.sh
deleted file mode 100644
index 3f0cdba..0000000
--- a/k8s/workspace/run-openstack-perf.sh
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/bin/bash
-
-. "$(dirname "$0")/functions.sh"
-function kexec() {
- kubectl exec -n qa-space --tty --stdin rally -- bash -c "${1}"
-}
-
-# consts
-concurrency=10
-run_times=200
-
-tenv=mos
-. /opt/si-tests/.sivenv/bin/activate
-cd $MY_PROJFOLDER/tmp
-. $MY_PROJFOLDER/env.sh
-. $MY_PROJFOLDER/envs/${tenv}rc
-# Just in case
-unset TARGET_CLUSTER
-unset TARGET_NAMESPACE
-dryrun=0
-#
-if [ ! -z ${1+x} ]; then
- echo "# Using Dry-run mode"
- dryrun=1
-fi
-
-##
-echo "### Checking rally environments"
-status=$(kubectl -n qa-space get pod | grep rally | tr -s " " | cut -d' ' -f3)
-if [ ${status} != "Running" ]; then
- echo "# 'rally' container is not Running"
- echo "# Consider creating resources and/or creating environments"
- exit 1
-fi
-
-###
-uuid=$(kubectl exec -n qa-space --stdin rally -- rally env list | grep openstack | cut -d' ' -f2)
-if [ -z ${uuid} ]; then
- echo "# Openstack env not found. Please, run 'create-rally-deployments.sh'"
- kubectl exec -n qa-space --stdin rally -- rally env list
-else
- echo "# Running Openstack performance tests"
- if [ ${dryrun} == 1 ]; then
- scenario=/rally/rally-files/openstack-mos-scn-i1.json
- else
- scenario=/rally/rally-files/openstack-mos-scn.json.clean
- fi
- task_scn=/artifacts/openstack-scenario.json
- # prepare scenario
- kexec "cp -v ${scenario} ${task_scn}"
- default_az=$(kubectl exec toolset --stdin -n qa-space -- bash -c "openstack compute service list --service nova-compute -c Zone -f value | uniq | head -n 1")
- declare $(kubectl exec toolset --stdin -n qa-space -- bash -c "cat /artifacts/cmp-check/cvp.manifest")
- echo "# Updating network UUID to ${fixed_net_left_id}"
- kexec "sed -i \"s/fixed-net-id/${fixed_net_left_id}/g\" ${task_scn}"
- echo "# Updating AZ name to ${default_az}"
- kexec "sed -i \"s/default-az-name/${default_az}/g\" ${task_scn}"
- echo "# Updating concurrency to ${concurrency}"
- kexec "sed -i \"s/concurrent-threads/${concurrency}/g\" ${task_scn}"
- echo "# Updating running times to ${run_times}"
- kexec "sed -i \"s/run-times-number/${run_times}/g\" ${task_scn}"
- # run
- kexec "rally env use ${uuid}; rally task start ${task_scn}"
- # generate report
- echo "# Generating report"
- fname="$MY_CLIENTSHORTNAME-mos-openstack-perf-$(get_timestamp).html"
- kubectl exec -n qa-space --stdin rally -- rally task report $(kubectl exec -n qa-space --stdin rally -- rally task list | grep openstack | cut -d' ' -f2 | tail -1) --html-static --out ${fname}
- kubectl cp qa-space/rally:/rally/${fname} $MY_PROJFOLDER/reports/${fname}
- update_latest_report_to "$MY_PROJFOLDER/reports/${fname}"
-fi
diff --git a/k8s/workspace/run-openstack-spt.sh b/k8s/workspace/run-openstack-spt.sh
deleted file mode 100644
index 13a0e2b..0000000
--- a/k8s/workspace/run-openstack-spt.sh
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/bin/bash
-tenv=mos
-. $MY_PROJFOLDER/envs/${tenv}rc
-##
-echo "### Checking openstack resources"
-status=$(kubectl -n qa-space get pod | grep toolset | tr -s " " | cut -d' ' -f3)
-if [ ${status} != "Running" ]; then
- echo "# 'toolset' container is not Running"
- exit 1
-fi
-
-echo "# Copying mos-kubeconfig.yaml and node.key from /artifacts/envs/"
-kubectl cp /artifacts/envs/mos-kubeconfig.yaml qa-space/toolset:/opt/mos-spt/mos-kubeconfig.yaml
-kubectl cp /artifacts/envs/node.key qa-space/toolset:/opt/mos-spt/node.key
-
-admin_uuid=$(kubectl exec toolset --stdin -n qa-space -- bash -c "openstack user show cvp.admin -c id -f value")
-if [ ! -z ${TEMPEST_CUSTOM_PUBLIC_NET+x} ]; then
- echo "# Copying global_config.yaml"
- kubectl cp $MY_PROJFOLDER/yamls/global_config.yaml qa-space/toolset:/opt/mos-spt/global_config.yaml
- echo " "
- echo "# Running spt checks"
- echo " "
- kubectl exec toolset --stdin --tty -n qa-space -- bash -c "cd /opt/mos-spt; . .venv/bin/activate; pytest -rs -o log_cli=true --tb=short tests/"
-else
- echo "# Public network not set: TEMPEST_CUSTOM_PUBLIC_NET=${TEMPEST_CUSTOM_PUBLIC_NET}"
- exit 1
-fi
-
-echo "# Copying SPT HTML test report"
-mkdir -p /artifacts/reports/mos-spt
-kubectl exec toolset --stdin --tty -n qa-space -- bash -c "mkdir -p /opt/mos-spt/html_reports && cp /opt/mos-spt/*.html /opt/mos-spt/html_reports"
-kubectl cp qa-space/toolset:/opt/mos-spt/html_reports/ /artifacts/reports/mos-spt/
\ No newline at end of file
diff --git a/k8s/workspace/run-packages-mcc.sh b/k8s/workspace/run-packages-mcc.sh
deleted file mode 100644
index c3b16fc..0000000
--- a/k8s/workspace/run-packages-mcc.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-
-. "$(dirname "$0")/functions.sh"
-cd /artifacts
-. env.sh
-. /opt/cfg-checker/.checkervenv/bin/activate
-fname="/artifacts/reports/$MY_CLIENTSHORTNAME-mcc-packages-$(get_timestamp).html"
-mos-checker --ssh-direct --kube-config /artifacts/envs/mcc-kubeconfig.yaml --env-name $MY_CLIENTSHORTNAME-mcc --env-config /artifacts/envs/mcc-checker.env packages report --html "${fname}"
-update_latest_report_to "${fname}"
-deactivate
diff --git a/k8s/workspace/run-packages-mos.sh b/k8s/workspace/run-packages-mos.sh
deleted file mode 100644
index a2fa3a2..0000000
--- a/k8s/workspace/run-packages-mos.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-
-. "$(dirname "$0")/functions.sh"
-cd /artifacts
-. env.sh
-. /opt/cfg-checker/.checkervenv/bin/activate
-fname="/artifacts/reports/$MY_CLIENTSHORTNAME-mos-packages-$(get_timestamp).html"
-mos-checker --ssh-direct --kube-config /artifacts/envs/mos-kubeconfig.yaml --env-name $MY_CLIENTSHORTNAME-mos --env-config /artifacts/envs/mos-checker.env packages report --html "${fname}"
-update_latest_report_to "${fname}"
-deactivate
diff --git a/k8s/workspace/run-stacklight-mcc.sh b/k8s/workspace/run-stacklight-mcc.sh
deleted file mode 100644
index a235370..0000000
--- a/k8s/workspace/run-stacklight-mcc.sh
+++ /dev/null
@@ -1,82 +0,0 @@
-#!/bin/bash
-
-. "$(dirname "$0")/functions.sh"
-tenv=mcc
-. /opt/si-tests/.sivenv/bin/activate
-cd $MY_PROJFOLDER/tmp
-. $MY_PROJFOLDER/env.sh
-. $MY_PROJFOLDER/envs/${tenv}rc
-
-if [ -z "$WRITER_PASSWORD" ]; then
- echo -e "\nWRITER_PASSWORD is not exported or is empty.\nPlease export WRITER_PASSWORD or edit the /artifacts/env.sh file to set the writer keycloak user password in WRITER_PASSWORD\nExiting...\n"
- exit 1
-fi
-
-# Configuring the env variables
-echo "# Configuring env variables"
-unset TARGET_CLUSTER
-unset TARGET_NAMESPACE
-export TARGET_CLUSTER=kaas-mgmt
-export TARGET_NAMESPACE=default
-
-si_config_file="$MY_PROJFOLDER/envs/si-config.yaml"
-
-if [ ! -f "$si_config_file" ]; then
- echo -e "\nFile '$si_config_file' does not exist, creating it..."
- touch "$si_config_file"
-else
- echo "File '$si_config_file' already exists."
-fi
-
-cat <<EOF > "$si_config_file"
-keycloak_users:
- writer: $WRITER_PASSWORD
-EOF
-
-export SI_CONFIG=$MY_PROJFOLDER/envs/si-config.yaml
-export SI_CONFIG_PATH=$SI_CONFIG
-
-cat $SI_CONFIG
-
-if [ -z "$KEYCLOAK_URL" ]; then
- echo "KEYCLOAK_URL is not exported in the environment variables, getting it from:"
- echo "kubectl get cluster kaas-mgmt -o jsonpath='{.status.providerStatus.helm.releases.iam.keycloak.url}'"
- KEYCLOAK_URL=$(kubectl get cluster kaas-mgmt -o jsonpath='{.status.providerStatus.helm.releases.iam.keycloak.url}')
-else
- echo "KEYCLOAK_URL is manually set to $KEYCLOAK_URL"
-fi
-export KEYCLOAK_URL=$KEYCLOAK_URL
-
-# Cleaning up
-echo "# Cleaning up '/artifacts/tmp/artifacts/'"
-[ -d "/artifacts/tmp/artifacts/" ] && rm -rf "/artifacts/tmp/artifacts/"
-[ -f "/artifacts/tmp/nosetests.xml" ] && rm "/artifacts/tmp/nosetests.xml"
-mkdir "/artifacts/tmp/artifacts/"
-
-# Show the exported envs
-echo "# Exported envs"
-env | grep TARGET
-env | grep BIN
-env | grep KUBE
-env | grep K8S | grep -v CONFORMANCE
-env | grep SI_CONFIG
-env | grep KEYC
-
-# Run tests
-echo "# Running the tests"
-pytest -vv /opt/si-tests/si_tests/tests/deployment/test_sl_test.py
-deactivate
-
-# Report
-if [ -d $MY_PROJFOLDER/reports/${tenv}-stacklight ]; then
- echo "# Generating repors"
- yes | rm $MY_PROJFOLDER/reports/${tenv}-stacklight/*
-else
- mkdir $MY_PROJFOLDER/reports/${tenv}-stacklight
-fi
-cp ./artifacts/*.xml $MY_PROJFOLDER/reports/${tenv}-stacklight/
-cd $MY_PROJFOLDER/reports/
-fname="$MY_CLIENTSHORTNAME-${tenv}-stacklight-$(get_timestamp).html"
-tparser -f r_xml -d -r "${fname}" $MY_PROJFOLDER/reports/${tenv}-stacklight/
-update_latest_report_to "$MY_PROJFOLDER/reports/${fname}"
-cd $MY_PROJFOLDER
diff --git a/k8s/workspace/run-stacklight-mos.sh b/k8s/workspace/run-stacklight-mos.sh
deleted file mode 100644
index 8a1cc71..0000000
--- a/k8s/workspace/run-stacklight-mos.sh
+++ /dev/null
@@ -1,90 +0,0 @@
-#!/bin/bash
-
-. "$(dirname "$0")/functions.sh"
-tenv=mos
-. /opt/si-tests/.sivenv/bin/activate
-cd $MY_PROJFOLDER/tmp
-. $MY_PROJFOLDER/env.sh
-. $MY_PROJFOLDER/envs/mccrc
-
-if [ -z "$WRITER_PASSWORD" ]; then
- echo -e "\nWRITER_PASSWORD is not exported or is empty.\nPlease export WRITER_PASSWORD or edit the /artifacts/env.sh file to set the writer keycloak user password in WRITER_PASSWORD\nExiting...\n"
- exit 1
-fi
-
-# Configuring the env variables
-echo "# Configuring env variables"
-unset TARGET_CLUSTER
-unset TARGET_NAMESPACE
-unset ENV_NAME
-export TARGET_NAMESPACE=${MOS_NS}
-export TARGET_CLUSTER=${MOS_CLUSTER}
-export COMPONENT_TEST_RUN_ON_TARGET_CLUSTER=True
-export ENV_NAME=${MOS_CLUSTER}
-
-public_domain_name=$(kubectl --kubeconfig $MY_PROJFOLDER/envs/mos-kubeconfig.yaml -n openstack get osdpl -o jsonpath='{.items[0].spec.public_domain_name}')
-export OS_KEYSTONE_URL="https://keystone.${public_domain_name}/v3"
-export SL_TESTS_OS_KEYSTONE_URL=$OS_KEYSTONE_URL
-export OS_DOMAIN_NAME=$public_domain_name
-export SL_TESTS_OS_DOMAIN_NAME=$public_domain_name
-
-si_config_file="$MY_PROJFOLDER/envs/si-config.yaml"
-if [ ! -f "$si_config_file" ]; then
- echo -e "\nFile '$si_config_file' does not exist, creating it..."
- touch "$si_config_file"
-else
- echo "File '$si_config_file' already exists."
-fi
-cat <<EOF > "$si_config_file"
-keycloak_users:
- writer: $WRITER_PASSWORD
-EOF
-export SI_CONFIG=$MY_PROJFOLDER/envs/si-config.yaml
-export SI_CONFIG_PATH=$SI_CONFIG
-cat $SI_CONFIG
-
-if [ -z "$KEYCLOAK_URL" ]; then
- echo "KEYCLOAK_URL is not exported in the environment variables, getting it from:"
- echo "kubectl get cluster kaas-mgmt -o jsonpath='{.status.providerStatus.helm.releases.iam.keycloak.url}'"
- KEYCLOAK_URL=$(kubectl get cluster kaas-mgmt -o jsonpath='{.status.providerStatus.helm.releases.iam.keycloak.url}')
-else
- echo "KEYCLOAK_URL is manually set to $KEYCLOAK_URL"
-fi
-export KEYCLOAK_URL=$KEYCLOAK_URL
-
-# Cleaning up
-echo "# Cleaning up '/artifacts/tmp/artifacts/'"
-[ -d "/artifacts/tmp/artifacts/" ] && rm -rf "/artifacts/tmp/artifacts/"
-[ -f "/artifacts/tmp/nosetests.xml" ] && rm "/artifacts/tmp/nosetests.xml"
-mkdir "/artifacts/tmp/artifacts/"
-
-# Show the exported envs
-echo "# Exported envs"
-env | grep TARGET
-env | grep BIN
-env | grep KUBE
-env | grep K8S | grep -v CONFORMANCE
-env | grep SI_CONFIG
-env | grep KEYCLOAK
-env | grep OS_
-env | grep SL_TESTS
-env | grep COMPONENT_TEST_RUN_ON_TARGET_CLUSTER
-
-# Run tests
-echo "# Running the tests"
-pytest -vv /opt/si-tests/si_tests/tests/deployment/test_sl_test.py
-deactivate
-
-# Report
-if [ -d $MY_PROJFOLDER/reports/${tenv}-stacklight ]; then
- echo "# Generating repors"
- yes | rm $MY_PROJFOLDER/reports/${tenv}-stacklight/*
-else
- mkdir $MY_PROJFOLDER/reports/${tenv}-stacklight
-fi
-cp ./artifacts/*.xml $MY_PROJFOLDER/reports/${tenv}-stacklight/
-cd $MY_PROJFOLDER/reports/
-fname="$MY_CLIENTSHORTNAME-${tenv}-stacklight-$(get_timestamp).html"
-tparser -f r_xml -d -r "${fname}" $MY_PROJFOLDER/reports/${tenv}-stacklight/
-update_latest_report_to "$MY_PROJFOLDER/reports/${fname}"
-cd $MY_PROJFOLDER
diff --git a/k8s/workspace/target-child b/k8s/workspace/target-child
new file mode 100644
index 0000000..b45b039
--- /dev/null
+++ b/k8s/workspace/target-child
@@ -0,0 +1,4 @@
+#!/bin/bash
+export TARGET_NAMESPACE=${CHILD_CLUSTER_NS}
+export TARGET_CLUSTER=${CHILD_CLUSTER_NAME}
+export TARGET_CLD=${CHILD_CLUSTER_NAME}
diff --git a/k8s/workspace/target-mcc b/k8s/workspace/target-mcc
deleted file mode 100644
index 4c05923..0000000
--- a/k8s/workspace/target-mcc
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/bash
-export TARGET_CLUSTER=kaas-mgmt
-export TARGET_NAMESPACE=default
-
diff --git a/k8s/workspace/target-mos b/k8s/workspace/target-mos
deleted file mode 100644
index fe5278e..0000000
--- a/k8s/workspace/target-mos
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/bash
-export TARGET_NAMESPACE=${MOS_NS}
-export TARGET_CLUSTER=${MOS_CLUSTER}