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.
24 source _common_test.sh
29 base_url_orchestrator=${base_url_orchestrator:-"http://localhost:9015/v2"}
30 base_url_clm=${base_url_clm:-"http://localhost:9019/v2"}
34 csar_id="cb009bfe-bbee-11e8-9766-525400435678"
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"
42 kubeConfigLocal="/home/otc/.kube/config"
46 function populate_CSAR_composite_app_helm {
48 pushd "${CSAR_DIR}/$1"
49 print_msg "Create Helm Chart Archives for compositeApp"
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 .
59 # ---------BEGIN: SET CLM DATA---------------
61 clusterprovidername="sanity-test-cluster-provider"
62 clusterproviderdata="$(cat<<EOF
65 "name": "$clusterprovidername",
66 "description": "description of $clusterprovidername",
67 "userData1": "$clusterprovidername user data 1",
68 "userData2": "$clusterprovidername user data 2"
74 clustername="LocalEdge1"
75 clusterdata="$(cat<<EOF
78 "name": "$clustername",
79 "description": "description of $clustername",
80 "userData1": "$clustername user data 1",
81 "userData2": "$clustername user data 2"
88 labelname="LocalLabel"
90 {"label-name": "$labelname"}
95 # add the rsync controller entry
96 rsynccontrollername="rsync"
97 rsynccontrollerdata="$(cat<<EOF
101 "description": "description of $rsynccontrollername controller",
102 "userData1": "user data 1 for $rsynccontrollername",
103 "userData2": "user data 2 for $rsynccontrollername"
113 # ------------END: SET CLM DATA--------------
116 #-------------BEGIN:SET ORCH DATA------------------
119 projectname="Sanity-Test-Project"
120 projectdata="$(cat<<EOF
123 "name": "$projectname",
124 "description": "description of $projectname controller",
125 "userData1": "$projectname user data 1",
126 "userData2": "$projectname user data 2"
132 # define a composite application
133 collection_compositeapp_name="CollectionCompositeApp"
134 compositeapp_version="v1"
135 compositeapp_data="$(cat <<EOF
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}"
144 "version":"${compositeapp_version}"
150 # add app entries for the prometheus app into
153 prometheus_app_name="prometheus-operator"
154 prometheus_helm_chart=${app1_helm_path}
156 prometheus_app_data="$(cat <<EOF
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}"
168 # add app entries for the collectd app into
171 collectd_app_name="collectd"
172 collectd_helm_chart=${app2_helm_path}
174 collectd_app_data="$(cat <<EOF
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}"
187 # Add the composite profile
188 collection_composite_profile_name="collection_composite-profile"
189 collection_composite_profile_data="$(cat <<EOF
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}"
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
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}"
213 "app-name": "${prometheus_app_name}"
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
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}"
231 "app-name": "${collectd_app_name}"
238 # define the generic placement intent
239 generic_placement_intent_name="test-generic-placement-intent"
240 generic_placement_intent_data="$(cat <<EOF
243 "name":"${generic_placement_intent_name}",
244 "description":"${generic_placement_intent_name}",
245 "userData1":"${generic_placement_intent_name}",
246 "userData2":"${generic_placement_intent_name}"
249 "logical-cloud":"unused_logical_cloud"
255 # define app placement intent for prometheus
256 prometheus_placement_intent_name="prometheus-placement-intent"
257 prometheus_placement_intent_data="$(cat <<EOF
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}"
266 "app-name":"${prometheus_app_name}",
269 { "provider-name":"${clusterprovidername}",
270 "cluster-label-name":"${labelname}"
279 # define app placement intent for collectd
280 collectd_placement_intent_name="collectd-placement-intent"
281 collectd_placement_intent_data="$(cat <<EOF
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}"
290 "app-name":"${collectd_app_name}",
293 { "provider-name":"${clusterprovidername}",
294 "cluster-label-name":"${labelname}"
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
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}"
316 "profile":"${collection_composite_profile_name}",
317 "version":"${release}",
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
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}"
336 "genericPlacementIntent":"${generic_placement_intent_name}"
344 #---------END: SET ORCH DATA--------------------
347 function createOrchestratorData {
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"
354 print_msg "creating collection composite app entry"
355 call_api -d "${compositeapp_data}" "${base_url_orchestrator}/projects/${projectname}/composite-apps"
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"
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"
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"
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"
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"
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"
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"
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"
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"
401 function deleteOrchestratorData {
403 print_msg "Begin deleteOrchestratorData"
405 delete_resource "${base_url_orchestrator}/controllers/${rsynccontrollername}"
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}"
409 delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}"
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}"
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}"
419 delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/composite-profiles/${collection_composite_profile_name}"
421 delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/apps/${prometheus_app_name}"
423 delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/apps/${collectd_app_name}"
426 delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}"
427 delete_resource "${base_url_orchestrator}/projects/${projectname}"
429 print_msg "deleteOrchestratorData done"
433 function createClmData {
434 print_msg "Creating cluster provider and cluster"
435 call_api -d "${clusterproviderdata}" "${base_url_clm}/cluster-providers"
437 call_api -H "Content-Type: multipart/form-data" -F "metadata=$clusterdata" -F "file=@$kubeConfigLocal" "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters"
439 call_api -d "${labeldata}" "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters/${clustername}/labels"
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"
452 function createData {
454 createOrchestratorData
457 function deleteData {
459 deleteOrchestratorData
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"
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"
476 populate_CSAR_composite_app_helm "$csar_id"
481 echo " Usage: $0 start | stop"
483 echo " start - creates the orchstrator and cluster management data, instantiates the resources for collectd and prometheus and then deploys them on the local cluster"
485 echo " stop - terminates the resources for collectd and prometheus and uninstalls the compositeApp"
490 if [ "$#" -ne 1 ] ; then
499 print_msg "Before creating, deleting the data success"
501 print_msg "creating the data success"
503 print_msg "instantiate success"
507 print_msg "terminated the resources"
509 print_msg "deleting the data success"