b8d07793cfe1735afa05f15868bdfaea05e44cb9
[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
19 set -o errexit
20 set -o nounset
21 set -o pipefail
22
23
24 source _common_test.sh
25 source _functions.sh
26 #source _common.sh
27
28
29 base_url_orchestrator=${base_url_orchestrator:-"http://localhost:9015/v2"}
30 base_url_clm=${base_url_clm:-"http://localhost:9019/v2"}
31
32
33 CSAR_DIR="/opt/csar"
34 csar_id="cb009bfe-bbee-11e8-9766-525400435678"
35
36
37 app1_helm_path="$CSAR_DIR/$csar_id/prometheus-operator.tar.gz"
38 app1_profile_path="$CSAR_DIR/$csar_id/prometheus-operator_profile.tar.gz"
39 app2_helm_path="$CSAR_DIR/$csar_id/collectd.tar.gz"
40 app2_profile_path="$CSAR_DIR/$csar_id/collectd_profile.tar.gz"
41
42 kubeConfigLocal="/home/otc/.kube/config"
43
44
45
46 function populate_CSAR_composite_app_helm {
47     _checks_args "$1"
48     pushd "${CSAR_DIR}/$1"
49     print_msg "Create Helm Chart Archives for compositeApp"
50     rm -f *.tar.gz
51     tar -czf collectd.tar.gz -C $test_folder/vnfs/comp-app/collection/app1/helm .
52     tar -czf prometheus-operator.tar.gz -C $test_folder/vnfs/comp-app/collection/app2/helm .
53     tar -czf collectd_profile.tar.gz -C $test_folder/vnfs/comp-app/collection/app1/profile .
54     tar -czf prometheus-operator_profile.tar.gz -C $test_folder/vnfs/comp-app/collection/app2/profile .
55     popd
56 }
57
58
59 # ---------BEGIN: SET CLM DATA---------------
60
61 clusterprovidername="sanity-test-cluster-provider"
62 clusterproviderdata="$(cat<<EOF
63 {
64   "metadata": {
65     "name": "$clusterprovidername",
66     "description": "description of $clusterprovidername",
67     "userData1": "$clusterprovidername user data 1",
68     "userData2": "$clusterprovidername user data 2"
69   }
70 }
71 EOF
72 )"
73
74 clustername="LocalEdge1"
75 clusterdata="$(cat<<EOF
76 {
77   "metadata": {
78     "name": "$clustername",
79     "description": "description of $clustername",
80     "userData1": "$clustername user data 1",
81     "userData2": "$clustername user data 2"
82   }
83 }
84 EOF
85 )"
86
87
88 labelname="LocalLabel"
89 labeldata="$(cat<<EOF
90 {"label-name": "$labelname"}
91 EOF
92 )"
93
94
95 # add the rsync controller entry
96 rsynccontrollername="rsync"
97 rsynccontrollerdata="$(cat<<EOF
98 {
99   "metadata": {
100     "name": "rsync",
101     "description": "description of $rsynccontrollername controller",
102     "userData1": "user data 1 for $rsynccontrollername",
103     "userData2": "user data 2 for $rsynccontrollername"
104   },
105   "spec": {
106     "host": "localhost",
107     "port": 9031
108   }
109 }
110 EOF
111 )"
112
113 # ------------END: SET CLM DATA--------------
114
115
116 #-------------BEGIN:SET ORCH DATA------------------
117
118 # define a project
119 projectname="Sanity-Test-Project"
120 projectdata="$(cat<<EOF
121 {
122   "metadata": {
123     "name": "$projectname",
124     "description": "description of $projectname controller",
125     "userData1": "$projectname user data 1",
126     "userData2": "$projectname user data 2"
127   }
128 }
129 EOF
130 )"
131
132 # define a composite application
133 collection_compositeapp_name="CollectionCompositeApp"
134 compositeapp_version="v1"
135 compositeapp_data="$(cat <<EOF
136 {
137   "metadata": {
138     "name": "${collection_compositeapp_name}",
139     "description": "description of ${collection_compositeapp_name}",
140     "userData1": "user data 1 for ${collection_compositeapp_name}",
141     "userData2": "user data 2 for ${collection_compositeapp_name}"
142    },
143    "spec":{
144       "version":"${compositeapp_version}"
145    }
146 }
147 EOF
148 )"
149
150 # add app entries for the prometheus app into
151 # compositeApp
152
153 prometheus_app_name="prometheus-operator"
154 prometheus_helm_chart=${app1_helm_path}
155
156 prometheus_app_data="$(cat <<EOF
157 {
158   "metadata": {
159     "name": "${prometheus_app_name}",
160     "description": "description for app ${prometheus_app_name}",
161     "userData1": "user data 2 for ${prometheus_app_name}",
162     "userData2": "user data 2 for ${prometheus_app_name}"
163    }
164 }
165 EOF
166 )"
167
168 # add app entries for the collectd app into
169 # compositeApp
170
171 collectd_app_name="collectd"
172 collectd_helm_chart=${app2_helm_path}
173
174 collectd_app_data="$(cat <<EOF
175 {
176   "metadata": {
177     "name": "${collectd_app_name}",
178     "description": "description for app ${collectd_app_name}",
179     "userData1": "user data 2 for ${collectd_app_name}",
180     "userData2": "user data 2 for ${collectd_app_name}"
181    }
182 }
183 EOF
184 )"
185
186
187 # Add the composite profile
188 collection_composite_profile_name="collection_composite-profile"
189 collection_composite_profile_data="$(cat <<EOF
190 {
191    "metadata":{
192       "name":"${collection_composite_profile_name}",
193       "description":"description of ${collection_composite_profile_name}",
194       "userData1":"user data 1 for ${collection_composite_profile_name}",
195       "userData2":"user data 2 for ${collection_composite_profile_name}"
196    }
197 }
198 EOF
199 )"
200
201 # Add the prometheus profile data into collection profile data
202 prometheus_profile_name="prometheus-profile"
203 prometheus_profile_file=$app1_profile_path
204 prometheus_profile_data="$(cat <<EOF
205 {
206    "metadata":{
207       "name":"${prometheus_profile_name}",
208       "description":"description of ${prometheus_profile_name}",
209       "userData1":"user data 1 for ${prometheus_profile_name}",
210       "userData2":"user data 2 for ${prometheus_profile_name}"
211    },
212    "spec":{
213       "app-name":  "${prometheus_app_name}"
214    }
215 }
216 EOF
217 )"
218
219 # Add the collectd profile data into collection profile data
220 collectd_profile_name="collectd-profile"
221 collectd_profile_file=$app2_profile_path
222 collectd_profile_data="$(cat <<EOF
223 {
224    "metadata":{
225       "name":"${collectd_profile_name}",
226       "description":"description of ${collectd_profile_name}",
227       "userData1":"user data 1 for ${collectd_profile_name}",
228       "userData2":"user data 2 for ${collectd_profile_name}"
229    },
230    "spec":{
231       "app-name":  "${collectd_app_name}"
232    }
233 }
234 EOF
235 )"
236
237
238 # define the generic placement intent
239 generic_placement_intent_name="test-generic-placement-intent"
240 generic_placement_intent_data="$(cat <<EOF
241 {
242    "metadata":{
243       "name":"${generic_placement_intent_name}",
244       "description":"${generic_placement_intent_name}",
245       "userData1":"${generic_placement_intent_name}",
246       "userData2":"${generic_placement_intent_name}"
247    },
248    "spec":{
249       "logical-cloud":"unused_logical_cloud"
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    }
320 }
321 EOF
322 )"
323
324 # define the intents to be used by the group
325 deployment_intents_in_group_name="collection_deploy_intents"
326 deployment_intents_in_group_data="$(cat <<EOF
327 {
328    "metadata":{
329       "name":"${deployment_intents_in_group_name}",
330       "description":"descriptionf of ${deployment_intents_in_group_name}",
331       "userData1":"user data 1 for ${deployment_intents_in_group_name}",
332       "userData2":"user data 2 for ${deployment_intents_in_group_name}"
333    },
334    "spec":{
335       "intent":{
336          "genericPlacementIntent":"${generic_placement_intent_name}"
337       }
338    }
339 }
340 EOF
341 )"
342
343
344 #---------END: SET ORCH DATA--------------------
345
346
347 function createOrchestratorData {
348
349     print_msg "creating controller entries"
350     call_api -d "${rsynccontrollerdata}" "${base_url_orchestrator}/controllers"
351     print_msg "creating project entry"
352     call_api -d "${projectdata}" "${base_url_orchestrator}/projects"
353
354     print_msg "creating collection composite app entry"
355     call_api -d "${compositeapp_data}" "${base_url_orchestrator}/projects/${projectname}/composite-apps"
356
357     print_msg "adding prometheus app to the composite app"
358     call_api -F "metadata=${prometheus_app_data}" \
359              -F "file=@${prometheus_helm_chart}" \
360              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/apps"
361
362     print_msg "adding collectd app to the composite app"
363     call_api -F "metadata=${collectd_app_data}" \
364              -F "file=@${collectd_helm_chart}" \
365              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/apps"
366
367     print_msg "creating collection composite profile entry"
368     call_api -d "${collection_composite_profile_data}" "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/composite-profiles"
369
370     print_msg "adding prometheus app profiles to the composite profile"
371     call_api -F "metadata=${prometheus_profile_data}" \
372              -F "file=@${prometheus_profile_file}" \
373              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/composite-profiles/${collection_composite_profile_name}/profiles"
374
375     print_msg "adding collectd app profiles to the composite profile"
376     call_api -F "metadata=${collectd_profile_data}" \
377              -F "file=@${collectd_profile_file}" \
378              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/composite-profiles/${collection_composite_profile_name}/profiles"
379
380     print_msg "create the generic placement intent"
381     call_api -d "${generic_placement_intent_data}" \
382              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/generic-placement-intents"
383
384     print_msg "add the prometheus app placement intent to the generic placement intent"
385     call_api -d "${prometheus_placement_intent_data}" \
386              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents"
387
388     print_msg "add the collectd app placement intent to the generic placement intent"
389     call_api -d "${collectd_placement_intent_data}" \
390              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents"
391
392
393     print_msg "create the deployment intent group"
394     call_api -d "${deployment_intent_group_data}" \
395              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups"
396     call_api -d "${deployment_intents_in_group_data}" \
397              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/intents"
398
399 }
400
401 function deleteOrchestratorData {
402
403     print_msg "Begin deleteOrchestratorData"
404
405     delete_resource "${base_url_orchestrator}/controllers/${rsynccontrollername}"
406
407     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}"
408
409     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}"
410
411     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}"
412     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}"
413     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}"
414
415     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/composite-profiles/${collection_composite_profile_name}/profiles/${prometheus_profile_name}"
416     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/composite-profiles/${collection_composite_profile_name}/profiles/${collectd_profile_name}"
417
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 "${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=@$kubeConfigLocal" "${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 "${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}/instantiate"
464 }
465
466
467 function terminateOrchData {
468     call_api -d "{ }" "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/terminate"
469 }
470
471 # Setup
472
473 function setup {
474     install_deps
475     populate_CSAR_composite_app_helm "$csar_id"
476 }
477
478 function usage {
479     echo ""
480     echo "    Usage: $0  start | stop"
481     echo ""
482     echo "    start - creates the orchstrator and cluster management data, instantiates the resources for collectd and prometheus and then deploys them on the local cluster"
483     echo ""
484     echo "    stop  - terminates the resources for collectd and prometheus and uninstalls the compositeApp"
485     echo ""
486     exit
487 }
488
489 if [ "$#" -ne 1 ] ; then
490     usage
491 fi
492
493
494 case "$1" in
495     "start" )
496         deleteData
497         print_msg "deleting the data success"
498         createData
499         print_msg "creating the data success"
500         instantiate
501         print_msg "instantiate success"
502         ;;
503     "stop" )
504         terminateOrchData
505         print_msg "terminated the resources"
506         ;;
507     *) usage ;;
508 esac