diff options
-rwxr-xr-x | kud/tests/plugin_collection_v2.sh | 8 | ||||
-rwxr-xr-x | kud/tests/sanity-check-for-v2.sh | 508 | ||||
-rw-r--r-- | src/orchestrator/pkg/module/deployment_intent_groups.go | 2 |
3 files changed, 513 insertions, 5 deletions
diff --git a/kud/tests/plugin_collection_v2.sh b/kud/tests/plugin_collection_v2.sh index 05ff4265..a6f9f8bb 100755 --- a/kud/tests/plugin_collection_v2.sh +++ b/kud/tests/plugin_collection_v2.sh @@ -47,12 +47,12 @@ composite_app_name="test_composite_app_collection" composite_app_description="test_project_description" composite_app_version="test_composite_app_version" app1_helm_path="$CSAR_DIR/$csar_id/collectd.tar.gz" -app2_helm_path="$CSAR_DIR/$csar_id/prometheus.tar.gz" +app2_helm_path="$CSAR_DIR/$csar_id/prometheus-operator.tar.gz" app1_profile_path="$CSAR_DIR/$csar_id/collectd_profile.tar.gz" -app2_profile_path="$CSAR_DIR/$csar_id/prometheus_profile.tar.gz" +app2_profile_path="$CSAR_DIR/$csar_id/prometheus-operator_profile.tar.gz" app1_name="collectd" -app2_name="prometheus" +app2_name="prometheus-operator" app1_desc="collectd_desc" app2_desc="prometheus_desc" @@ -467,7 +467,7 @@ payload="$(cat <<EOF "spec":{ "intent":{ "${genericPlacementIntent}":"${genericPlacementIntentName}", - "${hpaIntent}" : "${hpaControllerIntentName}", + "${hpaIntent}" : "${hpaControllerIntentName}", "${trafficIntent}" : "${trafficControllerIntentName}", "${CostBasedIntent}" : "${CostBasedIntentName}", "${OVNintent}" : "${OVNintentName}" diff --git a/kud/tests/sanity-check-for-v2.sh b/kud/tests/sanity-check-for-v2.sh new file mode 100755 index 00000000..b8d07793 --- /dev/null +++ b/kud/tests/sanity-check-for-v2.sh @@ -0,0 +1,508 @@ +#!/bin/bash + +# Copyright 2020 Intel Corporation, Inc +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + + +set -o errexit +set -o nounset +set -o pipefail + + +source _common_test.sh +source _functions.sh +#source _common.sh + + +base_url_orchestrator=${base_url_orchestrator:-"http://localhost:9015/v2"} +base_url_clm=${base_url_clm:-"http://localhost:9019/v2"} + + +CSAR_DIR="/opt/csar" +csar_id="cb009bfe-bbee-11e8-9766-525400435678" + + +app1_helm_path="$CSAR_DIR/$csar_id/prometheus-operator.tar.gz" +app1_profile_path="$CSAR_DIR/$csar_id/prometheus-operator_profile.tar.gz" +app2_helm_path="$CSAR_DIR/$csar_id/collectd.tar.gz" +app2_profile_path="$CSAR_DIR/$csar_id/collectd_profile.tar.gz" + +kubeConfigLocal="/home/otc/.kube/config" + + + +function populate_CSAR_composite_app_helm { + _checks_args "$1" + pushd "${CSAR_DIR}/$1" + print_msg "Create Helm Chart Archives for compositeApp" + rm -f *.tar.gz + tar -czf collectd.tar.gz -C $test_folder/vnfs/comp-app/collection/app1/helm . + tar -czf prometheus-operator.tar.gz -C $test_folder/vnfs/comp-app/collection/app2/helm . + tar -czf collectd_profile.tar.gz -C $test_folder/vnfs/comp-app/collection/app1/profile . + tar -czf prometheus-operator_profile.tar.gz -C $test_folder/vnfs/comp-app/collection/app2/profile . + popd +} + + +# ---------BEGIN: SET CLM DATA--------------- + +clusterprovidername="sanity-test-cluster-provider" +clusterproviderdata="$(cat<<EOF +{ + "metadata": { + "name": "$clusterprovidername", + "description": "description of $clusterprovidername", + "userData1": "$clusterprovidername user data 1", + "userData2": "$clusterprovidername user data 2" + } +} +EOF +)" + +clustername="LocalEdge1" +clusterdata="$(cat<<EOF +{ + "metadata": { + "name": "$clustername", + "description": "description of $clustername", + "userData1": "$clustername user data 1", + "userData2": "$clustername user data 2" + } +} +EOF +)" + + +labelname="LocalLabel" +labeldata="$(cat<<EOF +{"label-name": "$labelname"} +EOF +)" + + +# add the rsync controller entry +rsynccontrollername="rsync" +rsynccontrollerdata="$(cat<<EOF +{ + "metadata": { + "name": "rsync", + "description": "description of $rsynccontrollername controller", + "userData1": "user data 1 for $rsynccontrollername", + "userData2": "user data 2 for $rsynccontrollername" + }, + "spec": { + "host": "localhost", + "port": 9031 + } +} +EOF +)" + +# ------------END: SET CLM DATA-------------- + + +#-------------BEGIN:SET ORCH DATA------------------ + +# define a project +projectname="Sanity-Test-Project" +projectdata="$(cat<<EOF +{ + "metadata": { + "name": "$projectname", + "description": "description of $projectname controller", + "userData1": "$projectname user data 1", + "userData2": "$projectname user data 2" + } +} +EOF +)" + +# define a composite application +collection_compositeapp_name="CollectionCompositeApp" +compositeapp_version="v1" +compositeapp_data="$(cat <<EOF +{ + "metadata": { + "name": "${collection_compositeapp_name}", + "description": "description of ${collection_compositeapp_name}", + "userData1": "user data 1 for ${collection_compositeapp_name}", + "userData2": "user data 2 for ${collection_compositeapp_name}" + }, + "spec":{ + "version":"${compositeapp_version}" + } +} +EOF +)" + +# add app entries for the prometheus app into +# compositeApp + +prometheus_app_name="prometheus-operator" +prometheus_helm_chart=${app1_helm_path} + +prometheus_app_data="$(cat <<EOF +{ + "metadata": { + "name": "${prometheus_app_name}", + "description": "description for app ${prometheus_app_name}", + "userData1": "user data 2 for ${prometheus_app_name}", + "userData2": "user data 2 for ${prometheus_app_name}" + } +} +EOF +)" + +# add app entries for the collectd app into +# compositeApp + +collectd_app_name="collectd" +collectd_helm_chart=${app2_helm_path} + +collectd_app_data="$(cat <<EOF +{ + "metadata": { + "name": "${collectd_app_name}", + "description": "description for app ${collectd_app_name}", + "userData1": "user data 2 for ${collectd_app_name}", + "userData2": "user data 2 for ${collectd_app_name}" + } +} +EOF +)" + + +# Add the composite profile +collection_composite_profile_name="collection_composite-profile" +collection_composite_profile_data="$(cat <<EOF +{ + "metadata":{ + "name":"${collection_composite_profile_name}", + "description":"description of ${collection_composite_profile_name}", + "userData1":"user data 1 for ${collection_composite_profile_name}", + "userData2":"user data 2 for ${collection_composite_profile_name}" + } +} +EOF +)" + +# Add the prometheus profile data into collection profile data +prometheus_profile_name="prometheus-profile" +prometheus_profile_file=$app1_profile_path +prometheus_profile_data="$(cat <<EOF +{ + "metadata":{ + "name":"${prometheus_profile_name}", + "description":"description of ${prometheus_profile_name}", + "userData1":"user data 1 for ${prometheus_profile_name}", + "userData2":"user data 2 for ${prometheus_profile_name}" + }, + "spec":{ + "app-name": "${prometheus_app_name}" + } +} +EOF +)" + +# Add the collectd profile data into collection profile data +collectd_profile_name="collectd-profile" +collectd_profile_file=$app2_profile_path +collectd_profile_data="$(cat <<EOF +{ + "metadata":{ + "name":"${collectd_profile_name}", + "description":"description of ${collectd_profile_name}", + "userData1":"user data 1 for ${collectd_profile_name}", + "userData2":"user data 2 for ${collectd_profile_name}" + }, + "spec":{ + "app-name": "${collectd_app_name}" + } +} +EOF +)" + + +# define the generic placement intent +generic_placement_intent_name="test-generic-placement-intent" +generic_placement_intent_data="$(cat <<EOF +{ + "metadata":{ + "name":"${generic_placement_intent_name}", + "description":"${generic_placement_intent_name}", + "userData1":"${generic_placement_intent_name}", + "userData2":"${generic_placement_intent_name}" + }, + "spec":{ + "logical-cloud":"unused_logical_cloud" + } +} +EOF +)" + +# define app placement intent for prometheus +prometheus_placement_intent_name="prometheus-placement-intent" +prometheus_placement_intent_data="$(cat <<EOF +{ + "metadata":{ + "name":"${prometheus_placement_intent_name}", + "description":"description of ${prometheus_placement_intent_name}", + "userData1":"user data 1 for ${prometheus_placement_intent_name}", + "userData2":"user data 2 for ${prometheus_placement_intent_name}" + }, + "spec":{ + "app-name":"${prometheus_app_name}", + "intent":{ + "allOf":[ + { "provider-name":"${clusterprovidername}", + "cluster-label-name":"${labelname}" + } + ] + } + } +} +EOF +)" + +# define app placement intent for collectd +collectd_placement_intent_name="collectd-placement-intent" +collectd_placement_intent_data="$(cat <<EOF +{ + "metadata":{ + "name":"${collectd_placement_intent_name}", + "description":"description of ${collectd_placement_intent_name}", + "userData1":"user data 1 for ${collectd_placement_intent_name}", + "userData2":"user data 2 for ${collectd_placement_intent_name}" + }, + "spec":{ + "app-name":"${collectd_app_name}", + "intent":{ + "allOf":[ + { "provider-name":"${clusterprovidername}", + "cluster-label-name":"${labelname}" + } + ] + } + } +} +EOF +)" + + +# define a deployment intent group +release="test-collection" +deployment_intent_group_name="collection_deployment_intent_group" +deployment_intent_group_data="$(cat <<EOF +{ + "metadata":{ + "name":"${deployment_intent_group_name}", + "description":"descriptiont of ${deployment_intent_group_name}", + "userData1":"user data 1 for ${deployment_intent_group_name}", + "userData2":"user data 2 for ${deployment_intent_group_name}" + }, + "spec":{ + "profile":"${collection_composite_profile_name}", + "version":"${release}", + "override-values":[] + } +} +EOF +)" + +# define the intents to be used by the group +deployment_intents_in_group_name="collection_deploy_intents" +deployment_intents_in_group_data="$(cat <<EOF +{ + "metadata":{ + "name":"${deployment_intents_in_group_name}", + "description":"descriptionf of ${deployment_intents_in_group_name}", + "userData1":"user data 1 for ${deployment_intents_in_group_name}", + "userData2":"user data 2 for ${deployment_intents_in_group_name}" + }, + "spec":{ + "intent":{ + "genericPlacementIntent":"${generic_placement_intent_name}" + } + } +} +EOF +)" + + +#---------END: SET ORCH DATA-------------------- + + +function createOrchestratorData { + + print_msg "creating controller entries" + call_api -d "${rsynccontrollerdata}" "${base_url_orchestrator}/controllers" + print_msg "creating project entry" + call_api -d "${projectdata}" "${base_url_orchestrator}/projects" + + print_msg "creating collection composite app entry" + call_api -d "${compositeapp_data}" "${base_url_orchestrator}/projects/${projectname}/composite-apps" + + print_msg "adding prometheus app to the composite app" + call_api -F "metadata=${prometheus_app_data}" \ + -F "file=@${prometheus_helm_chart}" \ + "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/apps" + + print_msg "adding collectd app to the composite app" + call_api -F "metadata=${collectd_app_data}" \ + -F "file=@${collectd_helm_chart}" \ + "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/apps" + + print_msg "creating collection composite profile entry" + call_api -d "${collection_composite_profile_data}" "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/composite-profiles" + + print_msg "adding prometheus app profiles to the composite profile" + call_api -F "metadata=${prometheus_profile_data}" \ + -F "file=@${prometheus_profile_file}" \ + "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/composite-profiles/${collection_composite_profile_name}/profiles" + + print_msg "adding collectd app profiles to the composite profile" + call_api -F "metadata=${collectd_profile_data}" \ + -F "file=@${collectd_profile_file}" \ + "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/composite-profiles/${collection_composite_profile_name}/profiles" + + print_msg "create the generic placement intent" + call_api -d "${generic_placement_intent_data}" \ + "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/generic-placement-intents" + + print_msg "add the prometheus app placement intent to the generic placement intent" + call_api -d "${prometheus_placement_intent_data}" \ + "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents" + + print_msg "add the collectd app placement intent to the generic placement intent" + call_api -d "${collectd_placement_intent_data}" \ + "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents" + + + print_msg "create the deployment intent group" + call_api -d "${deployment_intent_group_data}" \ + "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups" + call_api -d "${deployment_intents_in_group_data}" \ + "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/intents" + +} + +function deleteOrchestratorData { + + print_msg "Begin deleteOrchestratorData" + + delete_resource "${base_url_orchestrator}/controllers/${rsynccontrollername}" + + 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}" + + delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}" + + 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}" + 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}" + delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}" + + delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/composite-profiles/${collection_composite_profile_name}/profiles/${prometheus_profile_name}" + delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/composite-profiles/${collection_composite_profile_name}/profiles/${collectd_profile_name}" + + + delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/composite-profiles/${collection_composite_profile_name}" + + delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/apps/${prometheus_app_name}" + + delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/apps/${collectd_app_name}" + + + delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}" + delete_resource "${base_url_orchestrator}/projects/${projectname}" + + print_msg "deleteOrchestratorData done" +} + + +function createClmData { + print_msg "Creating cluster provider and cluster" + call_api -d "${clusterproviderdata}" "${base_url_clm}/cluster-providers" + + call_api -H "Content-Type: multipart/form-data" -F "metadata=$clusterdata" -F "file=@$kubeConfigLocal" "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters" + + call_api -d "${labeldata}" "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters/${clustername}/labels" + + +} + +function deleteClmData { + print_msg "begin deleteClmData" + delete_resource "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters/${clustername}/labels/${labelname}" + delete_resource "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters/${clustername}" + delete_resource "${base_url_clm}/cluster-providers/${clusterprovidername}" + print_msg "deleteClmData done" +} + +function createData { + createClmData + createOrchestratorData +} + +function deleteData { + deleteClmData + deleteOrchestratorData +} + +function instantiate { + call_api -d "{ }" "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/instantiate" +} + + +function terminateOrchData { + call_api -d "{ }" "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/terminate" +} + +# Setup + +function setup { + install_deps + populate_CSAR_composite_app_helm "$csar_id" +} + +function usage { + echo "" + echo " Usage: $0 start | stop" + echo "" + echo " start - creates the orchstrator and cluster management data, instantiates the resources for collectd and prometheus and then deploys them on the local cluster" + echo "" + echo " stop - terminates the resources for collectd and prometheus and uninstalls the compositeApp" + echo "" + exit +} + +if [ "$#" -ne 1 ] ; then + usage +fi + + +case "$1" in + "start" ) + deleteData + print_msg "deleting the data success" + createData + print_msg "creating the data success" + instantiate + print_msg "instantiate success" + ;; + "stop" ) + terminateOrchData + print_msg "terminated the resources" + ;; + *) usage ;; +esac diff --git a/src/orchestrator/pkg/module/deployment_intent_groups.go b/src/orchestrator/pkg/module/deployment_intent_groups.go index c7237032..35b03564 100644 --- a/src/orchestrator/pkg/module/deployment_intent_groups.go +++ b/src/orchestrator/pkg/module/deployment_intent_groups.go @@ -243,7 +243,7 @@ func (c *DeploymentIntentGroupClient) DeleteDeploymentIntentGroup(di string, p s } _, _, err := c.GetDeploymentIntentGroupContext(di, p, ca, v) if err == nil { - return pkgerrors.Wrap(err, "DeploymentIntentGroup must be terminated before it can be deleted "+di) + return pkgerrors.New("DeploymentIntentGroup must be terminated before it can be deleted " + di) } err = db.DBconn.Remove(c.storeName, k) |