Fix sriov test in baremetal deploy
[multicloud/k8s.git] / kud / tests / multus.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.sh
16 source _functions.sh
17
18 function generate_CRD_for_bridge_cni {
19     local csar_id=$1
20     _checks_args $csar_id
21     pushd ${CSAR_DIR}/${csar_id}
22
23     cat << NET > bridge-network.yaml
24 apiVersion: "k8s.cni.cncf.io/v1"
25 kind: NetworkAttachmentDefinition
26 metadata:
27   name: bridge-conf
28 spec:
29   config: '{
30     "cniVersion": "0.3.0",
31     "name": "mynet",
32     "type": "bridge",
33     "ipam": {
34         "type": "host-local",
35         "subnet": "$multus_private_net_cidr"
36     }
37 }'
38 NET
39     popd
40 }
41
42 function generate_CRD_for_macvlan_cni {
43     local csar_id=$1
44     local master_name=`route | grep 'default' | awk '{print $8}' |head -n 1`
45     _checks_args $csar_id
46     pushd ${CSAR_DIR}/${csar_id}
47
48     cat << NET > macvlan-network.yaml
49 apiVersion: "k8s.cni.cncf.io/v1"
50 kind: NetworkAttachmentDefinition
51 metadata:
52   name: macvlan-conf
53 spec:
54   config: '{
55     "cniVersion": "0.3.0",
56     "name": "mynet",
57     "type": "macvlan",
58     "master": "$master_name",
59     "ipam": {
60         "type": "host-local",
61         "subnet": "$multus_private_net_cidr"
62     }
63 }'
64 NET
65     popd
66 }
67
68 function generate_CRD_for_ipvlan_cni {
69     local csar_id=$1
70     local master_name=`route | grep 'default' | awk '{print $8}' |head -n 1`
71     _checks_args $csar_id
72     pushd ${CSAR_DIR}/${csar_id}
73
74     cat << NET > ipvlan-network.yaml
75 apiVersion: "k8s.cni.cncf.io/v1"
76 kind: NetworkAttachmentDefinition
77 metadata:
78   name: ipvlan-conf
79 spec:
80   config: '{
81     "cniVersion": "0.3.0",
82     "name": "mynet",
83     "type": "ipvlan",
84     "master": "$master_name",
85     "ipam": {
86         "type": "host-local",
87         "subnet": "$multus_private_net_cidr"
88     }
89 }'
90 NET
91     popd
92 }
93
94 function generate_CRD_for_ptp_cni {
95     local csar_id=$1
96     _checks_args $csar_id
97     pushd ${CSAR_DIR}/${csar_id}
98
99     cat << NET > ptp-network.yaml
100 apiVersion: "k8s.cni.cncf.io/v1"
101 kind: NetworkAttachmentDefinition
102 metadata:
103   name: ptp-conf
104 spec:
105   config: '{
106     "cniVersion": "0.3.0",
107     "name": "mynet",
108     "type": "ptp",
109     "ipam": {
110         "type": "host-local",
111         "subnet": "$multus_private_net_cidr"
112     }
113 }'
114 NET
115     popd
116 }
117
118 csar_id=49408ca6-b75b-11e8-8076-525400feed26
119
120 # Setup
121 generate_CRD_for_bridge_cni $csar_id
122 generate_CRD_for_macvlan_cni $csar_id
123 generate_CRD_for_ipvlan_cni $csar_id
124 generate_CRD_for_ptp_cni $csar_id
125
126 pushd ${CSAR_DIR}/${csar_id}
127
128 kubectl apply -f bridge-network.yaml
129 kubectl apply -f macvlan-network.yaml
130 kubectl apply -f ipvlan-network.yaml
131 kubectl apply -f ptp-network.yaml
132
133 for cni in ${CNI_PLUGINS:-bridge macvlan ipvlan ptp}; do
134     cat << DEPLOYMENT > $multus_deployment_name.yaml
135 apiVersion: apps/v1
136 kind: Deployment
137 metadata:
138   name: $multus_deployment_name
139   labels:
140     app: multus
141 spec:
142   replicas: 1
143   selector:
144     matchLabels:
145       app: multus
146   template:
147     metadata:
148       labels:
149         app: multus
150       annotations:
151         k8s.v1.cni.cncf.io/networks: ${cni}-conf
152     spec:
153       containers:
154       - name: $multus_deployment_name
155         image: "busybox"
156         command: ["top"]
157         stdin: true
158         tty: true
159 DEPLOYMENT
160
161 setup $multus_deployment_name
162
163 # Test
164 deployment_pod=$(kubectl get pods | grep  $multus_deployment_name | awk '{print $1}')
165 echo "===== $deployment_pod details ====="
166 kubectl exec -it $deployment_pod -- ip a
167 multus_nic=$(kubectl exec -it $deployment_pod -- ip a)
168 net1_ip=$(kubectl exec -it $deployment_pod -- ifconfig net1 \
169             | grep "inet addr" | awk '{ print $2}' |tr -d "addr:")
170
171 if [[ $multus_nic != *"net1"* ]]; then
172     echo "The $deployment_pod pod doesn't contain the net1 nic"
173     exit 1
174 else
175     check_ip_range ${net1_ip} ${multus_private_net_cidr}
176         if [[ $? -eq 1 ]]; then
177             echo "unexpected ip range"
178             exit 0
179         fi
180     echo "$cni Test Completed!"
181 fi
182
183 # Teardown
184 teardown $multus_deployment_name
185
186 done
187 popd