aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/core/load/blueprints/baseconfiguration/Definitions/activation-blueprint.json411
-rw-r--r--components/core/load/blueprints/baseconfiguration/Mappings/baseconfig-mapping.json3
-rw-r--r--components/core/load/blueprints/baseconfiguration/Plans/ActivateProcess.bpmn66
-rw-r--r--components/core/load/blueprints/baseconfiguration/Scripts/SamplePythonComponentNode.py8
-rw-r--r--components/core/load/blueprints/baseconfiguration/Scripts/__init__.py0
-rw-r--r--components/core/load/blueprints/baseconfiguration/TOSCA-Metadata/TOSCA.meta8
-rw-r--r--components/core/load/blueprints/baseconfiguration/Templates/baseconfig-template.vtl1
-rw-r--r--components/core/load/blueprints/baseconfiguration/__init__.py0
-rw-r--r--components/core/load/blueprints/simple-baseconfig/Definitions/sample-nodetype.json5
-rw-r--r--components/core/load/blueprints/simple-baseconfig/Definitions/simple-baseconfig.json340
-rw-r--r--components/core/load/blueprints/simple-baseconfig/Mappings/baseconfig-mapping.json3
-rw-r--r--components/core/load/blueprints/simple-baseconfig/Plans/ActivateProcess.bpmn66
-rw-r--r--components/core/load/blueprints/simple-baseconfig/Scripts/SamplePythonComponentNode.py8
-rw-r--r--components/core/load/blueprints/simple-baseconfig/Scripts/__init__.py0
-rw-r--r--components/core/load/blueprints/simple-baseconfig/TOSCA-Metadata/TOSCA.meta8
-rw-r--r--components/core/load/blueprints/simple-baseconfig/Templates/base-config-template.vtl40
-rw-r--r--components/core/load/blueprints/simple-baseconfig/Templates/baseconfig-template.vtl1
-rw-r--r--components/core/load/blueprints/simple-baseconfig/Templates/licence-template.vtl4
-rw-r--r--components/core/load/blueprints/simple-baseconfig/__init__.py0
-rw-r--r--components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/BluePrintConstants.kt8
-rw-r--r--components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/BluePrintProcessorException.kt3
-rw-r--r--components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/CustomFunctions.kt69
-rw-r--r--components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/data/BluePrintModel.kt14
-rw-r--r--components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/factory/BluePrintParserFactory.kt51
-rw-r--r--components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/interfaces/BlueprintFunctionNode.kt37
-rw-r--r--components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintContext.kt111
-rw-r--r--components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintImportService.kt94
-rw-r--r--components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintRuntimeService.kt215
-rw-r--r--components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintValidatorService.kt10
-rw-r--r--components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/PropertyAssignmentService.kt13
-rw-r--r--components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/BluePrintMetadataUtils.kt61
-rw-r--r--components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/BluePrintRuntimeUtils.kt16
-rw-r--r--components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/ServiceTemplateUtils.kt66
-rw-r--r--components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/TopologicalSortingUtils.kt4
-rw-r--r--components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintContextTest.kt35
-rw-r--r--components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintParserFactoryTest.kt42
-rw-r--r--components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintRuntimeServiceTest.kt88
-rw-r--r--components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintValidatorDefaultServiceTest.kt18
-rw-r--r--components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/BluePrintMetadataUtilsTest.kt2
-rw-r--r--components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/JacksonReactorUtilsTest.kt6
-rw-r--r--components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/JacksonUtilsTest.kt21
-rw-r--r--components/core/src/test/resources/properties/convert.json65
-rw-r--r--components/model-catalog/blueprint-model/service-blueprint/vFW/Templates/base_template.vtl21
-rw-r--r--components/model-catalog/blueprint-model/service-blueprint/vFW/Templates/vFW_vNF_Artifact.vtl19
-rw-r--r--components/model-catalog/blueprint-model/service-blueprint/vFW/Templates/vfw.vtl25
-rw-r--r--components/model-catalog/blueprint-model/service-blueprint/vFW/Templates/vpg.vtl23
-rw-r--r--components/model-catalog/blueprint-model/service-blueprint/vFW/Templates/vsn.vtl23
-rw-r--r--components/model-catalog/blueprint-model/starter-blueprint/baseconfiguration/Definitions/activation-blueprint.json282
-rw-r--r--components/model-catalog/blueprint-model/starter-blueprint/baseconfiguration/Definitions/types.json210
-rw-r--r--components/parent/pom.xml5
-rw-r--r--components/resource-dict/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/resource/dict/ResourceAssignmentProcessor.kt43
51 files changed, 1057 insertions, 1615 deletions
diff --git a/components/core/load/blueprints/baseconfiguration/Definitions/activation-blueprint.json b/components/core/load/blueprints/baseconfiguration/Definitions/activation-blueprint.json
deleted file mode 100644
index bc10f7673..000000000
--- a/components/core/load/blueprints/baseconfiguration/Definitions/activation-blueprint.json
+++ /dev/null
@@ -1,411 +0,0 @@
-{
- "metadata": {
- "template_author": "Brinda Santh Muthuramalingam",
- "author-email": "brindasanth@gmail.com",
- "user-groups": "ADMIN, OPERATION",
- "template_name": "baseconfiguration",
- "template_version": "1.0.0",
- "template_tags": "brinda, tosca"
- },
- "topology_template": {
- "inputs": {
- "request-id": {
- "required": true,
- "type": "string"
- },
- "action-name": {
- "required": true,
- "type": "string"
- },
- "scope-type": {
- "required": true,
- "type": "string"
- },
- "hostname": {
- "required": true,
- "type": "string"
- },
- "template_name": {
- "required": true,
- "type": "string"
- },
- "template_version": {
- "required": true,
- "type": "string"
- }
- },
- "node_templates": {
- "resource-assignment-ra-component": {
- "capabilities": {
- "component-node": {}
- },
- "interfaces": {
- "org-onap-ccsdk-config-assignment-service-ConfigAssignmentNode": {
- "operations": {
- "process": {
- "inputs": {
- "template-names": [
- "base-config-template",
- "licence-template"
- ],
- "action-name": {
- "get_input": "action-name"
- },
- "template-name": {
- "get_input": "template_name"
- },
- "template-version": {
- "get_input": "template_version"
- },
- "resource-type": "vnf-type",
- "request-id": {
- "get_input": "request-id"
- },
- "resource-id": {
- "get_input": "hostname"
- }
- },
- "outputs": {
- "resource-assignment-params": { "get_attribute" : ["SELF", "params"] },
- "status": "Success"
- }
- }
- }
- }
- },
- "type": "component-resource-assignment"
- },
- "resource-assignment-action": {
- "properties": {
- "mode": "sync",
- "version": {
- "get_input": "template_version"
- },
- "is-start-flow": false
- },
- "requirements": {
- "component-dependency": {
- "capability": "component-node",
- "node": "resource-assignment-ra-component",
- "relationship": "tosca.relationships.DependsOn"
- }
- },
- "capabilities": {
- "dg-node": {}
- },
- "interfaces": {
- "CONFIG": {
- "operations": {
- "ResourceAssignment": {
- "inputs": {
- "params": []
- }
- }
- }
- }
- },
- "type": "dg-resource-assignment"
- }
- },
- "workflows": {
- "activate-process": {
- "steps": {
- "call-resource-assignment": {
- "description": "Invoke Resource Assignment Component",
- "target": "resource-assignment",
- "activities": [
- {
- "call_operation": "ResourceAssignmentNode.process"
- }
- ],
- "on_success": [
- "download-baseconfig"
- ]
- },
- "download-baseconfig": {
- "description": "Call Download Base Config Component",
- "target": "activate-netconf",
- "activities": [
- {
- "call_operation": "NetconfTransactionNode.process"
- }
- ],
- "on_success": [
- "download-licence"
- ]
- },
- "download-licence": {
- "description": "Call Download Licence Component",
- "target": "activate-netconf",
- "activities": [
- {
- "call_operation": "NetconfTransactionNode.process"
- }
- ]
- }
- }
- }
- }
- },
- "artifact_types": {
- "artifact-template-velocity": {
- "description": " Velocity Template used for Configuration",
- "version": "1.0.0",
- "file_ext": [
- "vtl"
- ],
- "derived_from": "tosca.artifacts.Implementation"
- },
- "artifact-mapping-resource": {
- "description": " Velocity Template Resource Mapping File used along with Configuration template",
- "version": "1.0.0",
- "file_ext": [
- "json"
- ],
- "derived_from": "tosca.artifacts.Implementation"
- },
- "artifact-script-kotlin": {
- "description": " Kotlin Script Template used for Configuration",
- "version": "1.0.0",
- "file_ext": [
- "kt"
- ],
- "derived_from": "tosca.artifacts.Implementation"
- },
- "artifact-script-python": {
- "description": " Kotlin Script Template used for Configuration",
- "version": "1.0.0",
- "file_ext": [
- "py"
- ],
- "derived_from": "tosca.artifacts.Implementation"
- },
- "artifact-bpmn-camunda": {
- "description": " Camunda BPM File",
- "version": "1.0.0",
- "file_ext": [
- "bpmn"
- ],
- "derived_from": "tosca.artifacts.Implementation"
- },
- "artifact-component-jar": {
- "description": "Component Jar",
- "version": "1.0.0",
- "file_ext": [
- "jar"
- ],
- "derived_from": "tosca.artifacts.Implementation"
- }
- },
- "node_types": {
- "dg-resource-assignment": {
- "description": "This is Resource Assignment Directed Graph",
- "version": "1.0.0",
- "properties": {
- "mode": {
- "required": false,
- "type": "string",
- "default": "sync"
- },
- "version": {
- "required": false,
- "type": "string",
- "default": "LATEST"
- },
- "is-start-flow": {
- "required": false,
- "type": "boolean",
- "default": false
- }
- },
- "capabilities": {
- "dg-node": {
- "type": "tosca.capabilities.Node"
- }
- },
- "requirements": {
- "component-dependency": {
- "capability": "component-node",
- "node": "component-resource-assignment",
- "relationship": "tosca.relationships.DependsOn"
- }
- },
- "interfaces": {
- "CONFIG": {
- "operations": {
- "ResourceAssignment": {
- "inputs": {
- "params": {
- "required": false,
- "type": "list",
- "entry_schema": {
- "type": "datatype-property"
- }
- }
- }
- }
- }
- }
- },
- "derived_from": "tosca.nodes.DG"
- },
- "component-resource-assignment": {
- "description": "This is Resource Assignment Component API",
- "version": "1.0.0",
- "capabilities": {
- "component-node": {
- "type": "tosca.capabilities.Node"
- }
- },
- "interfaces": {
- "org-onap-ccsdk-config-assignment-service-ConfigAssignmentNode": {
- "operations": {
- "process": {
- "inputs": {
- "action-name": {
- "description": "Action Name of the process",
- "required": true,
- "type": "string"
- },
- "template-name": {
- "description": "Service Template Name.",
- "required": true,
- "type": "string"
- },
- "template-version": {
- "description": "Service Template Version.",
- "required": true,
- "type": "string"
- },
- "resource-type": {
- "description": "Request type.",
- "required": true,
- "type": "string"
- },
- "template-names": {
- "description": "Name of the artifact Node Templates, to get the template Content.",
- "required": true,
- "type": "list",
- "entry_schema": {
- "type": "string"
- }
- },
- "request-id": {
- "description": "Request Id, Unique Id for the request.",
- "required": true,
- "type": "string"
- },
- "resource-id": {
- "description": "Resource Id.",
- "required": true,
- "type": "string"
- }
- },
- "outputs": {
- "resource-assignment-params": {
- "required": true,
- "type": "string"
- },
- "status": {
- "required": true,
- "type": "string"
- }
- }
- }
- }
- }
- },
- "derived_from": "tosca.nodes.Component"
- },
- "tosca.nodes.DG": {
- "description": "This is Resource Assignment Component API",
- "version": "1.0.0",
- "derived_from": "tosca.nodes.Root"
- },
- "tosca.nodes.Component": {
- "description": "This is Resource Assignment Component API",
- "version": "1.0.0",
- "derived_from": "tosca.nodes.Root"
- },
- "tosca.nodes.component.Python": {
- "description": "This is Resource Assignment Python Component API",
- "version": "1.0.0",
- "derived_from": "tosca.nodes.Root"
- }
- },
- "data_types": {
- "datatype-resource-assignment": {
- "version": "1.0.0",
- "description": "This is Resource Assignment Data Type",
- "properties": {
- "property": {
- "required": true,
- "type": "datatype-property"
- },
- "input-param": {
- "required": true,
- "type": "boolean"
- },
- "dictionary-name": {
- "required": false,
- "type": "string"
- },
- "dictionary-source": {
- "required": false,
- "type": "string"
- },
- "dependencies": {
- "required": true,
- "type": "list",
- "entry_schema": {
- "type": "string"
- }
- },
- "status": {
- "required": false,
- "type": "string"
- },
- "message": {
- "required": false,
- "type": "string"
- },
- "updated-date": {
- "required": false,
- "type": "string"
- },
- "updated-by": {
- "required": false,
- "type": "string"
- }
- },
- "derived_from": "tosca.datatypes.Root"
- },
- "datatype-property": {
- "version": "1.0.0",
- "description": "This is Entry point Input Data Type, which is dynamic datatype, The parameter names will be populated during the Design time for each inputs",
- "properties": {
- "type": {
- "required": true,
- "type": "string"
- },
- "description": {
- "required": false,
- "type": "string"
- },
- "required": {
- "required": false,
- "type": "boolean"
- },
- "default": {
- "required": false,
- "type": "string"
- },
- "entry_schema": {
- "required": false,
- "type": "string"
- }
- },
- "derived_from": "tosca.datatypes.Root"
- }
- }
-} \ No newline at end of file
diff --git a/components/core/load/blueprints/baseconfiguration/Mappings/baseconfig-mapping.json b/components/core/load/blueprints/baseconfiguration/Mappings/baseconfig-mapping.json
deleted file mode 100644
index 6abfb51bd..000000000
--- a/components/core/load/blueprints/baseconfiguration/Mappings/baseconfig-mapping.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "assignments": "Sample Assignments"
-} \ No newline at end of file
diff --git a/components/core/load/blueprints/baseconfiguration/Plans/ActivateProcess.bpmn b/components/core/load/blueprints/baseconfiguration/Plans/ActivateProcess.bpmn
deleted file mode 100644
index 5e94c0f8e..000000000
--- a/components/core/load/blueprints/baseconfiguration/Plans/ActivateProcess.bpmn
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL"
- xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
- xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
- xmlns:camunda="http://camunda.org/schema/1.0/bpmn"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1"
- targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.11.2">
- <bpmn:process id="ActivateProcess" isExecutable="true">
- <bpmn:startEvent id="StartEvent_1">
- <bpmn:outgoing>SequenceFlow_0l0dq58</bpmn:outgoing>
- </bpmn:startEvent>
- <bpmn:endEvent id="EndEvent_1pr0kil">
- <bpmn:incoming>SequenceFlow_1ay0k6p</bpmn:incoming>
- </bpmn:endEvent>
- <bpmn:sequenceFlow id="SequenceFlow_0l0dq58" sourceRef="StartEvent_1" targetRef="activate_device_task"/>
- <bpmn:sequenceFlow id="SequenceFlow_1ay0k6p" sourceRef="activate_device_task" targetRef="EndEvent_1pr0kil"/>
- <bpmn:serviceTask id="activate_device_task" name="Activate Device"
- camunda:delegateExpression="${componentDelegateService}">
- <bpmn:extensionElements>
- <camunda:inputOutput>
- <camunda:inputParameter name="selector"><![CDATA[resource-assignment
-]]></camunda:inputParameter>
- </camunda:inputOutput>
- </bpmn:extensionElements>
- <bpmn:incoming>SequenceFlow_0l0dq58</bpmn:incoming>
- <bpmn:outgoing>SequenceFlow_1ay0k6p</bpmn:outgoing>
- </bpmn:serviceTask>
- </bpmn:process>
- <bpmndi:BPMNDiagram id="BPMNDiagram_1">
- <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="ActivateProcess">
- <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
- <dc:Bounds x="175" y="143" width="36" height="36"/>
- <bpmndi:BPMNLabel>
- <dc:Bounds x="148" y="179" width="90" height="20"/>
- </bpmndi:BPMNLabel>
- </bpmndi:BPMNShape>
- <bpmndi:BPMNShape id="EndEvent_1pr0kil_di" bpmnElement="EndEvent_1pr0kil">
- <dc:Bounds x="575" y="114" width="36" height="36"/>
- <bpmndi:BPMNLabel>
- <dc:Bounds x="593" y="154" width="0" height="12"/>
- </bpmndi:BPMNLabel>
- </bpmndi:BPMNShape>
- <bpmndi:BPMNEdge id="SequenceFlow_0l0dq58_di" bpmnElement="SequenceFlow_0l0dq58">
- <di:waypoint xsi:type="dc:Point" x="211" y="161"/>
- <di:waypoint xsi:type="dc:Point" x="273" y="161"/>
- <di:waypoint xsi:type="dc:Point" x="273" y="149"/>
- <di:waypoint xsi:type="dc:Point" x="334" y="149"/>
- <bpmndi:BPMNLabel>
- <dc:Bounds x="288" y="149" width="0" height="12"/>
- </bpmndi:BPMNLabel>
- </bpmndi:BPMNEdge>
- <bpmndi:BPMNEdge id="SequenceFlow_1ay0k6p_di" bpmnElement="SequenceFlow_1ay0k6p">
- <di:waypoint xsi:type="dc:Point" x="434" y="149"/>
- <di:waypoint xsi:type="dc:Point" x="505" y="149"/>
- <di:waypoint xsi:type="dc:Point" x="505" y="132"/>
- <di:waypoint xsi:type="dc:Point" x="575" y="132"/>
- <bpmndi:BPMNLabel>
- <dc:Bounds x="520" y="134.5" width="0" height="12"/>
- </bpmndi:BPMNLabel>
- </bpmndi:BPMNEdge>
- <bpmndi:BPMNShape id="ServiceTask_0e8ek4f_di" bpmnElement="activate_device_task">
- <dc:Bounds x="334" y="109" width="100" height="80"/>
- </bpmndi:BPMNShape>
- </bpmndi:BPMNPlane>
- </bpmndi:BPMNDiagram>
-</bpmn:definitions>
diff --git a/components/core/load/blueprints/baseconfiguration/Scripts/SamplePythonComponentNode.py b/components/core/load/blueprints/baseconfiguration/Scripts/SamplePythonComponentNode.py
deleted file mode 100644
index eb198c79a..000000000
--- a/components/core/load/blueprints/baseconfiguration/Scripts/SamplePythonComponentNode.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from com.brvith.orchestrator.core.interfaces import ComponentNode
-
-class SamplePythonComponentNode(ComponentNode):
- def prepare(self, context, componentContext):
- return None
-
- def prepare(self, context, componentContext):
- return None \ No newline at end of file
diff --git a/components/core/load/blueprints/baseconfiguration/Scripts/__init__.py b/components/core/load/blueprints/baseconfiguration/Scripts/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/components/core/load/blueprints/baseconfiguration/Scripts/__init__.py
+++ /dev/null
diff --git a/components/core/load/blueprints/baseconfiguration/TOSCA-Metadata/TOSCA.meta b/components/core/load/blueprints/baseconfiguration/TOSCA-Metadata/TOSCA.meta
deleted file mode 100644
index fb38c1594..000000000
--- a/components/core/load/blueprints/baseconfiguration/TOSCA-Metadata/TOSCA.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-TOSCA-Meta-File-Version: 1.0.0
-CSAR-Version: 1.0
-Created-By: Brinda Santh M
-Entry-Definitions: Definitions/activation-blueprint.json
-Template-Tags: Brinda Santh, activation-blueprint
-
-Name: Plans/ActivateProcess.bpmn
-Content-Type: application/vnd.oasis.bpmn
diff --git a/components/core/load/blueprints/baseconfiguration/Templates/baseconfig-template.vtl b/components/core/load/blueprints/baseconfiguration/Templates/baseconfig-template.vtl
deleted file mode 100644
index 026c59176..000000000
--- a/components/core/load/blueprints/baseconfiguration/Templates/baseconfig-template.vtl
+++ /dev/null
@@ -1 +0,0 @@
-This is Sample Velocity Template \ No newline at end of file
diff --git a/components/core/load/blueprints/baseconfiguration/__init__.py b/components/core/load/blueprints/baseconfiguration/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/components/core/load/blueprints/baseconfiguration/__init__.py
+++ /dev/null
diff --git a/components/core/load/blueprints/simple-baseconfig/Definitions/sample-nodetype.json b/components/core/load/blueprints/simple-baseconfig/Definitions/sample-nodetype.json
deleted file mode 100644
index 207fcc415..000000000
--- a/components/core/load/blueprints/simple-baseconfig/Definitions/sample-nodetype.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "description": "This is Resource Assignment Component API",
- "version": "1.0.0",
- "derived_from": "tosca.nodes.Root"
-} \ No newline at end of file
diff --git a/components/core/load/blueprints/simple-baseconfig/Definitions/simple-baseconfig.json b/components/core/load/blueprints/simple-baseconfig/Definitions/simple-baseconfig.json
deleted file mode 100644
index cb091da0f..000000000
--- a/components/core/load/blueprints/simple-baseconfig/Definitions/simple-baseconfig.json
+++ /dev/null
@@ -1,340 +0,0 @@
-{
- "metadata": {
- "template_author": "Brinda Santh",
- "template_name": "simple-baseconfig",
- "template_version": "1.0.0",
- "service-type": "Sample Service",
- "release": "1806",
- "vnf-type": "VPE"
- },
- "topology_template": {
- "inputs": {
- "request-id": {
- "required": true,
- "type": "string"
- },
- "service-instance-id": {
- "required": true,
- "type": "string"
- },
- "scope-type": {
- "required": true,
- "type": "string"
- },
- "action-name": {
- "required": true,
- "type": "string"
- },
- "hostname": {
- "required": true,
- "type": "string"
- }
- },
- "node_templates": {
- "vpe-netconf-device": {
- "capabilities": {
- "netconf": {
- "properties": {
- "login-key": "sdnc",
- "login-account": "sndc-local",
- "source": "local",
- "target-ip-address": { "get_attribute": ["SELF", "lo0-local-ipv4-address"]},
- "port-number": 22,
- "connection-time-out": 30
- }
- }
- },
- "type": "vnf-netconf-device"
- },
- "activate-netconf-component": {
- "capabilities": {
- "component-node": {}
- },
- "requirements": {
- "netconf-connection": {
- "capability": "netconf",
- "node": "vpe-netconf-device",
- "relationship": "tosca.relationships.ConnectsTo"
- }
- },
- "interfaces": {
- "org-onap-ccsdk-netconf-adaptor-service-NetconfExecutorNode": {
- "operations": {
- "process": {
- "inputs": {
- "action-name": { "get_input" : "action-name" },
- "service-template-name": { "get_input" : "template_name" },
- "service-template-version": { "get_input" : "service-template-version" },
- "resource-type": "vnf-type",
- "request-id": { "get_input" : "request-id" },
- "resource-id": { "get_input" : "hostname" },
- "execution-script": "execution-script"
- },
- "outputs": {
- "response-data": { "get_input" : ["SELF", "netconf-executor-baseconfig.response-data"] },
- "status": { "get_input" : ["SELF", "netconf-executor-baseconfig.status"] }
- },
- "implementation" : {
- "primary" : "file://netconf_adaptor/DefaultBaseLicenceConfig.py"
- }
- }
- }
- }
- },
- "type": "component-netconf-executor"
- },
- "resource-assignment-ra-component": {
- "capabilities": {
- "component-node": {}
- },
- "interfaces": {
- "org-onap-ccsdk-config-assignment-service-ConfigAssignmentNode": {
- "operations": {
- "process": {
- "inputs": {
- "template-names": [
- "base-config-template",
- "licence-template"
- ],
- "action-name": { "get_input" : "action-name" },
- "service-template-name": { "get_input" : "template_name" },
- "service-template-version": { "get_input" : "service-template-version" },
- "resource-type": "vnf-type",
- "request-id": { "get_input" : "request-id" },
- "resource-id": { "get_input" : "hostname" }
- },
- "outputs": {
- "resource-assignment-params": "success",
- "status": "status"
- }
- }
- }
- }
- },
- "type": "component-resource-assignment"
- },
- "resource-assignment-action": {
- "properties": {
- "mode": "sync",
- "version": "LATEST",
- "is-start-flow": false
- },
- "requirements": {
- "component-dependency": {
- "capability": "component-node",
- "node": "resource-assignment-ra-component",
- "relationship": "tosca.relationships.DependsOn"
- }
- },
- "capabilities": {
- "dg-node": {}
- },
- "interfaces": {
- "CONFIG": {
- "operations": {
- "ResourceAssignment": {
- "inputs": {
- "params": []
- }
- }
- }
- }
- },
- "type": "dg-resource-assignment"
- },
- "activate-action": {
- "properties": {
- "mode": "sync",
- "version": "LATEST",
- "is-start-flow": false
- },
- "requirements": {
- "component-dependency": {
- "capability": "component-node",
- "node": "activate-netconf-component",
- "relationship": "tosca.relationships.DependsOn"
- }
- },
- "capabilities": {
- "dg-node": {},
- "content": {
- "properties": {
- "type": "json"
- }
- }
- },
- "interfaces": {
- "CONFIG": {
- "operations": {
- "ActivateNetconf": {
- "inputs": {
- "params": []
- }
- }
- }
- }
- },
- "type": "dg-activate-netconf"
- },
- "base-config-template": {
- "capabilities": {
- "content": {
- "properties": {
- "content": "db://base-config-template"
- }
- },
- "mapping": {
- "properties": {
- "mapping": [
- {
- "name": "bundle-mac",
- "property": {
- "description": "",
- "required": true,
- "type": "string",
- "status": "",
- "constraints": [
- {}
- ],
- "entry_schema": {
- "type": ""
- }
- },
- "input-param": false,
- "dictionary-name": "bundle-mac",
- "dictionary-source": "db",
- "dependencies": [
- "hostname"
- ],
- "version": 0
- },
- {
- "name": "wan-aggregate-ipv4-addresses",
- "property": {
- "description": "",
- "required": true,
- "type": "list",
- "status": "",
- "constraints": [
- {}
- ],
- "entry_schema": {
- "type": "dt-v4-aggregate"
- }
- },
- "input-param": false,
- "dictionary-name": "wan-aggregate-ipv4-addresses",
- "dictionary-source": "mdsal",
- "dependencies": [
- "service-instance-id",
- "oam-network-role",
- "oam-v4-ip-type ",
- "oam-vm-type"
- ],
- "version": 0
- },
- {
- "name": "hostname",
- "property": {
- "required": true,
- "type": "string"
- },
- "dictionary-name": "hostname",
- "dictionary-source": "input",
- "version": 0,
- "input-param": false
- },
- {
- "name": "service",
- "property": {
- "required": true,
- "type": "string"
- },
- "dictionary-name": "service",
- "dictionary-source": "input",
- "version": 0,
- "input-param": false
- },
- {
- "name": "service-instance-id",
- "property": {
- "required": true,
- "type": "string"
- },
- "dictionary-name": "service-instance-id",
- "dictionary-source": "input",
- "version": 0,
- "input-param": false
- }
- ]
- }
- }
- },
- "properties": {
- "action-names": [
- "resource-assignment-action"
- ]
- },
- "type": "artifact-config-template"
- },
- "licence-template": {
- "capabilities": {
- "content": {
- "properties": {
- "content": "db://licence-template"
- }
- },
- "mapping": {
- "properties": {
- "mapping": [
- {
- "name": "licenses",
- "property": {
- "description": "",
- "required": true,
- "type": "list",
- "status": "",
- "constraints": [
- {}
- ],
- "entry_schema": {
- "type": "dt-license-key"
- }
- },
- "input-param": false,
- "dictionary-name": "licenses",
- "dictionary-source": "mdsal",
- "dependencies": [
- "service-instance-id"
- ],
- "version": 0
- },
- {
- "name": "service-instance-id",
- "property": {
- "required": true,
- "type": "string"
- },
- "dictionary-name": "service-instance-id",
- "dictionary-source": "input",
- "version": 0,
- "input-param": false
- }
- ]
- }
- }
- },
- "properties": {
- "action-names": [
- "resource-assignment-action"
- ]
- },
- "type": "artifact-config-template"
- }
- }
- },
- "node_types": {
- },
- "data_types": {
- }
-} \ No newline at end of file
diff --git a/components/core/load/blueprints/simple-baseconfig/Mappings/baseconfig-mapping.json b/components/core/load/blueprints/simple-baseconfig/Mappings/baseconfig-mapping.json
deleted file mode 100644
index 6abfb51bd..000000000
--- a/components/core/load/blueprints/simple-baseconfig/Mappings/baseconfig-mapping.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "assignments": "Sample Assignments"
-} \ No newline at end of file
diff --git a/components/core/load/blueprints/simple-baseconfig/Plans/ActivateProcess.bpmn b/components/core/load/blueprints/simple-baseconfig/Plans/ActivateProcess.bpmn
deleted file mode 100644
index 5e94c0f8e..000000000
--- a/components/core/load/blueprints/simple-baseconfig/Plans/ActivateProcess.bpmn
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL"
- xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
- xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
- xmlns:camunda="http://camunda.org/schema/1.0/bpmn"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1"
- targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.11.2">
- <bpmn:process id="ActivateProcess" isExecutable="true">
- <bpmn:startEvent id="StartEvent_1">
- <bpmn:outgoing>SequenceFlow_0l0dq58</bpmn:outgoing>
- </bpmn:startEvent>
- <bpmn:endEvent id="EndEvent_1pr0kil">
- <bpmn:incoming>SequenceFlow_1ay0k6p</bpmn:incoming>
- </bpmn:endEvent>
- <bpmn:sequenceFlow id="SequenceFlow_0l0dq58" sourceRef="StartEvent_1" targetRef="activate_device_task"/>
- <bpmn:sequenceFlow id="SequenceFlow_1ay0k6p" sourceRef="activate_device_task" targetRef="EndEvent_1pr0kil"/>
- <bpmn:serviceTask id="activate_device_task" name="Activate Device"
- camunda:delegateExpression="${componentDelegateService}">
- <bpmn:extensionElements>
- <camunda:inputOutput>
- <camunda:inputParameter name="selector"><![CDATA[resource-assignment
-]]></camunda:inputParameter>
- </camunda:inputOutput>
- </bpmn:extensionElements>
- <bpmn:incoming>SequenceFlow_0l0dq58</bpmn:incoming>
- <bpmn:outgoing>SequenceFlow_1ay0k6p</bpmn:outgoing>
- </bpmn:serviceTask>
- </bpmn:process>
- <bpmndi:BPMNDiagram id="BPMNDiagram_1">
- <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="ActivateProcess">
- <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
- <dc:Bounds x="175" y="143" width="36" height="36"/>
- <bpmndi:BPMNLabel>
- <dc:Bounds x="148" y="179" width="90" height="20"/>
- </bpmndi:BPMNLabel>
- </bpmndi:BPMNShape>
- <bpmndi:BPMNShape id="EndEvent_1pr0kil_di" bpmnElement="EndEvent_1pr0kil">
- <dc:Bounds x="575" y="114" width="36" height="36"/>
- <bpmndi:BPMNLabel>
- <dc:Bounds x="593" y="154" width="0" height="12"/>
- </bpmndi:BPMNLabel>
- </bpmndi:BPMNShape>
- <bpmndi:BPMNEdge id="SequenceFlow_0l0dq58_di" bpmnElement="SequenceFlow_0l0dq58">
- <di:waypoint xsi:type="dc:Point" x="211" y="161"/>
- <di:waypoint xsi:type="dc:Point" x="273" y="161"/>
- <di:waypoint xsi:type="dc:Point" x="273" y="149"/>
- <di:waypoint xsi:type="dc:Point" x="334" y="149"/>
- <bpmndi:BPMNLabel>
- <dc:Bounds x="288" y="149" width="0" height="12"/>
- </bpmndi:BPMNLabel>
- </bpmndi:BPMNEdge>
- <bpmndi:BPMNEdge id="SequenceFlow_1ay0k6p_di" bpmnElement="SequenceFlow_1ay0k6p">
- <di:waypoint xsi:type="dc:Point" x="434" y="149"/>
- <di:waypoint xsi:type="dc:Point" x="505" y="149"/>
- <di:waypoint xsi:type="dc:Point" x="505" y="132"/>
- <di:waypoint xsi:type="dc:Point" x="575" y="132"/>
- <bpmndi:BPMNLabel>
- <dc:Bounds x="520" y="134.5" width="0" height="12"/>
- </bpmndi:BPMNLabel>
- </bpmndi:BPMNEdge>
- <bpmndi:BPMNShape id="ServiceTask_0e8ek4f_di" bpmnElement="activate_device_task">
- <dc:Bounds x="334" y="109" width="100" height="80"/>
- </bpmndi:BPMNShape>
- </bpmndi:BPMNPlane>
- </bpmndi:BPMNDiagram>
-</bpmn:definitions>
diff --git a/components/core/load/blueprints/simple-baseconfig/Scripts/SamplePythonComponentNode.py b/components/core/load/blueprints/simple-baseconfig/Scripts/SamplePythonComponentNode.py
deleted file mode 100644
index eb198c79a..000000000
--- a/components/core/load/blueprints/simple-baseconfig/Scripts/SamplePythonComponentNode.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from com.brvith.orchestrator.core.interfaces import ComponentNode
-
-class SamplePythonComponentNode(ComponentNode):
- def prepare(self, context, componentContext):
- return None
-
- def prepare(self, context, componentContext):
- return None \ No newline at end of file
diff --git a/components/core/load/blueprints/simple-baseconfig/Scripts/__init__.py b/components/core/load/blueprints/simple-baseconfig/Scripts/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/components/core/load/blueprints/simple-baseconfig/Scripts/__init__.py
+++ /dev/null
diff --git a/components/core/load/blueprints/simple-baseconfig/TOSCA-Metadata/TOSCA.meta b/components/core/load/blueprints/simple-baseconfig/TOSCA-Metadata/TOSCA.meta
deleted file mode 100644
index d7ae5e8a2..000000000
--- a/components/core/load/blueprints/simple-baseconfig/TOSCA-Metadata/TOSCA.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-TOSCA-Meta-File-Version: 1.0.0
-CSAR-Version: 1.0
-Created-By: Brinda Santh M
-Entry-Definitions: Definitions/simple-baseconfig.json
-Template-Tags: vrr-test, Brinda Santh
-
-Name: Plans/ActivateProcess.bpmn
-Content-Type: application/vnd.oasis.bpmn
diff --git a/components/core/load/blueprints/simple-baseconfig/Templates/base-config-template.vtl b/components/core/load/blueprints/simple-baseconfig/Templates/base-config-template.vtl
deleted file mode 100644
index 92dba1024..000000000
--- a/components/core/load/blueprints/simple-baseconfig/Templates/base-config-template.vtl
+++ /dev/null
@@ -1,40 +0,0 @@
- <config>
- <configuration>
- <groups>
- <name>${group-name}</name>
- <routing-instances>
- <instance>
- <name>&lt;*&gt;</name>
- <protocols>
- <pim>
- <dense-groups>
- <dynamic-reject />
- <pim-dense-group-type>
- <name>224.0.1.40/32</name>
- </pim-dense-group-type>
- <pim-dense-group-type>
- <name>224.0.1.39/32</name>
- </pim-dense-group-type>
- <pim-dense-group-type>
- <name>224.0.0.0/4</name>
- <reject />
- </pim-dense-group-type>
- </dense-groups>
- <rp>
- <auto-rp>
- <discovery />
- </auto-rp>
- </rp>
- <interface>
- <name>&lt;*&gt;</name>
- <disable />
- <priority>1000</priority>
- </interface>
- <reset-tracking-bit />
- </pim>
- </protocols>
- </instance>
- </routing-instances>
- </groups>
- </configuration>
- </config> \ No newline at end of file
diff --git a/components/core/load/blueprints/simple-baseconfig/Templates/baseconfig-template.vtl b/components/core/load/blueprints/simple-baseconfig/Templates/baseconfig-template.vtl
deleted file mode 100644
index 026c59176..000000000
--- a/components/core/load/blueprints/simple-baseconfig/Templates/baseconfig-template.vtl
+++ /dev/null
@@ -1 +0,0 @@
-This is Sample Velocity Template \ No newline at end of file
diff --git a/components/core/load/blueprints/simple-baseconfig/Templates/licence-template.vtl b/components/core/load/blueprints/simple-baseconfig/Templates/licence-template.vtl
deleted file mode 100644
index 626974f27..000000000
--- a/components/core/load/blueprints/simple-baseconfig/Templates/licence-template.vtl
+++ /dev/null
@@ -1,4 +0,0 @@
- <config>
- <configuration>
- </configuration>
- </config>
diff --git a/components/core/load/blueprints/simple-baseconfig/__init__.py b/components/core/load/blueprints/simple-baseconfig/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/components/core/load/blueprints/simple-baseconfig/__init__.py
+++ /dev/null
diff --git a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/BluePrintConstants.kt b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/BluePrintConstants.kt
index 2590d6dc3..84d2befc5 100644
--- a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/BluePrintConstants.kt
+++ b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/BluePrintConstants.kt
@@ -143,15 +143,15 @@ object BluePrintConstants {
const val METADATA_TEMPLATE_VERSION = "template_version"
const val METADATA_TEMPLATE_AUTHOR = "template_author"
const val METADATA_TEMPLATE_TAGS = "template_tags"
+ const val METADATA_WORKFLOW_NAME = "workflow_name"
- const val PAYLOAD_CONTENT = "payload-content"
const val PAYLOAD_DATA = "payload-data"
- const val SELECTOR = "selector"
+ const val PROPERTY_CURRENT_STEP = "current-step"
+ const val PROPERTY_CURRENT_NODE_TEMPLATE = "current-node-template"
const val PROPERTY_CURRENT_INTERFACE = "current-interface"
const val PROPERTY_CURRENT_OPERATION = "current-operation"
const val PROPERTY_CURRENT_IMPLEMENTATION = "current-implementation"
-
- const val PROPERTY_ACTION_NAME = "action"
+ const val PROPERTY_EXECUTION_REQUEST = "execution-request"
const val OPERATION_PROCESS = "process"
const val OPERATION_PREPARE = "prepare"
diff --git a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/BluePrintProcessorException.kt b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/BluePrintProcessorException.kt
index 50717031d..000062134 100644
--- a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/BluePrintProcessorException.kt
+++ b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/BluePrintProcessorException.kt
@@ -16,12 +16,13 @@
*/
package org.onap.ccsdk.apps.controllerblueprints.core
+
/**
*
*
* @author Brinda Santh
*/
-class BluePrintProcessorException : Exception {
+class BluePrintProcessorException : RuntimeException {
var code: Int = 100
constructor(message: String, cause: Throwable) : super(message, cause)
diff --git a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/CustomFunctions.kt b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/CustomFunctions.kt
index 7302f2b96..c32e15f8a 100644
--- a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/CustomFunctions.kt
+++ b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/CustomFunctions.kt
@@ -16,6 +16,12 @@
package org.onap.ccsdk.apps.controllerblueprints.core
+import com.fasterxml.jackson.databind.JsonNode
+import com.fasterxml.jackson.databind.node.BooleanNode
+import com.fasterxml.jackson.databind.node.DoubleNode
+import com.fasterxml.jackson.databind.node.IntNode
+import com.fasterxml.jackson.databind.node.TextNode
+import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils
import org.slf4j.helpers.MessageFormatter
import java.io.File
import java.io.InputStream
@@ -27,14 +33,30 @@ import kotlin.reflect.KClass
* @author Brinda Santh
*/
-fun format(message: String, vararg args: Any?) : String{
- if(args != null && args.isNotEmpty()){
+fun String.asJsonPrimitive(): TextNode {
+ return TextNode(this)
+}
+
+fun Boolean.asJsonPrimitive(): BooleanNode {
+ return BooleanNode.valueOf(this)
+}
+
+fun Int.asJsonPrimitive(): IntNode {
+ return IntNode.valueOf(this)
+}
+
+fun Double.asJsonPrimitive(): DoubleNode {
+ return DoubleNode.valueOf(this)
+}
+
+fun format(message: String, vararg args: Any?): String {
+ if (args != null && args.isNotEmpty()) {
return MessageFormatter.arrayFormat(message, args).message
}
- return message
+ return message
}
-fun <T : Any> MutableMap<String, *>.getCastOptionalValue(key: String, valueType: KClass<T>): T? {
+fun <T : Any> MutableMap<String, *>.castOptionalValue(key: String, valueType: KClass<T>): T? {
if (containsKey(key)) {
return get(key) as? T
} else {
@@ -42,27 +64,54 @@ fun <T : Any> MutableMap<String, *>.getCastOptionalValue(key: String, valueType:
}
}
-fun <T : Any> MutableMap<String, *>.getCastValue(key: String, valueType: KClass<T>): T {
+fun <T : Any> MutableMap<String, *>.castValue(key: String, valueType: KClass<T>): T {
if (containsKey(key)) {
return get(key) as T
} else {
- throw BluePrintException("couldn't find the key " + key)
+ throw BluePrintException("couldn't find the key $key")
}
}
-fun checkNotEmpty(value : String?) : Boolean{
+fun MutableMap<String, JsonNode>.putJsonElement(key: String, value: Any) {
+ when (value) {
+ is JsonNode ->
+ this.put(key, value)
+ is String ->
+ this.put(key, TextNode(value))
+ is Boolean ->
+ this.put(key, BooleanNode.valueOf(value))
+ is Int ->
+ this.put(key, IntNode.valueOf(value.toInt()))
+ is Double ->
+ this.put(key, DoubleNode.valueOf(value.toDouble()))
+ else ->
+ this.put(key, JacksonUtils.jsonNodeFromObject(value))
+ }
+}
+
+fun MutableMap<String, JsonNode>.getAsString(key: String): String {
+ return this[key]?.asText() ?: throw BluePrintException("couldn't find value for key($key)")
+}
+
+fun MutableMap<String, JsonNode>.getAsBoolean(key: String): Boolean {
+ return this[key]?.asBoolean() ?: throw BluePrintException("couldn't find value for key($key)")
+}
+
+// Checks
+
+fun checkNotEmpty(value: String?): Boolean {
return value != null && value.isNotEmpty()
}
-fun checkNotEmptyNThrow(value : String?, message : String? = value.plus(" is null/empty ")) : Boolean{
+fun checkNotEmptyNThrow(value: String?, message: String? = value.plus(" is null/empty ")): Boolean {
val notEmpty = value != null && value.isNotEmpty()
- if(!notEmpty){
+ if (!notEmpty) {
throw BluePrintException(message!!)
}
return notEmpty
}
-fun InputStream.toFile(path: String) : File {
+fun InputStream.toFile(path: String): File {
val file = File(path)
file.outputStream().use { this.copyTo(it) }
return file
diff --git a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/data/BluePrintModel.kt b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/data/BluePrintModel.kt
index 70f3c5569..9b6fbbf19 100644
--- a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/data/BluePrintModel.kt
+++ b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/data/BluePrintModel.kt
@@ -91,7 +91,7 @@ A node filter definition defines criteria for selection of a TOSCA Node Template
class NodeFilterDefinition {
var properties: MutableMap<String, PropertyDefinition>? = null
- var capabilities : MutableList<String>? = null
+ var capabilities: MutableList<String>? = null
}
/*
@@ -348,7 +348,7 @@ class ArtifactType : EntityType() {
A Data Type definition defines the schema for new named datatypes in TOSCA.
*/
-class DataType : EntityType(){
+class DataType : EntityType() {
var constraints: MutableList<ConstraintClause>? = null
}
@@ -410,7 +410,7 @@ class GroupType : EntityType() {
topology at some stage of its lifecycle, but is not explicitly part of the topology itself
(i.e., it does not prevent the application or service from being deployed or run if it did not exist).
*/
-class PolicyType : EntityType(){
+class PolicyType : EntityType() {
lateinit var targets: MutableList<String>
}
@@ -434,10 +434,10 @@ class GroupDefinition {
var id: String? = null
lateinit var type: String
var description: String? = null
- var metadata : MutableMap<String, String>? = null
- var properties : MutableMap<String, JsonNode>? = null
+ var metadata: MutableMap<String, String>? = null
+ var properties: MutableMap<String, JsonNode>? = null
var members = ArrayList<String>()
- var interfaces : MutableMap<String, InterfaceDefinition>?= null
+ var interfaces: MutableMap<String, InterfaceDefinition>? = null
}
/*
@@ -597,7 +597,7 @@ class ServiceTemplate {
@get:JsonProperty("node_types")
var nodeTypes: MutableMap<String, NodeType>? = null
@get:JsonProperty("policy_types")
- var policyTypes: PolicyType? = null
+ var policyTypes: MutableMap<String, PolicyType>? = null
@get:JsonProperty("topology_template")
var topologyTemplate: TopologyTemplate? = null
}
diff --git a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/factory/BluePrintParserFactory.kt b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/factory/BluePrintParserFactory.kt
deleted file mode 100644
index 83233abc1..000000000
--- a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/factory/BluePrintParserFactory.kt
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright © 2017-2018 AT&T Intellectual Property.
- *
- * 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.
- */
-
-package org.onap.ccsdk.apps.controllerblueprints.core.factory
-
-import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintParserDefaultService
-import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintParserService
-import com.att.eelf.configuration.EELFLogger
-import com.att.eelf.configuration.EELFManager
-
-/**
- *
- * BluePrintParserFactory
- * @author Brinda Santh
- */
-
-object BluePrintParserFactory {
- private val log: EELFLogger = EELFManager.getInstance().getLogger(this::class.toString())
-
- var bluePrintParserServices: MutableMap<String, BluePrintParserService> = HashMap()
-
- init {
- log.info("Initialised default BluePrintParser Service ")
- bluePrintParserServices.put(org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.TYPE_DEFAULT, BluePrintParserDefaultService())
- }
-
- fun register(key:String, bluePrintParserService: BluePrintParserService){
- bluePrintParserServices.put(key, bluePrintParserService)
- }
-
- /**
- * Called by clients to get a Blueprint Parser for the Blueprint parser type
- */
- fun instance(key : String) : BluePrintParserService? {
- return bluePrintParserServices.get(key)
- }
-}
-
diff --git a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/interfaces/BlueprintFunctionNode.kt b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/interfaces/BlueprintFunctionNode.kt
new file mode 100644
index 000000000..6add70e64
--- /dev/null
+++ b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/interfaces/BlueprintFunctionNode.kt
@@ -0,0 +1,37 @@
+/*
+ * Copyright © 2017-2018 AT&T Intellectual Property.
+ *
+ * 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.
+ */
+
+package org.onap.ccsdk.apps.controllerblueprints.core.interfaces
+
+import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintProcessorException
+import java.util.function.Function
+
+
+interface BlueprintFunctionNode<T, R> : Function<T, R> {
+
+ @Throws(BluePrintProcessorException::class)
+ fun prepareRequest(executionRequest: T): T
+
+ @Throws(BluePrintProcessorException::class)
+ fun process(executionRequest: T)
+
+ @Throws(BluePrintProcessorException::class)
+ fun recover(runtimeException: RuntimeException, executionRequest: T)
+
+ @Throws(BluePrintProcessorException::class)
+ fun prepareResponse(): R
+
+} \ No newline at end of file
diff --git a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintContext.kt b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintContext.kt
index 46da9d95a..4764479ad 100644
--- a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintContext.kt
+++ b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintContext.kt
@@ -22,17 +22,16 @@ import com.fasterxml.jackson.databind.JsonNode
import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException
import org.onap.ccsdk.apps.controllerblueprints.core.data.*
import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils
+
/**
*
*
* @author Brinda Santh
*/
-class BluePrintContext(serviceTemplate: ServiceTemplate) {
+class BluePrintContext(val serviceTemplate: ServiceTemplate) {
private val log: EELFLogger = EELFManager.getInstance().getLogger(this::class.toString())
- val serviceTemplate: ServiceTemplate = serviceTemplate
-
val imports: List<ImportDefinition>? = serviceTemplate.imports
val metadata: MutableMap<String, String>? = serviceTemplate.metadata
@@ -41,18 +40,33 @@ class BluePrintContext(serviceTemplate: ServiceTemplate) {
val inputs: MutableMap<String, PropertyDefinition>? = serviceTemplate.topologyTemplate?.inputs
- val workflows: MutableMap<String, Workflow>? = serviceTemplate.topologyTemplate?.workflows
-
fun blueprintJson(pretty: Boolean = false): String = print("json", pretty)
- fun blueprintYaml(pretty: Boolean = false): String = print("yaml", pretty)
-
private fun print(type: String? = "json", pretty: Boolean = false): String {
return JacksonUtils.getJson(serviceTemplate, pretty)
}
// Workflow
- fun workflowByName(name: String): Workflow? = workflows?.get(name)
+ val workflows: MutableMap<String, Workflow>? = serviceTemplate.topologyTemplate?.workflows
+
+ fun workflowByName(workFlowName: String): Workflow = workflows?.get(workFlowName)
+ ?: throw BluePrintException("could't get workflow($workFlowName)")
+
+ fun workflowStepByName(workFlowName: String, stepName: String): Step {
+ return workflowByName(workFlowName).steps?.get(stepName)
+ ?: throw BluePrintException("could't get step($stepName) for workflow($workFlowName)")
+ }
+
+ fun workflowStepNodeTemplate(workFlowName: String, stepName: String): NodeTemplate {
+ val nodeTemplateName = workflowStepByName(workFlowName, stepName).target
+ ?: throw BluePrintException("could't get node template name for workflow($workFlowName)'s step($stepName)")
+ return nodeTemplateByName(nodeTemplateName)
+ }
+
+ fun workflowStepFirstCallOperation(workFlowName: String, stepName: String): String {
+ return workflowStepByName(workFlowName, stepName).activities?.filter { it.callOperation != null }?.single()?.callOperation
+ ?: throw BluePrintException("could't get first callOperation for WorkFlow($workFlowName) ")
+ }
// Data Type
fun dataTypeByName(name: String): DataType? = dataTypes?.get(name)
@@ -60,41 +74,65 @@ class BluePrintContext(serviceTemplate: ServiceTemplate) {
// Artifact Type
val artifactTypes: MutableMap<String, ArtifactType>? = serviceTemplate.artifactTypes
+ // Policy Types
+ val policyTypes: MutableMap<String, PolicyType>? = serviceTemplate.policyTypes
+
+ fun policyTypeByName(policyName: String) = policyTypes?.get(policyName)
+ ?: throw BluePrintException("could't get policy type for the name($policyName)")
+
+ fun policyTypesDerivedFrom(name: String): MutableMap<String, PolicyType>? {
+ return policyTypes?.filterValues { policyType -> policyType.derivedFrom == name }?.toMutableMap()
+ }
+
+ fun policyTypesTarget(target: String): MutableMap<String, PolicyType>? {
+ return policyTypes?.filterValues { it.targets.contains(target) }?.toMutableMap()
+ }
+
+ fun policyTypesTargetNDerivedFrom(target: String, derivedFrom: String): MutableMap<String, PolicyType>? {
+ return policyTypesDerivedFrom(derivedFrom)?.filterValues {
+ it.targets.contains(target)
+ }?.toMutableMap()
+ }
+
// Node Type Methods
val nodeTypes: MutableMap<String, NodeType>? = serviceTemplate.nodeTypes
fun nodeTypeByName(name: String): NodeType =
- nodeTypes?.get(name) ?: throw BluePrintException(String.format("Failed to get node type for the name : %s", name))
+ nodeTypes?.get(name)
+ ?: throw BluePrintException("could't get node type for the name($name)")
fun nodeTypeDerivedFrom(name: String): MutableMap<String, NodeType>? {
return nodeTypes?.filterValues { nodeType -> nodeType.derivedFrom == name }?.toMutableMap()
}
- fun nodeTypeInterface(nodeTypeName: String, interfaceName: String): InterfaceDefinition? {
+ fun nodeTypeInterface(nodeTypeName: String, interfaceName: String): InterfaceDefinition {
return nodeTypeByName(nodeTypeName).interfaces?.get(interfaceName)
+ ?: throw BluePrintException("could't get node type($nodeTypeName)'s interface definition($interfaceName)")
}
- fun nodeTypeInterfaceOperation(nodeTypeName: String, interfaceName: String, operationName: String): OperationDefinition? {
- return nodeTypeInterface(nodeTypeName, interfaceName)?.operations?.get(operationName)
+ fun nodeTypeInterfaceOperation(nodeTypeName: String, interfaceName: String, operationName: String): OperationDefinition {
+ return nodeTypeInterface(nodeTypeName, interfaceName).operations?.get(operationName)
+ ?: throw BluePrintException("could't get node type($nodeTypeName)'s interface definition($interfaceName) operation definition($operationName)")
}
- fun interfaceNameForNodeType(nodeTypeName: String): String? {
+ fun interfaceNameForNodeType(nodeTypeName: String): String {
return nodeTypeByName(nodeTypeName).interfaces?.keys?.first()
+ ?: throw BluePrintException("could't get NodeType($nodeTypeName)'s first InterfaceDefinition name")
}
fun nodeTypeInterfaceOperationInputs(nodeTypeName: String, interfaceName: String, operationName: String): MutableMap<String, PropertyDefinition>? {
- return nodeTypeInterfaceOperation(nodeTypeName, interfaceName, operationName)?.inputs
+ return nodeTypeInterfaceOperation(nodeTypeName, interfaceName, operationName).inputs
}
fun nodeTypeInterfaceOperationOutputs(nodeTypeName: String, interfaceName: String, operationName: String): MutableMap<String, PropertyDefinition>? {
- return nodeTypeInterfaceOperation(nodeTypeName, interfaceName, operationName)?.outputs
+ return nodeTypeInterfaceOperation(nodeTypeName, interfaceName, operationName).outputs
}
// Node Template Methods
val nodeTemplates: MutableMap<String, NodeTemplate>? = serviceTemplate.topologyTemplate?.nodeTemplates
fun nodeTemplateByName(name: String): NodeTemplate =
- nodeTemplates?.get(name) ?: throw BluePrintException("Failed to get node template for the name " + name)
+ nodeTemplates?.get(name) ?: throw BluePrintException("could't get node template for the name($name) ")
fun nodeTemplateForNodeType(name: String): MutableMap<String, NodeTemplate>? {
return nodeTemplates?.filterValues { nodeTemplate -> nodeTemplate.type == name }?.toMutableMap()
@@ -113,55 +151,62 @@ class BluePrintContext(serviceTemplate: ServiceTemplate) {
return nodeTemplateByName(nodeTemplateName).artifacts
}
- fun nodeTemplateArtifact(nodeTemplateName: String, artifactName: String): ArtifactDefinition? {
+ fun nodeTemplateArtifact(nodeTemplateName: String, artifactName: String): ArtifactDefinition {
return nodeTemplateArtifacts(nodeTemplateName)?.get(artifactName)
+ ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s ArtifactDefinition($artifactName)")
}
- fun nodeTemplateFirstInterface(nodeTemplateName: String): InterfaceAssignment? {
+ fun nodeTemplateFirstInterface(nodeTemplateName: String): InterfaceAssignment {
return nodeTemplateByName(nodeTemplateName).interfaces?.values?.first()
+ ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s first InterfaceAssignment")
}
- fun nodeTemplateFirstInterfaceName(nodeTemplateName: String): String? {
+ fun nodeTemplateFirstInterfaceName(nodeTemplateName: String): String {
return nodeTemplateByName(nodeTemplateName).interfaces?.keys?.first()
+ ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s first InterfaceAssignment name")
}
- fun nodeTemplateFirstInterfaceFirstOperationName(nodeTemplateName: String): String? {
- return nodeTemplateFirstInterface(nodeTemplateName)?.operations?.keys?.first()
+ fun nodeTemplateFirstInterfaceFirstOperationName(nodeTemplateName: String): String {
+ return nodeTemplateFirstInterface(nodeTemplateName).operations?.keys?.first()
+ ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s first InterfaceAssignment's first OperationAssignment name")
}
fun nodeTemplateInterfaceOperationInputs(nodeTemplateName: String, interfaceName: String, operationName: String): MutableMap<String, JsonNode>? {
- return nodeTemplateByName(nodeTemplateName).interfaces?.get(interfaceName)?.operations?.get(operationName)?.inputs
+ return nodeTemplateInterfaceOperation(nodeTemplateName, interfaceName, operationName).inputs
}
fun nodeTemplateInterfaceOperationOutputs(nodeTemplateName: String, interfaceName: String, operationName: String): MutableMap<String, JsonNode>? {
- return nodeTemplateByName(nodeTemplateName).interfaces?.get(interfaceName)?.operations?.get(operationName)?.outputs
+ return nodeTemplateInterfaceOperation(nodeTemplateName, interfaceName, operationName).outputs
}
- fun nodeTemplateInterface(nodeTemplateName: String, interfaceName: String): InterfaceAssignment? {
+ fun nodeTemplateInterface(nodeTemplateName: String, interfaceName: String): InterfaceAssignment {
return nodeTemplateByName(nodeTemplateName).interfaces?.get(interfaceName)
+ ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s InterfaceAssignment($interfaceName)")
}
-
- fun nodeTemplateInterfaceOperation(nodeTemplateName: String, interfaceName: String, operationName: String): OperationAssignment? {
- return nodeTemplateInterface(nodeTemplateName, interfaceName)?.operations?.get(operationName)
+ fun nodeTemplateInterfaceOperation(nodeTemplateName: String, interfaceName: String, operationName: String): OperationAssignment {
+ return nodeTemplateInterface(nodeTemplateName, interfaceName).operations?.get(operationName)
+ ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s InterfaceAssignment($interfaceName) OperationAssignment($operationName)")
}
- fun nodeTemplateCapability(nodeTemplateName: String, capabilityName: String): CapabilityAssignment? {
+ fun nodeTemplateCapability(nodeTemplateName: String, capabilityName: String): CapabilityAssignment {
return nodeTemplateByName(nodeTemplateName).capabilities?.get(capabilityName)
+ ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s CapabilityAssignment($capabilityName)")
}
- fun nodeTemplateRequirement(nodeTemplateName: String, requirementName: String): RequirementAssignment? {
+ fun nodeTemplateRequirement(nodeTemplateName: String, requirementName: String): RequirementAssignment {
return nodeTemplateByName(nodeTemplateName).requirements?.get(requirementName)
+ ?: throw BluePrintException("could't get NodeTemplate($nodeTemplateName)'s first RequirementAssignment($requirementName)")
}
fun nodeTemplateRequirementNode(nodeTemplateName: String, requirementName: String): NodeTemplate {
- val requirementNodeTemplateName: String = nodeTemplateByName(nodeTemplateName).requirements?.get(requirementName)?.node
- ?: throw BluePrintException(String.format("failed to get node name for node template's (%s) requirement's (%s) " + nodeTemplateName, requirementName))
- return nodeTemplateByName(requirementNodeTemplateName)
+ val filteredNodeTemplateName: String = nodeTemplateByName(nodeTemplateName).requirements?.get(requirementName)?.node
+ ?: throw BluePrintException("could't NodeTemplate for NodeTemplate's($nodeTemplateName) requirement's ($requirementName) ")
+ return nodeTemplateByName(filteredNodeTemplateName)
}
fun nodeTemplateCapabilityProperty(nodeTemplateName: String, capabilityName: String, propertyName: String): Any? {
- return nodeTemplateCapability(nodeTemplateName, capabilityName)?.properties?.get(propertyName)
+ return nodeTemplateCapability(nodeTemplateName, capabilityName).properties?.get(propertyName)
}
// Chained Functions
diff --git a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintImportService.kt b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintImportService.kt
new file mode 100644
index 000000000..fce06f3f5
--- /dev/null
+++ b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintImportService.kt
@@ -0,0 +1,94 @@
+/*
+ * Copyright © 2017-2018 AT&T Intellectual Property.
+ *
+ * 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.
+ */
+
+package org.onap.ccsdk.apps.controllerblueprints.core.service
+
+import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException
+import org.onap.ccsdk.apps.controllerblueprints.core.data.ImportDefinition
+import org.onap.ccsdk.apps.controllerblueprints.core.data.ServiceTemplate
+import org.onap.ccsdk.apps.controllerblueprints.core.utils.ServiceTemplateUtils
+import org.slf4j.Logger
+import org.slf4j.LoggerFactory
+import java.io.File
+import java.net.URL
+import java.net.URLDecoder
+import java.nio.charset.Charset
+
+class BluePrintImportService(private val parentServiceTemplate: ServiceTemplate, private val blueprintBasePath: String) {
+
+ private val log: Logger = LoggerFactory.getLogger(this::class.toString())
+ val PARENT_SERVICE_TEMPLATE: String = "parent"
+
+ var importServiceTemplateMap: MutableMap<String, ServiceTemplate> = hashMapOf()
+
+
+ fun getImportResolvedServiceTemplate(): ServiceTemplate {
+ // Populate Imported Service Templates
+ traverseSchema(PARENT_SERVICE_TEMPLATE, parentServiceTemplate)
+
+ importServiceTemplateMap.forEach { key, serviceTemplate ->
+ ServiceTemplateUtils.merge(parentServiceTemplate, serviceTemplate)
+ log.debug("merged service template $key")
+ }
+ return parentServiceTemplate
+ }
+
+ private fun traverseSchema(key: String, serviceTemplate: ServiceTemplate) {
+ if (key != PARENT_SERVICE_TEMPLATE) {
+ importServiceTemplateMap[key] = serviceTemplate
+ }
+ val imports: List<ImportDefinition>? = serviceTemplate.imports
+
+ imports?.let {
+ serviceTemplate.imports?.forEach { importDefinition ->
+ val childServiceTemplate = resolveImportDefinition(importDefinition)
+ val keyName: String = importDefinition.file
+ traverseSchema(keyName, childServiceTemplate)
+ }
+ }
+ }
+
+ private fun resolveImportDefinition(importDefinition: ImportDefinition): ServiceTemplate {
+ var serviceTemplate: ServiceTemplate? = null
+ val file: String = importDefinition.file
+ val decodedSystemId: String = URLDecoder.decode(file, Charset.defaultCharset().toString())
+ log.trace("file ({}), decodedSystemId ({}) ", file, decodedSystemId)
+ try {
+ if (decodedSystemId.startsWith("http", true)
+ || decodedSystemId.startsWith("https", true)) {
+ val givenUrl: String = URL(decodedSystemId).toString()
+ val systemUrl: String = File(".").toURI().toURL().toString()
+ log.trace("givenUrl ({}), systemUrl ({}) ", givenUrl, systemUrl)
+ if (givenUrl.startsWith(systemUrl)) {
+
+ }
+ } else {
+ if (!decodedSystemId.startsWith("/")) {
+ importDefinition.file = StringBuilder().append(blueprintBasePath).append(File.separator).append(file).toString()
+ }
+ serviceTemplate = ServiceTemplateUtils.getServiceTemplate(importDefinition.file)
+ }
+ } catch (e: Exception) {
+ throw BluePrintException("failed to populate service template for ${importDefinition.file}", e)
+ }
+ if (serviceTemplate == null) {
+ throw BluePrintException("failed to populate service template for : ${importDefinition.file}")
+ }
+ return serviceTemplate
+ }
+
+
+} \ No newline at end of file
diff --git a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintRuntimeService.kt b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintRuntimeService.kt
index 2485abdb5..f84b2c569 100644
--- a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintRuntimeService.kt
+++ b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintRuntimeService.kt
@@ -18,8 +18,12 @@
package org.onap.ccsdk.apps.controllerblueprints.core.service
+import com.att.eelf.configuration.EELFLogger
+import com.att.eelf.configuration.EELFManager
import com.fasterxml.jackson.databind.JsonNode
import com.fasterxml.jackson.databind.node.NullNode
+import com.fasterxml.jackson.databind.node.ObjectNode
+import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants
import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException
import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintProcessorException
@@ -27,31 +31,123 @@ import org.onap.ccsdk.apps.controllerblueprints.core.data.ArtifactDefinition
import org.onap.ccsdk.apps.controllerblueprints.core.data.NodeTemplate
import org.onap.ccsdk.apps.controllerblueprints.core.data.PropertyDefinition
import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils
-import com.att.eelf.configuration.EELFLogger
-import com.att.eelf.configuration.EELFManager
-import com.fasterxml.jackson.databind.node.ObjectNode
-import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
+
+interface BluePrintRuntimeService<T> {
+
+ fun id(): String
+
+ fun bluePrintContext(): BluePrintContext
+
+ fun getExecutionContext(): T
+
+ fun setExecutionContext(executionContext: T)
+
+ fun put(key: String, value: JsonNode)
+
+ fun get(key: String): JsonNode?
+
+ fun cleanRuntime()
+
+ /*
+ Get the Node Type Definition for the Node Template, Then iterate Node Type Properties and resolve the expressing
+ */
+ fun resolveNodeTemplateProperties(nodeTemplateName: String): MutableMap<String, JsonNode>
+
+ fun resolveNodeTemplateInterfaceOperationInputs(nodeTemplateName: String, interfaceName: String, operationName: String): MutableMap<String, JsonNode>
+
+ fun resolveNodeTemplateInterfaceOperationOutputs(nodeTemplateName: String, interfaceName: String, operationName: String): MutableMap<String, JsonNode>
+
+ fun resolveNodeTemplateArtifact(nodeTemplateName: String, artifactName: String): String
+
+ fun setInputValue(propertyName: String, propertyDefinition: PropertyDefinition, value: JsonNode)
+
+ fun setWorkflowInputValue(workflowName: String, propertyName: String, propertyDefinition: PropertyDefinition, value: JsonNode)
+
+ fun setNodeTemplatePropertyValue(nodeTemplateName: String, propertyName: String, value: JsonNode)
+
+ fun setNodeTemplateAttributeValue(nodeTemplateName: String, attributeName: String, value: JsonNode)
+
+ fun setNodeTemplateOperationPropertyValue(nodeTemplateName: String, interfaceName: String, operationName: String, propertyName: String, value: JsonNode)
+
+ fun setNodeTemplateOperationInputValue(nodeTemplateName: String, interfaceName: String, operationName: String, propertyName: String, value: JsonNode)
+
+ fun setNodeTemplateOperationOutputValue(nodeTemplateName: String, interfaceName: String, operationName: String, propertyName: String, value: JsonNode)
+
+ fun getInputValue(propertyName: String): JsonNode
+
+ fun getNodeTemplateOperationOutputValue(nodeTemplateName: String, interfaceName: String, operationName: String, propertyName: String): JsonNode
+
+ fun getNodeTemplatePropertyValue(nodeTemplateName: String, propertyName: String): JsonNode?
+
+ fun getNodeTemplateAttributeValue(nodeTemplateName: String, attributeName: String): JsonNode?
+
+ fun getNodeTemplateRequirementPropertyValue(nodeTemplateName: String, requirementName: String, propertyName: String): JsonNode?
+
+ fun getNodeTemplateCapabilityPropertyValue(nodeTemplateName: String, capabilityName: String, propertyName: String): JsonNode?
+
+ fun assignInputs(jsonNode: JsonNode)
+
+ fun assignWorkflowInputs(workflowName: String, jsonNode: JsonNode)
+
+ fun getJsonForNodeTemplateAttributeProperties(nodeTemplateName: String, keys: List<String>): JsonNode
+}
/**
*
*
* @author Brinda Santh
*/
-open class BluePrintRuntimeService(var bluePrintContext: BluePrintContext, var context: MutableMap<String, Any> = hashMapOf()) {
+open class DefaultBluePrintRuntimeService(private var id: String, private var bluePrintContext: BluePrintContext)
+ : BluePrintRuntimeService<MutableMap<String, JsonNode>> {
private val log: EELFLogger = EELFManager.getInstance().getLogger(BluePrintRuntimeService::class.toString())
+ private var store: MutableMap<String, JsonNode> = hashMapOf()
+
+ override fun id(): String {
+ return id
+ }
+
+ override fun bluePrintContext(): BluePrintContext {
+ return bluePrintContext
+ }
+
+ override fun getExecutionContext(): MutableMap<String, JsonNode> {
+ return store
+ }
+
+ @Suppress("UNCHECKED_CAST")
+ override fun setExecutionContext(executionContext: MutableMap<String, JsonNode>) {
+ this.store = executionContext
+ }
+
+ override fun put(key: String, value: JsonNode) {
+ store[key] = value
+ }
+
+ override fun get(key: String): JsonNode {
+ return store[key] ?: throw BluePrintProcessorException("failed to get execution property($key)")
+ }
+
+ override fun cleanRuntime() {
+ store.clear()
+ }
+
+ private fun getJsonNode(key: String): JsonNode {
+ return get(key)
+ }
+
/*
Get the Node Type Definition for the Node Template, Then iterate Node Type Properties and resolve the expressing
*/
- open fun resolveNodeTemplateProperties(nodeTemplateName: String): MutableMap<String, Any?> {
+ override fun resolveNodeTemplateProperties(nodeTemplateName: String): MutableMap<String, JsonNode> {
log.info("resolveNodeTemplatePropertyValues for node template ({})", nodeTemplateName)
- val propertyAssignmentValue: MutableMap<String, Any?> = hashMapOf()
+ val propertyAssignmentValue: MutableMap<String, JsonNode> = hashMapOf()
val nodeTemplate: NodeTemplate = bluePrintContext.nodeTemplateByName(nodeTemplateName)
- val propertyAssignments: MutableMap<String, Any?> =
- nodeTemplate.properties as MutableMap<String, Any?>
+ val propertyAssignments: MutableMap<String, JsonNode> =
+ nodeTemplate.properties as MutableMap<String, JsonNode>
// Get the Node Type Definitions
val nodeTypeProperties: MutableMap<String, PropertyDefinition> =
@@ -65,7 +161,7 @@ open class BluePrintRuntimeService(var bluePrintContext: BluePrintContext, var c
var resolvedValue: JsonNode = NullNode.getInstance()
if (propertyAssignment != null) {
// Resolve the Expressing
- val propertyAssignmentExpression = PropertyAssignmentService(context, this)
+ val propertyAssignmentExpression = PropertyAssignmentService(this)
resolvedValue = propertyAssignmentExpression.resolveAssignmentExpression(nodeTemplateName, nodeTypePropertyName, propertyAssignment)
} else {
// Assign default value to the Operation
@@ -80,12 +176,12 @@ open class BluePrintRuntimeService(var bluePrintContext: BluePrintContext, var c
return propertyAssignmentValue
}
- open fun resolveNodeTemplateInterfaceOperationInputs(nodeTemplateName: String,
- interfaceName: String, operationName: String): MutableMap<String, Any?> {
+ override fun resolveNodeTemplateInterfaceOperationInputs(nodeTemplateName: String,
+ interfaceName: String, operationName: String): MutableMap<String, JsonNode> {
log.info("resolveNodeTemplateInterfaceOperationInputs for node template ({}),interface name ({}), " +
"operationName({})", nodeTemplateName, interfaceName, operationName)
- val propertyAssignmentValue: MutableMap<String, Any?> = hashMapOf()
+ val propertyAssignmentValue: MutableMap<String, JsonNode> = hashMapOf()
val propertyAssignments: MutableMap<String, Any> =
bluePrintContext.nodeTemplateInterfaceOperationInputs(nodeTemplateName, interfaceName, operationName) as? MutableMap<String, Any>
@@ -109,7 +205,7 @@ open class BluePrintRuntimeService(var bluePrintContext: BluePrintContext, var c
var resolvedValue: JsonNode = NullNode.getInstance()
if (propertyAssignment != null) {
// Resolve the Expressing
- val propertyAssignmentExpression = PropertyAssignmentService(context, this)
+ val propertyAssignmentExpression = PropertyAssignmentService(this)
resolvedValue = propertyAssignmentExpression.resolveAssignmentExpression(nodeTemplateName, nodeTypePropertyName, propertyAssignment)
} else {
// Assign default value to the Operation
@@ -127,12 +223,12 @@ open class BluePrintRuntimeService(var bluePrintContext: BluePrintContext, var c
}
- open fun resolveNodeTemplateInterfaceOperationOutputs(nodeTemplateName: String,
- interfaceName: String, operationName: String): MutableMap<String, Any?> {
+ override fun resolveNodeTemplateInterfaceOperationOutputs(nodeTemplateName: String,
+ interfaceName: String, operationName: String): MutableMap<String, JsonNode> {
log.info("resolveNodeTemplateInterfaceOperationOutputs for node template ({}),interface name ({}), " +
"operationName({})", nodeTemplateName, interfaceName, operationName)
- val propertyAssignmentValue: MutableMap<String, Any?> = hashMapOf()
+ val propertyAssignmentValue: MutableMap<String, JsonNode> = hashMapOf()
val propertyAssignments: MutableMap<String, Any> =
bluePrintContext.nodeTemplateInterfaceOperationOutputs(nodeTemplateName, interfaceName, operationName) as? MutableMap<String, Any>
@@ -155,7 +251,7 @@ open class BluePrintRuntimeService(var bluePrintContext: BluePrintContext, var c
var resolvedValue: JsonNode = NullNode.getInstance()
if (propertyAssignment != null) {
// Resolve the Expressing
- val propertyAssignmentExpression = PropertyAssignmentService(context, this)
+ val propertyAssignmentExpression = PropertyAssignmentService(this)
resolvedValue = propertyAssignmentExpression.resolveAssignmentExpression(nodeTemplateName, nodeTypePropertyName, propertyAssignment)
} else {
// Assign default value to the Operation
@@ -173,131 +269,131 @@ open class BluePrintRuntimeService(var bluePrintContext: BluePrintContext, var c
return propertyAssignmentValue
}
- open fun resolveNodeTemplateArtifact(nodeTemplateName: String,
- artifactName: String): String {
+ override fun resolveNodeTemplateArtifact(nodeTemplateName: String,
+ artifactName: String): String {
val nodeTemplate = bluePrintContext.nodeTemplateByName(nodeTemplateName)
val artifactDefinition: ArtifactDefinition = nodeTemplate.artifacts?.get(artifactName)
?: throw BluePrintProcessorException(String.format("failed to get artifat definition {} from the node template"
, artifactName))
- val propertyAssignmentExpression = PropertyAssignmentService(context, this)
+ val propertyAssignmentExpression = PropertyAssignmentService(this)
return propertyAssignmentExpression.artifactContent(artifactDefinition)
}
- open fun setInputValue(propertyName: String, propertyDefinition: PropertyDefinition, value: JsonNode) {
+ override fun setInputValue(propertyName: String, propertyDefinition: PropertyDefinition, value: JsonNode) {
val path = StringBuilder(BluePrintConstants.PATH_INPUTS)
.append(BluePrintConstants.PATH_DIVIDER).append(propertyName).toString()
log.trace("setting input path ({}), values ({})", path, value)
- context[path] = value
+ put(path, value)
}
- open fun setWorkflowInputValue(workflowName: String, propertyName: String, value: JsonNode) {
+ override fun setWorkflowInputValue(workflowName: String, propertyName: String, propertyDefinition: PropertyDefinition, value: JsonNode) {
val path: String = StringBuilder(BluePrintConstants.PATH_NODE_WORKFLOWS).append(BluePrintConstants.PATH_DIVIDER).append(workflowName)
.append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_INPUTS)
.append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_PROPERTIES)
.append(BluePrintConstants.PATH_DIVIDER).append(propertyName).toString()
- context[path] = value
+ put(path, value)
}
- open fun setNodeTemplatePropertyValue(nodeTemplateName: String, propertyName: String, value: JsonNode) {
+ override fun setNodeTemplatePropertyValue(nodeTemplateName: String, propertyName: String, value: JsonNode) {
val path: String = StringBuilder(BluePrintConstants.PATH_NODE_TEMPLATES).append(BluePrintConstants.PATH_DIVIDER).append(nodeTemplateName)
.append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_PROPERTIES)
.append(BluePrintConstants.PATH_DIVIDER).append(propertyName).toString()
- context[path] = value
+ put(path, value)
}
- open fun setNodeTemplateAttributeValue(nodeTemplateName: String, attributeName: String, value: JsonNode) {
+ override fun setNodeTemplateAttributeValue(nodeTemplateName: String, attributeName: String, value: JsonNode) {
val path: String = StringBuilder(BluePrintConstants.PATH_NODE_TEMPLATES).append(BluePrintConstants.PATH_DIVIDER).append(nodeTemplateName)
.append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_ATTRIBUTES)
.append(BluePrintConstants.PATH_DIVIDER).append(attributeName).toString()
- context[path] = value
+ put(path, value)
}
- open fun setNodeTemplateOperationPropertyValue(nodeTemplateName: String, interfaceName: String, operationName: String, propertyName: String,
- value: JsonNode) {
+ override fun setNodeTemplateOperationPropertyValue(nodeTemplateName: String, interfaceName: String, operationName: String, propertyName: String,
+ value: JsonNode) {
val path: String = StringBuilder(BluePrintConstants.PATH_NODE_TEMPLATES).append(BluePrintConstants.PATH_DIVIDER).append(nodeTemplateName)
.append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_INTERFACES).append(BluePrintConstants.PATH_DIVIDER).append(interfaceName)
.append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_OPERATIONS).append(BluePrintConstants.PATH_DIVIDER).append(operationName)
.append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_PROPERTIES)
.append(BluePrintConstants.PATH_DIVIDER).append(propertyName).toString()
log.trace("setting operation property path ({}), values ({})", path, value)
- context[path] = value
+ put(path, value)
}
- open fun setNodeTemplateOperationInputValue(nodeTemplateName: String, interfaceName: String, operationName: String, propertyName: String,
- value: JsonNode) {
+ override fun setNodeTemplateOperationInputValue(nodeTemplateName: String, interfaceName: String, operationName: String, propertyName: String,
+ value: JsonNode) {
val path: String = StringBuilder(BluePrintConstants.PATH_NODE_TEMPLATES).append(BluePrintConstants.PATH_DIVIDER).append(nodeTemplateName)
.append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_INTERFACES).append(BluePrintConstants.PATH_DIVIDER).append(interfaceName)
.append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_OPERATIONS).append(BluePrintConstants.PATH_DIVIDER).append(operationName)
.append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_INPUTS)
.append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_PROPERTIES)
.append(BluePrintConstants.PATH_DIVIDER).append(propertyName).toString()
- context[path] = value
+ put(path, value)
}
- open fun setNodeTemplateOperationOutputValue(nodeTemplateName: String, interfaceName: String, operationName: String, propertyName: String,
- value: JsonNode) {
+ override fun setNodeTemplateOperationOutputValue(nodeTemplateName: String, interfaceName: String, operationName: String, propertyName: String,
+ value: JsonNode) {
val path: String = StringBuilder(BluePrintConstants.PATH_NODE_TEMPLATES).append(BluePrintConstants.PATH_DIVIDER).append(nodeTemplateName)
.append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_INTERFACES).append(BluePrintConstants.PATH_DIVIDER).append(interfaceName)
.append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_OPERATIONS).append(BluePrintConstants.PATH_DIVIDER).append(operationName)
.append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_OUTPUTS)
.append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_PROPERTIES)
.append(BluePrintConstants.PATH_DIVIDER).append(propertyName).toString()
- context[path] = value
+ put(path, value)
}
- open fun getInputValue(propertyName: String): JsonNode {
+ override fun getInputValue(propertyName: String): JsonNode {
val path = StringBuilder(BluePrintConstants.PATH_INPUTS)
.append(BluePrintConstants.PATH_DIVIDER).append(propertyName).toString()
- return context[path] as? JsonNode ?: NullNode.instance
+ return getJsonNode(path)
}
- open fun getNodeTemplateOperationOutputValue(nodeTemplateName: String, interfaceName: String, operationName: String, propertyName: String): JsonNode {
+ override fun getNodeTemplateOperationOutputValue(nodeTemplateName: String, interfaceName: String, operationName: String, propertyName: String): JsonNode {
val path: String = StringBuilder(BluePrintConstants.PATH_NODE_TEMPLATES).append(BluePrintConstants.PATH_DIVIDER).append(nodeTemplateName)
.append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_INTERFACES).append(BluePrintConstants.PATH_DIVIDER).append(interfaceName)
.append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_OPERATIONS).append(BluePrintConstants.PATH_DIVIDER).append(operationName)
.append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_OUTPUTS).append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_PROPERTIES)
.append(BluePrintConstants.PATH_DIVIDER).append(propertyName).toString()
- return context[path] as JsonNode
+ return getJsonNode(path)
}
- open fun getNodeTemplatePropertyValue(nodeTemplateName: String, propertyName: String): JsonNode? {
+ override fun getNodeTemplatePropertyValue(nodeTemplateName: String, propertyName: String): JsonNode {
val path: String = StringBuilder(BluePrintConstants.PATH_NODE_TEMPLATES).append(BluePrintConstants.PATH_DIVIDER).append(nodeTemplateName)
.append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_PROPERTIES)
.append(BluePrintConstants.PATH_DIVIDER).append(propertyName).toString()
- return context[path] as JsonNode
+ return getJsonNode(path)
}
- open fun getNodeTemplateAttributeValue(nodeTemplateName: String, attributeName: String): JsonNode? {
+ override fun getNodeTemplateAttributeValue(nodeTemplateName: String, attributeName: String): JsonNode {
val path: String = StringBuilder(BluePrintConstants.PATH_NODE_TEMPLATES).append(BluePrintConstants.PATH_DIVIDER).append(nodeTemplateName)
.append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_ATTRIBUTES)
.append(BluePrintConstants.PATH_DIVIDER).append(attributeName).toString()
- return context[path] as JsonNode
+ return getJsonNode(path)
}
- open fun getNodeTemplateRequirementPropertyValue(nodeTemplateName: String, requirementName: String, propertyName:
- String): JsonNode? {
+ override fun getNodeTemplateRequirementPropertyValue(nodeTemplateName: String, requirementName: String, propertyName:
+ String): JsonNode {
val path: String = StringBuilder(BluePrintConstants.PATH_NODE_TEMPLATES).append(BluePrintConstants.PATH_DIVIDER).append(nodeTemplateName)
.append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_REQUIREMENTS).append(requirementName)
.append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_PROPERTIES)
.append(BluePrintConstants.PATH_DIVIDER).append(propertyName).toString()
- return context[path] as JsonNode
+ return getJsonNode(path)
}
- open fun getNodeTemplateCapabilityPropertyValue(nodeTemplateName: String, capabilityName: String, propertyName:
- String): JsonNode? {
+ override fun getNodeTemplateCapabilityPropertyValue(nodeTemplateName: String, capabilityName: String, propertyName:
+ String): JsonNode {
val path: String = StringBuilder(BluePrintConstants.PATH_NODE_TEMPLATES).append(BluePrintConstants.PATH_DIVIDER).append(nodeTemplateName)
.append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_CAPABILITIES).append(capabilityName)
.append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_PROPERTIES)
.append(BluePrintConstants.PATH_DIVIDER).append(propertyName).toString()
- return context[path] as JsonNode
+ return getJsonNode(path)
}
- open fun assignInputs(jsonNode: JsonNode) {
+ override fun assignInputs(jsonNode: JsonNode) {
log.info("assignInputs from input JSON ({})", jsonNode.toString())
bluePrintContext.inputs?.forEach { propertyName, property ->
val valueNode: JsonNode = jsonNode.at(BluePrintConstants.PATH_DIVIDER + propertyName)
@@ -306,27 +402,28 @@ open class BluePrintRuntimeService(var bluePrintContext: BluePrintContext, var c
}
}
- open fun assignWorkflowInputs(workflowName: String, jsonNode: JsonNode) {
+ override fun assignWorkflowInputs(workflowName: String, jsonNode: JsonNode) {
log.info("assign workflow {} input value ({})", workflowName, jsonNode.toString())
- bluePrintContext.workflowByName(workflowName)?.inputs?.forEach { propertyName, _ ->
+
+ bluePrintContext.workflowByName(workflowName).inputs?.forEach { propertyName, property ->
val valueNode: JsonNode = jsonNode.at(BluePrintConstants.PATH_DIVIDER + propertyName)
?: NullNode.getInstance()
- setWorkflowInputValue(workflowName, propertyName, valueNode)
+ setInputValue(propertyName, property, valueNode)
}
}
- open fun getJsonForNodeTemplateAttributeProperties(nodeTemplateName: String, keys: List<String>): JsonNode {
+ override fun getJsonForNodeTemplateAttributeProperties(nodeTemplateName: String, keys: List<String>): JsonNode {
val jsonNode: ObjectNode = jacksonObjectMapper().createObjectNode()
val path: String = StringBuilder(BluePrintConstants.PATH_NODE_TEMPLATES).append(BluePrintConstants.PATH_DIVIDER).append(nodeTemplateName)
.append(BluePrintConstants.PATH_DIVIDER).append(BluePrintConstants.PATH_ATTRIBUTES)
.append(BluePrintConstants.PATH_DIVIDER).toString()
- context.keys.filter {
+ store.keys.filter {
it.startsWith(path)
}.map {
val key = it.replace(path, "")
if (keys.contains(key)) {
- val value = context[it] as JsonNode
+ val value = store[it] as JsonNode
jsonNode.set(key, value)
}
}
diff --git a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintValidatorService.kt b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintValidatorService.kt
index 7ad38332a..178373704 100644
--- a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintValidatorService.kt
+++ b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintValidatorService.kt
@@ -17,13 +17,13 @@
package org.onap.ccsdk.apps.controllerblueprints.core.service
+import com.att.eelf.configuration.EELFLogger
+import com.att.eelf.configuration.EELFManager
import com.fasterxml.jackson.databind.JsonNode
import com.google.common.base.Preconditions
import org.apache.commons.lang3.StringUtils
import org.onap.ccsdk.apps.controllerblueprints.core.*
import org.onap.ccsdk.apps.controllerblueprints.core.data.*
-import com.att.eelf.configuration.EELFLogger
-import com.att.eelf.configuration.EELFManager
import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils
import java.io.Serializable
@@ -530,7 +530,7 @@ open class BluePrintValidatorDefaultService : BluePrintValidatorService {
open fun checkValidArtifactType(artifactDefinitionName: String, artifactTypeName: String) {
val artifactType = serviceTemplate.artifactTypes?.get(artifactTypeName)
- ?: throw BluePrintException(format("Failed to ArtifactType for ArtifactDefinition : {}", artifactDefinitionName))
+ ?: throw BluePrintException("failed to artifactType($artifactTypeName) for ArtifactDefinition($artifactDefinitionName)")
checkValidArtifactTypeDerivedFrom(artifactTypeName, artifactType.derivedFrom)
}
@@ -538,14 +538,14 @@ open class BluePrintValidatorDefaultService : BluePrintValidatorService {
@Throws(BluePrintException::class)
open fun checkValidArtifactTypeDerivedFrom(artifactTypeName: String, derivedFrom: String) {
check(BluePrintTypes.validArtifactTypeDerivedFroms.contains(derivedFrom)) {
- throw BluePrintException(format("Failed to get ArtifactType ({})'s derivedFrom({}) definition ", artifactTypeName, derivedFrom))
+ throw BluePrintException("failed to get artifactType($artifactTypeName)'s derivedFrom($derivedFrom) definition")
}
}
@Throws(BluePrintException::class)
open fun checkValidDataTypeDerivedFrom(dataTypeName: String, derivedFrom: String) {
check(BluePrintTypes.validDataTypeDerivedFroms.contains(derivedFrom)) {
- throw BluePrintException(format("Failed to get DataType ({})'s derivedFrom({}) definition ", dataTypeName, derivedFrom))
+ throw BluePrintException(format("Failed to get DataType({})'s derivedFrom({}) definition ", dataTypeName, derivedFrom))
}
}
diff --git a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/PropertyAssignmentService.kt b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/PropertyAssignmentService.kt
index 131bb30ae..947eb41e0 100644
--- a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/PropertyAssignmentService.kt
+++ b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/PropertyAssignmentService.kt
@@ -18,6 +18,8 @@
package org.onap.ccsdk.apps.controllerblueprints.core.service
+import com.att.eelf.configuration.EELFLogger
+import com.att.eelf.configuration.EELFManager
import com.fasterxml.jackson.databind.JsonNode
import com.fasterxml.jackson.databind.node.NullNode
import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants
@@ -26,19 +28,16 @@ import org.onap.ccsdk.apps.controllerblueprints.core.data.*
import org.onap.ccsdk.apps.controllerblueprints.core.format
import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils
import org.onap.ccsdk.apps.controllerblueprints.core.utils.ResourceResolverUtils
-import com.att.eelf.configuration.EELFLogger
-import com.att.eelf.configuration.EELFManager
/**
*
*
* @author Brinda Santh
*/
-class PropertyAssignmentService(var context: MutableMap<String, Any>,
- var bluePrintRuntimeService: BluePrintRuntimeService) {
+class PropertyAssignmentService(var bluePrintRuntimeService: BluePrintRuntimeService<MutableMap<String, JsonNode>>) {
private val log: EELFLogger = EELFManager.getInstance().getLogger(this::class.toString())
- private var bluePrintContext: BluePrintContext = bluePrintRuntimeService.bluePrintContext
+ private var bluePrintContext: BluePrintContext = bluePrintRuntimeService.bluePrintContext()
/*
@@ -198,8 +197,8 @@ If Property Assignment is Expression.
}
fun artifactContent(artifactDefinition: ArtifactDefinition): String {
- val bluePrintBasePath: String = context[BluePrintConstants.PROPERTY_BLUEPRINT_BASE_PATH] as? String
- ?: throw BluePrintException(format("failed to get property (%s) from context", BluePrintConstants.PROPERTY_BLUEPRINT_BASE_PATH))
+ val bluePrintBasePath: String = bluePrintRuntimeService.get(BluePrintConstants.PROPERTY_BLUEPRINT_BASE_PATH)?.asText()
+ ?: throw BluePrintException("failed to get property (${BluePrintConstants.PROPERTY_BLUEPRINT_BASE_PATH}) from getStore")
if (artifactDefinition.repository != null) {
TODO()
diff --git a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/BluePrintMetadataUtils.kt b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/BluePrintMetadataUtils.kt
index b7f9fc7e6..320c306c3 100644
--- a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/BluePrintMetadataUtils.kt
+++ b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/BluePrintMetadataUtils.kt
@@ -17,11 +17,17 @@
package org.onap.ccsdk.apps.controllerblueprints.core.utils
+import com.att.eelf.configuration.EELFLogger
+import com.att.eelf.configuration.EELFManager
+import com.fasterxml.jackson.databind.JsonNode
import org.apache.commons.io.FileUtils
import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants
+import org.onap.ccsdk.apps.controllerblueprints.core.asJsonPrimitive
import org.onap.ccsdk.apps.controllerblueprints.core.data.ToscaMetaData
-import com.att.eelf.configuration.EELFLogger
-import com.att.eelf.configuration.EELFManager
+import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintContext
+import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintImportService
+import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintRuntimeService
+import org.onap.ccsdk.apps.controllerblueprints.core.service.DefaultBluePrintRuntimeService
import java.io.File
import java.nio.charset.Charset
@@ -57,39 +63,46 @@ object BluePrintMetadataUtils {
return toscaMetaData
}
- /*
+ @JvmStatic
fun getBluePrintContext(blueprintBasePath: String): BluePrintContext {
- val metaDataFile = StringBuilder().append(blueprintBasePath).append(File.separator)
- .append(BluePrintConstants.DEFAULT_TOSCA_METADATA_ENTRY_DEFINITION_FILE).toString()
-
- val toscaMetaData: ToscaMetaData = BluePrintMetadataUtils.toscaMetaData(metaDataFile)
+ val toscaMetaData: ToscaMetaData = toscaMetaData(blueprintBasePath)
- log.info("Processing blueprint base path ({}) and entry definition file ({})", blueprintBasePath, toscaMetaData.entityDefinitions)
+ log.info("Processing blueprint base path ($blueprintBasePath) and entry definition file (${toscaMetaData.entityDefinitions})")
- return BluePrintParserFactory.instance(BluePrintConstants.TYPE_DEFAULT)!!
- .readBlueprintFile(toscaMetaData.entityDefinitions!!, blueprintBasePath)
+ return readBlueprintFile(toscaMetaData.entityDefinitions, blueprintBasePath)
}
- fun getBluePrintRuntime(requestId: String, blueprintBasePath: String): BluePrintRuntimeService {
-
- val metaDataFile = StringBuilder().append(blueprintBasePath).append(File.separator)
- .append(BluePrintConstants.DEFAULT_TOSCA_METADATA_ENTRY_DEFINITION_FILE).toString()
-
- val toscaMetaData: ToscaMetaData = BluePrintMetadataUtils.toscaMetaData(metaDataFile)
+ @JvmStatic
+ fun getBluePrintRuntime(id: String, blueprintBasePath: String): BluePrintRuntimeService<MutableMap<String, JsonNode>> {
- log.info("Processing blueprint base path ({}) and entry definition file ({})", blueprintBasePath, toscaMetaData.entityDefinitions)
+ val bluePrintContext: BluePrintContext = getBluePrintContext(blueprintBasePath)
- val bluePrintContext: BluePrintContext = BluePrintParserFactory.instance(BluePrintConstants.TYPE_DEFAULT)!!
- .readBlueprintFile(toscaMetaData.entityDefinitions!!, blueprintBasePath)
+ val context: MutableMap<String, JsonNode> = hashMapOf()
+ context[BluePrintConstants.PROPERTY_BLUEPRINT_BASE_PATH] = blueprintBasePath.asJsonPrimitive()
+ context[BluePrintConstants.PROPERTY_BLUEPRINT_PROCESS_ID] = id.asJsonPrimitive()
- val context: MutableMap<String, Any> = hashMapOf()
- context[BluePrintConstants.PROPERTY_BLUEPRINT_BASE_PATH] = blueprintBasePath
- context[BluePrintConstants.PROPERTY_BLUEPRINT_PROCESS_ID] = requestId
+ val bluePrintRuntimeService = DefaultBluePrintRuntimeService(id, bluePrintContext)
+ bluePrintRuntimeService.setExecutionContext(context)
- val bluePrintRuntimeService: BluePrintRuntimeService = BluePrintRuntimeService(bluePrintContext, context)
+ return bluePrintRuntimeService
+ }
+ @JvmStatic
+ fun getBluePrintRuntime(id: String, blueprintBasePath: String, executionContext: MutableMap<String, JsonNode>): BluePrintRuntimeService<MutableMap<String, JsonNode>> {
+ val bluePrintContext: BluePrintContext = getBluePrintContext(blueprintBasePath)
+ val bluePrintRuntimeService = DefaultBluePrintRuntimeService(id, bluePrintContext)
+ bluePrintRuntimeService.setExecutionContext(executionContext)
return bluePrintRuntimeService
}
- */
+
+ @JvmStatic
+ fun readBlueprintFile(entityDefinitions: String, basePath: String): BluePrintContext {
+ val rootFilePath: String = basePath.plus(File.separator).plus(entityDefinitions)
+ val rootServiceTemplate = ServiceTemplateUtils.getServiceTemplate(rootFilePath)
+ // Recursively Import Template files
+ val schemaImportResolverUtils = BluePrintImportService(rootServiceTemplate, basePath)
+ val completeServiceTemplate = schemaImportResolverUtils.getImportResolvedServiceTemplate()
+ return BluePrintContext(completeServiceTemplate)
+ }
} \ No newline at end of file
diff --git a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/BluePrintRuntimeUtils.kt b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/BluePrintRuntimeUtils.kt
index 0e4c3e3e8..4501275cf 100644
--- a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/BluePrintRuntimeUtils.kt
+++ b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/BluePrintRuntimeUtils.kt
@@ -16,12 +16,12 @@
package org.onap.ccsdk.apps.controllerblueprints.core.utils
+import com.att.eelf.configuration.EELFLogger
+import com.att.eelf.configuration.EELFManager
import com.fasterxml.jackson.databind.JsonNode
import com.fasterxml.jackson.databind.node.NullNode
import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants
import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintContext
-import com.att.eelf.configuration.EELFLogger
-import com.att.eelf.configuration.EELFManager
/**
*
@@ -31,17 +31,23 @@ import com.att.eelf.configuration.EELFManager
object BluePrintRuntimeUtils {
private val log: EELFLogger = EELFManager.getInstance().getLogger(this::class.toString())
- fun assignInputsFromFile(bluePrintContext: BluePrintContext, fileName: String, context: MutableMap<String, Any>) {
+ fun assignInputsFromFile(bluePrintContext: BluePrintContext, fileName: String, context: MutableMap<String, JsonNode>) {
val jsonNode: JsonNode = JacksonUtils.jsonNodeFromFile(fileName)
return assignInputs(bluePrintContext, jsonNode, context)
}
- fun assignInputsFromContent(bluePrintContext: BluePrintContext, content: String, context: MutableMap<String, Any>) {
+ fun assignInputsFromClassPathFile(bluePrintContext: BluePrintContext, fileName: String, context: MutableMap<String,
+ JsonNode>) {
+ val jsonNode = JacksonUtils.jsonNodeFromClassPathFile(fileName)
+ return assignInputs(bluePrintContext, jsonNode, context)
+ }
+
+ fun assignInputsFromContent(bluePrintContext: BluePrintContext, content: String, context: MutableMap<String, JsonNode>) {
val jsonNode: JsonNode = JacksonUtils.jsonNode(content)
return assignInputs(bluePrintContext, jsonNode, context)
}
- fun assignInputs(bluePrintContext: BluePrintContext, jsonNode: JsonNode, context: MutableMap<String, Any>) {
+ fun assignInputs(bluePrintContext: BluePrintContext, jsonNode: JsonNode, context: MutableMap<String, JsonNode>) {
log.info("assignInputs from input JSON ({})", jsonNode.toString())
bluePrintContext.inputs?.forEach { propertyName, _ ->
val valueNode: JsonNode = jsonNode.at("/".plus(propertyName)) ?: NullNode.getInstance()
diff --git a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/ServiceTemplateUtils.kt b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/ServiceTemplateUtils.kt
index 0d739357c..0249e20b1 100644
--- a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/ServiceTemplateUtils.kt
+++ b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/ServiceTemplateUtils.kt
@@ -18,6 +18,7 @@ package org.onap.ccsdk.apps.controllerblueprints.core.utils
import org.apache.commons.io.FileUtils
import org.onap.ccsdk.apps.controllerblueprints.core.data.ServiceTemplate
+import org.onap.ccsdk.apps.controllerblueprints.core.data.TopologyTemplate
import java.io.File
import java.nio.charset.Charset
@@ -40,5 +41,70 @@ object ServiceTemplateUtils {
return JacksonUtils.readValue(content)
}
+ fun merge(parentServiceTemplate: ServiceTemplate, toMerge: ServiceTemplate, removeImports: Boolean? = true): ServiceTemplate {
+ if (removeImports!!) {
+ parentServiceTemplate.imports = null
+ toMerge.imports = null
+ }
+
+ toMerge.metadata?.let {
+ parentServiceTemplate.metadata = parentServiceTemplate.metadata ?: hashMapOf()
+ parentServiceTemplate.metadata?.putAll(toMerge.metadata as MutableMap)
+ }
+
+ toMerge.dslDefinitions?.let {
+ parentServiceTemplate.dslDefinitions = parentServiceTemplate.dslDefinitions ?: hashMapOf()
+ parentServiceTemplate.dslDefinitions?.putAll(toMerge.dslDefinitions as MutableMap)
+ }
+
+ toMerge.dataTypes?.let {
+ parentServiceTemplate.dataTypes = parentServiceTemplate.dataTypes ?: hashMapOf()
+ parentServiceTemplate.dataTypes?.putAll(toMerge.dataTypes as MutableMap)
+ }
+
+ toMerge.nodeTypes?.let {
+ parentServiceTemplate.nodeTypes = parentServiceTemplate.nodeTypes ?: hashMapOf()
+ parentServiceTemplate.nodeTypes?.putAll(toMerge.nodeTypes as MutableMap)
+ }
+
+ toMerge.artifactTypes?.let {
+ parentServiceTemplate.artifactTypes = parentServiceTemplate.artifactTypes ?: hashMapOf()
+ parentServiceTemplate.artifactTypes?.putAll(toMerge.artifactTypes as MutableMap)
+ }
+
+ toMerge.repositories?.let {
+ parentServiceTemplate.repositories = parentServiceTemplate.repositories ?: hashMapOf()
+ parentServiceTemplate.repositories?.putAll(toMerge.repositories as MutableMap)
+ }
+
+ parentServiceTemplate.topologyTemplate = parentServiceTemplate.topologyTemplate ?: TopologyTemplate()
+
+ toMerge.topologyTemplate?.inputs?.let {
+ parentServiceTemplate.topologyTemplate?.inputs = parentServiceTemplate.topologyTemplate?.inputs ?: hashMapOf()
+ parentServiceTemplate.topologyTemplate?.inputs?.putAll(parentServiceTemplate.topologyTemplate?.inputs as MutableMap)
+ }
+
+ toMerge.topologyTemplate?.nodeTemplates?.let {
+ parentServiceTemplate.topologyTemplate?.nodeTemplates = parentServiceTemplate.topologyTemplate?.nodeTemplates ?: hashMapOf()
+ parentServiceTemplate.topologyTemplate?.nodeTemplates?.putAll(parentServiceTemplate.topologyTemplate?.nodeTemplates as MutableMap)
+ }
+
+ toMerge.topologyTemplate?.relationshipTemplates?.let {
+ parentServiceTemplate.topologyTemplate?.relationshipTemplates = parentServiceTemplate.topologyTemplate?.relationshipTemplates ?: hashMapOf()
+ parentServiceTemplate.topologyTemplate?.relationshipTemplates?.putAll(parentServiceTemplate.topologyTemplate?.relationshipTemplates as MutableMap)
+ }
+
+ toMerge.topologyTemplate?.policies?.let {
+ parentServiceTemplate.topologyTemplate?.policies = parentServiceTemplate.topologyTemplate?.policies ?: hashMapOf()
+ parentServiceTemplate.topologyTemplate?.policies?.putAll(parentServiceTemplate.topologyTemplate?.policies as MutableMap)
+ }
+
+ toMerge.topologyTemplate?.workflows?.let {
+ parentServiceTemplate.topologyTemplate?.workflows = parentServiceTemplate.topologyTemplate?.workflows ?: hashMapOf()
+ parentServiceTemplate.topologyTemplate?.workflows?.putAll(parentServiceTemplate.topologyTemplate?.workflows as MutableMap)
+ }
+ return parentServiceTemplate
+ }
+
} \ No newline at end of file
diff --git a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/TopologicalSortingUtils.kt b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/TopologicalSortingUtils.kt
index dcafa974c..9d6fe084a 100644
--- a/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/TopologicalSortingUtils.kt
+++ b/components/core/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/TopologicalSortingUtils.kt
@@ -64,7 +64,7 @@ class TopologicalSortingUtils<V> {
}
fun outDegree(): Map<V, Int> {
- var result: MutableMap<V, Int> = hashMapOf()
+ val result: MutableMap<V, Int> = hashMapOf()
for (v in neighbors.keys)
result[v] = neighbors[v]!!.size
return result
@@ -108,7 +108,7 @@ class TopologicalSortingUtils<V> {
fun bfsDistance(start: V): Map<*, *> {
- var distance: MutableMap<V, Int> = hashMapOf()
+ val distance: MutableMap<V, Int> = hashMapOf()
// Initially, all distance are infinity, except start node
for (v in neighbors.keys)
distance[v] = -1
diff --git a/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintContextTest.kt b/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintContextTest.kt
index 7a74ca476..6cfed3246 100644
--- a/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintContextTest.kt
+++ b/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintContextTest.kt
@@ -17,17 +17,13 @@
package org.onap.ccsdk.apps.controllerblueprints.core.service
-import org.apache.commons.io.FileUtils
-import org.junit.Before
-import org.junit.Test
-import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants
-import org.onap.ccsdk.apps.controllerblueprints.core.factory.BluePrintParserFactory
-import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils
import com.att.eelf.configuration.EELFLogger
import com.att.eelf.configuration.EELFManager
-import java.io.File
-import java.nio.charset.Charset
+import org.junit.Test
+import org.onap.ccsdk.apps.controllerblueprints.core.utils.BluePrintMetadataUtils
+import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils
import kotlin.test.assertNotNull
+
/**
*
*
@@ -37,30 +33,17 @@ class BluePrintContextTest {
private val log: EELFLogger = EELFManager.getInstance().getLogger(this::class.toString())
- lateinit var bluePrintContext: BluePrintContext
-
- @Before
- fun setUp() {
-
- val basepath = "load/blueprints"
-
- bluePrintContext = BluePrintParserFactory.instance(BluePrintConstants.TYPE_DEFAULT)!!
- .readBlueprintFile("baseconfiguration/Definitions/activation-blueprint.json", basepath)
- assertNotNull(bluePrintContext, "Failed to populate Blueprint context")
- }
+ val blueprintBasePath: String = ("./../model-catalog/blueprint-model/starter-blueprint/baseconfiguration")
@Test
- fun testBluePrintContextFromContent() {
- val fileName = "load/blueprints/baseconfiguration/Definitions/activation-blueprint.json"
- val content : String = FileUtils.readFileToString(File(fileName), Charset.defaultCharset())
- val bpContext = BluePrintParserFactory.instance(BluePrintConstants.TYPE_DEFAULT)!!
- .readBlueprint(content)
- assertNotNull(bpContext, "Failed to get blueprint content")
- assertNotNull(bpContext.serviceTemplate, "Failed to get blueprint content's service template")
+ fun testBluePrintContextCreation() {
+ val bluePrintContext = BluePrintMetadataUtils.getBluePrintContext(blueprintBasePath)
+ assertNotNull(bluePrintContext, "Failed to populate Blueprint context")
}
@Test
fun testChainedProperty() {
+ val bluePrintContext = BluePrintMetadataUtils.getBluePrintContext(blueprintBasePath)
val nodeType = bluePrintContext.nodeTypeChained("component-resource-assignment")
assertNotNull(nodeType, "Failed to get chained node type")
log.trace("Properties {}", JacksonUtils.getJson(nodeType, true))
diff --git a/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintParserFactoryTest.kt b/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintParserFactoryTest.kt
deleted file mode 100644
index 5a5557d75..000000000
--- a/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintParserFactoryTest.kt
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright © 2017-2018 AT&T Intellectual Property.
- *
- * 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.
- */
-
-package org.onap.ccsdk.apps.controllerblueprints.core.service
-
-import org.junit.Test
-import org.onap.ccsdk.apps.controllerblueprints.core.factory.BluePrintParserFactory
-import com.att.eelf.configuration.EELFLogger
-import com.att.eelf.configuration.EELFManager
-import kotlin.test.assertNotNull
-
-/**
- *
- *
- * @author Brinda Santh
- */
-class BluePrintParserFactoryTest {
- private val log: EELFLogger = EELFManager.getInstance().getLogger(this::class.toString())
-
- @Test
- fun testBluePrintJson() {
- val basepath = "load/blueprints"
-
- val bluePrintContext: BluePrintContext = BluePrintParserFactory.instance(org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants.TYPE_DEFAULT)!!
- .readBlueprintFile("baseconfiguration/Definitions/activation-blueprint.json", basepath)
- assertNotNull(bluePrintContext, "Failed to populate Blueprint context")
- log.trace("Blue Print {}",bluePrintContext.blueprintJson(true))
- }
-} \ No newline at end of file
diff --git a/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintRuntimeServiceTest.kt b/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintRuntimeServiceTest.kt
index f1980d279..19c6c2f9d 100644
--- a/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintRuntimeServiceTest.kt
+++ b/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintRuntimeServiceTest.kt
@@ -17,16 +17,17 @@
package org.onap.ccsdk.apps.controllerblueprints.core.service
+import com.att.eelf.configuration.EELFLogger
+import com.att.eelf.configuration.EELFManager
import com.fasterxml.jackson.databind.JsonNode
-import org.junit.Before
+import com.fasterxml.jackson.databind.node.NullNode
import org.junit.Test
import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants
-import org.onap.ccsdk.apps.controllerblueprints.core.factory.BluePrintParserFactory
+import org.onap.ccsdk.apps.controllerblueprints.core.asJsonPrimitive
+import org.onap.ccsdk.apps.controllerblueprints.core.utils.BluePrintMetadataUtils
import org.onap.ccsdk.apps.controllerblueprints.core.utils.BluePrintRuntimeUtils
import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils.jsonNodeFromFile
import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils.jsonNodeFromObject
-import com.att.eelf.configuration.EELFLogger
-import com.att.eelf.configuration.EELFManager
import kotlin.test.assertEquals
import kotlin.test.assertNotNull
@@ -37,13 +38,6 @@ import kotlin.test.assertNotNull
*/
class BluePrintRuntimeServiceTest {
private val log: EELFLogger = EELFManager.getInstance().getLogger(this::class.toString())
- val basepath = "load/blueprints"
-
-
- @Before
- fun setUp(): Unit {
-
- }
@Test
fun testResolveNodeTemplateProperties() {
@@ -56,40 +50,31 @@ class BluePrintRuntimeServiceTest {
val inputNode: JsonNode = jsonNodeFromFile(inputDataPath)
bluePrintRuntimeService.assignInputs(inputNode)
- val propContext: MutableMap<String, Any?> = bluePrintRuntimeService.resolveNodeTemplateProperties("resource-assignment-action")
- log.info("Context {}", bluePrintRuntimeService.context)
+ val propContext: MutableMap<String, JsonNode> = bluePrintRuntimeService.resolveNodeTemplateProperties("activate-process")
assertNotNull(propContext, "Failed to populate interface property values")
- assertEquals(propContext.get("mode"), jsonNodeFromObject("sync"), "Failed to populate parameter process-name")
- assertEquals(propContext.get("version"), jsonNodeFromObject("1.0.0"), "Failed to populate parameter version")
+ assertEquals(propContext["process-name"], jsonNodeFromObject("sample-action"), "Failed to populate parameter process-name")
+ assertEquals(propContext["version"], jsonNodeFromObject("sample-action"), "Failed to populate parameter version")
}
@Test
fun testResolveNodeTemplateInterfaceOperationInputs() {
log.info("************************ testResolveNodeTemplateInterfaceOperationInputs **********************")
- val bluePrintContext: BluePrintContext = BluePrintParserFactory.instance(BluePrintConstants.TYPE_DEFAULT)!!
- .readBlueprintFile("baseconfiguration/Definitions/activation-blueprint.json", basepath)
- assertNotNull(bluePrintContext, "Failed to populate Blueprint context")
-
- val context: MutableMap<String, Any> = hashMapOf()
- context[BluePrintConstants.PROPERTY_BLUEPRINT_BASE_PATH] = basepath.plus("/simple-baseconfig")
- val inputDataPath = "src/test/resources/data/default-context.json"
- BluePrintRuntimeUtils.assignInputsFromFile(bluePrintContext, inputDataPath, context)
-
-
- val bluePrintRuntimeService = BluePrintRuntimeService(bluePrintContext, context)
+ val bluePrintRuntimeService = getBluePrintRuntimeService()
- log.info("Prepared Context {}", context)
+ val executionContext = bluePrintRuntimeService.getExecutionContext()
- val inContext: MutableMap<String, Any?> = bluePrintRuntimeService.resolveNodeTemplateInterfaceOperationInputs("resource-assignment-ra-component",
- "org-onap-ccsdk-config-assignment-service-ConfigAssignmentNode", "process")
+ BluePrintRuntimeUtils.assignInputsFromClassPathFile(bluePrintRuntimeService.bluePrintContext(),
+ "data/default-context.json", executionContext)
- log.info("In Context {}", inContext)
+ val inContext: MutableMap<String, JsonNode> = bluePrintRuntimeService.resolveNodeTemplateInterfaceOperationInputs("resource-assignment",
+ "DefaultComponentNode", "process")
assertNotNull(inContext, "Failed to populate interface input property values")
- assertEquals(inContext.get("action-name"), jsonNodeFromObject("sample-action"), "Failed to populate parameter action-name")
- assertEquals(inContext.get("request-id"), jsonNodeFromObject("12345"), "Failed to populate parameter action-name")
+ assertEquals(inContext["action-name"], jsonNodeFromObject("sample-action"), "Failed to populate parameter action-name")
+ assertEquals(inContext["request-id"], jsonNodeFromObject("12345"), "Failed to populate parameter action-name")
+ assertEquals(inContext["template-content"], jsonNodeFromObject("This is Sample Velocity Template"), "Failed to populate parameter action-name")
}
@Test
@@ -98,24 +83,18 @@ class BluePrintRuntimeServiceTest {
val bluePrintRuntimeService = getBluePrintRuntimeService()
- val successValue: JsonNode = jsonNodeFromObject("Success")
- val paramValue: JsonNode = jsonNodeFromObject("param-content")
-
- bluePrintRuntimeService.setNodeTemplateAttributeValue("resource-assignment-ra-component", "params", paramValue)
+ bluePrintRuntimeService.setNodeTemplateAttributeValue("resource-assignment", "assignment-params", NullNode.getInstance())
- bluePrintRuntimeService.resolveNodeTemplateInterfaceOperationOutputs("resource-assignment-ra-component",
- "org-onap-ccsdk-config-assignment-service-ConfigAssignmentNode", "process")
+ bluePrintRuntimeService.resolveNodeTemplateInterfaceOperationOutputs("resource-assignment",
+ "DefaultComponentNode", "process")
- val resourceAssignmentParamsNode = bluePrintRuntimeService.getNodeTemplateOperationOutputValue("resource-assignment-ra-component",
- "org-onap-ccsdk-config-assignment-service-ConfigAssignmentNode", "process", "resource-assignment-params")
-
- val statusNode = bluePrintRuntimeService.getNodeTemplateOperationOutputValue("resource-assignment-ra-component",
- "org-onap-ccsdk-config-assignment-service-ConfigAssignmentNode", "process", "status")
-
- assertEquals(paramValue, resourceAssignmentParamsNode, "Failed to get operation property resource-assignment-params")
-
- assertEquals(successValue, statusNode, "Failed to get operation property status")
+ val outputStatus = bluePrintRuntimeService.getNodeTemplateOperationOutputValue("resource-assignment",
+ "DefaultComponentNode", "process", "status")
+ assertEquals("success".asJsonPrimitive(), outputStatus, "Failed to get operation property status")
+ val outputParams = bluePrintRuntimeService.getNodeTemplateOperationOutputValue("resource-assignment",
+ "DefaultComponentNode", "process", "resource-assignment-params")
+ assertEquals(NullNode.getInstance(), outputParams, "Failed to get operation property resource-assignment-params")
}
@@ -129,8 +108,6 @@ class BluePrintRuntimeServiceTest {
bluePrintRuntimeService.setNodeTemplateAttributeValue("resource-assignment-ra-component", "context2",
jsonNodeFromObject("context2-value"))
- log.info("Context {}", bluePrintRuntimeService.context)
-
val keys = listOf("context1", "context2")
val jsonValueNode = bluePrintRuntimeService.getJsonForNodeTemplateAttributeProperties("resource-assignment-ra-component", keys)
@@ -139,15 +116,14 @@ class BluePrintRuntimeServiceTest {
}
- private fun getBluePrintRuntimeService(): BluePrintRuntimeService {
- val bluePrintContext: BluePrintContext = BluePrintParserFactory.instance(BluePrintConstants.TYPE_DEFAULT)!!
- .readBlueprintFile("baseconfiguration/Definitions/activation-blueprint.json", basepath)
- assertNotNull(bluePrintContext, "Failed to populate Blueprint context")
+ private fun getBluePrintRuntimeService(): BluePrintRuntimeService<MutableMap<String, JsonNode>> {
+ val blueprintBasePath: String = ("./../model-catalog/blueprint-model/starter-blueprint/baseconfiguration")
+ val blueprintRuntime = BluePrintMetadataUtils.getBluePrintRuntime("1234", blueprintBasePath)
+ val checkBasePath = blueprintRuntime.get(BluePrintConstants.PROPERTY_BLUEPRINT_BASE_PATH)
- val context: MutableMap<String, Any> = hashMapOf()
- context[BluePrintConstants.PROPERTY_BLUEPRINT_BASE_PATH] = basepath.plus("/simple-baseconfig")
+ assertEquals(blueprintBasePath.asJsonPrimitive(), checkBasePath, "Failed to get base path after runtime creation")
- return BluePrintRuntimeService(bluePrintContext, context)
+ return blueprintRuntime
}
} \ No newline at end of file
diff --git a/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintValidatorDefaultServiceTest.kt b/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintValidatorDefaultServiceTest.kt
index b05fcb61b..09c58170f 100644
--- a/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintValidatorDefaultServiceTest.kt
+++ b/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/service/BluePrintValidatorDefaultServiceTest.kt
@@ -16,12 +16,11 @@
package org.onap.ccsdk.apps.controllerblueprints.core.service
-import org.junit.Before
-import org.junit.Test
-import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants
-import org.onap.ccsdk.apps.controllerblueprints.core.factory.BluePrintParserFactory
import com.att.eelf.configuration.EELFLogger
import com.att.eelf.configuration.EELFManager
+import org.junit.Before
+import org.junit.Test
+import org.onap.ccsdk.apps.controllerblueprints.core.utils.BluePrintMetadataUtils
/**
*
@@ -30,7 +29,6 @@ import com.att.eelf.configuration.EELFManager
*/
class BluePrintValidatorDefaultServiceTest {
private val log: EELFLogger = EELFManager.getInstance().getLogger(this::class.toString())
- val basepath = "load/blueprints"
@Before
fun setUp(): Unit {
@@ -39,11 +37,13 @@ class BluePrintValidatorDefaultServiceTest {
@Test
fun testValidateBluePrint() {
- val bluePrintContext: BluePrintContext = BluePrintParserFactory.instance(BluePrintConstants.TYPE_DEFAULT)!!
- .readBlueprintFile("baseconfiguration/Definitions/activation-blueprint.json", basepath)
- val properties : MutableMap<String, Any> = hashMapOf()
+
+ val blueprintBasePath: String = ("./../model-catalog/blueprint-model/starter-blueprint/baseconfiguration")
+ val bluePrintContext = BluePrintMetadataUtils.getBluePrintContext(blueprintBasePath)
+ val properties: MutableMap<String, Any> = hashMapOf()
+
val validatorService = BluePrintValidatorDefaultService()
- validatorService.validateBlueprint(bluePrintContext.serviceTemplate,properties)
+ validatorService.validateBlueprint(bluePrintContext.serviceTemplate, properties)
log.info("Validation Message {}", properties)
}
} \ No newline at end of file
diff --git a/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/BluePrintMetadataUtilsTest.kt b/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/BluePrintMetadataUtilsTest.kt
index ddb39a2d6..d5b184f6e 100644
--- a/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/BluePrintMetadataUtilsTest.kt
+++ b/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/BluePrintMetadataUtilsTest.kt
@@ -26,7 +26,7 @@ class BluePrintMetadataUtilsTest {
@Test
fun testToscaMetaData(){
- val basePath : String = "load/blueprints/baseconfiguration"
+ val basePath : String = "./../model-catalog/blueprint-model/starter-blueprint/baseconfiguration"
val toscaMetaData : ToscaMetaData = BluePrintMetadataUtils.toscaMetaData(basePath)
assertNotNull(toscaMetaData, "Missing Tosca Definition Object")
diff --git a/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/JacksonReactorUtilsTest.kt b/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/JacksonReactorUtilsTest.kt
index d13caa52c..be76593d8 100644
--- a/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/JacksonReactorUtilsTest.kt
+++ b/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/JacksonReactorUtilsTest.kt
@@ -29,16 +29,16 @@ class JacksonReactorUtilsTest {
@Test
fun testReadValues() {
- val serviceTemplate = JacksonReactorUtils.readValueFromFile("load/blueprints/baseconfiguration/Definitions/activation-blueprint.json",
+ val serviceTemplate = JacksonReactorUtils.readValueFromFile("./../model-catalog/blueprint-model/starter-blueprint/baseconfiguration/Definitions/activation-blueprint.json",
ServiceTemplate::class.java).block()
assertNotNull(serviceTemplate, "Failed to simple transform Service Template")
assertEquals(true, serviceTemplate is ServiceTemplate, "failed to get Service Template instance")
- val jsonContent = JacksonReactorUtils.getJson(serviceTemplate!!, true).block()
+ val jsonContent = JacksonReactorUtils.getJson(serviceTemplate, true).block()
assertNotNull(jsonContent, "Failed to get json content")
- val jsonNode = JacksonReactorUtils.jsonNodeFromFile("load/blueprints/baseconfiguration/Definitions/activation-blueprint.json")
+ val jsonNode = JacksonReactorUtils.jsonNodeFromFile("./../model-catalog/blueprint-model/starter-blueprint/baseconfiguration/Definitions/activation-blueprint.json")
.block()
assertNotNull(jsonContent, "Failed to get json Node")
}
diff --git a/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/JacksonUtilsTest.kt b/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/JacksonUtilsTest.kt
index a5a630e3c..b5edab0fa 100644
--- a/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/JacksonUtilsTest.kt
+++ b/components/core/src/test/kotlin/org/onap/ccsdk/apps/controllerblueprints/core/utils/JacksonUtilsTest.kt
@@ -17,12 +17,10 @@
package org.onap.ccsdk.apps.controllerblueprints.core.utils
-import org.junit.Test
-import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants
-import org.onap.ccsdk.apps.controllerblueprints.core.data.ServiceTemplate
import com.att.eelf.configuration.EELFLogger
import com.att.eelf.configuration.EELFManager
-import kotlin.test.assertEquals
+import org.junit.Test
+import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants
import kotlin.test.assertNotNull
import kotlin.test.assertTrue
@@ -35,19 +33,6 @@ class JacksonUtilsTest {
private val log: EELFLogger = EELFManager.getInstance().getLogger(this::class.toString())
- val basePath = "load/blueprints"
-
- @Test
- fun testReadValues() {
- val content = ResourceResolverUtils.getFileContent("baseconfiguration/Definitions/activation-blueprint.json", basePath)
- val serviceTemplate = JacksonUtils.readValue(content, ServiceTemplate::class.java)
- assertNotNull(serviceTemplate, "Failed to simple transform Service Template")
- assertEquals(true, serviceTemplate is ServiceTemplate, "failed to get Service Template instance")
-
- val jsonContent = JacksonUtils.getJson(serviceTemplate!!, true)
- assertNotNull(jsonContent, "Failed to get json content")
- }
-
@Test
fun testJsonNodeFromClassPathFile() {
val filePath = "data/default-context.json"
@@ -56,7 +41,7 @@ class JacksonUtilsTest {
@Test
fun testJsonNodeFromFile() {
- val filePath = basePath + "/baseconfiguration/Definitions/activation-blueprint.json"
+ val filePath = "src/test/resources/data/default-context.json"
JacksonUtils.jsonNodeFromFile(filePath)
}
diff --git a/components/core/src/test/resources/properties/convert.json b/components/core/src/test/resources/properties/convert.json
index af79915fa..966b02533 100644
--- a/components/core/src/test/resources/properties/convert.json
+++ b/components/core/src/test/resources/properties/convert.json
@@ -1,33 +1,36 @@
{
- "type": "sdnc-component-getResourceAssignment",
- "interfaces": {
- "ResourceAssignmentService": {
- "operations": {
- "getResourceAssignment": {
- "inputs": {
- "assignment-mappings": [
- {
- "name": "service-name",
- "mapping-field": "service",
- "mapping-category": "SDN",
- "required": true
- },
- {
- "name": "region-name",
- "mapping-field": "region",
- "mapping-category": "SDN",
- "required": true
- }
- ],
- "pre-data": { "get_input" : "get-resource-assignment.config-params" },
- "prifix": "get-resource-assignment"
- },
- "outputs": {
- "resource-assignment-status": "success",
- "resource-assignment-params": "{ \"set_value\" : \"get-resource-assignment.config-params" }
- }
- }
- }
- }
- }
+ "type": "sdnc-component-getResourceAssignment",
+ "interfaces": {
+ "ResourceAssignmentService": {
+ "operations": {
+ "getResourceAssignment": {
+ "inputs": {
+ "assignment-mappings": [
+ {
+ "name": "service-name",
+ "mapping-field": "service",
+ "mapping-category": "SDN",
+ "required": true
+ },
+ {
+ "name": "region-name",
+ "mapping-field": "region",
+ "mapping-category": "SDN",
+ "required": true
+ }
+ ],
+ "pre-data": {
+ "get_input": "get-resource-assignment.config-params"
+ },
+ "prifix": "get-resource-assignment"
+ },
+ "outputs": {
+ "resource-assignment-status": "success",
+ "resource-assignment-params": "{ \"set_value\" : \"get-resource-assignment.config-params"
+ }
+ }
+ }
+ }
+ }
}
+
diff --git a/components/model-catalog/blueprint-model/service-blueprint/vFW/Templates/base_template.vtl b/components/model-catalog/blueprint-model/service-blueprint/vFW/Templates/base_template.vtl
index 1f8298c5f..271c50738 100644
--- a/components/model-catalog/blueprint-model/service-blueprint/vFW/Templates/base_template.vtl
+++ b/components/model-catalog/blueprint-model/service-blueprint/vFW/Templates/base_template.vtl
@@ -52,5 +52,26 @@
"param-name": "vf_module_name",
"param-value": "${vnf-name}_base"
}
+ ],
+ "capability-data": [
+ {
+ "capability-name": "aai-vf-module-put",
+ "key-mapping": [
+ {
+ "payload": [
+ {
+ "param-name": "vf-module",
+ "param-value": "vf-module"
+ }
+ ],
+ "output-key-mapping": [
+ {
+ "resource-name": "aai-vf-module-put",
+ "resource-value": "${status}"
+ }
+ ]
+ }
+ ]
+ }
]
} \ No newline at end of file
diff --git a/components/model-catalog/blueprint-model/service-blueprint/vFW/Templates/vFW_vNF_Artifact.vtl b/components/model-catalog/blueprint-model/service-blueprint/vFW/Templates/vFW_vNF_Artifact.vtl
index ea6a7b885..f7947ef8f 100644
--- a/components/model-catalog/blueprint-model/service-blueprint/vFW/Templates/vFW_vNF_Artifact.vtl
+++ b/components/model-catalog/blueprint-model/service-blueprint/vFW/Templates/vFW_vNF_Artifact.vtl
@@ -198,6 +198,25 @@
]
}
]
+ },
+ {
+ "capability-name": "aai-vnf-put",
+ "key-mapping": [
+ {
+ "payload": [
+ {
+ "param-name": "generic-vnf",
+ "param-value": "generic-vnf"
+ }
+ ],
+ "output-key-mapping": [
+ {
+ "resource-name": "aai-vnf-put",
+ "resource-value": "${status}"
+ }
+ ]
+ }
+ ]
}
]
} \ No newline at end of file
diff --git a/components/model-catalog/blueprint-model/service-blueprint/vFW/Templates/vfw.vtl b/components/model-catalog/blueprint-model/service-blueprint/vFW/Templates/vfw.vtl
index 06a91d3a1..6864a36fe 100644
--- a/components/model-catalog/blueprint-model/service-blueprint/vFW/Templates/vfw.vtl
+++ b/components/model-catalog/blueprint-model/service-blueprint/vFW/Templates/vfw.vtl
@@ -18,7 +18,7 @@
},
{
"param-name": "vf_module_id",
- "param-value": "${vnf-id}"
+ "param-value": "${vf-module-id}"
},
{
"param-name": "vf_module_type",
@@ -283,6 +283,29 @@
]
},
{
+ "capability-name": "aai-vf-module-put",
+ "key-mapping": [
+ {
+ "payload": [
+ {
+ "param-name": "vf-module",
+ "param-value": "vf-module"
+ },
+ {
+ "param-name": "vnfc",
+ "param-value": "vnfc"
+ }
+ ],
+ "output-key-mapping": [
+ {
+ "resource-name": "aai-vf-module-put",
+ "resource-value": "${status}"
+ }
+ ]
+ }
+ ]
+ },
+ {
"capability-name": "unresolved-composite-data",
"key-mapping": [
{
diff --git a/components/model-catalog/blueprint-model/service-blueprint/vFW/Templates/vpg.vtl b/components/model-catalog/blueprint-model/service-blueprint/vFW/Templates/vpg.vtl
index f7e3780a3..2ff6596ee 100644
--- a/components/model-catalog/blueprint-model/service-blueprint/vFW/Templates/vpg.vtl
+++ b/components/model-catalog/blueprint-model/service-blueprint/vFW/Templates/vpg.vtl
@@ -291,6 +291,29 @@
]
},
{
+ "capability-name": "aai-vf-module-put",
+ "key-mapping": [
+ {
+ "payload": [
+ {
+ "param-name": "vf-module",
+ "param-value": "vf-module"
+ },
+ {
+ "param-name": "vnfc",
+ "param-value": "vnfc"
+ }
+ ],
+ "output-key-mapping": [
+ {
+ "resource-name": "aai-vf-module-put",
+ "resource-value": "${status}"
+ }
+ ]
+ }
+ ]
+ },
+ {
"capability-name": "unresolved-composite-data",
"key-mapping": [
{
diff --git a/components/model-catalog/blueprint-model/service-blueprint/vFW/Templates/vsn.vtl b/components/model-catalog/blueprint-model/service-blueprint/vFW/Templates/vsn.vtl
index 727427a63..11fcea9fd 100644
--- a/components/model-catalog/blueprint-model/service-blueprint/vFW/Templates/vsn.vtl
+++ b/components/model-catalog/blueprint-model/service-blueprint/vFW/Templates/vsn.vtl
@@ -279,6 +279,29 @@
]
},
{
+ "capability-name": "aai-vf-module-put",
+ "key-mapping": [
+ {
+ "payload": [
+ {
+ "param-name": "vf-module",
+ "param-value": "vf-module"
+ },
+ {
+ "param-name": "vnfc",
+ "param-value": "vnfc"
+ }
+ ],
+ "output-key-mapping": [
+ {
+ "resource-name": "aai-vf-module-put",
+ "resource-value": "${status}"
+ }
+ ]
+ }
+ ]
+ },
+ {
"capability-name": "unresolved-composite-data",
"key-mapping": [
{
diff --git a/components/model-catalog/blueprint-model/starter-blueprint/baseconfiguration/Definitions/activation-blueprint.json b/components/model-catalog/blueprint-model/starter-blueprint/baseconfiguration/Definitions/activation-blueprint.json
index 4c1ca4a52..ee02b3a77 100644
--- a/components/model-catalog/blueprint-model/starter-blueprint/baseconfiguration/Definitions/activation-blueprint.json
+++ b/components/model-catalog/blueprint-model/starter-blueprint/baseconfiguration/Definitions/activation-blueprint.json
@@ -1,12 +1,17 @@
{
"metadata": {
"template_author": "Brinda Santh Muthuramalingam",
- "author-email": "brindasanth@gmail.com",
+ "author-email": "brindasanth@in.ibm.com",
"user-groups": "ADMIN, OPERATION",
"template_name": "baseconfiguration",
"template_version": "1.0.0",
"template_tags": "brinda, tosca"
},
+ "imports": [
+ {
+ "file": "Definitions/types.json"
+ }
+ ],
"topology_template": {
"inputs": {
"request-id": {
@@ -28,7 +33,7 @@
},
"node_templates": {
"activate-process": {
- "type": "bpmn-activate",
+ "type": "dg-activate",
"properties": {
"process-name": {
"get_input": "action-name"
@@ -42,13 +47,13 @@
"content": {
"get_artifact": [
"SELF",
- "activate-process"
+ "dg-activate-process"
]
}
},
"artifacts": {
- "activate-process": {
- "type": "artifact-bpmn-camunda",
+ "dg-activate-process": {
+ "type": "artifact-directed-graph",
"file": "Plans/ActivateProcess.bpmn"
}
}
@@ -87,8 +92,13 @@
}
},
"outputs": {
- "resource-assignment-params": "",
- "status": ""
+ "resource-assignment-params": {
+ "get_attribute": [
+ "SELF",
+ "assignment-params"
+ ]
+ },
+ "status": "success"
}
}
}
@@ -139,250 +149,50 @@
}
},
"workflows": {
- "activate-process": {
+ "resource-assignment": {
+ "inputs": {
+ "request-id": {
+ "required": true,
+ "type": "string"
+ },
+ "action-name": {
+ "required": true,
+ "type": "string"
+ },
+ "scope-type": {
+ "required": true,
+ "type": "string"
+ },
+ "hostname": {
+ "required": true,
+ "type": "string"
+ }
+ },
"steps": {
"call-resource-assignment": {
- "description": "Invoke Resource Assignment Component",
+ "description": "Resource Assignment Workflow",
"target": "resource-assignment",
"activities": [
{
"call_operation": "ResourceAssignmentNode.process"
}
- ],
- "on_success": [
- "download-baseconfig"
]
- },
- "download-baseconfig": {
- "description": "Call Download Base Config Component",
- "target": "activate-netconf",
- "activities": [
- {
- "call_operation": "NetconfTransactionNode.process"
- }
- ],
- "on_success": [
- "download-licence"
- ]
- },
- "download-licence": {
- "description": "Call Download Licence Component",
- "target": "activate-netconf",
+ }
+ }
+ },
+ "activate": {
+ "steps": {
+ "call-resource-assignment": {
+ "description": "Netconf Activation Workflow",
+ "target": "resource-assignment",
"activities": [
{
- "call_operation": "NetconfTransactionNode.process"
+ "call_operation": "ResourceAssignmentNode.process"
}
]
}
}
}
}
- },
- "artifact_types": {
- "artifact-template-velocity": {
- "description": " Velocity Template used for Configuration",
- "version": "1.0.0",
- "file_ext": [
- "vtl"
- ],
- "derived_from": "tosca.artifacts.Implementation"
- },
- "artifact-mapping-resource": {
- "description": " Velocity Template Resource Mapping File used along with Configuration template",
- "version": "1.0.0",
- "file_ext": [
- "json"
- ],
- "derived_from": "tosca.artifacts.Implementation"
- },
- "artifact-script-kotlin": {
- "description": " Kotlin Script Template used for Configuration",
- "version": "1.0.0",
- "file_ext": [
- "kt"
- ],
- "derived_from": "tosca.artifacts.Implementation"
- },
- "artifact-script-python": {
- "description": " Kotlin Script Template used for Configuration",
- "version": "1.0.0",
- "file_ext": [
- "py"
- ],
- "derived_from": "tosca.artifacts.Implementation"
- },
- "artifact-bpmn-camunda": {
- "description": " Camunda BPM File",
- "version": "1.0.0",
- "file_ext": [
- "bpmn"
- ],
- "derived_from": "tosca.artifacts.Implementation"
- },
- "artifact-component-jar": {
- "description": "Component Jar",
- "version": "1.0.0",
- "file_ext": [
- "jar"
- ],
- "derived_from": "tosca.artifacts.Implementation"
- }
- },
- "node_types": {
- "bpmn-activate": {
- "description": "This is BPMN Activate node type",
- "version": "1.0.0",
- "properties": {
- "content": {
- "required": false,
- "type": "string"
- },
- "process-name": {
- "required": false,
- "type": "string"
- },
- "version": {
- "required": false,
- "type": "string",
- "default": "LATEST"
- }
- },
- "derived_from": "tosca.nodes.DG"
- },
- "tosca.nodes.Component": {
- "description": "This is Resource Assignment Component API",
- "version": "1.0.0",
- "derived_from": "tosca.nodes.Root"
- },
- "tosca.nodes.DG": {
- "description": "This is Directed Graph Node Type",
- "version": "1.0.0",
- "derived_from": "tosca.nodes.Root"
- },
- "tosca.nodes.component.Python": {
- "description": "This is Resource Assignment Python Component API",
- "version": "1.0.0",
- "derived_from": "tosca.nodes.Root"
- },
- "component-resource-assignment": {
- "description": "This is Resource Assignment Component API",
- "version": "1.0.0",
- "properties": {
- "request-id": {
- "description": "Request Id used to store the generated configuration, in the database along with the template-name",
- "required": true,
- "type": "string"
- }
- },
- "interfaces": {
- "DefaultComponentNode": {
- "operations": {
- "process": {
- "inputs": {
- "action-name": {
- "description": "Recipe Name to get from Database, Either (message & mask-info ) or ( resource-id & resource-type & action-name & template-name ) should be present. Message will be given higest priority",
- "required": false,
- "type": "string"
- },
- "resource-type": {
- "required": false,
- "type": "string"
- },
- "request-id": {
- "description": "Request Id used to store the generated configuration, in the database along with the template-name",
- "required": true,
- "type": "string"
- },
- "resource-id": {
- "description": "Id used to pull the data content from the data base. Either template-data or resource-id should be present",
- "required": true,
- "type": "string"
- },
- "template-content": {
- "description": "Id used to pull the data content from the data base. Either template-data or resource-id should be present",
- "required": true,
- "type": "string"
- },
- "mapping-content": {
- "description": "Id used to pull the data content from the data base. Either template-data or resource-id should be present",
- "required": true,
- "type": "string"
- }
- },
- "outputs": {
- "resource-assignment-params": {
- "required": true,
- "type": "string"
- },
- "status": {
- "required": true,
- "type": "string"
- }
- }
- }
- }
- }
- },
- "derived_from": "tosca.nodes.Component"
- },
- "component-resource-assignment-python": {
- "description": "This is Resource Assignment Component API",
- "version": "1.0.0",
- "properties": {
- "request-id": {
- "description": "Request Id used to store the generated configuration, in the database along with the template-name",
- "required": true,
- "type": "string"
- }
- },
- "interfaces": {
- "DefaultComponentNode": {
- "operations": {
- "process": {
- "inputs": {
- "action-name": {
- "description": "Recipe Name to get from Database, Either (message & mask-info ) or ( resource-id & resource-type & action-name & template-name ) should be present. Message will be given higest priority",
- "required": false,
- "type": "string"
- }
- },
- "outputs": {
- "resource-assignment-params": {
- "required": true,
- "type": "string"
- },
- "status": {
- "required": true,
- "type": "string"
- }
- }
- }
- }
- }
- },
- "derived_from": "tosca.nodes.component.Python"
- }
- },
- "data_types": {
- "sample-property": {
- "description": "This is sample data type",
- "version": "1.0.0",
- "properties": {
- "content": {
- "required": false,
- "type": "string"
- },
- "process-name": {
- "required": false,
- "type": "string"
- },
- "version": {
- "required": false,
- "type": "string",
- "default": "LATEST"
- }
- },
- "derived_from": "tosca.datatypes.Root"
- }
}
} \ No newline at end of file
diff --git a/components/model-catalog/blueprint-model/starter-blueprint/baseconfiguration/Definitions/types.json b/components/model-catalog/blueprint-model/starter-blueprint/baseconfiguration/Definitions/types.json
new file mode 100644
index 000000000..056d5f182
--- /dev/null
+++ b/components/model-catalog/blueprint-model/starter-blueprint/baseconfiguration/Definitions/types.json
@@ -0,0 +1,210 @@
+{
+ "artifact_types": {
+ "artifact-template-velocity": {
+ "description": " Velocity Template used for Configuration",
+ "version": "1.0.0",
+ "file_ext": [
+ "vtl"
+ ],
+ "derived_from": "tosca.artifacts.Implementation"
+ },
+ "artifact-mapping-resource": {
+ "description": " Velocity Template Resource Mapping File used along with Configuration template",
+ "version": "1.0.0",
+ "file_ext": [
+ "json"
+ ],
+ "derived_from": "tosca.artifacts.Implementation"
+ },
+ "artifact-script-kotlin": {
+ "description": " Kotlin Script Template used for Configuration",
+ "version": "1.0.0",
+ "file_ext": [
+ "kt"
+ ],
+ "derived_from": "tosca.artifacts.Implementation"
+ },
+ "artifact-script-python": {
+ "description": " Kotlin Script Template used for Configuration",
+ "version": "1.0.0",
+ "file_ext": [
+ "py"
+ ],
+ "derived_from": "tosca.artifacts.Implementation"
+ },
+ "artifact-directed-graph": {
+ "description": "Directed Graph File",
+ "version": "1.0.0",
+ "file_ext": [
+ "json",
+ "xml"
+ ],
+ "derived_from": "tosca.artifacts.Implementation"
+ },
+ "artifact-component-jar": {
+ "description": "Component Jar",
+ "version": "1.0.0",
+ "file_ext": [
+ "jar"
+ ],
+ "derived_from": "tosca.artifacts.Implementation"
+ }
+ },
+ "node_types": {
+ "dg-activate": {
+ "description": "This is BPMN Activate node type",
+ "version": "1.0.0",
+ "properties": {
+ "content": {
+ "required": false,
+ "type": "string"
+ },
+ "process-name": {
+ "required": false,
+ "type": "string"
+ },
+ "version": {
+ "required": false,
+ "type": "string",
+ "default": "LATEST"
+ }
+ },
+ "derived_from": "tosca.nodes.DG"
+ },
+ "tosca.nodes.Component": {
+ "description": "This is Resource Assignment Component API",
+ "version": "1.0.0",
+ "derived_from": "tosca.nodes.Root"
+ },
+ "tosca.nodes.DG": {
+ "description": "This is Directed Graph Node Type",
+ "version": "1.0.0",
+ "derived_from": "tosca.nodes.Root"
+ },
+ "tosca.nodes.component.Python": {
+ "description": "This is Resource Assignment Python Component API",
+ "version": "1.0.0",
+ "derived_from": "tosca.nodes.Root"
+ },
+ "component-resource-assignment": {
+ "description": "This is Resource Assignment Component API",
+ "version": "1.0.0",
+ "properties": {
+ "request-id": {
+ "description": "Request Id used to store the generated configuration, in the database along with the template-name",
+ "required": true,
+ "type": "string"
+ }
+ },
+ "interfaces": {
+ "DefaultComponentNode": {
+ "operations": {
+ "process": {
+ "inputs": {
+ "action-name": {
+ "description": "Recipe Name to get from Database, Either (message & mask-info ) or ( resource-id & resource-type & action-name & template-name ) should be present. Message will be given higest priority",
+ "required": false,
+ "type": "string"
+ },
+ "resource-type": {
+ "required": false,
+ "type": "string"
+ },
+ "request-id": {
+ "description": "Request Id used to store the generated configuration, in the database along with the template-name",
+ "required": true,
+ "type": "string"
+ },
+ "resource-id": {
+ "description": "Id used to pull the data content from the data base. Either template-data or resource-id should be present",
+ "required": true,
+ "type": "string"
+ },
+ "template-content": {
+ "description": "Id used to pull the data content from the data base. Either template-data or resource-id should be present",
+ "required": true,
+ "type": "string"
+ },
+ "mapping-content": {
+ "description": "Id used to pull the data content from the data base. Either template-data or resource-id should be present",
+ "required": true,
+ "type": "string"
+ }
+ },
+ "outputs": {
+ "resource-assignment-params": {
+ "required": true,
+ "type": "string"
+ },
+ "status": {
+ "required": true,
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "derived_from": "tosca.nodes.Component"
+ },
+ "component-resource-assignment-python": {
+ "description": "This is Resource Assignment Component API",
+ "version": "1.0.0",
+ "properties": {
+ "request-id": {
+ "description": "Request Id used to store the generated configuration, in the database along with the template-name",
+ "required": true,
+ "type": "string"
+ }
+ },
+ "interfaces": {
+ "DefaultComponentNode": {
+ "operations": {
+ "process": {
+ "inputs": {
+ "action-name": {
+ "description": "Recipe Name to get from Database, Either (message & mask-info ) or ( resource-id & resource-type & action-name & template-name ) should be present. Message will be given higest priority",
+ "required": false,
+ "type": "string"
+ }
+ },
+ "outputs": {
+ "resource-assignment-params": {
+ "required": true,
+ "type": "string"
+ },
+ "status": {
+ "required": true,
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "derived_from": "tosca.nodes.component.Python"
+ }
+ },
+ "data_types": {
+ "sample-property": {
+ "description": "This is sample data type",
+ "version": "1.0.0",
+ "properties": {
+ "content": {
+ "required": false,
+ "type": "string"
+ },
+ "process-name": {
+ "required": false,
+ "type": "string"
+ },
+ "version": {
+ "required": false,
+ "type": "string",
+ "default": "LATEST"
+ }
+ },
+ "derived_from": "tosca.datatypes.Root"
+ }
+ }
+} \ No newline at end of file
diff --git a/components/parent/pom.xml b/components/parent/pom.xml
index 7308e9d2a..71310f1e6 100644
--- a/components/parent/pom.xml
+++ b/components/parent/pom.xml
@@ -31,7 +31,8 @@
<properties>
<spring.boot.version>2.0.6.RELEASE</spring.boot.version>
<spring.version>5.0.10.RELEASE</spring.version>
- <kotlin.version>1.3.0</kotlin.version>
+ <kotlin.version>1.3.10</kotlin.version>
+ <kotlin.maven.version>1.3.0</kotlin.maven.version>
<kotlin.couroutines.version>1.0.1</kotlin.couroutines.version>
<eelf.version>1.0.0</eelf.version>
<guava.version>26.0-jre</guava.version>
@@ -234,7 +235,7 @@
<plugin>
<artifactId>kotlin-maven-plugin</artifactId>
<groupId>org.jetbrains.kotlin</groupId>
- <version>${kotlin.version}</version>
+ <version>${kotlin.maven.version}</version>
<executions>
<execution>
<id>compile</id>
diff --git a/components/resource-dict/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/resource/dict/ResourceAssignmentProcessor.kt b/components/resource-dict/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/resource/dict/ResourceAssignmentProcessor.kt
index a6802f677..327d50ac4 100644
--- a/components/resource-dict/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/resource/dict/ResourceAssignmentProcessor.kt
+++ b/components/resource-dict/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/resource/dict/ResourceAssignmentProcessor.kt
@@ -1,5 +1,6 @@
/*
* Copyright © 2018 IBM.
+ * Modifications Copyright © 2017-2018 AT&T Intellectual Property.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,19 +17,41 @@
package org.onap.ccsdk.apps.controllerblueprints.resource.dict
-import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintProcessorException
+import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BlueprintFunctionNode
+import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintRuntimeService
+import org.slf4j.LoggerFactory
-interface ResourceAssignmentProcessor {
+abstract class ResourceAssignmentProcessor : BlueprintFunctionNode<ResourceAssignment, ResourceAssignment> {
- @Throws(BluePrintProcessorException::class)
- fun validate(resourceAssignment: ResourceAssignment, context : MutableMap<String, Any>)
+ private val log = LoggerFactory.getLogger(ResourceAssignmentProcessor::class.java)
- @Throws(BluePrintProcessorException::class)
- fun process(resourceAssignment: ResourceAssignment, context : MutableMap<String, Any>)
+ private var bluePrintRuntimeService: BluePrintRuntimeService<*>? = null
- @Throws(BluePrintProcessorException::class)
- fun errorHandle(resourceAssignment: ResourceAssignment, context : MutableMap<String, Any>)
+ open fun setBlueprintRuntimeService(bluePrintRuntimeService: BluePrintRuntimeService<*>) {
+ this.bluePrintRuntimeService = bluePrintRuntimeService
+ }
- @Throws(BluePrintProcessorException::class)
- fun reTrigger(resourceAssignment: ResourceAssignment, context : MutableMap<String, Any>)
+ open fun getBlueprintRuntimeService(): BluePrintRuntimeService<*> {
+ return this.bluePrintRuntimeService!!
+ }
+
+ override fun prepareRequest(resourceAssignment: ResourceAssignment): ResourceAssignment {
+ log.info("prepareRequest...")
+ return resourceAssignment
+ }
+
+ override fun prepareResponse(): ResourceAssignment {
+ log.info("Preparing Response...")
+ return ResourceAssignment()
+ }
+
+ override fun apply(executionServiceInput: ResourceAssignment): ResourceAssignment {
+ prepareRequest(executionServiceInput)
+ process(executionServiceInput)
+ return prepareResponse()
+ }
+
+ override abstract fun process(executionRequest: ResourceAssignment)
+
+ override abstract fun recover(runtimeException: RuntimeException, executionRequest: ResourceAssignment)
} \ No newline at end of file