Remove BPA from Makefile
[icn.git] / cmd / bpa-operator / e2etest / bpa_bmh_verifier.sh
1 #!/usr/bin/env bash
2 set -eu -o pipefail
3
4 SCRIPTDIR="$(readlink -f $(dirname ${BASH_SOURCE[0]}))"
5 LIBDIR="$(dirname $(dirname $(dirname ${SCRIPTDIR})))/env/lib"
6
7 source $LIBDIR/common.sh
8
9 CLUSTER_NAME=test-bmh-cluster
10 ADDONS_NAMESPACE=kud
11
12 function emco_ready {
13     KUBECONFIG=${CLUSTER_KUBECONFIG} kubectl -n emco wait pod --all --for=condition=Ready --timeout=0s 1>/dev/null 2>/dev/null
14 }
15
16 function emcoctl_apply {
17     [[ $(/opt/kud/multi-cluster/${CLUSTER_NAME}/artifacts/emcoctl.sh apply -f $@ -v values.yaml |
18              awk '/Response Code:/ {code=$3} END{print code}') =~ 2.. ]]
19 }
20
21 function emcoctl_delete {
22     [[ $(/opt/kud/multi-cluster/${CLUSTER_NAME}/artifacts/emcoctl.sh delete -f $@ -v values.yaml |
23              awk '/Response Code:/ {code=$3} END{print code}') =~ 404 ]]
24 }
25
26 function emcoctl_instantiate {
27     [[ $(/opt/kud/multi-cluster/${CLUSTER_NAME}/artifacts/emcoctl.sh apply projects/kud/composite-apps/$@/v1/deployment-intent-groups/deployment/instantiate |
28              awk '/Response Code:/ {code=$3} END{print code}') =~ 2.. ]]
29 }
30
31 function emcoctl_terminate {
32     [[ $(/opt/kud/multi-cluster/${CLUSTER_NAME}/artifacts/emcoctl.sh apply projects/kud/composite-apps/$@/v1/deployment-intent-groups/deployment/terminate |
33              awk '/Response Code:/ {code=$3} END{print code}') =~ 2.. ]]
34 }
35
36 function emcoctl {
37     local -r op=$1
38     shift
39
40     local -r interval=2
41     for ((try=0;try<600;try+=${interval})); do
42         if emco_ready; then break; fi
43         echo "$(date +%H:%M:%S) - Waiting for emco"
44         sleep ${interval}s
45     done
46
47     for ((;try<600;try+=${interval})); do
48         case ${op} in
49             "apply") if emcoctl_apply $@; then return 0; fi ;;
50             "delete") if emcoctl_delete $@; then return 0; fi ;;
51             "instantiate") if emcoctl_instantiate $@; then return 0; fi ;;
52             "terminate") if emcoctl_terminate $@; then return 0; fi ;;
53         esac
54         echo "$(date +%H:%M:%S) - Waiting for emcoctl ${op} $@"
55         sleep ${interval}s
56     done
57
58     return 1
59 }
60
61 function addons_instantiated {
62     KUBECONFIG=${CLUSTER_KUBECONFIG} kubectl -n ${ADDONS_NAMESPACE} wait pod -l app.kubernetes.io/instance=r1 --for=condition=Ready --timeout=0s 1>/dev/null 2>/dev/null
63 }
64
65 function addons_terminated {
66     [[ $(KUBECONFIG=${CLUSTER_KUBECONFIG} kubectl -n ${ADDONS_NAMESPACE} get pod -l app.kubernetes.io/instance=r1 --no-headers 2>/dev/null | wc -l) == 0 ]]
67 }
68
69 function networks_instantiated {
70     local -r count=$(KUBECONFIG=${CLUSTER_KUBECONFIG} kubectl -n ${ADDONS_NAMESPACE} get sriovnetworknodestate --no-headers 2>/dev/null | wc -l)
71     local -r succeeded=$(KUBECONFIG=${CLUSTER_KUBECONFIG} kubectl -n ${ADDONS_NAMESPACE} get sriovnetworknodestate -o jsonpath='{range .items[*]}{.status.syncStatus}{"\n"}{end}' 2>/dev/null | grep "Succeeded" | wc -l)
72     [[ $count == $succeeded ]]
73 }
74
75 function networks_terminated {
76     # The syncStatus will be the same whether we are instantiating or terminating an SR-IOV network
77     networks_instantiated
78 }
79
80 function kubevirt_instantiated {
81     [[ $(KUBECONFIG=${CLUSTER_KUBECONFIG} kubectl -n ${ADDONS_NAMESPACE} get kubevirt -o jsonpath='{range .items[*]}{.status.phase}{"\n"}{end}' 2>/dev/null | grep "Deployed" | wc -l) == 1 ]]
82     [[ $(KUBECONFIG=${CLUSTER_KUBECONFIG} kubectl -n ${ADDONS_NAMESPACE} get cdi -o jsonpath='{range .items[*]}{.status.phase}{"\n"}{end}' 2>/dev/null | grep "Deployed" | wc -l) == 1 ]]
83 }
84
85 function kubevirt_terminated {
86     [[ $(KUBECONFIG=${CLUSTER_KUBECONFIG} kubectl -n ${ADDONS_NAMESPACE} get kubevirt --no-headers 2>/dev/null | wc -l) == 0 ]]
87     [[ $(KUBECONFIG=${CLUSTER_KUBECONFIG} kubectl -n ${ADDONS_NAMESPACE} get cdi --no-headers 2>/dev/null | wc -l) == 0 ]]
88 }
89
90 if [[ $1 == "provision" ]]; then
91     kubectl create -f e2etest/test_bmh_provisioning_cr.yaml
92     sleep 5
93
94     #Check Status of kud job pod
95     status="Running"
96
97     while [[ $status == "Running" ]]
98     do
99         echo "KUD install job still running"
100         sleep 2m
101         stats=$(kubectl get pods |grep -i kud-${CLUSTER_NAME})
102         status=$(echo $stats | cut -d " " -f 3)
103     done
104
105     #Print logs of Job Pod
106     jobPod=$(kubectl get pods|grep kud-${CLUSTER_NAME})
107     podName=$(echo $jobPod | cut -d " " -f 1)
108     printf "\nNow Printing Job pod logs\n"
109     kubectl logs $podName
110
111     if [[ $status == "Completed" ]];
112     then
113         printf "KUD Install Job completed\n"
114         printf "Checking cluster status\n"
115
116         source ../../env/lib/common.sh
117         CLUSTER_KUBECONFIG=/opt/kud/multi-cluster/${CLUSTER_NAME}/artifacts/admin.conf
118         APISERVER=$(KUBECONFIG=${CLUSTER_KUBECONFIG} kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}')
119         TOKEN=$(KUBECONFIG=${CLUSTER_KUBECONFIG} kubectl get secret $(KUBECONFIG=${CLUSTER_KUBECONFIG} kubectl get serviceaccount default -o jsonpath='{.secrets[0].name}') -o jsonpath='{.data.token}' | base64 --decode)
120         if ! call_api $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure;
121         then
122             printf "\nKubernetes Cluster Install did not complete successfully\n"
123             exit 1
124         else
125             printf "\nKubernetes Cluster Install was successful\n"
126         fi
127
128     else
129         printf "KUD Install Job failed\n"
130         exit 1
131     fi
132
133     #Apply addons
134     printf "Applying KUD addons\n"
135     pushd /opt/kud/multi-cluster/${CLUSTER_NAME}/artifacts/addons
136     emcoctl apply 00-controllers.yaml
137     emcoctl apply 01-cluster.yaml
138     emcoctl apply 02-project.yaml
139     emcoctl apply 03-addons-app.yaml
140     popd
141
142     #Instantiate addons
143     emcoctl instantiate addons
144     wait_for addons_instantiated
145     emcoctl instantiate networks
146     wait_for networks_instantiated
147     emcoctl instantiate kubevirt
148     wait_for kubevirt_instantiated
149
150     #Test addons
151     printf "Testing KUD addons\n"
152     pushd /opt/kud/multi-cluster/addons/tests
153     failed_kud_tests=""
154     container_runtime=$(KUBECONFIG=${CLUSTER_KUBECONFIG} kubectl get nodes -o jsonpath='{.items[].status.nodeInfo.containerRuntimeVersion}')
155     if [[ "${container_runtime}" == "containerd://1.2.13" ]]; then
156         #With containerd 1.2.13, the qat test container image fails to unpack.
157         kud_tests="topology-manager-sriov kubevirt multus ovn4nfv nfd sriov-network cmk"
158     else
159         kud_tests="topology-manager-sriov kubevirt multus ovn4nfv nfd sriov-network qat cmk"
160     fi
161     for test in ${kud_tests}; do
162         KUBECONFIG=${CLUSTER_KUBECONFIG} bash ${test}.sh || failed_kud_tests="${failed_kud_tests} ${test}"
163     done
164     KUBECONFIG=${CLUSTER_KUBECONFIG} DEMO_FOLDER=${PWD} PATH=/opt/kud/multi-cluster/${CLUSTER_NAME}/artifacts:${PATH} bash plugin_fw_v2.sh --external || failed_kud_tests="${failed_kud_tests} plugin_fw_v2"
165     if [[ ! -z "$failed_kud_tests" ]]; then
166         printf "Test cases failed:${failed_kud_tests}\n"
167         exit 1
168     fi
169     popd
170     printf "All test cases passed\n"
171 elif [[ $1 == "teardown" ]]; then
172     CLUSTER_KUBECONFIG=/opt/kud/multi-cluster/${CLUSTER_NAME}/artifacts/admin.conf
173     #Tear down setup
174     printf "\n\nBeginning BMH E2E Test Teardown\n\n"
175     emcoctl terminate kubevirt
176     wait_for kubevirt_terminated
177     emcoctl terminate networks
178     wait_for networks_terminated
179     emcoctl terminate addons
180     wait_for addons_terminated
181     pushd /opt/kud/multi-cluster/${CLUSTER_NAME}/artifacts/addons
182     emcoctl delete 03-addons-app.yaml
183     emcoctl delete 02-project.yaml
184     emcoctl delete 01-cluster.yaml
185     emcoctl delete 00-controllers.yaml
186     popd
187     kubectl delete -f e2etest/test_bmh_provisioning_cr.yaml
188     kubectl delete job kud-${CLUSTER_NAME}
189     kubectl delete --ignore-not-found=true configmap ${CLUSTER_NAME}-configmap
190     rm -rf /opt/kud/multi-cluster/${CLUSTER_NAME}
191     rm -rf /opt/kud/multi-cluster/addons
192     make delete
193 fi