[APACHECNF] CDS workflows for upgrade scenario 81/132181/1
authorLukasz Rajewski <lukasz.rajewski@t-mobile.pl>
Mon, 14 Nov 2022 13:48:24 +0000 (14:48 +0100)
committerLukasz Rajewski <lukasz.rajewski@t-mobile.pl>
Mon, 14 Nov 2022 13:51:20 +0000 (14:51 +0100)
Issue-ID: INT-2164
Signed-off-by: Lukasz Rajewski <lukasz.rajewski@t-mobile.pl>
Change-Id: Icfa9dd7d90abb3da2b0cf388cfb1e3a27e8edd6d

14 files changed:
tutorials/ApacheCNF/templates/cba-dev/bootstrap.sh [changed mode: 0644->0755]
tutorials/ApacheCNF/templates/cba-dev/build.sh [changed mode: 0644->0755]
tutorials/ApacheCNF/templates/cba-dev/deploy.sh [changed mode: 0644->0755]
tutorials/ApacheCNF/templates/cba-dev/enrich.sh [changed mode: 0644->0755]
tutorials/ApacheCNF/templates/cba-dev/run-vf-base-ra.sh [changed mode: 0644->0755]
tutorials/ApacheCNF/templates/cba-dev/run-vnf-config.sh [changed mode: 0644->0755]
tutorials/ApacheCNF/templates/cba-dev/run-vnf-ra.sh [changed mode: 0644->0755]
tutorials/ApacheCNF/templates/cba-dev/run-vnf-upgrade-config.sh [new file with mode: 0755]
tutorials/ApacheCNF/templates/cba/Definitions/CNF.json
tutorials/ApacheCNF/templates/cba/Definitions/data_types.json
tutorials/ApacheCNF/templates/cba/Scripts/kotlin/ConfigDeploySetup.kt
tutorials/ApacheCNF/templates/cba/Scripts/kotlin/SimpleScript.kt [moved from tutorials/ApacheCNF/templates/cba/Scripts/kotlin/SimpleErrorCheck.kt with 80% similarity]
tutorials/ApacheCNF/templates/cba/Scripts/kotlin/SimpleStatusCheck.kt
tutorials/ApacheCNF/templates/cba/Templates/cnf-template.vtl

old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
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 (executable)
index 0000000..2f35847
--- /dev/null
@@ -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'"]'
+
index 4f44e8a..f273bfb 100644 (file)
                     }
                 }
             },
+            "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": {
                     }
                 }
             },
+            "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": {
                             "status-verification-script"
                         ],
                         "on_failure": [
-                            "handle_error"
+                            "handle-error"
                         ]
                     },
                     "status-verification-script": {
                             "collect-results"
                         ]
                     },
-                    "handle_error": {
+                    "handle-error": {
                         "description": "Simple error verification script",
-                        "target": "simple-error-check",
+                        "target": "simple-script",
                         "activities": [
                             {
                                 "call_operation": "ComponentScriptExecutor.process"
                     }
                 }
             },
+            "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": {
                     }
                 }
             },
-            "simple-error-check": {
+            "simple-script": {
                 "type": "component-script-executor",
                 "interfaces": {
                     "ComponentScriptExecutor": {
                             "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"
                                 }
                             }
index 1573c81..5a3b9d2 100644 (file)
             },
             "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",
             },
             "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",
index f925be0..c57ca75 100644 (file)
@@ -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
                             }
                         }
@@ -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) {
index c1f59d9..4cef7f6 100644 (file)
@@ -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) {
index 1bebcaa..9919982 100644 (file)
             "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}"