diff options
Diffstat (limited to 'components')
29 files changed, 1183 insertions, 325 deletions
diff --git a/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Definitions/PNF_CDS_RESTCONF.json b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Definitions/PNF_CDS_RESTCONF.json new file mode 100644 index 000000000..2e6c2f547 --- /dev/null +++ b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Definitions/PNF_CDS_RESTCONF.json @@ -0,0 +1,424 @@ +{ + "tosca_definitions_version" : "controller_blueprint_1_0_0", + "metadata" : { + "template_author" : "Raj Gumma", + "author-email" : "raj.gumma@est.tech", + "user-groups" : "ADMIN, OPERATION", + "template_name" : "PNF_CDS_RESTCONF", + "template_version" : "1.0.0", + "template_tags" : "PNF, Restconf, config, configuration, software upgrade" + }, + "imports" : [ { + "file" : "Definitions/data_types.json" + }, { + "file" : "Definitions/relationship_types.json" + }, { + "file" : "Definitions/artifact_types.json" + }, { + "file" : "Definitions/node_types.json" + }, { + "file" : "Definitions/policy_types.json" + } ], + "dsl_definitions" : { + "config-deploy-properties" : { + "resolution-key" : { + "get_input" : "resolution-key" + } + }, + "precheck-properties" : { + "resolution-key" : { + "get_input" : "resolution-key" + } + }, + "downloadNeSw-properties" : { + "resolution-key" : { + "get_input" : "resolution-key" + } + }, + "activateNeSw-properties" : { + "resolution-key" : { + "get_input" : "resolution-key" + } + }, + "postcheck-properties" : { + "resolution-key" : { + "get_input" : "resolution-key" + } + } + }, + "topology_template" : { + "workflows" : { + "config-assign" : { + "steps" : { + "activate-process" : { + "description" : "Create a configlet", + "target" : "config-assign", + "activities" : [ { + "call_operation" : "" + } ] + } + }, + "inputs" : { + "resolution-key" : { + "required" : true, + "type" : "string" + }, + "store-result" : { + "required" : true, + "type" : "boolean" + }, + "config-assign-properties" : { + "description" : "Dynamic PropertyDefinition for workflow(config-assign).", + "required" : true, + "type" : "dt-config-assign-properties" + } + } + }, + "config-deploy" : { + "steps" : { + "activate-process" : { + "description" : "Send a configlet to the pnf", + "target" : "config-deploy", + "activities" : [ { + "call_operation" : "" + } ] + } + }, + "inputs" : { + "resolution-key" : { + "required" : true, + "type" : "string" + }, + "config-deploy-properties" : { + "description" : "Dynamic PropertyDefinition for workflow(config-deploy).", + "required" : true, + "type" : "dt-config-deploy-properties" + } + } + }, + "precheck" : { + "steps" : { + "activate-process" : { + "description" : "Check if pnf ready for sw upgrade", + "target" : "precheck", + "activities" : [ { + "call_operation" : "" + } ] + } + }, + "inputs" : { + "resolution-key" : { + "required" : true, + "type" : "string" + }, + "precheck-properties" : { + "description" : "Dynamic PropertyDefinition for precheck workflow(software-upgrade).", + "required" : true, + "type" : "dt-precheck-properties" + } + } + }, + "downloadNeSw" : { + "steps" : { + "activate-process" : { + "description" : "Trigger download new software for sw upgrade", + "target" : "downloadNeSw", + "activities" : [ { + "call_operation" : "" + } ] + } + }, + "inputs" : { + "resolution-key" : { + "required" : true, + "type" : "string" + }, + "downloadNeSw-properties" : { + "description" : "Dynamic PropertyDefinition for downloadNeSw workflow(software-upgrade).", + "required" : true, + "type" : "dt-downloadNeSw-properties" + } + } + }, + "activateNeSw" : { + "steps" : { + "activate-process" : { + "description" : "Trigger activation of target software version for pnf upgrade", + "target" : "activateNeSw", + "activities" : [ { + "call_operation" : "" + } ] + } + }, + "inputs" : { + "resolution-key" : { + "required" : true, + "type" : "string" + }, + "activateNeSw-properties" : { + "description" : "Dynamic PropertyDefinition for activateNeSw workflow(software-upgrade).", + "required" : true, + "type" : "dt-activateNeSw-properties" + } + } + }, + "postcheck" : { + "steps" : { + "activate-process" : { + "description" : "Check if pnf upgrade is completed", + "target" : "postcheck", + "activities" : [ { + "call_operation" : "" + } ] + } + }, + "inputs" : { + "resolution-key" : { + "required" : true, + "type" : "string" + }, + "postcheck-properties" : { + "description" : "Dynamic PropertyDefinition for postcheck workflow(software-upgrade).", + "required" : true, + "type" : "dt-postcheck-properties" + } + } + } + }, + "node_templates" : { + "config-assign" : { + "type" : "component-resource-resolution", + "interfaces" : { + "ResourceResolutionComponent" : { + "operations" : { + "process" : { + "inputs" : { + "resolution-key" : { + "get_input" : "resolution-key" + }, + "store-result" : true, + "artifact-prefix-names" : [ "config-assign" ] + }, + "outputs" : { + "resource-assignment-params" : { + "get_attribute" : [ "SELF", "assignment-params" ] + }, + "status" : "success" + } + } + } + } + }, + "artifacts" : { + "config-assign-template" : { + "type" : "artifact-template-velocity", + "file" : "Templates/config-assign-restconf-configlet-template.vtl" + }, + "config-assign-mapping" : { + "type" : "artifact-mapping-resource", + "file" : "Definitions/config-assign-pnf-mapping.json" + } + } + }, + "config-deploy" : { + "type" : "component-script-executor", + "interfaces" : { + "ComponentScriptExecutor" : { + "operations" : { + "process" : { + "implementation" : { + "primary" : "component-script", + "timeout" : 180, + "operation_host" : "SELF" + }, + "inputs" : { + "script-type" : "kotlin", + "script-class-reference" : "cba.pnf.config.aai.RestconfConfigDeploy", + "dynamic-properties" : "*config-deploy-properties" + }, + "outputs" : { + "response-data" : "", + "status" : "success" + } + } + } + } + }, + "artifacts" : { + "config-deploy-template" : { + "type" : "artifact-template-velocity", + "file" : "Templates/restconf-mount-template.vtl" + }, + "config-deploy-mapping" : { + "type" : "artifact-mapping-resource", + "file" : "Definitions/config-deploy-pnf-mapping.json" + } + } + }, + "precheck" : { + "type" : "component-script-executor", + "interfaces" : { + "ComponentScriptExecutor" : { + "operations" : { + "process" : { + "implementation" : { + "primary" : "component-script", + "timeout" : 180, + "operation_host" : "SELF" + }, + "inputs" : { + "script-type" : "kotlin", + "script-class-reference" : "cba.pnf.swug.RestconfSoftwareUpgrade", + "dynamic-properties" : "*precheck-properties" + }, + "outputs" : { + "response-data" : "", + "status" : "success" + } + } + } + } + }, + "artifacts" : { + "mount-node-template" : { + "type" : "artifact-template-velocity", + "file" : "Templates/restconf-mount-template.vtl" + }, + "mount-node-mapping" : { + "type" : "artifact-mapping-resource", + "file" : "Definitions/pnf-software-upgrade-mapping.json" + } + } + }, + "downloadNeSw" : { + "type" : "component-script-executor", + "interfaces" : { + "ComponentScriptExecutor" : { + "operations" : { + "process" : { + "implementation" : { + "primary" : "component-script", + "timeout" : 180, + "operation_host" : "SELF" + }, + "inputs" : { + "script-type" : "kotlin", + "script-class-reference" : "cba.pnf.swug.RestconfSoftwareUpgrade", + "dynamic-properties" : "*downloadNeSw-properties" + }, + "outputs" : { + "response-data" : "", + "status" : "success" + } + } + } + } + }, + "artifacts" : { + "mount-node-template" : { + "type" : "artifact-template-velocity", + "file" : "Templates/restconf-mount-template.vtl" + }, + "mount-node-mapping" : { + "type" : "artifact-mapping-resource", + "file" : "Definitions/pnf-software-upgrade-mapping.json" + }, + "configure-template" : { + "type" : "artifact-template-velocity", + "file" : "Templates/pnf-swug-config-template.vtl" + }, + "configure-mapping" : { + "type" : "artifact-mapping-resource", + "file" : "Definitions/pnf-software-upgrade-mapping.json" + }, + "download-ne-sw-template" : { + "type" : "artifact-template-velocity", + "file" : "Templates/pnf-swug-download-ne-sw-template.vtl" + }, + "download-ne-sw-mapping" : { + "type" : "artifact-mapping-resource", + "file" : "Definitions/pnf-software-upgrade-mapping.json" + } + } + }, + "activateNeSw" : { + "type" : "component-script-executor", + "interfaces" : { + "ComponentScriptExecutor" : { + "operations" : { + "process" : { + "implementation" : { + "primary" : "component-script", + "timeout" : 180, + "operation_host" : "SELF" + }, + "inputs" : { + "script-type" : "kotlin", + "script-class-reference" : "cba.pnf.swug.RestconfSoftwareUpgrade", + "dynamic-properties" : "*activateNeSw-properties" + }, + "outputs" : { + "response-data" : "", + "status" : "success" + } + } + } + } + }, + "artifacts" : { + "mount-node-template" : { + "type" : "artifact-template-velocity", + "file" : "Templates/restconf-mount-template.vtl" + }, + "mount-node-mapping" : { + "type" : "artifact-mapping-resource", + "file" : "Definitions/pnf-software-upgrade-mapping.json" + }, + "configure-template" : { + "type" : "artifact-template-velocity", + "file" : "Templates/pnf-swug-config-template.vtl" + }, + "configure-mapping" : { + "type" : "artifact-mapping-resource", + "file" : "Definitions/pnf-software-upgrade-mapping.json" + } + } + }, + "postcheck" : { + "type" : "component-script-executor", + "interfaces" : { + "ComponentScriptExecutor" : { + "operations" : { + "process" : { + "implementation" : { + "primary" : "component-script", + "timeout" : 180, + "operation_host" : "SELF" + }, + "inputs" : { + "script-type" : "kotlin", + "script-class-reference" : "cba.pnf.swug.RestconfSoftwareUpgrade", + "dynamic-properties" : "*postcheck-properties" + }, + "outputs" : { + "response-data" : "", + "status" : "success" + } + } + } + } + }, + "artifacts" : { + "mount-node-template" : { + "type" : "artifact-template-velocity", + "file" : "Templates/restconf-mount-template.vtl" + }, + "mount-node-mapping" : { + "type" : "artifact-mapping-resource", + "file" : "Definitions/pnf-software-upgrade-mapping.json" + } + } + } + } + } +}
\ No newline at end of file diff --git a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Definitions/artifact_types.json b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Definitions/artifact_types.json index 6ec3b4105..6ec3b4105 100644 --- a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Definitions/artifact_types.json +++ b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Definitions/artifact_types.json diff --git a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Definitions/config-assign-pnf-mapping.json b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Definitions/config-assign-pnf-mapping.json index fe51488c7..fe51488c7 100644 --- a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Definitions/config-assign-pnf-mapping.json +++ b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Definitions/config-assign-pnf-mapping.json diff --git a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Definitions/config-deploy-pnf-mapping.json b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Definitions/config-deploy-pnf-mapping.json index dd8889c80..dd8889c80 100644 --- a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Definitions/config-deploy-pnf-mapping.json +++ b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Definitions/config-deploy-pnf-mapping.json diff --git a/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Definitions/data_types.json b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Definitions/data_types.json new file mode 100644 index 000000000..e3d216c89 --- /dev/null +++ b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Definitions/data_types.json @@ -0,0 +1,75 @@ +{ + "data_types" : { + "dt-config-assign-properties" : { + "description" : "Dynamic DataType definition for workflow(config-assign).", + "version" : "1.0.0", + "properties" : { }, + "derived_from" : "tosca.datatypes.Dynamic" + }, + "dt-config-deploy-properties" : { + "description" : "Dynamic DataType definition for workflow(config-deploy).", + "version" : "1.0.0", + "properties" : { + "pnf-ipv4-address" : { + "type" : "string" + }, + "pnf-id" : { + "type" : "string" + } + }, + "derived_from" : "tosca.datatypes.Dynamic" + }, + "dt-precheck-properties": { + "description": "Dynamic DataType definition for the precheck workflow(upgrade-software).", + "version": "1.0.0", + "properties": { + "pnf-id": { + "type": "string" + }, + "target-software-version": { + "type": "string" + } + }, + "derived_from": "tosca.datatypes.Dynamic" + }, + "dt-downloadNeSw-properties": { + "description": "Dynamic DataType definition for the downloadNeSw workflow(upgrade-software).", + "version": "1.0.0", + "properties": { + "pnf-id": { + "type": "string" + }, + "target-software-version": { + "type": "string" + } + }, + "derived_from": "tosca.datatypes.Dynamic" + }, + "dt-activateNeSw-properties": { + "description": "Dynamic DataType definition for the activateNeSw workflow(upgrade-software).", + "version": "1.0.0", + "properties": { + "pnf-id": { + "type": "string" + }, + "target-software-version": { + "type": "string" + } + }, + "derived_from": "tosca.datatypes.Dynamic" + }, + "dt-postcheck-properties": { + "description": "Dynamic DataType definition for the postcheck workflow(upgrade-software).", + "version": "1.0.0", + "properties": { + "pnf-id": { + "type": "string" + }, + "target-software-version": { + "type": "string" + } + }, + "derived_from": "tosca.datatypes.Dynamic" + } + } +}
\ No newline at end of file diff --git a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Definitions/node_types.json b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Definitions/node_types.json index bfae6779e..bfae6779e 100644 --- a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Definitions/node_types.json +++ b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Definitions/node_types.json diff --git a/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Definitions/pnf-software-upgrade-mapping.json b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Definitions/pnf-software-upgrade-mapping.json new file mode 100644 index 000000000..2c3de2e49 --- /dev/null +++ b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Definitions/pnf-software-upgrade-mapping.json @@ -0,0 +1,36 @@ +[ + { + "name": "pnf-id", + "input-param": true, + "property": { + "type": "string" + }, + "dictionary-name": "pnf-id", + "dictionary-source": "input", + "dependencies": [ + ] + }, + { + "name": "target-software-version", + "input-param": true, + "property": { + "type": "string" + }, + "dictionary-name": "target-software-version", + "dictionary-source": "input", + "dependencies": [ + ] + }, + { + "name": "pnf-ipv4-address", + "input-param": false, + "property": { + "type": "string" + }, + "dictionary-name": "pnf-ipaddress-aai", + "dictionary-source": "aai-data", + "dependencies": [ + "pnf-id" + ] + } +] diff --git a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Definitions/policy_types.json b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Definitions/policy_types.json index 1e44cc70a..1e44cc70a 100644 --- a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Definitions/policy_types.json +++ b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Definitions/policy_types.json diff --git a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Definitions/relationship_types.json b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Definitions/relationship_types.json index 4ddd7a57c..4ddd7a57c 100644 --- a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Definitions/relationship_types.json +++ b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Definitions/relationship_types.json diff --git a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Definitions/resources_definition_types.json b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Definitions/resources_definition_types.json index 235a05d27..235a05d27 100644 --- a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Definitions/resources_definition_types.json +++ b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Definitions/resources_definition_types.json diff --git a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Environments/source-db.properties b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Environments/source-db.properties index 49a7eb47b..49a7eb47b 100644 --- a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Environments/source-db.properties +++ b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Environments/source-db.properties diff --git a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Environments/source-rest.properties b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Environments/source-rest.properties index bc1eb7417..bc1eb7417 100644 --- a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Environments/source-rest.properties +++ b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Environments/source-rest.properties diff --git a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Plans/CONFIG_configAssign.xml b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Plans/CONFIG_configAssign.xml index a3eedf172..a3eedf172 100644 --- a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Plans/CONFIG_configAssign.xml +++ b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Plans/CONFIG_configAssign.xml diff --git a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Plans/CONFIG_configDeploy.xml b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Plans/CONFIG_configDeploy.xml index f4e1b996f..f4e1b996f 100644 --- a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Plans/CONFIG_configDeploy.xml +++ b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Plans/CONFIG_configDeploy.xml diff --git a/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Plans/CONFIG_upgradeSoftware.xml b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Plans/CONFIG_upgradeSoftware.xml new file mode 100644 index 000000000..52a9900b2 --- /dev/null +++ b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Plans/CONFIG_upgradeSoftware.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<service-logic xmlns="http://www.onap.org/sdnc/svclogic" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.onap.org/sdnc/svclogic ./svclogic.xsd" module="CONFIG" version="1.0.0"> + <method rpc="ResourceAssignAndActivate" mode="sync"> + <block atomic="true"> + <execute plugin="upgrade-software" method="process"> + <outcome value="failure"> + <return status="failure"/> + </outcome> + <outcome value="success"> + <return status="success"/> + </outcome> + </execute> + </block> + </method> +</service-logic> diff --git a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Scripts/kotlin/RestconfConfigDeploy.kt b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Scripts/kotlin/RestconfConfigDeploy.kt index f0190e8ec..730565959 100644 --- a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Scripts/kotlin/RestconfConfigDeploy.kt +++ b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Scripts/kotlin/RestconfConfigDeploy.kt @@ -1,6 +1,6 @@ /* * ============LICENSE_START======================================================= -* Copyright (C) 2019 Nordix Foundation. +* Copyright (C) 2020 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -67,9 +67,9 @@ class RestconfConfigDeploy : AbstractScriptComponentFunction() { val jsonResult = mapper.readTree((result.body).toString()) - if(jsonResult.get("ietf-yang-patch:yang-patch-status").get("errors") != null) { + if (jsonResult.get("ietf-yang-patch:yang-patch-status").get("errors") != null) { log.error("There was an error configuring device") - } else { + } else { log.info("Device has been configured succesfully") } diff --git a/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Scripts/kotlin/RestconfSoftwareUpgrade.kt b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Scripts/kotlin/RestconfSoftwareUpgrade.kt new file mode 100644 index 000000000..07e804b95 --- /dev/null +++ b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Scripts/kotlin/RestconfSoftwareUpgrade.kt @@ -0,0 +1,195 @@ +/* +* ============LICENSE_START======================================================= +* Copyright (C) 2020 Nordix Foundation. +* ================================================================================ +* 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========================================================= + */ + + +package cba.pnf.swug + +import com.fasterxml.jackson.databind.node.ObjectNode +import org.onap.ccsdk.cds.blueprintsprocessor.core.api.data.ExecutionServiceInput +import org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution.contentFromResolvedArtifactNB +import org.onap.ccsdk.cds.blueprintsprocessor.functions.restconf.executor.restconfApplyDeviceConfig +import org.onap.ccsdk.cds.blueprintsprocessor.functions.restconf.executor.restconfDeviceConfig +import org.onap.ccsdk.cds.blueprintsprocessor.functions.restconf.executor.restconfMountDevice +import org.onap.ccsdk.cds.blueprintsprocessor.functions.restconf.executor.restconfUnMountDevice +import org.onap.ccsdk.cds.blueprintsprocessor.rest.restClientService +import org.onap.ccsdk.cds.blueprintsprocessor.rest.service.BlueprintWebClientService +import org.onap.ccsdk.cds.blueprintsprocessor.services.execution.AbstractScriptComponentFunction +import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintException +import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintRetryException +import org.onap.ccsdk.cds.controllerblueprints.core.logger +import org.onap.ccsdk.cds.controllerblueprints.core.service.BluePrintDependencyService +import org.onap.ccsdk.cds.controllerblueprints.core.utils.JacksonUtils + +class RestconfSoftwareUpgrade : AbstractScriptComponentFunction() { + + private val RESTCONF_SERVER_IDENTIFIER = "sdnc" + private val CONFIGLET_RESOURCE_PATH = "yang-ext:mount/pnf-sw-upgrade:software-upgrade" + private val log = logger(AbstractScriptComponentFunction::class.java) + private val TARGET_SOFTWARE_PATH = "$CONFIGLET_RESOURCE_PATH/upgrade-package/" + + override suspend fun processNB(executionRequest: ExecutionServiceInput) { + + // Extract request properties + val properties = requestPayloadActionProperty(executionRequest.actionIdentifiers.actionName + "-properties")!!.get(0) + val model= SoftwareUpgradeModel(getDynamicProperties("resolution-key").asText(), + BluePrintDependencyService.restClientService(RESTCONF_SERVER_IDENTIFIER), + properties.get("pnf-id").textValue(), properties.get("target-software-version").textValue(), + Action.getEnumFromActionName(executionRequest.actionIdentifiers.actionName)) + + log.info("Blueprint invoked for ${model.resolutionKey} for SW Upgrade : " + + "${model.action} for sw version ${model.targetSwVersion} on pnf: ${model.deviceId}") + + try { + val mountPayload = contentFromResolvedArtifactNB("mount-node") + log.debug("Mount Payload : $mountPayload") + restconfMountDevice(model.client, model.deviceId, mountPayload, mutableMapOf("Content-Type" to "application/json")) + + when (model.action) { + Action.PRE_CHECK -> processPrecheck(model) + Action.DOWNLOAD_NE_SW -> processDownloadNeSw(model) + Action.ACTIVATE_NE_SW -> processActivateNeSw(model) + Action.POST_CHECK -> processPostcheck(model) + Action.CANCEL -> processCancel(model) + } + + } catch (err: Exception) { + log.error("an error occurred while configuring device {}", err) + } finally { + restconfUnMountDevice(model.client, model.deviceId, "") + } + } + + private suspend fun processPrecheck(model: SoftwareUpgradeModel) { + log.debug("In PNF SW upgrade : processPreCheck") + //Log the current configuration for the subtree + val payloadObject = getCurrentConfig(model) + log.debug("Current sw version on pnf : ${payloadObject.get("software-upgrade")?.get("upgrade-package")?.get(0)?.get("software-version")?.asText()}") + log.info("PNF is Healthy!") + } + + private suspend fun processDownloadNeSw(model: SoftwareUpgradeModel) { + log.debug("In PNF SW upgrade : processDownloadNeSw") + //Check if there is existing config for the targeted software version + + var downloadConfigPayload: String + if (checkIfSwReadyToPerformAction(Action.PRE_CHECK, model)) { + downloadConfigPayload = contentFromResolvedArtifactNB("configure") + downloadConfigPayload =downloadConfigPayload.replace("%id%", model.yangId) + } + else { + downloadConfigPayload = contentFromResolvedArtifactNB("download-ne-sw") + model.yangId=model.targetSwVersion + } + downloadConfigPayload = downloadConfigPayload.replace("%actionName%", Action.DOWNLOAD_NE_SW.name) + log.info("Config Payload to start download : $downloadConfigPayload") + + //Apply configlet + restconfApplyDeviceConfig(model.client, model.deviceId, CONFIGLET_RESOURCE_PATH, downloadConfigPayload, + mutableMapOf("Content-Type" to "application/yang.patch+json")) + + //Poll PNF for Download action's progress + checkExecution(model) + } + + private suspend fun processActivateNeSw(model: SoftwareUpgradeModel) { + log.debug("In PNF SW upgrade : processActivateNeSw") + //Check if the software is downloaded and ready to be activated + if (checkIfSwReadyToPerformAction(Action.DOWNLOAD_NE_SW, model)) { + var activateConfigPayload: String = contentFromResolvedArtifactNB("configure") + activateConfigPayload = activateConfigPayload.replace("%actionName%", Action.ACTIVATE_NE_SW.name) + log.info("Config Payload to start activate : $activateConfigPayload") + //Apply configlet + restconfApplyDeviceConfig(model.client, model.deviceId, CONFIGLET_RESOURCE_PATH, activateConfigPayload, + mutableMapOf("Content-Type" to "application/yang.patch+json")) + + //Poll PNF for Activate action's progress + checkExecution(model) + } else { + throw BluePrintRetryException("Software Download not completed for device(${model.deviceId}) to activate sw version: ${model.targetSwVersion}") + } + } + + private suspend fun processPostcheck(model: SoftwareUpgradeModel) { + log.info("In PNF SW upgrade : processPostcheck") + //Log the current configuration for the subtree + if (checkIfSwReadyToPerformAction(Action.POST_CHECK, model)) { + log.info("PNF is healthy post activation!") + } + } + + private fun processCancel(model :SoftwareUpgradeModel) { + //This is for future implementation of cancel step during software upgrade + log.info("In PNF SW upgrade : processCancel") + } + + private suspend fun getCurrentConfig(model: SoftwareUpgradeModel) : ObjectNode{ + val currentConfig: BlueprintWebClientService.WebClientResponse<String> = restconfDeviceConfig(model.client, model.deviceId, CONFIGLET_RESOURCE_PATH) + return JacksonUtils.jsonNode(currentConfig.body) as ObjectNode + } + private suspend fun checkExecution(model: SoftwareUpgradeModel) { + val checkExecutionBlock: suspend (Int) -> String = { + val result = restconfDeviceConfig(model.client, model.deviceId, TARGET_SOFTWARE_PATH.plus(model.yangId)) + if (result.body.contains(model.action.completionStatus)) { + log.info("${model.action.name} is complete") + result.body + } else { + throw BluePrintRetryException("Waiting for device(${model.deviceId}) to activate sw version ${model.targetSwVersion}") + } + } + model.client.retry<String>(10, 0, 1000, checkExecutionBlock) + + } + + private suspend fun checkIfSwReadyToPerformAction(action : Action, model: SoftwareUpgradeModel): Boolean { + val configBody = getCurrentConfig(model) + configBody.get("software-upgrade")?.get("upgrade-package")?.iterator()?.forEach { item -> + if (model.targetSwVersion == item.get("software-version")?.asText() && + action.completionStatus == item?.get("current-status")?.asText()) { + model.yangId= item.get("id").textValue() + return true + } + } + return false + } + + override suspend fun recoverNB(runtimeException: RuntimeException, executionRequest: ExecutionServiceInput) { + log.info("Recover function called!") + log.info("Execution request : $executionRequest") + log.error("Exception", runtimeException) + } +} + +enum class Action(val actionName: String, val completionStatus: String) { + PRE_CHECK("precheck", "INITIALIZED"), + DOWNLOAD_NE_SW("downloadNeSw", "DOWNLOAD_COMPLETED"), + ACTIVATE_NE_SW("activateNeSw", "ACTIVATION_COMPLETED"), + POST_CHECK("postcheck", "ACTIVATION_COMPLETED"), + CANCEL("cancel", "CANCELLED") + ; + companion object{ + fun getEnumFromActionName(name: String): Action { + for(value in values()){ + if (value.actionName==name) return value + } + throw BluePrintException("Invalid Action sent to CDS") + } + } +} + +data class SoftwareUpgradeModel(val resolutionKey: String, val client: BlueprintWebClientService, val deviceId: String, + val targetSwVersion: String, val action: Action, var yangId: String = "")
\ No newline at end of file diff --git a/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/TOSCA-Metadata/TOSCA.meta b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/TOSCA-Metadata/TOSCA.meta new file mode 100644 index 000000000..467964604 --- /dev/null +++ b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/TOSCA-Metadata/TOSCA.meta @@ -0,0 +1,7 @@ +TOSCA-Meta-File-Version: 1.0.0 +CSAR-Version: 1.0 +Created-By: Raj Gumma <raj.gumma@est.tech> +Entry-Definitions: Definitions/PNF_CDS_RESTCONF.json +Template-Name: PNF_CDS_RESTCONF +Template-Version: 1.0.0 +Template-Tags: PNF_CDS_RESTCONF diff --git a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Templates/config-assign-restconf-configlet-template.vtl b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Templates/config-assign-restconf-configlet-template.vtl index af91ba00d..af91ba00d 100644 --- a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Templates/config-assign-restconf-configlet-template.vtl +++ b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Templates/config-assign-restconf-configlet-template.vtl diff --git a/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Templates/pnf-swug-config-template.vtl b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Templates/pnf-swug-config-template.vtl new file mode 100644 index 000000000..5e52f6779 --- /dev/null +++ b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Templates/pnf-swug-config-template.vtl @@ -0,0 +1,22 @@ +{ + "ietf-restconf:yang-patch": { + "patch-id": "patch-1", + "edit": [ + { + "edit-id": "edit1", + "operation": "merge", + "target": "/", + "value": { + "software-upgrade": { + "upgrade-package": [ + { + "id": "%id%", + "action": "%actionName%" + } + ] + } + } + } + ] + } +}
\ No newline at end of file diff --git a/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Templates/pnf-swug-download-ne-sw-template.vtl b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Templates/pnf-swug-download-ne-sw-template.vtl new file mode 100644 index 000000000..695b66866 --- /dev/null +++ b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Templates/pnf-swug-download-ne-sw-template.vtl @@ -0,0 +1,28 @@ +{ + "ietf-restconf:yang-patch": { + "patch-id": "patch-1", + "edit": [ + { + "edit-id": "edit1", + "operation": "merge", + "target": "/", + "value": { + "software-upgrade": { + "upgrade-package": [ + { + "id": "${target-software-version}", + "current-status": "INITIALIZED", + "action": "%actionName%", + "user-label": "trial software update", + "uri": "sftp://127.0.0.1/test_software_2.img", + "software-version": "${target-software-version}", + "user": "test_user", + "password": "test_password" + } + ] + } + } + } + ] + } +}
\ No newline at end of file diff --git a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Templates/config-deploy-restconf-mount-template.vtl b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Templates/restconf-mount-template.vtl index 8098b05d8..8098b05d8 100644 --- a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Templates/config-deploy-restconf-mount-template.vtl +++ b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Templates/restconf-mount-template.vtl diff --git a/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Tests/uat.yaml b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Tests/uat.yaml new file mode 100644 index 000000000..79328e697 --- /dev/null +++ b/components/model-catalog/blueprint-model/uat-blueprints/PNF_CDS_RESTCONF/Tests/uat.yaml @@ -0,0 +1,374 @@ +%YAML 1.1 +--- +processes: + - name: config-assign + request: + commonHeader: &commonHeader + originatorId: sdnc + requestId: "123456-1000" + subRequestId: sub-123456-1000 + actionIdentifiers: &assign-ai + blueprintName: PNF_CDS_RESTCONF + blueprintVersion: "1.0.0" + actionName: config-assign + mode: sync + payload: + config-assign-request: + resolution-key: &resKey "RES-KEY 61" + config-assign-properties: + service-instance-id: siid_1234 + pnf-id: &pnfId pnf-id-2019-07-12 + service-model-uuid: service-model-uuid + pnf-customization-uuid: pnf-customization-uuid + expectedResponse: + commonHeader: *commonHeader + actionIdentifiers: *assign-ai + status: + code: 200 + eventType: EVENT_COMPONENT_EXECUTED + errorMessage: null + message: success + payload: + config-assign-response: {} + - name: config-deploy + request: + commonHeader: *commonHeader + actionIdentifiers: &deploy-ai + actionName: config-deploy + blueprintName: PNF_CDS_RESTCONF + blueprintVersion: "1.0.0" + mode: sync + payload: + config-deploy-request: + resolution-key: *resKey + config-deploy-properties: + service-instance-id: siid_1234 + pnf-id: *pnfId + service-model-uuid: service-model-uuid + pnf-customization-uuid: pnf-customization-uuid + expectedResponse: + commonHeader: *commonHeader + actionIdentifiers: *deploy-ai + payload: + config-deploy-response: {} + status: + code: 200 + errorMessage: null + eventType: EVENT_COMPONENT_EXECUTED + message: success + - name: precheck + request: + commonHeader: &swugCommonHeader + originatorId: sdnc + requestId: "123456-1000" + subRequestId: sub-123456-1000 + actionIdentifiers: &precheck-ai + blueprintName: PNF_CDS_RESTCONF + blueprintVersion: "1.0.0" + actionName: precheck + mode: sync + payload: + precheck-request: + resolution-key: &resKey "RES-KEY 61" + precheck-properties: &actionProps + service-instance-id: siid_1234 + pnf-id: &pnfId pnf-id-2019-07-12 + target-software-version: "2.0.2" + service-model-uuid: service-model-uuid + pnf-customization-uuid: pnf-customization-uuid + expectedResponse: + commonHeader: *swugCommonHeader + actionIdentifiers: *precheck-ai + status: + code: 200 + eventType: EVENT_COMPONENT_EXECUTED + errorMessage: null + message: success + payload: + precheck-response: {} + - name: downloadNeSw + request: + commonHeader: *swugCommonHeader + actionIdentifiers: &download-ai + blueprintName: PNF_CDS_RESTCONF + blueprintVersion: "1.0.0" + actionName: downloadNeSw + mode: sync + payload: + downloadNeSw-request: + resolution-key: *resKey + downloadNeSw-properties: *actionProps + expectedResponse: + commonHeader: *swugCommonHeader + actionIdentifiers: *download-ai + status: + code: 200 + eventType: EVENT_COMPONENT_EXECUTED + errorMessage: null + message: success + payload: + downloadNeSw-response: {} + - name: activateNeSw + request: + commonHeader: *swugCommonHeader + actionIdentifiers: &activate-ai + blueprintName: PNF_CDS_RESTCONF + blueprintVersion: "1.0.0" + actionName: activateNeSw + mode: sync + payload: + activateNeSw-request: + resolution-key: *resKey + activateNeSw-properties: *actionProps + expectedResponse: + commonHeader: *swugCommonHeader + actionIdentifiers: *activate-ai + status: + code: 200 + eventType: EVENT_COMPONENT_EXECUTED + errorMessage: null + message: success + payload: + activateNeSw-response: {} + - name: postcheck + request: + commonHeader: *swugCommonHeader + actionIdentifiers: &postcheck-ai + blueprintName: PNF_CDS_RESTCONF + blueprintVersion: "1.0.0" + actionName: postcheck + mode: sync + payload: + postcheck-request: + resolution-key: *resKey + postcheck-properties: *actionProps + expectedResponse: + commonHeader: *swugCommonHeader + actionIdentifiers: *postcheck-ai + status: + code: 200 + eventType: EVENT_COMPONENT_EXECUTED + errorMessage: null + message: success + payload: + postcheck-response: {} +external-services: + - selector: aai-data + expectations: + - request: + method: GET + path: [ /aai/v14/network/pnfs/pnf, *pnfId] + headers: + Accept: application/json + response: + headers: + Content-Type: application/json + body: + ipaddress-v4-oam: &pnfAddress 13.13.13.13 + ipaddress-v6-oam: 1::13 + - selector: sdnc + expectations: + - request: + method: PUT + path: &configUri [ /restconf/config, &nodeIdentifier [network-topology:network-topology/topology/topology-netconf/node, *pnfId]] + headers: + Content-Type: application/json + body: + node: + - node-id: *pnfId + netconf-node-topology:protocol: { name: TLS } + netconf-node-topology:host: *pnfAddress + netconf-node-topology:key-based: + username: netconf + key-id: ODL_private_key_0 + netconf-node-topology:port: 6513 + netconf-node-topology:tcp-only: false + netconf-node-topology:max-connection-attempts: 5 + response: + status: 201 + - request: + method: GET + path: [ /restconf/operational, *nodeIdentifier] + response: + body: + node: [ { netconf-node-topology:connection-status: connected }] + - request: + method: GET + path: [*configUri, &configletResourcePath yang-ext:mount/mynetconf:netconflist] + response: + body: {} + - request: + method: PATCH + path: [*configUri, *configletResourcePath] + headers: + Content-Type: application/yang.patch+json + body: + ietf-restconf:yang-patch: + patch-id: patch-1 + edit: + - edit-id: edit1 + operation: merge + target: / + value: { netconflist: { netconf: [ { netconf-id: "10", netconf-param: "1000" }]}} + - edit-id: edit2 + operation: merge + target: / + value: { netconflist: { netconf: [ { netconf-id: "20", netconf-param: "2000" }]}} + - edit-id: edit3 + operation: merge + target: / + value: { netconflist: { netconf: [ { netconf-id: "30", netconf-param: "3000" }]}} + response: + body: + ietf-yang-patch:yang-patch-status: + patch-id: patch-1 + ok: [ + null + ] + ### External expectations for Software Upgrade + - request: + method: GET + path: &ConfigSwUgUri [*configUri, &configletResourcePath yang-ext:mount/pnf-sw-upgrade:software-upgrade] + headers: + Accept: application/json + responses: + - headers: + Content-Type: application/json + body: + software-upgrade: + upgrade-package: + - id: 2.0.1 + current-status: INITIALIZED + user-label: trial software update + uri: sftp:127.0.0.1/test_software_1.img + software-version: 2.0.1 + user: test_user + password: test_password + - headers: + Content-Type: application/json + body: + software-upgrade: + upgrade-package: + - id: 2.0.1 + current-status: INITIALIZED + user-label: trial software update + uri: sftp:127.0.0.1/test_software_1.img + software-version: 2.0.1 + user: test_user + password: test_password + - headers: + Content-Type: application/json + body: + software-upgrade: + upgrade-package: + - id: 2.0.1 + current-status: INITIALIZED + user-label: trial software update + uri: sftp:127.0.0.1/test_software_1.img + software-version: 2.0.1 + user: test_user + password: test_password + - id: 2.0.2 + current-status: DOWNLOAD_COMPLETED + state-change-time: '2020-02-20T13:03:21Z' + software-version: 2.0.2 + user-label: trial software update + uri: sftp:127.0.0.1/test_software_1.img + user: test_user + password: test_password + - headers: + Content-Type: application/json + body: + software-upgrade: + upgrade-package: + - id: 2.0.1 + current-status: INITIALIZED + user-label: trial software update + uri: sftp:127.0.0.1/test_software_1.img + software-version: 2.0.1 + user: test_user + password: test_password + - id: 2.0.2 + current-status: ACTIVATION_COMPLETED + state-change-time: '2020-02-20T13:03:21Z' + software-version: 2.0.2 + user-label: trial software update + uri: sftp:127.0.0.1/test_software_1.img + user: test_user + password: test_password + - request: + method: PATCH + path: *ConfigSwUgUri + headers: + Content-Type: application/yang.patch+json + body: + ietf-restconf:yang-patch: + patch-id: patch-1 + edit: + - edit-id: edit1 + operation: merge + target: "/" + response: + headers: + Content-Type: application/yang.patch-status+json + body: + { ietf-yang-patch:yang-patch-status: {patch-id: patch-1, ok: [ ] } } + times: 2 + - request: + method: GET + path: [*ConfigSwUgUri, upgrade-package/2.0.2] + headers: + Accept: application/json + responses: + - headers: + Content-Type: application/json + body: + upgrade-package: + - id: 2.0.2 + current-status: DOWNLOAD_IN_PROGRESS + state-change-time: '2020-02-20T12:17:34.984Z' + software-version: 2.0.2 + - headers: + Content-Type: application/json + body: + upgrade-package: + - id: 2.0.2 + current-status: DOWNLOAD_IN_PROGRESS + state-change-time: '2020-02-20T12:52:30Z' + software-version: 2.0.2 + - headers: + Content-Type: application/json + body: + upgrade-package: + - id: 2.0.2 + current-status: DOWNLOAD_COMPLETED + state-change-time: '2020-02-20T13:03:21Z' + software-version: 2.0.2 + - headers: + Content-Type: application/json + body: + upgrade-package: + - id: 2.0.2 + current-status: ACTIVATION_IN_PROGRESS + state-change-time: '2020-02-20T13:05:08Z' + software-version: 2.0.2 + - headers: + Content-Type: application/json + body: + upgrade-package: + - id: 2.0.2 + current-status: ACTIVATION_IN_PROGRESS + state-change-time: '2020-02-20T12:52:30Z' + software-version: 2.0.2 + - headers: + Content-Type: application/json + body: + upgrade-package: + - id: 2.0.2 + current-status: ACTIVATION_COMPLETED + state-change-time: '2020-02-20T13:07:12Z' + software-version: 2.0.2 + - request: + method: DELETE + path: *configUri + times: 5
\ No newline at end of file diff --git a/components/model-catalog/blueprint-model/uat-blueprints/README.md b/components/model-catalog/blueprint-model/uat-blueprints/README.md index 56cb32989..ffbc15aec 100644 --- a/components/model-catalog/blueprint-model/uat-blueprints/README.md +++ b/components/model-catalog/blueprint-model/uat-blueprints/README.md @@ -61,7 +61,8 @@ message Uat { message Expectation { required Request request = 1; - required Response response = 2; + optional Response response = 2; + repeated Response responses = 3; } message ExternalService { diff --git a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config/Tests/uat.yaml b/components/model-catalog/blueprint-model/uat-blueprints/pnf_config/Tests/uat.yaml index 85b10c611..a58d089ad 100644 --- a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config/Tests/uat.yaml +++ b/components/model-catalog/blueprint-model/uat-blueprints/pnf_config/Tests/uat.yaml @@ -64,7 +64,7 @@ external-services: expectations: - request: method: PUT - path: &configUri [ restconf/config, &nodeIdentifier [network-topology:network-topology/topology/topology-netconf/node, *pnfId]] + path: &configUri [ /restconf/config, &nodeIdentifier [network-topology:network-topology/topology/topology-netconf/node, *pnfId]] headers: Content-Type: application/json body: @@ -82,7 +82,7 @@ external-services: status: 201 - request: method: GET - path: [ restconf/operational, *nodeIdentifier] + path: [ /restconf/operational, *nodeIdentifier] response: body: node: [ { netconf-node-topology:connection-status: connected }] diff --git a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Definitions/data_types.json b/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Definitions/data_types.json deleted file mode 100644 index a0804bb3f..000000000 --- a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Definitions/data_types.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "data_types" : { - "dt-config-assign-properties" : { - "description" : "Dynamic DataType definition for workflow(config-assign).", - "version" : "1.0.0", - "properties" : { }, - "derived_from" : "tosca.datatypes.Dynamic" - }, - "dt-config-deploy-properties" : { - "description" : "Dynamic DataType definition for workflow(config-deploy).", - "version" : "1.0.0", - "properties" : { - "pnf-ipv4-address" : { - "type" : "string" - }, - "pnf-id" : { - "type" : "string" - } - }, - "derived_from" : "tosca.datatypes.Dynamic" - } - } -}
\ No newline at end of file diff --git a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Definitions/pnf_config_aai.json b/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Definitions/pnf_config_aai.json deleted file mode 100644 index 3ef585cb4..000000000 --- a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Definitions/pnf_config_aai.json +++ /dev/null @@ -1,152 +0,0 @@ -{ - "tosca_definitions_version" : "controller_blueprint_1_0_0", - "metadata" : { - "template_author" : "Rahul Tyagi", - "author-email" : "rahul.tyagi@est.tech", - "user-groups" : "ADMIN, OPERATION", - "template_name" : "pnf_config_aai", - "template_version" : "1.0.0", - "template_tags" : "pnf, restconf, config, configuration" - }, - "imports" : [ { - "file" : "Definitions/data_types.json" - }, { - "file" : "Definitions/relationship_types.json" - }, { - "file" : "Definitions/artifact_types.json" - }, { - "file" : "Definitions/node_types.json" - }, { - "file" : "Definitions/policy_types.json" - } ], - "dsl_definitions" : { - "config-deploy-properties" : { - "resolution-key" : { - "get_input" : "resolution-key" - } - } - }, - "topology_template" : { - "workflows" : { - "config-assign" : { - "steps" : { - "activate-process" : { - "description" : "Create a configlet", - "target" : "config-assign", - "activities" : [ { - "call_operation" : "" - } ] - } - }, - "inputs" : { - "resolution-key" : { - "required" : true, - "type" : "string" - }, - "store-result" : { - "required" : true, - "type" : "boolean" - }, - "config-assign-properties" : { - "description" : "Dynamic PropertyDefinition for workflow(config-assign).", - "required" : true, - "type" : "dt-config-assign-properties" - } - } - }, - "config-deploy" : { - "steps" : { - "activate-process" : { - "description" : "Send a configlet to the pnf", - "target" : "config-deploy", - "activities" : [ { - "call_operation" : "" - } ] - } - }, - "inputs" : { - "resolution-key" : { - "required" : true, - "type" : "string" - }, - "config-deploy-properties" : { - "description" : "Dynamic PropertyDefinition for workflow(config-deploy).", - "required" : true, - "type" : "dt-config-deploy-properties" - } - } - } - }, - "node_templates" : { - "config-assign" : { - "type" : "component-resource-resolution", - "interfaces" : { - "ResourceResolutionComponent" : { - "operations" : { - "process" : { - "inputs" : { - "resolution-key" : { - "get_input" : "resolution-key" - }, - "store-result" : true, - "artifact-prefix-names" : [ "config-assign" ] - }, - "outputs" : { - "resource-assignment-params" : { - "get_attribute" : [ "SELF", "assignment-params" ] - }, - "status" : "success" - } - } - } - } - }, - "artifacts" : { - "config-assign-template" : { - "type" : "artifact-template-velocity", - "file" : "Templates/config-assign-restconf-configlet-template.vtl" - }, - "config-assign-mapping" : { - "type" : "artifact-mapping-resource", - "file" : "Definitions/config-assign-pnf-mapping.json" - } - } - }, - "config-deploy" : { - "type" : "component-script-executor", - "interfaces" : { - "ComponentScriptExecutor" : { - "operations" : { - "process" : { - "implementation" : { - "primary" : "component-script", - "timeout" : 180, - "operation_host" : "SELF" - }, - "inputs" : { - "script-type" : "kotlin", - "script-class-reference" : "cba.pnf.config.aai.RestconfConfigDeploy", - "dynamic-properties" : "*config-deploy-properties" - }, - "outputs" : { - "response-data" : "", - "status" : "success" - } - } - } - } - }, - "artifacts" : { - "config-deploy-template" : { - "type" : "artifact-template-velocity", - "file" : "Templates/config-deploy-restconf-mount-template.vtl" - }, - "config-deploy-mapping" : { - "type" : "artifact-mapping-resource", - "file" : "Definitions/config-deploy-pnf-mapping.json" - } - } - } - } - } -}
\ No newline at end of file diff --git a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/TOSCA-Metadata/TOSCA.meta b/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/TOSCA-Metadata/TOSCA.meta deleted file mode 100644 index 903600836..000000000 --- a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/TOSCA-Metadata/TOSCA.meta +++ /dev/null @@ -1,7 +0,0 @@ -TOSCA-Meta-File-Version: 1.0.0 -CSAR-Version: 1.0 -Created-By: Rahul Tyagi -Entry-Definitions: Definitions/pnf_config_aai.json -Template-Name: pnf_config_aai -Template-Version: 1.0.0 -Template-Tags: pnf_config_aai diff --git a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Tests/uat.yaml b/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Tests/uat.yaml deleted file mode 100644 index 13e10f34b..000000000 --- a/components/model-catalog/blueprint-model/uat-blueprints/pnf_config_aai/Tests/uat.yaml +++ /dev/null @@ -1,137 +0,0 @@ -%YAML 1.1 ---- -processes: - - name: config-assign - request: - commonHeader: &commonHeader - originatorId: sdnc - requestId: "123456-1000" - subRequestId: sub-123456-1000 - actionIdentifiers: &assign-ai - blueprintName: pnf_config_aai - blueprintVersion: "1.0.0" - actionName: config-assign - mode: sync - payload: - config-assign-request: - resolution-key: &resKey "RES-KEY 61" - config-assign-properties: - service-instance-id: siid_1234 - pnf-id: &pnfId pnf-id-2019-07-12 - service-model-uuid: service-model-uuid - pnf-customization-uuid: pnf-customization-uuid - expectedResponse: - commonHeader: *commonHeader - actionIdentifiers: *assign-ai - status: - code: 200 - eventType: EVENT_COMPONENT_EXECUTED - errorMessage: null - message: success - payload: - config-assign-response: {} - - name: config-deploy - request: - commonHeader: *commonHeader - actionIdentifiers: &deploy-ai - actionName: config-deploy - blueprintName: pnf_config_aai - blueprintVersion: "1.0.0" - mode: sync - payload: - config-deploy-request: - resolution-key: *resKey - config-deploy-properties: - service-instance-id: siid_1234 - pnf-id: *pnfId - service-model-uuid: service-model-uuid - pnf-customization-uuid: pnf-customization-uuid - expectedResponse: - commonHeader: *commonHeader - actionIdentifiers: *deploy-ai - payload: - config-deploy-response: {} - status: - code: 200 - errorMessage: null - eventType: EVENT_COMPONENT_EXECUTED - message: success - -external-services: - - selector: aai-data - expectations: - - request: - method: GET - path: [ /aai/v14/network/pnfs/pnf, *pnfId] - headers: - Accept: application/json - response: - headers: - Content-Type: application/json - body: - ipaddress-v4-oam: &pnfAddress 13.13.13.13 - ipaddress-v6-oam: 1::13 - - selector: sdnc - expectations: - - request: - method: PUT - path: &configUri [ restconf/config, &nodeIdentifier [network-topology:network-topology/topology/topology-netconf/node, *pnfId]] - headers: - Content-Type: application/json - body: - node: - - node-id: *pnfId - netconf-node-topology:protocol: { name: TLS } - netconf-node-topology:host: *pnfAddress - netconf-node-topology:key-based: - username: netconf - key-id: ODL_private_key_0 - netconf-node-topology:port: 6513 - netconf-node-topology:tcp-only: false - netconf-node-topology:max-connection-attempts: 5 - response: - status: 201 - - request: - method: GET - path: [ restconf/operational, *nodeIdentifier] - response: - body: - node: [ { netconf-node-topology:connection-status: connected }] - - request: - method: GET - path: [*configUri, &configletResourcePath yang-ext:mount/mynetconf:netconflist] - response: - body: {} - - request: - method: PATCH - path: [*configUri, *configletResourcePath] - headers: - Content-Type: application/yang.patch+json - body: - ietf-restconf:yang-patch: - patch-id: patch-1 - edit: - - edit-id: edit1 - operation: merge - target: / - value: { netconflist: { netconf: [ { netconf-id: "10", netconf-param: "1000" }]}} - - edit-id: edit2 - operation: merge - target: / - value: { netconflist: { netconf: [ { netconf-id: "20", netconf-param: "2000" }]}} - - edit-id: edit3 - operation: merge - target: / - value: { netconflist: { netconf: [ { netconf-id: "30", netconf-param: "3000" }]}} - response: - body: - ietf-yang-patch:yang-patch-status: - patch-id: patch-1 - ok: [ - null - ] - - request: - method: DELETE - path: *configUri - - |