3 # Copyright 2020 Intel Corporation, Inc
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
9 # http://www.apache.org/licenses/LICENSE-2.0
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.
22 source _common_test.sh
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
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"}
40 csar_id="cb009bfe-bbee-11e8-9766-525400435678"
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"
47 kubeconfig_path="$HOME/.kube/config"
49 function populate_CSAR_composite_app_helm {
51 pushd "${CSAR_DIR}/$1"
52 print_msg "Create Helm Chart Archives for compositeApp"
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 .
62 # ---------BEGIN: SET CLM DATA---------------
64 clusterprovidername="sanity-test-cluster-provider"
65 clusterproviderdata="$(cat<<EOF
68 "name": "$clusterprovidername",
69 "description": "description of $clusterprovidername",
70 "userData1": "$clusterprovidername user data 1",
71 "userData2": "$clusterprovidername user data 2"
77 clustername="LocalEdge1"
78 clusterdata="$(cat<<EOF
81 "name": "$clustername",
82 "description": "description of $clustername",
83 "userData1": "$clustername user data 1",
84 "userData2": "$clustername user data 2"
91 labelname="LocalLabel"
93 {"label-name": "$labelname"}
98 # add the rsync controller entry
99 rsynccontrollername="rsync"
100 rsynccontrollerdata="$(cat<<EOF
104 "description": "description of $rsynccontrollername controller",
105 "userData1": "user data 1 for $rsynccontrollername",
106 "userData2": "user data 2 for $rsynccontrollername"
109 "host": "$rsync_service_host",
110 "port": $rsync_service_port
116 # ------------END: SET CLM DATA--------------
119 #-------------BEGIN:SET ORCH DATA------------------
122 projectname="Sanity-Test-Project"
123 projectdata="$(cat<<EOF
126 "name": "$projectname",
127 "description": "description of $projectname controller",
128 "userData1": "$projectname user data 1",
129 "userData2": "$projectname user data 2"
135 # define a composite application
136 collection_compositeapp_name="CollectionCompositeApp"
137 compositeapp_version="v1"
138 compositeapp_data="$(cat <<EOF
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}"
147 "version":"${compositeapp_version}"
153 # add app entries for the prometheus app into
156 prometheus_app_name="prometheus-operator"
157 prometheus_helm_chart=${app1_helm_path}
159 prometheus_app_data="$(cat <<EOF
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}"
171 # add app entries for the collectd app into
174 collectd_app_name="collectd"
175 collectd_helm_chart=${app2_helm_path}
177 collectd_app_data="$(cat <<EOF
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}"
190 # Add the composite profile
191 collection_composite_profile_name="collection_composite-profile"
192 collection_composite_profile_data="$(cat <<EOF
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}"
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
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}"
216 "app-name": "${prometheus_app_name}"
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
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}"
234 "app-name": "${collectd_app_name}"
241 # define the generic placement intent
242 generic_placement_intent_name="test-generic-placement-intent"
243 generic_placement_intent_data="$(cat <<EOF
246 "name":"${generic_placement_intent_name}",
247 "description":"${generic_placement_intent_name}",
248 "userData1":"${generic_placement_intent_name}",
249 "userData2":"${generic_placement_intent_name}"
252 "logical-cloud":"unused_logical_cloud"
258 # define app placement intent for prometheus
259 prometheus_placement_intent_name="prometheus-placement-intent"
260 prometheus_placement_intent_data="$(cat <<EOF
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}"
269 "app-name":"${prometheus_app_name}",
272 { "provider-name":"${clusterprovidername}",
273 "cluster-label-name":"${labelname}"
282 # define app placement intent for collectd
283 collectd_placement_intent_name="collectd-placement-intent"
284 collectd_placement_intent_data="$(cat <<EOF
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}"
293 "app-name":"${collectd_app_name}",
296 { "provider-name":"${clusterprovidername}",
297 "cluster-label-name":"${labelname}"
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
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}"
319 "profile":"${collection_composite_profile_name}",
320 "version":"${release}",
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
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}"
339 "genericPlacementIntent":"${generic_placement_intent_name}"
347 #---------END: SET ORCH DATA--------------------
350 function createOrchestratorData {
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"
357 print_msg "creating collection composite app entry"
358 call_api -d "${compositeapp_data}" "${base_url_orchestrator}/projects/${projectname}/composite-apps"
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"
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"
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"
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"
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"
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"
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"
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"
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"
404 function deleteOrchestratorData {
406 print_msg "Begin deleteOrchestratorData"
408 delete_resource "${base_url_orchestrator}/controllers/${rsynccontrollername}"
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}"
412 delete_resource_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}"
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}"
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}"
422 delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/composite-profiles/${collection_composite_profile_name}"
424 delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/apps/${prometheus_app_name}"
426 delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/apps/${collectd_app_name}"
429 delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}"
430 delete_resource "${base_url_orchestrator}/projects/${projectname}"
432 print_msg "deleteOrchestratorData done"
436 function createClmData {
437 print_msg "Creating cluster provider and cluster"
438 call_api -d "${clusterproviderdata}" "${base_url_clm}/cluster-providers"
440 call_api -H "Content-Type: multipart/form-data" -F "metadata=$clusterdata" -F "file=@$kubeconfig_path" "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters"
442 call_api -d "${labeldata}" "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters/${clustername}/labels"
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"
455 function createData {
457 createOrchestratorData
460 function deleteData {
462 deleteOrchestratorData
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"
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"
476 call_api "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/status"
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
487 populate_CSAR_composite_app_helm "$csar_id"
493 print_msg "Before creating, deleting the data success"
495 print_msg "creating the data success"
497 print_msg "instantiate success"
498 waitFor "Instantiated"
503 print_msg "terminated the resources"
506 print_msg "deleting the data success"
511 echo " Usage: $0 start | stop"
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"
515 echo " stop - terminates the resources for collectd and prometheus and uninstalls the compositeApp"
520 if [[ "$#" -gt 0 ]] ; then
524 "create" ) createData ;;
525 "instantiate" ) instantiate ;;
527 "terminate" ) terminateOrchData ;;
528 "delete" ) deleteData ;;