From: Lukasz Rajewski Date: Mon, 14 Nov 2022 13:48:24 +0000 (+0100) Subject: [APACHECNF] CDS workflows for upgrade scenario X-Git-Url: https://gerrit.onap.org/r/gitweb?p=demo.git;a=commitdiff_plain;h=4193053d0fc30b688f991e2356e2c0cd6c446a57 [APACHECNF] CDS workflows for upgrade scenario Issue-ID: INT-2164 Signed-off-by: Lukasz Rajewski Change-Id: Icfa9dd7d90abb3da2b0cf388cfb1e3a27e8edd6d --- diff --git a/tutorials/ApacheCNF/templates/cba-dev/bootstrap.sh b/tutorials/ApacheCNF/templates/cba-dev/bootstrap.sh old mode 100644 new mode 100755 diff --git a/tutorials/ApacheCNF/templates/cba-dev/build.sh b/tutorials/ApacheCNF/templates/cba-dev/build.sh old mode 100644 new mode 100755 diff --git a/tutorials/ApacheCNF/templates/cba-dev/deploy.sh b/tutorials/ApacheCNF/templates/cba-dev/deploy.sh old mode 100644 new mode 100755 diff --git a/tutorials/ApacheCNF/templates/cba-dev/enrich.sh b/tutorials/ApacheCNF/templates/cba-dev/enrich.sh old mode 100644 new mode 100755 diff --git a/tutorials/ApacheCNF/templates/cba-dev/run-vf-base-ra.sh b/tutorials/ApacheCNF/templates/cba-dev/run-vf-base-ra.sh old mode 100644 new mode 100755 diff --git a/tutorials/ApacheCNF/templates/cba-dev/run-vnf-config.sh b/tutorials/ApacheCNF/templates/cba-dev/run-vnf-config.sh old mode 100644 new mode 100755 diff --git a/tutorials/ApacheCNF/templates/cba-dev/run-vnf-ra.sh b/tutorials/ApacheCNF/templates/cba-dev/run-vnf-ra.sh old mode 100644 new mode 100755 diff --git a/tutorials/ApacheCNF/templates/cba-dev/run-vnf-upgrade-config.sh b/tutorials/ApacheCNF/templates/cba-dev/run-vnf-upgrade-config.sh new file mode 100755 index 00000000..2f35847a --- /dev/null +++ b/tutorials/ApacheCNF/templates/cba-dev/run-vnf-upgrade-config.sh @@ -0,0 +1,52 @@ +#!/bin/sh + +# ============LICENSE_START======================================================= +# Copyright (C) 2022 Deutche Telekom AG +# ================================================================================ +# 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. +# +# ============LICENSE_END========================================================= + +REQ_ID=`shuf -i 1-1000000 -n 1` +SUB_REQ_ID=$REQ_ID"-"`shuf -i 1-1000 -n 1` +ACTION=$1 + +curl --location --request POST 'http://localhost:8081/api/v1/execution-service/process' \ +--header 'Authorization: Basic Y2NzZGthcHBzOmNjc2RrYXBwcw==' \ +--header 'Content-Type: application/json' \ +--data-raw '{ + "commonHeader": { + "originatorId": "onap-me-cm-adapter", + "requestId": "'$REQ_ID'", + "subRequestId": "'$SUB_REQ_ID'" + }, + "actionIdentifiers": { + "blueprintName": "APACHE", + "blueprintVersion": "1.0.0", + "actionName": "'config-upgrade-$ACTION'", + "mode": "sync" + }, + "payload": { + "'config-upgrade-$ACTION-request'": { + "resolution-key": "VF_apache_k8s_demo_CNF", + "'config-upgrade-$ACTION-properties'": { + "service-instance-id": "5e6c49cc-e569-4eb9-bc9e-f7ce0ffb798f", + "service-model-uuid": "0997c40e-63b7-419d-a13b-6a5ce97334bb", + "vnf-id": "935fe87e-9bbd-4828-add2-d90196f5f382", + "vnf-name": "Instance_apache-3_0", + "vnf-customization-uuid": "6b6ff775-a170-4ce4-bcd0-85645d738390" + } + } + } +}' | jq '.payload | .["'config-upgrade-$ACTION-response'"]' + diff --git a/tutorials/ApacheCNF/templates/cba/Definitions/CNF.json b/tutorials/ApacheCNF/templates/cba/Definitions/CNF.json index 4f44e8a1..f273bfb8 100644 --- a/tutorials/ApacheCNF/templates/cba/Definitions/CNF.json +++ b/tutorials/ApacheCNF/templates/cba/Definitions/CNF.json @@ -167,6 +167,46 @@ } } }, + "config-upgrade-assign": { + "steps": { + "config-setup": { + "description": "Gather necessary input for profile upload", + "target": "config-setup-process", + "activities": [ + { + "call_operation": "ResourceResolutionComponent.process" + } + ], + "on_success": [ + "profile-upload" + ] + }, + "profile-upload": { + "description": "Generate and upload K8s Profile before upgrade", + "target": "k8s-profile-upgrade-upload", + "activities": [ + { + "call_operation": "ComponentScriptExecutor.process" + } + ] + } + }, + "inputs": { + "resolution-key": { + "required": true, + "type": "string" + }, + "store-result": { + "required": true, + "type": "boolean" + }, + "config-upgrade-assign-properties": { + "description": "Dynamic PropertyDefinition for workflow(config-upgrade-assign).", + "required": true, + "type": "dt-config-upgrade-assign-properties" + } + } + }, "config-deploy": { "steps": { "config-setup": { @@ -234,6 +274,46 @@ } } }, + "config-upgrade-deploy": { + "steps": { + "config-setup": { + "description": "Gather necessary input for profile upload", + "target": "config-setup-process", + "activities": [ + { + "call_operation": "ResourceResolutionComponent.process" + } + ], + "on_success": [ + "status-verification-script" + ] + }, + "status-verification-script": { + "description": "Simple status verification script", + "target": "simple-status-check", + "activities": [ + { + "call_operation": "ComponentScriptExecutor.process" + } + ] + } + }, + "inputs": { + "resolution-key": { + "required": true, + "type": "string" + }, + "store-result": { + "required": true, + "type": "boolean" + }, + "config-upgrade-deploy-properties": { + "description": "Dynamic PropertyDefinition for workflow(config-upgrade-deploy).", + "required": true, + "type": "dt-config-upgrade-deploy-properties" + } + } + }, "scale-out": { "steps": { "config-setup": { @@ -449,7 +529,7 @@ "status-verification-script" ], "on_failure": [ - "handle_error" + "handle-error" ] }, "status-verification-script": { @@ -476,9 +556,9 @@ "collect-results" ] }, - "handle_error": { + "handle-error": { "description": "Simple error verification script", - "target": "simple-error-check", + "target": "simple-script", "activities": [ { "call_operation": "ComponentScriptExecutor.process" @@ -573,6 +653,41 @@ } } }, + "k8s-profile-upgrade-upload": { + "type": "component-k8s-profile-upload", + "interfaces": { + "K8sProfileUploadComponent": { + "operations": { + "process": { + "inputs": { + "artifact-prefix-names": [ + "helm_apache" + ], + "resource-assignment-map": { + "get_attribute": [ + "config-setup-process", + "", + "assignment-map", + "config-deploy", + "config-deploy-setup" + ] + } + } + } + } + } + }, + "artifacts": { + "cnf-cds-base-profile": { + "type": "artifact-k8sprofile-content", + "file": "Templates/k8s-profiles/cnf-cds-base-profile.tar.gz" + }, + "node-port-profile": { + "type": "artifact-k8sprofile-content", + "file": "Templates/k8s-profiles/node-port-profile.tar.gz" + } + } + }, "k8s-config-template": { "type": "component-k8s-config-template", "interfaces": { @@ -731,7 +846,7 @@ } } }, - "simple-error-check": { + "simple-script": { "type": "component-script-executor", "interfaces": { "ComponentScriptExecutor": { @@ -739,10 +854,7 @@ "process": { "inputs": { "script-type": "kotlin", - "script-class-reference": "org.onap.ccsdk.cds.blueprintsprocessor.services.execution.scripts.SimpleErrorCheck", - "instance-dependencies": [ - "bluePrintPropertiesService" - ], + "script-class-reference": "org.onap.ccsdk.cds.blueprintsprocessor.services.execution.scripts.SimpleScript", "dynamic-properties": "*simple-status-properties" } } diff --git a/tutorials/ApacheCNF/templates/cba/Definitions/data_types.json b/tutorials/ApacheCNF/templates/cba/Definitions/data_types.json index 1573c81c..5a3b9d2d 100644 --- a/tutorials/ApacheCNF/templates/cba/Definitions/data_types.json +++ b/tutorials/ApacheCNF/templates/cba/Definitions/data_types.json @@ -17,6 +17,38 @@ }, "derived_from": "tosca.datatypes.Dynamic" }, + "dt-config-upgrade-assign-properties": { + "description": "Dynamic DataType definition for workflow(config-upgrade-assign).", + "version": "1.0.0", + "properties": { + "service-instance-id": { + "description": "", + "required": false, + "type": "string" + }, + "service-model-uuid": { + "description": "", + "required": false, + "type": "string" + }, + "vnf-id": { + "description": "", + "required": false, + "type": "string" + }, + "vnf-name": { + "description": "", + "required": false, + "type": "string" + }, + "vnf-customization-uuid": { + "description": "", + "required": false, + "type": "string" + } + }, + "derived_from": "tosca.datatypes.Dynamic" + }, "dt-config-deploy-properties": { "description": "Dynamic DataType definition for workflow(config-deploy).", "version": "1.0.0", @@ -45,6 +77,38 @@ }, "derived_from": "tosca.datatypes.Dynamic" }, + "dt-config-upgrade-deploy-properties": { + "description": "Dynamic DataType definition for workflow(config-upgrade-deploy).", + "version": "1.0.0", + "properties": { + "service-instance-id": { + "description": "", + "required": false, + "type": "string" + }, + "service-model-uuid": { + "description": "", + "required": false, + "type": "string" + }, + "vnf-id": { + "description": "", + "required": false, + "type": "string" + }, + "vnf-name": { + "description": "", + "required": false, + "type": "string" + }, + "vnf-customization-uuid": { + "description": "", + "required": false, + "type": "string" + } + }, + "derived_from": "tosca.datatypes.Dynamic" + }, "dt-health-check-properties": { "description": "Dynamic DataType definition for workflow(health-check).", "version": "1.0.0", diff --git a/tutorials/ApacheCNF/templates/cba/Scripts/kotlin/ConfigDeploySetup.kt b/tutorials/ApacheCNF/templates/cba/Scripts/kotlin/ConfigDeploySetup.kt index f925be06..c57ca758 100644 --- a/tutorials/ApacheCNF/templates/cba/Scripts/kotlin/ConfigDeploySetup.kt +++ b/tutorials/ApacheCNF/templates/cba/Scripts/kotlin/ConfigDeploySetup.kt @@ -21,6 +21,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import org.onap.ccsdk.cds.blueprintsprocessor.functions.k8s.definition.template.K8sConfigTemplateComponent import org.onap.ccsdk.cds.blueprintsprocessor.functions.k8s.definition.template.K8sConfigValueComponent +import org.onap.ccsdk.cds.blueprintsprocessor.functions.k8s.definition.profile.K8sProfileUploadComponent import org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution.processor.ResourceAssignmentProcessor import org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution.utils.ResourceAssignmentUtils import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintProcessorException @@ -100,13 +101,23 @@ open class ConfigDeploySetup() : ResourceAssignmentProcessor() { val modelInfo = modelTopology["onap-model-information"] val moduleData: ObjectNode = objectMapper.createObjectNode() result.put(label, moduleData) - moduleData.put(K8sConfigTemplateComponent.INPUT_K8S_DEFINITION_NAME, modelInfo["model-invariant-uuid"].asText()) - moduleData.put(K8sConfigTemplateComponent.INPUT_K8S_DEFINITION_VERSION, modelInfo["model-customization-uuid"].asText()) + val profileName: String? = getParamValueByName(moduleParameters, K8sProfileUploadComponent.INPUT_K8S_PROFILE_NAME) + val profileSource: String? = getParamValueByName(moduleParameters, K8sProfileUploadComponent.INPUT_K8S_PROFILE_SOURCE) + val profileNamespace: String? = getParamValueByName(moduleParameters, K8sProfileUploadComponent.INPUT_K8S_PROFILE_NAMESPACE) + val profileK8sVersion: String? = getParamValueByName(moduleParameters, K8sProfileUploadComponent.INPUT_K8S_PROFILE_K8S_VERSION) val templateName: String? = getParamValueByName(moduleParameters, K8sConfigTemplateComponent.INPUT_K8S_TEMPLATE_NAME) val templateSource: String? = getParamValueByName(moduleParameters, K8sConfigTemplateComponent.INPUT_K8S_TEMPLATE_SOURCE) val configValueSource: String? = getParamValueByName(moduleParameters, K8sConfigValueComponent.INPUT_K8S_CONFIG_VALUE_SOURCE) val configName: String? = getParamValueByName(moduleParameters, K8sConfigValueComponent.INPUT_K8S_RB_CONFIG_NAME) + if (profileName != null) + moduleData.put(K8sProfileUploadComponent.INPUT_K8S_PROFILE_NAME, profileName) + if (profileSource != null) + moduleData.put(K8sProfileUploadComponent.INPUT_K8S_PROFILE_SOURCE, profileSource) + if (profileNamespace != null) + moduleData.put(K8sProfileUploadComponent.INPUT_K8S_PROFILE_NAMESPACE, profileNamespace) + if (profileK8sVersion != null) + moduleData.put(K8sProfileUploadComponent.INPUT_K8S_PROFILE_K8S_VERSION, profileK8sVersion) if (templateName != null) moduleData.put(K8sConfigTemplateComponent.INPUT_K8S_TEMPLATE_NAME, templateName) if (templateSource != null) @@ -119,6 +130,8 @@ open class ConfigDeploySetup() : ResourceAssignmentProcessor() { for (aaiModule in modulesAai) { if (aaiModule["vf-module-id"].asText() == module["vf-module-id"].asText() && aaiModule["heat-stack-id"] != null) { moduleData.put(K8sConfigValueComponent.INPUT_K8S_INSTANCE_ID, aaiModule["heat-stack-id"].asText()) + moduleData.put(K8sConfigTemplateComponent.INPUT_K8S_DEFINITION_NAME, aaiModule["model-invariant-id"].asText()) + moduleData.put(K8sConfigTemplateComponent.INPUT_K8S_DEFINITION_VERSION, aaiModule["model-customization-id"].asText()) break } } diff --git a/tutorials/ApacheCNF/templates/cba/Scripts/kotlin/SimpleErrorCheck.kt b/tutorials/ApacheCNF/templates/cba/Scripts/kotlin/SimpleScript.kt similarity index 80% rename from tutorials/ApacheCNF/templates/cba/Scripts/kotlin/SimpleErrorCheck.kt rename to tutorials/ApacheCNF/templates/cba/Scripts/kotlin/SimpleScript.kt index 8e4a58ab..6849654d 100644 --- a/tutorials/ApacheCNF/templates/cba/Scripts/kotlin/SimpleErrorCheck.kt +++ b/tutorials/ApacheCNF/templates/cba/Scripts/kotlin/SimpleScript.kt @@ -20,18 +20,18 @@ import org.onap.ccsdk.cds.blueprintsprocessor.core.api.data.ExecutionServiceInpu import org.onap.ccsdk.cds.blueprintsprocessor.services.execution.AbstractScriptComponentFunction import org.slf4j.LoggerFactory -open class SimpleErrorCheck : AbstractScriptComponentFunction() { +open class SimpleScript : AbstractScriptComponentFunction() { - private val log = LoggerFactory.getLogger(SimpleErrorCheck::class.java)!! + private val log = LoggerFactory.getLogger(SimpleScript::class.java)!! override fun getName(): String { - return "SimpleErrorCheck" + return "SimpleScript" } override suspend fun processNB(executionRequest: ExecutionServiceInput) { - log.info("SIMPLE ERROR CHECK - START") + log.info("STEP ${executionRequest.stepData?.name} - START") - log.info("SIMPLE ERROR CHECK - END") + log.info("STEP ${executionRequest.stepData?.name} - STOP") } override suspend fun recoverNB(runtimeException: RuntimeException, executionRequest: ExecutionServiceInput) { diff --git a/tutorials/ApacheCNF/templates/cba/Scripts/kotlin/SimpleStatusCheck.kt b/tutorials/ApacheCNF/templates/cba/Scripts/kotlin/SimpleStatusCheck.kt index c1f59d98..4cef7f66 100644 --- a/tutorials/ApacheCNF/templates/cba/Scripts/kotlin/SimpleStatusCheck.kt +++ b/tutorials/ApacheCNF/templates/cba/Scripts/kotlin/SimpleStatusCheck.kt @@ -35,7 +35,7 @@ open class SimpleStatusCheck : AbstractScriptComponentFunction() { } override suspend fun processNB(executionRequest: ExecutionServiceInput) { - log.info("SIMPLE STATUS CHECK - START") + log.info("STEP ${executionRequest.stepData?.name} - START") val configValueSetup: ObjectNode = getDynamicProperties("config-deploy-setup") as ObjectNode var checkCount: Int = getDynamicProperties("status-check-max-count").asInt() @@ -71,7 +71,7 @@ open class SimpleStatusCheck : AbstractScriptComponentFunction() { checkCount = 0 } - log.info("SIMPLE STATUS CHECK - END") + log.info("STEP ${executionRequest.stepData?.name} - STOP") } override suspend fun recoverNB(runtimeException: RuntimeException, executionRequest: ExecutionServiceInput) { diff --git a/tutorials/ApacheCNF/templates/cba/Templates/cnf-template.vtl b/tutorials/ApacheCNF/templates/cba/Templates/cnf-template.vtl index 1bebcaa0..99199824 100644 --- a/tutorials/ApacheCNF/templates/cba/Templates/cnf-template.vtl +++ b/tutorials/ApacheCNF/templates/cba/Templates/cnf-template.vtl @@ -43,6 +43,18 @@ "param-name": "k8s-rb-profile-name", "param-value": "${k8s-rb-profile-name}" }, + { + "param-name": "k8s-rb-profile-source", + "param-value": "${k8s-rb-profile-source}" + }, + { + "param-name": "k8s-rb-profile-namespace", + "param-value": "${k8s-rb-profile-namespace}" + }, + { + "param-name": "k8s-rb-profile-k8s-version", + "param-value": "${k8s-rb-profile-k8s-version}" + }, { "param-name": "k8s-rb-config-template-name", "param-value": "${k8s-rb-config-template-name}"