Use external service address and ports in sanity-check-for-v2.sh.
[multicloud/k8s.git] / kud / tests / sanity-check-for-v2.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    "spec":{
252       "logical-cloud":"unused_logical_cloud"
253    }
254 }
255 EOF
256 )"
257
258 # define app placement intent for prometheus
259 prometheus_placement_intent_name="prometheus-placement-intent"
260 prometheus_placement_intent_data="$(cat <<EOF
261 {
262    "metadata":{
263       "name":"${prometheus_placement_intent_name}",
264       "description":"description of ${prometheus_placement_intent_name}",
265       "userData1":"user data 1 for ${prometheus_placement_intent_name}",
266       "userData2":"user data 2 for ${prometheus_placement_intent_name}"
267    },
268    "spec":{
269       "app-name":"${prometheus_app_name}",
270       "intent":{
271          "allOf":[
272             {  "provider-name":"${clusterprovidername}",
273                "cluster-label-name":"${labelname}"
274             }
275          ]
276       }
277    }
278 }
279 EOF
280 )"
281
282 # define app placement intent for collectd
283 collectd_placement_intent_name="collectd-placement-intent"
284 collectd_placement_intent_data="$(cat <<EOF
285 {
286    "metadata":{
287       "name":"${collectd_placement_intent_name}",
288       "description":"description of ${collectd_placement_intent_name}",
289       "userData1":"user data 1 for ${collectd_placement_intent_name}",
290       "userData2":"user data 2 for ${collectd_placement_intent_name}"
291    },
292    "spec":{
293       "app-name":"${collectd_app_name}",
294       "intent":{
295          "allOf":[
296             {  "provider-name":"${clusterprovidername}",
297                "cluster-label-name":"${labelname}"
298             }
299          ]
300       }
301    }
302 }
303 EOF
304 )"
305
306
307 # define a deployment intent group
308 release="test-collection"
309 deployment_intent_group_name="collection_deployment_intent_group"
310 deployment_intent_group_data="$(cat <<EOF
311 {
312    "metadata":{
313       "name":"${deployment_intent_group_name}",
314       "description":"descriptiont of ${deployment_intent_group_name}",
315       "userData1":"user data 1 for ${deployment_intent_group_name}",
316       "userData2":"user data 2 for ${deployment_intent_group_name}"
317    },
318    "spec":{
319       "profile":"${collection_composite_profile_name}",
320       "version":"${release}",
321       "override-values":[]
322    }
323 }
324 EOF
325 )"
326
327 # define the intents to be used by the group
328 deployment_intents_in_group_name="collection_deploy_intents"
329 deployment_intents_in_group_data="$(cat <<EOF
330 {
331    "metadata":{
332       "name":"${deployment_intents_in_group_name}",
333       "description":"descriptionf of ${deployment_intents_in_group_name}",
334       "userData1":"user data 1 for ${deployment_intents_in_group_name}",
335       "userData2":"user data 2 for ${deployment_intents_in_group_name}"
336    },
337    "spec":{
338       "intent":{
339          "genericPlacementIntent":"${generic_placement_intent_name}"
340       }
341    }
342 }
343 EOF
344 )"
345
346
347 #---------END: SET ORCH DATA--------------------
348
349
350 function createOrchestratorData {
351
352     print_msg "creating controller entries"
353     call_api -d "${rsynccontrollerdata}" "${base_url_orchestrator}/controllers"
354     print_msg "creating project entry"
355     call_api -d "${projectdata}" "${base_url_orchestrator}/projects"
356
357     print_msg "creating collection composite app entry"
358     call_api -d "${compositeapp_data}" "${base_url_orchestrator}/projects/${projectname}/composite-apps"
359
360     print_msg "adding prometheus app to the composite app"
361     call_api -F "metadata=${prometheus_app_data}" \
362              -F "file=@${prometheus_helm_chart}" \
363              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/apps"
364
365     print_msg "adding collectd app to the composite app"
366     call_api -F "metadata=${collectd_app_data}" \
367              -F "file=@${collectd_helm_chart}" \
368              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/apps"
369
370     print_msg "creating collection composite profile entry"
371     call_api -d "${collection_composite_profile_data}" "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/composite-profiles"
372
373     print_msg "adding prometheus app profiles to the composite profile"
374     call_api -F "metadata=${prometheus_profile_data}" \
375              -F "file=@${prometheus_profile_file}" \
376              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/composite-profiles/${collection_composite_profile_name}/profiles"
377
378     print_msg "adding collectd app profiles to the composite profile"
379     call_api -F "metadata=${collectd_profile_data}" \
380              -F "file=@${collectd_profile_file}" \
381              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/composite-profiles/${collection_composite_profile_name}/profiles"
382
383     print_msg "create the generic placement intent"
384     call_api -d "${generic_placement_intent_data}" \
385              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/generic-placement-intents"
386
387     print_msg "add the prometheus app placement intent to the generic placement intent"
388     call_api -d "${prometheus_placement_intent_data}" \
389              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents"
390
391     print_msg "add the collectd app placement intent to the generic placement intent"
392     call_api -d "${collectd_placement_intent_data}" \
393              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents"
394
395
396     print_msg "create the deployment intent group"
397     call_api -d "${deployment_intent_group_data}" \
398              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups"
399     call_api -d "${deployment_intents_in_group_data}" \
400              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/intents"
401
402 }
403
404 function deleteOrchestratorData {
405
406     print_msg "Begin deleteOrchestratorData"
407
408     delete_resource "${base_url_orchestrator}/controllers/${rsynccontrollername}"
409
410     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}"
411
412     delete_resource_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}"
413
414     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${prometheus_placement_intent_name}"
415     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${collectd_placement_intent_name}"
416     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}"
417
418     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/composite-profiles/${collection_composite_profile_name}/profiles/${prometheus_profile_name}"
419     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/composite-profiles/${collection_composite_profile_name}/profiles/${collectd_profile_name}"
420
421
422     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/composite-profiles/${collection_composite_profile_name}"
423
424     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/apps/${prometheus_app_name}"
425
426     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/apps/${collectd_app_name}"
427
428
429     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}"
430     delete_resource "${base_url_orchestrator}/projects/${projectname}"
431
432     print_msg "deleteOrchestratorData done"
433 }
434
435
436 function createClmData {
437     print_msg "Creating cluster provider and cluster"
438     call_api -d "${clusterproviderdata}" "${base_url_clm}/cluster-providers"
439
440     call_api -H "Content-Type: multipart/form-data" -F "metadata=$clusterdata" -F "file=@$kubeconfig_path" "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters"
441
442     call_api -d "${labeldata}" "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters/${clustername}/labels"
443
444
445 }
446
447 function deleteClmData {
448     print_msg "begin deleteClmData"
449     delete_resource "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters/${clustername}/labels/${labelname}"
450     delete_resource_nox "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters/${clustername}"
451     delete_resource "${base_url_clm}/cluster-providers/${clusterprovidername}"
452     print_msg "deleteClmData done"
453 }
454
455 function createData {
456     createClmData
457     createOrchestratorData
458 }
459
460 function deleteData {
461     deleteClmData
462     deleteOrchestratorData
463 }
464
465 function instantiate {
466     call_api -d "{ }" "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/approve"
467     call_api -d "{ }" "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/instantiate"
468 }
469
470
471 function terminateOrchData {
472     call_api -d "{ }" "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/terminate"
473 }
474
475 function status {
476     call_api "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/status"
477 }
478
479 function waitFor {
480     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
481 }
482
483 # Setup
484
485 function setup {
486     install_deps
487     populate_CSAR_composite_app_helm "$csar_id"
488 }
489
490 function start {
491     setup
492     deleteData
493     print_msg "Before creating, deleting the data success"
494     createData
495     print_msg "creating the data success"
496     instantiate
497     print_msg "instantiate success"
498     waitFor "Instantiated"
499 }
500
501 function stop {
502     terminateOrchData
503     print_msg "terminated the resources"
504     waitFor "Terminated"
505     deleteData
506     print_msg "deleting the data success"
507 }
508
509 function usage {
510     echo ""
511     echo "    Usage: $0  start | stop"
512     echo ""
513     echo "    start - creates the orchstrator and cluster management data, instantiates the resources for collectd and prometheus and then deploys them on the local cluster"
514     echo ""
515     echo "    stop  - terminates the resources for collectd and prometheus and uninstalls the compositeApp"
516     echo ""
517     exit
518 }
519
520 if [[ "$#" -gt 0 ]] ; then
521     case "$1" in
522         "start" ) start ;;
523         "stop" ) stop ;;
524         "create" ) createData ;;
525         "instantiate" ) instantiate ;;
526         "status" ) status ;;
527         "terminate" ) terminateOrchData ;;
528         "delete" ) deleteData ;;
529         *) usage ;;
530     esac
531 else
532     start
533     stop
534 fi