Fix sriov test in baremetal deploy
[multicloud/k8s.git] / kud / tests / nfd.sh
1 #!/bin/bash
2 # SPDX-license-identifier: Apache-2.0
3 ##############################################################################
4 # Copyright (c) 2018
5 # All rights reserved. This program and the accompanying materials
6 # are made available under the terms of the Apache License, Version 2.0
7 # which accompanies this distribution, and is available at
8 # http://www.apache.org/licenses/LICENSE-2.0
9 ##############################################################################
10
11 set -o errexit
12 set -o nounset
13 set -o pipefail
14
15 source _common_test.sh
16
17 rm -f $HOME/*.yaml
18 pod_name=nfd-pod
19
20 install_deps
21
22 function create_pod_yaml_with_affinity {
23
24 cat << POD > $HOME/$pod_name-affinity.yaml
25 apiVersion: v1
26 kind: Pod
27 metadata:
28   name: $pod_name
29 spec:
30   affinity:
31     nodeAffinity:
32       requiredDuringSchedulingIgnoredDuringExecution:
33         nodeSelectorTerms:
34         - matchExpressions:
35           - key: "feature.node.kubernetes.io/kernel-version.major"
36             operator: Gt
37             values:
38             - '3'
39         - matchExpressions:
40           - key: "feature.node.kubernetes.io/kernel-version.major"
41             operator: Lt
42             values:
43             - '20'
44         - matchExpressions:
45           - key: "feature.node.kubernetes.io/kernel-version.major"
46             operator: In
47             values:
48             - '3'
49             - '4'
50             - '5'
51         - matchExpressions:
52           - key: "feature.node.kubernetes.io/kernel-version.major"
53             operator: NotIn
54             values:
55             - '1'
56         - matchExpressions:
57           - key: "feature.node.kubernetes.io/kernel-version.major"
58             operator: Exists
59         - matchExpressions:
60           - key: "feature.node.kubernetes.io/label_does_not_exist"
61             operator: DoesNotExist
62   containers:
63   - name: with-node-affinity
64     image: gcr.io/google_containers/pause:2.0
65 POD
66 }
67
68 function create_pod_yaml_with_nodeSelector {
69
70 cat << POD > $HOME/$pod_name-nodeSelector.yaml
71 apiVersion: v1
72 kind: Pod
73 metadata:
74   name: $pod_name
75 spec:
76   nodeSelector:
77     feature.node.kubernetes.io/kernel-version.major: '4'
78   containers:
79   - name: with-node-affinity
80     image: gcr.io/google_containers/pause:2.0
81 POD
82
83 }
84
85 if $(kubectl version &>/dev/null); then
86     labels=$(kubectl get nodes -o json | jq .items[].metadata.labels)
87
88     echo $labels
89     if [[ $labels != *"kubernetes.io"* ]]; then
90         exit 1
91     fi
92
93     create_pod_yaml_with_affinity
94     create_pod_yaml_with_nodeSelector
95
96     for podType in ${POD_TYPE:-nodeSelector affinity}; do
97
98         kubectl delete pod $pod_name --ignore-not-found=true --now
99         while kubectl get pod $pod_name &>/dev/null; do
100             sleep 5
101         done
102
103         kubectl create -f $HOME/$pod_name-$podType.yaml --validate=false
104
105         for pod in $pod_name; do
106             status_phase=""
107             while [[ $status_phase != "Running" ]]; do
108                 new_phase=$(kubectl get pods $pod | awk 'NR==2{print $3}')
109                 if [[ $new_phase != $status_phase ]]; then
110                     echo "$(date +%H:%M:%S) - $pod-$podType : $new_phase"
111                     status_phase=$new_phase
112                 fi
113
114                 if [[ $new_phase == "Running" ]]; then
115                     echo " Test is complete.."
116                 fi
117                 if [[ $new_phase == "Err"* ]]; then
118                     exit 1
119                 fi
120             done
121         done
122         kubectl delete pod $pod_name
123         while kubectl get pod $pod_name &>/dev/null; do
124             sleep 5
125         done
126
127     done
128 fi