forked from kubevirt/kubevirt
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathperfscale-test.sh
executable file
·93 lines (78 loc) · 2.91 KB
/
perfscale-test.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#!/bin/bash
#
# This file is part of the KubeVirt project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Copyright 2022 IBM, Inc.
#
set -ex
kubectl() { KUBEVIRTCI_VERBOSE=false cluster-up/kubectl.sh "$@"; }
_prometheus_port_forward_pid=""
trap "clean_up" EXIT SIGINT SIGTERM SIGQUIT
clean_up() {
kill -9 $_prometheus_port_forward_pid 2> /dev/null | exit 0
make cluster-clean
}
echo "Nodes are ready:"
kubectl get nodes
echo "Cluster sync: push docker images and deploy kubevirt"
make cluster-sync
# OpenShift is running important containers under default namespace
namespaces=(kubevirt default)
if [[ $NAMESPACE != "kubevirt" ]]; then
namespaces+=($NAMESPACE)
fi
timeout=300
sample=30
for i in ${namespaces[@]}; do
# Wait until kubevirt pods are running or completed
current_time=0
while [ -n "$(kubectl get pods -n $i --no-headers | grep -v -E 'Running|Completed')" ]; do
echo "Waiting for kubevirt pods to enter the Running/Completed state ..."
kubectl get pods -n $i --no-headers | >&2 grep -v -E 'Running|Completed' || true
sleep $sample
current_time=$((current_time + sample))
if [ $current_time -gt $timeout ]; then
echo "Dump kubevirt state:"
make dump
exit 1
fi
done
# Make sure all containers are ready
current_time=0
while [ -n "$(kubectl get pods -n $i --field-selector=status.phase==Running -o'custom-columns=status:status.containerStatuses[*].ready' --no-headers | grep false)" ]; do
echo "Waiting for KubeVirt containers to become ready ..."
kubectl get pods -n $i --field-selector=status.phase==Running -o'custom-columns=status:status.containerStatuses[*].ready' --no-headers | grep false || true
sleep $sample
current_time=$((current_time + sample))
if [ $current_time -gt $timeout ]; then
echo "Dump kubevirt state:"
make dump
exit 1
fi
done
kubectl get pods -n $i
done
# build perfscale tools
make bazel-build
export DOCKER_PREFIX="${DOCKER_PREFIX:-registry:5000/kubevirt}"
export DOCKER_TAG="${DOCKER_TAG:-devel}"
export PERFAUDIT="${PERFAUDIT:-true}"
export PROMETHEUS_PORT=${PROMETHEUS_PORT:-30007}
# expose prometheus in an external kubernetes cluster
if [[ (${PERFAUDIT} == "true" || ${PERFAUDIT} == "True") && ${KUBEVIRT_PROVIDER} == "external" ]]; then
kubectl -n openshift-monitoring port-forward service/prometheus-operated ${PROMETHEUS_PORT} &> /dev/null &
_prometheus_port_forward_pid=$1
fi
./hack/perfscale-tests.sh