Merge "Ovnaction and vfw updates for deploy api change"
[multicloud/k8s.git] / kud / tests / ncm-test.sh
1 #!/bin/bash
2 set -o errexit
3 set -o nounset
4 set -o pipefail
5
6 source _functions.sh
7
8 base_url_clm=${base_url:-"http://10.10.10.6:31044/v2"}
9 base_url_ncm=${base_url:-"http://10.10.10.6:31983/v2"}
10 base_url_orchestrator=${base_url:-"http://10.10.10.6:30186/v2"}
11
12 # add the rsync controller entry
13 rsynccontrollername="rsync"
14 rsynccontrollerdata="$(cat<<EOF
15 {
16   "metadata": {
17     "name": "rsync",
18     "description": "description of $rsynccontrollername controller",
19     "userData1": "$rsynccontrollername user data 1",
20     "userData2": "$rsynccontrollername user data 2"
21   },
22   "spec": {
23     "host": "${rsynccontrollername}",
24     "port": 9041 
25   }
26 }
27 EOF
28 )"
29
30 # ncm data samples
31 clusterprovidername="cluster-provider-a"
32 clusterproviderdata="$(cat<<EOF
33 {
34   "metadata": {
35     "name": "$clusterprovidername",
36     "description": "description of $clusterprovidername",
37     "userData1": "$clusterprovidername user data 1",
38     "userData2": "$clusterprovidername user data 2"
39   }
40 }
41 EOF
42 )"
43
44 clustername="edge01"
45 clusterdata="$(cat<<EOF
46 {
47   "metadata": {
48     "name": "$clustername",
49     "description": "description of $clustername",
50     "userData1": "$clustername user data 1",
51     "userData2": "$clustername user data 2"
52   }
53 }
54 EOF
55 )"
56
57 # set $kubeconfigfile before running script to point to the desired config file
58 defaultkubeconfig="$(cat<<EOF
59 {
60     "not a good kube config file"
61 }
62 EOF
63 )"
64 echo "$defaultkubeconfig" > /tmp/ncmkubeconfig
65
66 kubeconfigfile=${kubeconfigfile:-"/tmp/ncmkubeconfig"}
67
68 labelname="LabelA"
69 labeldata="$(cat<<EOF
70 {"label-name": "$labelname"}
71 EOF
72 )"
73
74 kvname="kva"
75 kvdata="$(cat<<EOF
76 {
77   "metadata": {
78     "name": "$kvname",
79     "description": "this is key value $kvname",
80     "userData1": "cluster $kvname pair data",
81     "userData2": "cluster $kvname pair data a"
82   },
83   "spec": {
84       "kv" : [
85           {"keyA": "value A"},
86           {"keyB": "value B"},
87           {"keyC": "value C"}
88        ]
89    }
90 }
91 EOF
92 )"
93
94 networkname="network-a"
95 networkdata="$(cat<<EOF
96 {
97   "metadata": {
98     "name": "$networkname",
99     "description": "Description of $networkname",
100     "userData1": "$networkname data part A",
101     "userData2": "$networkname data part B"
102   },
103   "spec": {
104       "cniType": "ovn4nfv",
105       "ipv4Subnets": [
106           {
107               "subnet": "172.16.33.0/24",
108               "name": "subnet3",
109               "gateway":  "172.16.33.1/32",
110               "excludeIps": "172.16.33.2 172.16.33.5..172.16.33.10"
111           },
112           {
113               "subnet": "172.16.34.0/24",
114               "name": "subnet4",
115               "gateway":  "172.16.34.1/32",
116               "excludeIps": "172.16.34.2 172.16.34.5..172.16.34.10"
117           }
118       ]
119   }
120 }
121 EOF
122 )"
123
124 providernetworkname="providernetwork-a"
125 providernetworkdata="$(cat<<EOF
126 {
127   "metadata": {
128     "name": "$providernetworkname",
129     "description": "Description of $providernetworkname",
130     "userData1": "$providernetworkname data part A",
131     "userData2": "$providernetworkname data part B"
132   },
133   "spec": {
134       "cniType": "ovn4nfv",
135       "ipv4Subnets": [
136           {
137               "subnet": "172.16.31.0/24",
138               "name": "subnet1",
139               "gateway":  "172.16.31.1/32",
140               "excludeIps": "172.16.31.2 172.16.31.5..172.16.31.10"
141           },
142           {
143               "subnet": "172.16.32.0/24",
144               "name": "subnet2",
145               "gateway":  "172.16.32.1/32",
146               "excludeIps": "172.16.32.2 172.16.32.5..172.16.32.10"
147           }
148       ],
149       "providerNetType": "VLAN",
150       "vlan": {
151           "vlanId": "100",
152           "providerInterfaceName": "eth1",
153           "logicalInterfaceName": "eth1.100",
154           "vlanNodeSelector": "specific",
155           "nodeLabelList": [
156               "kubernetes.io/hostname=localhost",
157               "kubernetes.io/name=localhost"
158           ]
159       }
160   }
161 }
162 EOF
163 )"
164
165 function createOrchData {
166     call_api -d "${rsynccontrollerdata}" "${base_url_orchestrator}/controllers"
167 }
168
169 function createNcmData {
170     call_api -d "${clusterproviderdata}" "${base_url_clm}/cluster-providers"
171     call_api -H "Content-Type: multipart/form-data" -F "metadata=$clusterdata" -F "file=@$kubeconfigfile" "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters"
172     call_api -d "${labeldata}" "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters/${clustername}/labels"
173     call_api -d "${kvdata}" "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters/${clustername}/kv-pairs"
174     call_api -d "${providernetworkdata}" "${base_url_ncm}/cluster-providers/${clusterprovidername}/clusters/${clustername}/provider-networks"
175     call_api -d "${networkdata}" "${base_url_ncm}/cluster-providers/${clusterprovidername}/clusters/${clustername}/networks"
176 }
177
178 # apply the network and providernetwork to an appcontext and instantiate with resource synchronizer (when implemented)
179 function applyNcmData {
180     call_api -d "{ }" "${base_url_ncm}/cluster-providers/${clusterprovidername}/clusters/${clustername}/apply"
181 }
182
183 # deletes the appcontext (eventually will terminate from resource synchronizer when that funcationality is ready)
184 function terminateNcmData {
185     call_api -d "{ }" "${base_url_ncm}/cluster-providers/${clusterprovidername}/clusters/${clustername}/terminate"
186 }
187
188 function getOrchData {
189     call_api_nox "${base_url_orchestrator}/controllers"
190 }
191
192 function getNcmData {
193     call_api_nox "${base_url_clm}/cluster-providers/${clusterprovidername}"
194     call_api_nox -H "Accept: application/json" "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters/${clustername}"
195     call_api_nox "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters?label=${labelname}"
196     call_api_nox "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters/${clustername}/kv-pairs/${kvname}"
197     call_api_nox "${base_url_ncm}/cluster-providers/${clusterprovidername}/clusters/${clustername}/networks/${networkname}"
198     call_api_nox "${base_url_ncm}/cluster-providers/${clusterprovidername}/clusters/${clustername}/provider-networks/${providernetworkname}"
199
200 }
201
202 function deleteOrchData {
203     call_api -X DELETE "${base_url_orchestrator}/controllers/${rsynccontrollername}" | jq .
204 }
205
206 function deleteNcmData {
207     call_api -X DELETE "${base_url_ncm}/cluster-providers/${clusterprovidername}/clusters/${clustername}/networks/${networkname}"
208     call_api -X DELETE "${base_url_ncm}/cluster-providers/${clusterprovidername}/clusters/${clustername}/provider-networks/${providernetworkname}"
209     call_api -X DELETE "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters/${clustername}/labels/${labelname}"
210     call_api -X DELETE "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters/${clustername}/kv-pairs/${kvname}"
211     call_api -X DELETE "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters/${clustername}"
212     call_api -X DELETE "${base_url_clm}/cluster-providers/${clusterprovidername}"
213 }
214
215 function usage {
216     echo "Usage: $0  create|creatersync|apply|get|getrsync|terminate|delete|deletersync"
217     exit
218 }
219
220 # Put in logic to select from a few choices:  create, get, delete
221 if [ "$#" -ne 1 ] ; then
222     usage
223 fi
224
225 case "$1" in
226     "creatersync" ) createOrchData ;;
227     "create" ) createNcmData ;;
228     "apply" ) applyNcmData ;;
229     "terminate" ) terminateNcmData ;;
230     "get" )    getNcmData ;;
231     "getrsync" )    getOrchData ;;
232     "delete" ) deleteNcmData ;;
233     "deletersync" ) deleteOrchData ;;
234     *) usage ;;
235 esac