Merge "Add X710 to iavf driver NICs"
[multicloud/k8s.git] / kud / tests / emco.sh
1 #!/bin/bash
2
3 #  Copyright 2020 Intel Corporation, Inc
4 #
5 #  Licensed under the Apache License, Version 2.0 (the "License");
6 #  you may not use this file except in compliance with the License.
7 #  You may obtain a copy of the License at
8 #
9 #       http://www.apache.org/licenses/LICENSE-2.0
10 #
11 #  Unless required by applicable law or agreed to in writing, software
12 #  distributed under the License is distributed on an "AS IS" BASIS,
13 #  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 #  See the License for the specific language governing permissions and
15 #  limitations under the License.
16 #
17
18 set -o errexit
19 set -o nounset
20 set -o pipefail
21
22 source _common_test.sh
23 source _functions.sh
24 #source _common.sh
25
26 # TODO Workaround for MULTICLOUD-1202
27 function delete_resource_nox {
28     call_api_nox -X DELETE "$1"
29     ! call_api -X GET "$1" >/dev/null
30 }
31
32 master_ip=$(kubectl cluster-info | grep "Kubernetes master" | \
33     awk -F ":" '{print $2}' | awk -F "//" '{print $2}')
34 rsync_service_port=30441
35 rsync_service_host="$master_ip"
36 base_url_orchestrator=${base_url_orchestrator:-"http://$master_ip:30415/v2"}
37 base_url_clm=${base_url_clm:-"http://$master_ip:30461/v2"}
38
39 CSAR_DIR="/opt/csar"
40 csar_id="cb009bfe-bbee-11e8-9766-525400435678"
41
42 app1_helm_path="$CSAR_DIR/$csar_id/prometheus-operator.tar.gz"
43 app1_profile_path="$CSAR_DIR/$csar_id/prometheus-operator_profile.tar.gz"
44 app2_helm_path="$CSAR_DIR/$csar_id/collectd.tar.gz"
45 app2_profile_path="$CSAR_DIR/$csar_id/collectd_profile.tar.gz"
46
47 kubeconfig_path="$HOME/.kube/config"
48
49 function populate_CSAR_composite_app_helm {
50     _checks_args "$1"
51     pushd "${CSAR_DIR}/$1"
52     print_msg "Create Helm Chart Archives for compositeApp"
53     rm -f *.tar.gz
54     tar -czf collectd.tar.gz -C $test_folder/vnfs/comp-app/collection/app1/helm .
55     tar -czf prometheus-operator.tar.gz -C $test_folder/vnfs/comp-app/collection/app2/helm .
56     tar -czf collectd_profile.tar.gz -C $test_folder/vnfs/comp-app/collection/app1/profile .
57     tar -czf prometheus-operator_profile.tar.gz -C $test_folder/vnfs/comp-app/collection/app2/profile .
58     popd
59 }
60
61
62 # ---------BEGIN: SET CLM DATA---------------
63
64 clusterprovidername="sanity-test-cluster-provider"
65 clusterproviderdata="$(cat<<EOF
66 {
67   "metadata": {
68     "name": "$clusterprovidername",
69     "description": "description of $clusterprovidername",
70     "userData1": "$clusterprovidername user data 1",
71     "userData2": "$clusterprovidername user data 2"
72   }
73 }
74 EOF
75 )"
76
77 clustername="LocalEdge1"
78 clusterdata="$(cat<<EOF
79 {
80   "metadata": {
81     "name": "$clustername",
82     "description": "description of $clustername",
83     "userData1": "$clustername user data 1",
84     "userData2": "$clustername user data 2"
85   }
86 }
87 EOF
88 )"
89
90
91 labelname="LocalLabel"
92 labeldata="$(cat<<EOF
93 {"label-name": "$labelname"}
94 EOF
95 )"
96
97
98 # add the rsync controller entry
99 rsynccontrollername="rsync"
100 rsynccontrollerdata="$(cat<<EOF
101 {
102   "metadata": {
103     "name": "rsync",
104     "description": "description of $rsynccontrollername controller",
105     "userData1": "user data 1 for $rsynccontrollername",
106     "userData2": "user data 2 for $rsynccontrollername"
107   },
108   "spec": {
109     "host": "$rsync_service_host",
110     "port": $rsync_service_port
111   }
112 }
113 EOF
114 )"
115
116 # ------------END: SET CLM DATA--------------
117
118
119 #-------------BEGIN:SET ORCH DATA------------------
120
121 # define a project
122 projectname="Sanity-Test-Project"
123 projectdata="$(cat<<EOF
124 {
125   "metadata": {
126     "name": "$projectname",
127     "description": "description of $projectname controller",
128     "userData1": "$projectname user data 1",
129     "userData2": "$projectname user data 2"
130   }
131 }
132 EOF
133 )"
134
135 # define a composite application
136 collection_compositeapp_name="CollectionCompositeApp"
137 compositeapp_version="v1"
138 compositeapp_data="$(cat <<EOF
139 {
140   "metadata": {
141     "name": "${collection_compositeapp_name}",
142     "description": "description of ${collection_compositeapp_name}",
143     "userData1": "user data 1 for ${collection_compositeapp_name}",
144     "userData2": "user data 2 for ${collection_compositeapp_name}"
145    },
146    "spec":{
147       "version":"${compositeapp_version}"
148    }
149 }
150 EOF
151 )"
152
153 # add app entries for the prometheus app into
154 # compositeApp
155
156 prometheus_app_name="prometheus-operator"
157 prometheus_helm_chart=${app1_helm_path}
158
159 prometheus_app_data="$(cat <<EOF
160 {
161   "metadata": {
162     "name": "${prometheus_app_name}",
163     "description": "description for app ${prometheus_app_name}",
164     "userData1": "user data 2 for ${prometheus_app_name}",
165     "userData2": "user data 2 for ${prometheus_app_name}"
166    }
167 }
168 EOF
169 )"
170
171 # add app entries for the collectd app into
172 # compositeApp
173
174 collectd_app_name="collectd"
175 collectd_helm_chart=${app2_helm_path}
176
177 collectd_app_data="$(cat <<EOF
178 {
179   "metadata": {
180     "name": "${collectd_app_name}",
181     "description": "description for app ${collectd_app_name}",
182     "userData1": "user data 2 for ${collectd_app_name}",
183     "userData2": "user data 2 for ${collectd_app_name}"
184    }
185 }
186 EOF
187 )"
188
189
190 # Add the composite profile
191 collection_composite_profile_name="collection_composite-profile"
192 collection_composite_profile_data="$(cat <<EOF
193 {
194    "metadata":{
195       "name":"${collection_composite_profile_name}",
196       "description":"description of ${collection_composite_profile_name}",
197       "userData1":"user data 1 for ${collection_composite_profile_name}",
198       "userData2":"user data 2 for ${collection_composite_profile_name}"
199    }
200 }
201 EOF
202 )"
203
204 # Add the prometheus profile data into collection profile data
205 prometheus_profile_name="prometheus-profile"
206 prometheus_profile_file=$app1_profile_path
207 prometheus_profile_data="$(cat <<EOF
208 {
209    "metadata":{
210       "name":"${prometheus_profile_name}",
211       "description":"description of ${prometheus_profile_name}",
212       "userData1":"user data 1 for ${prometheus_profile_name}",
213       "userData2":"user data 2 for ${prometheus_profile_name}"
214    },
215    "spec":{
216       "app-name":  "${prometheus_app_name}"
217    }
218 }
219 EOF
220 )"
221
222 # Add the collectd profile data into collection profile data
223 collectd_profile_name="collectd-profile"
224 collectd_profile_file=$app2_profile_path
225 collectd_profile_data="$(cat <<EOF
226 {
227    "metadata":{
228       "name":"${collectd_profile_name}",
229       "description":"description of ${collectd_profile_name}",
230       "userData1":"user data 1 for ${collectd_profile_name}",
231       "userData2":"user data 2 for ${collectd_profile_name}"
232    },
233    "spec":{
234       "app-name":  "${collectd_app_name}"
235    }
236 }
237 EOF
238 )"
239
240
241 # define the generic placement intent
242 generic_placement_intent_name="test-generic-placement-intent"
243 generic_placement_intent_data="$(cat <<EOF
244 {
245    "metadata":{
246       "name":"${generic_placement_intent_name}",
247       "description":"${generic_placement_intent_name}",
248       "userData1":"${generic_placement_intent_name}",
249       "userData2":"${generic_placement_intent_name}"
250    }
251 }
252 EOF
253 )"
254
255 # define app placement intent for prometheus
256 prometheus_placement_intent_name="prometheus-placement-intent"
257 prometheus_placement_intent_data="$(cat <<EOF
258 {
259    "metadata":{
260       "name":"${prometheus_placement_intent_name}",
261       "description":"description of ${prometheus_placement_intent_name}",
262       "userData1":"user data 1 for ${prometheus_placement_intent_name}",
263       "userData2":"user data 2 for ${prometheus_placement_intent_name}"
264    },
265    "spec":{
266       "app-name":"${prometheus_app_name}",
267       "intent":{
268          "allOf":[
269             {  "provider-name":"${clusterprovidername}",
270                "cluster-label-name":"${labelname}"
271             }
272          ]
273       }
274    }
275 }
276 EOF
277 )"
278
279 # define app placement intent for collectd
280 collectd_placement_intent_name="collectd-placement-intent"
281 collectd_placement_intent_data="$(cat <<EOF
282 {
283    "metadata":{
284       "name":"${collectd_placement_intent_name}",
285       "description":"description of ${collectd_placement_intent_name}",
286       "userData1":"user data 1 for ${collectd_placement_intent_name}",
287       "userData2":"user data 2 for ${collectd_placement_intent_name}"
288    },
289    "spec":{
290       "app-name":"${collectd_app_name}",
291       "intent":{
292          "allOf":[
293             {  "provider-name":"${clusterprovidername}",
294                "cluster-label-name":"${labelname}"
295             }
296          ]
297       }
298    }
299 }
300 EOF
301 )"
302
303
304 # define a deployment intent group
305 release="test-collection"
306 deployment_intent_group_name="collection_deployment_intent_group"
307 deployment_intent_group_data="$(cat <<EOF
308 {
309    "metadata":{
310       "name":"${deployment_intent_group_name}",
311       "description":"descriptiont of ${deployment_intent_group_name}",
312       "userData1":"user data 1 for ${deployment_intent_group_name}",
313       "userData2":"user data 2 for ${deployment_intent_group_name}"
314    },
315    "spec":{
316       "profile":"${collection_composite_profile_name}",
317       "version":"${release}",
318       "override-values":[],
319       "logical-cloud":"unused_logical_cloud"
320    }
321 }
322 EOF
323 )"
324
325 # define the intents to be used by the group
326 deployment_intents_in_group_name="collection_deploy_intents"
327 deployment_intents_in_group_data="$(cat <<EOF
328 {
329    "metadata":{
330       "name":"${deployment_intents_in_group_name}",
331       "description":"descriptionf of ${deployment_intents_in_group_name}",
332       "userData1":"user data 1 for ${deployment_intents_in_group_name}",
333       "userData2":"user data 2 for ${deployment_intents_in_group_name}"
334    },
335    "spec":{
336       "intent":{
337          "genericPlacementIntent":"${generic_placement_intent_name}"
338       }
339    }
340 }
341 EOF
342 )"
343
344
345 #---------END: SET ORCH DATA--------------------
346
347
348 function createOrchestratorData {
349
350     print_msg "creating controller entries"
351     call_api -d "${rsynccontrollerdata}" "${base_url_orchestrator}/controllers"
352     print_msg "creating project entry"
353     call_api -d "${projectdata}" "${base_url_orchestrator}/projects"
354
355     print_msg "creating collection composite app entry"
356     call_api -d "${compositeapp_data}" "${base_url_orchestrator}/projects/${projectname}/composite-apps"
357
358     print_msg "adding prometheus app to the composite app"
359     call_api -F "metadata=${prometheus_app_data}" \
360              -F "file=@${prometheus_helm_chart}" \
361              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/apps"
362
363     print_msg "adding collectd app to the composite app"
364     call_api -F "metadata=${collectd_app_data}" \
365              -F "file=@${collectd_helm_chart}" \
366              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/apps"
367
368     print_msg "creating collection composite profile entry"
369     call_api -d "${collection_composite_profile_data}" "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/composite-profiles"
370
371     print_msg "adding prometheus app profiles to the composite profile"
372     call_api -F "metadata=${prometheus_profile_data}" \
373              -F "file=@${prometheus_profile_file}" \
374              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/composite-profiles/${collection_composite_profile_name}/profiles"
375
376     print_msg "adding collectd app profiles to the composite profile"
377     call_api -F "metadata=${collectd_profile_data}" \
378              -F "file=@${collectd_profile_file}" \
379              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/composite-profiles/${collection_composite_profile_name}/profiles"
380
381     print_msg "create the deployment intent group"
382     call_api -d "${deployment_intent_group_data}" \
383              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups"
384
385     print_msg "create the generic placement intent"
386     call_api -d "${generic_placement_intent_data}" \
387              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents"
388
389     print_msg "add the prometheus app placement intent to the generic placement intent"
390     call_api -d "${prometheus_placement_intent_data}" \
391              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}/app-intents"
392
393     print_msg "add the collectd app placement intent to the generic placement intent"
394     call_api -d "${collectd_placement_intent_data}" \
395              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}/app-intents"
396
397     call_api -d "${deployment_intents_in_group_data}" \
398              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/intents"
399
400 }
401
402 function deleteOrchestratorData {
403
404     print_msg "Begin deleteOrchestratorData"
405
406     delete_resource "${base_url_orchestrator}/controllers/${rsynccontrollername}"
407
408     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/intents/${deployment_intents_in_group_name}"
409
410     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${prometheus_placement_intent_name}"
411     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${collectd_placement_intent_name}"
412     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}"
413
414     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/composite-profiles/${collection_composite_profile_name}/profiles/${prometheus_profile_name}"
415     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/composite-profiles/${collection_composite_profile_name}/profiles/${collectd_profile_name}"
416
417     delete_resource_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}"
418
419     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/composite-profiles/${collection_composite_profile_name}"
420
421     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/apps/${prometheus_app_name}"
422
423     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/apps/${collectd_app_name}"
424
425
426     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}"
427     delete_resource_nox "${base_url_orchestrator}/projects/${projectname}"
428
429     print_msg "deleteOrchestratorData done"
430 }
431
432
433 function createClmData {
434     print_msg "Creating cluster provider and cluster"
435     call_api -d "${clusterproviderdata}" "${base_url_clm}/cluster-providers"
436
437     call_api -H "Content-Type: multipart/form-data" -F "metadata=$clusterdata" -F "file=@$kubeconfig_path" "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters"
438
439     call_api -d "${labeldata}" "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters/${clustername}/labels"
440
441
442 }
443
444 function deleteClmData {
445     print_msg "begin deleteClmData"
446     delete_resource "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters/${clustername}/labels/${labelname}"
447     delete_resource_nox "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters/${clustername}"
448     delete_resource "${base_url_clm}/cluster-providers/${clusterprovidername}"
449     print_msg "deleteClmData done"
450 }
451
452 function createData {
453     createClmData
454     createOrchestratorData
455 }
456
457 function deleteData {
458     deleteClmData
459     deleteOrchestratorData
460 }
461
462 function instantiate {
463     call_api -d "{ }" "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/approve"
464     call_api -d "{ }" "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/instantiate"
465 }
466
467
468 function terminateOrchData {
469     call_api -d "{ }" "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/terminate"
470 }
471
472 function status {
473     call_api "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/status"
474 }
475
476 function waitFor {
477     wait_for_deployment_status "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/status" $1
478 }
479
480 # Setup
481
482 function setup {
483     install_deps
484     populate_CSAR_composite_app_helm "$csar_id"
485 }
486
487 function start {
488     setup
489     deleteData
490     print_msg "Before creating, deleting the data success"
491     createData
492     print_msg "creating the data success"
493     instantiate
494     print_msg "instantiate success"
495     waitFor "Instantiated"
496 }
497
498 function stop {
499     terminateOrchData
500     print_msg "terminated the resources"
501     waitFor "Terminated"
502     deleteData
503     print_msg "deleting the data success"
504 }
505
506 function usage {
507     echo ""
508     echo "    Usage: $0  start | stop"
509     echo ""
510     echo "    start - creates the orchstrator and cluster management data, instantiates the resources for collectd and prometheus and then deploys them on the local cluster"
511     echo ""
512     echo "    stop  - terminates the resources for collectd and prometheus and uninstalls the compositeApp"
513     echo ""
514     exit
515 }
516
517 if [[ "$#" -gt 0 ]] ; then
518     case "$1" in
519         "start" ) start ;;
520         "stop" ) stop ;;
521         "create" ) createData ;;
522         "instantiate" ) instantiate ;;
523         "status" ) status ;;
524         "terminate" ) terminateOrchData ;;
525         "delete" ) deleteData ;;
526         *) usage ;;
527     esac
528 else
529     start
530     stop
531 fi