Add blueprint artifact definition enrichment.
authorMuthuramalingam, Brinda Santh(bs2796) <bs2796@att.com>
Fri, 14 Dec 2018 17:30:51 +0000 (12:30 -0500)
committerMuthuramalingam, Brinda Santh(bs2796) <bs2796@att.com>
Fri, 14 Dec 2018 17:30:51 +0000 (12:30 -0500)
Change-Id: I3b03a1f76472ce6b44929457a42805d281950ff7
Issue-ID: CCSDK-839
Signed-off-by: Muthuramalingam, Brinda Santh(bs2796) <bs2796@att.com>
ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/enhancer/BluePrintArtifactDefinitionEnhancerImpl.kt [new file with mode: 0644]
ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/enhancer/BluePrintNodeTemplateEnhancerImpl.kt
ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/enhancer/BluePrintServiceTemplateEnhancerImpl.kt
ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/enhancer/BluePrintTypeEnhancerServiceImpl.kt
ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/enhancer/BluePrintWorkflowEnhancerImpl.kt
ms/controllerblueprints/modules/service/src/test/resources/enhance/enhanced-template.json

diff --git a/ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/enhancer/BluePrintArtifactDefinitionEnhancerImpl.kt b/ms/controllerblueprints/modules/service/src/main/kotlin/org/onap/ccsdk/apps/controllerblueprints/service/enhancer/BluePrintArtifactDefinitionEnhancerImpl.kt
new file mode 100644 (file)
index 0000000..986ce98
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+ * 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.service.enhancer
+
+import com.att.eelf.configuration.EELFLogger
+import com.att.eelf.configuration.EELFManager
+import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException
+import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintProcessorException
+import org.onap.ccsdk.apps.controllerblueprints.core.asJsonPrimitive
+import org.onap.ccsdk.apps.controllerblueprints.core.data.ArtifactDefinition
+import org.onap.ccsdk.apps.controllerblueprints.core.data.ArtifactType
+import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintArtifactDefinitionEnhancer
+import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintRepoService
+import org.onap.ccsdk.apps.controllerblueprints.core.interfaces.BluePrintTypeEnhancerService
+import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintContext
+import org.onap.ccsdk.apps.controllerblueprints.core.service.BluePrintRuntimeService
+import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils
+import org.onap.ccsdk.apps.controllerblueprints.resource.dict.ResourceAssignment
+import org.springframework.stereotype.Service
+
+@Service
+open class BluePrintArtifactDefinitionEnhancerImpl(private val bluePrintRepoService: BluePrintRepoService,
+                                                   private val bluePrintTypeEnhancerService: BluePrintTypeEnhancerService,
+                                                   private val resourceAssignmentEnhancerService: ResourceAssignmentEnhancerService)
+    : BluePrintArtifactDefinitionEnhancer {
+
+    companion object {
+        const val ARTIFACT_TYPE_MAPPING_SOURCE: String = "artifact-mapping-resource"
+    }
+
+
+    private val log: EELFLogger = EELFManager.getInstance().getLogger(BluePrintArtifactDefinitionEnhancerImpl::class.toString())
+
+    lateinit var bluePrintRuntimeService: BluePrintRuntimeService<*>
+    lateinit var bluePrintContext: BluePrintContext
+
+
+    override fun enhance(bluePrintRuntimeService: BluePrintRuntimeService<*>, name: String, artifactDefinition: ArtifactDefinition) {
+        log.info("enhancing ArtifactDefinition($name)")
+
+        this.bluePrintRuntimeService = bluePrintRuntimeService
+        this.bluePrintContext = bluePrintRuntimeService.bluePrintContext()
+
+        val artifactTypeName = artifactDefinition.type
+                ?: throw BluePrintException("Artifact type is missing for ArtifactDefinition($name)")
+
+        // Populate Artifact Type
+        populateArtifactType(artifactTypeName)
+
+        when (artifactTypeName) {
+            ARTIFACT_TYPE_MAPPING_SOURCE -> {
+                enhanceMappingType(name, artifactDefinition)
+            }
+        }
+    }
+
+    // Enhance Resource Mapping
+    open fun enhanceMappingType(name: String, artifactDefinition: ArtifactDefinition) {
+
+        val artifactFilePath = "${bluePrintContext.rootPath}/${artifactDefinition.file}"
+
+        val alreadyEnhancedKey = "enhanced-${artifactDefinition.file}"
+        val alreadyEnhanced = bluePrintRuntimeService.check(alreadyEnhancedKey)
+
+        log.info("enhancing resource mapping file(${artifactDefinition.file}) already enhanced($alreadyEnhanced)")
+
+        if (!alreadyEnhanced) {
+            val resourceAssignments: MutableList<ResourceAssignment> = JacksonUtils.getListFromFile(artifactFilePath, ResourceAssignment::class.java)
+                    as? MutableList<ResourceAssignment>
+                    ?: throw BluePrintProcessorException("couldn't get ResourceAssignment definitions for the file($artifactFilePath)")
+
+            // Call Resource Assignment Enhancer
+            resourceAssignmentEnhancerService.enhanceBluePrint(bluePrintTypeEnhancerService, bluePrintRuntimeService, resourceAssignments)
+
+            bluePrintRuntimeService.put(alreadyEnhancedKey, true.asJsonPrimitive())
+        }
+    }
+
+    open fun populateArtifactType(artifactTypeName: String): ArtifactType {
+
+        val artifactType = bluePrintContext.serviceTemplate.artifactTypes?.get(artifactTypeName)
+                ?: bluePrintRepoService.getArtifactType(artifactTypeName)
+                ?: throw BluePrintException("couldn't get ArtifactType($artifactTypeName) from repo.")
+        bluePrintContext.serviceTemplate.artifactTypes?.put(artifactTypeName, artifactType)
+        return artifactType
+    }
+}
\ No newline at end of file
index cfbfab7..fb6c06a 100644 (file)
@@ -18,9 +18,7 @@ package org.onap.ccsdk.apps.controllerblueprints.service.enhancer
 
 import com.att.eelf.configuration.EELFLogger
 import com.att.eelf.configuration.EELFManager
-import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintError
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException
-import org.onap.ccsdk.apps.controllerblueprints.core.data.ArtifactType
 import org.onap.ccsdk.apps.controllerblueprints.core.data.NodeTemplate
 import org.onap.ccsdk.apps.controllerblueprints.core.data.NodeType
 import org.onap.ccsdk.apps.controllerblueprints.core.format
@@ -46,7 +44,7 @@ open class BluePrintNodeTemplateEnhancerImpl(private val bluePrintRepoService: B
 
 
     override fun enhance(bluePrintRuntimeService: BluePrintRuntimeService<*>, name: String, nodeTemplate: NodeTemplate) {
-        log.info("Enhancing NodeTemplate($name)")
+        log.info("***** Enhancing NodeTemplate($name)")
         this.bluePrintRuntimeService = bluePrintRuntimeService
         this.bluePrintContext = bluePrintRuntimeService.bluePrintContext()
 
@@ -75,20 +73,9 @@ open class BluePrintNodeTemplateEnhancerImpl(private val bluePrintRepoService: B
     open fun enhanceNodeTemplateArtifactDefinition(nodeTemplateName: String, nodeTemplate: NodeTemplate) {
 
         nodeTemplate.artifacts?.forEach { artifactDefinitionName, artifactDefinition ->
-            val artifactTypeName = artifactDefinition.type
-                    ?: throw BluePrintException(format("Artifact type is missing for NodeTemplate({}) artifact({})", nodeTemplateName, artifactDefinitionName))
-
-            // Populate Artifact Type
-            populateArtifactType(artifactTypeName)
+            // Enhance Artifacct Definitions
+            bluePrintTypeEnhancerService.enhanceArtifactDefinition(bluePrintRuntimeService, artifactDefinitionName, artifactDefinition)
         }
     }
 
-    open fun populateArtifactType(artifactTypeName: String): ArtifactType {
-        val artifactType = bluePrintContext.serviceTemplate.artifactTypes?.get(artifactTypeName)
-                ?: bluePrintRepoService.getArtifactType(artifactTypeName)
-                ?: throw BluePrintException(format("Couldn't get ArtifactType({}) from repo.", artifactTypeName))
-        bluePrintContext.serviceTemplate.artifactTypes?.put(artifactTypeName, artifactType)
-        return artifactType
-    }
-
 }
\ No newline at end of file
index 6a4f623..2ad0583 100644 (file)
@@ -33,7 +33,7 @@ import org.springframework.stereotype.Service
 open class BluePrintServiceTemplateEnhancerImpl(private val bluePrintRepoService: BluePrintRepoService,
                                                 private val bluePrintTypeEnhancerService: BluePrintTypeEnhancerService)
     : BluePrintServiceTemplateEnhancer {
-    private val log: EELFLogger = EELFManager.getInstance().getLogger(BluePrintEnhancerServiceImpl::class.toString())
+    private val log: EELFLogger = EELFManager.getInstance().getLogger(BluePrintServiceTemplateEnhancerImpl::class.toString())
 
 
     lateinit var bluePrintRuntimeService: BluePrintRuntimeService<*>
index 3128b6c..02a19c3 100644 (file)
@@ -47,6 +47,10 @@ open class BluePrintTypeEnhancerServiceImpl : BluePrintTypeEnhancerService {
         return context.getBeansOfType(BluePrintNodeTypeEnhancer::class.java).map { it.value }
     }
 
+    override fun getArtifactDefinitionEnhancers(): List<BluePrintArtifactDefinitionEnhancer> {
+        return context.getBeansOfType(BluePrintArtifactDefinitionEnhancer::class.java).map { it.value }
+    }
+
     override fun getPolicyTypeEnhancers(): List<BluePrintPolicyTypeEnhancer> {
         return context.getBeansOfType(BluePrintPolicyTypeEnhancer::class.java).map { it.value }
     }
index e3a8f22..a620e9b 100644 (file)
@@ -21,6 +21,7 @@ import com.att.eelf.configuration.EELFManager
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException
 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintProcessorException
 import org.onap.ccsdk.apps.controllerblueprints.core.ConfigModelConstant
+import org.onap.ccsdk.apps.controllerblueprints.core.asJsonPrimitive
 import org.onap.ccsdk.apps.controllerblueprints.core.data.DataType
 import org.onap.ccsdk.apps.controllerblueprints.core.data.PropertyDefinition
 import org.onap.ccsdk.apps.controllerblueprints.core.data.Workflow
@@ -41,19 +42,21 @@ open class BluePrintWorkflowEnhancerImpl(private val bluePrintRepoService: BlueP
                                          private val bluePrintTypeEnhancerService: BluePrintTypeEnhancerService,
                                          private val resourceAssignmentEnhancerService: ResourceAssignmentEnhancerService)
     : BluePrintWorkflowEnhancer {
-    private val log: EELFLogger = EELFManager.getInstance().getLogger(BluePrintNodeTemplateEnhancerImpl::class.toString())
+    private val log: EELFLogger = EELFManager.getInstance().getLogger(BluePrintWorkflowEnhancerImpl::class.toString())
+
+    companion object {
+        const val ARTIFACT_TYPE_MAPPING_SOURCE: String = "artifact-mapping-resource"
+        const val PROPERTY_DEPENDENCY_NODE_TEMPLATES = "dependency-node-templates"
+    }
 
     lateinit var bluePrintRuntimeService: BluePrintRuntimeService<*>
     lateinit var bluePrintContext: BluePrintContext
 
-    val PROPERTY_DEPENDENCY_NODE_TEMPLATES = "dependency-node-templates"
-
-
     private val workflowDataTypes: MutableMap<String, DataType> = hashMapOf()
 
     override fun enhance(bluePrintRuntimeService: BluePrintRuntimeService<*>, name: String, workflow: Workflow) {
-        log.info("Enhancing Workflow($name)")
-       this.bluePrintRuntimeService = bluePrintRuntimeService
+        log.info("##### Enhancing Workflow($name)")
+        this.bluePrintRuntimeService = bluePrintRuntimeService
         this.bluePrintContext = bluePrintRuntimeService.bluePrintContext()
 
         val dynamicPropertyName = "$name-properties"
@@ -94,10 +97,11 @@ open class BluePrintWorkflowEnhancerImpl(private val bluePrintRepoService: BlueP
 
         // Check and Get Resource Assignment File
         val resourceAssignmentArtifacts = dependencyNodeTemplates?.mapNotNull { componentNodeTemplateName ->
-            log.info("Identified workflow($name) targets($componentNodeTemplateName")
+            log.info("identified workflow($name) targets($componentNodeTemplateName)")
+
             val resourceAssignmentArtifacts = bluePrintContext.nodeTemplateByName(componentNodeTemplateName)
                     .artifacts?.filter {
-                it.value.type == "artifact-mapping-resource"
+                it.value.type == ARTIFACT_TYPE_MAPPING_SOURCE
             }?.map {
                 log.info("resource assignment artifacts(${it.key}) for NodeType(${componentNodeTemplateName})")
                 it.value.file
@@ -105,7 +109,7 @@ open class BluePrintWorkflowEnhancerImpl(private val bluePrintRepoService: BlueP
             resourceAssignmentArtifacts
         }?.flatten()
 
-        log.info("Workflow($name) resource assignment files($resourceAssignmentArtifacts")
+        log.info("workflow($name) resource assignment files($resourceAssignmentArtifacts")
 
         if (resourceAssignmentArtifacts != null && resourceAssignmentArtifacts.isNotEmpty()) {
 
@@ -113,19 +117,20 @@ open class BluePrintWorkflowEnhancerImpl(private val bluePrintRepoService: BlueP
             addWorkFlowDynamicPropertyDefinitions(name, workflow)
 
             resourceAssignmentArtifacts.forEach { fileName ->
-
-                val absoluteFilePath = "${bluePrintContext.rootPath}/$fileName"
-
-                log.info("enriching workflow($name) artifacts file(${absoluteFilePath}")
                 // Enhance Resource Assignment File
-                val resourceAssignmentProperties = enhanceResourceAssignmentFile(absoluteFilePath)
+                val resourceAssignmentProperties = enhanceResourceAssignmentFile(fileName!!)
                 // Add Workflow Dynamic DataType
                 addWorkFlowDynamicDataType(name, resourceAssignmentProperties)
             }
         }
     }
 
-    private fun enhanceResourceAssignmentFile(filePath: String): MutableMap<String, PropertyDefinition> {
+    // Enhancement for Dynamic Properties, Resource Assignment Properties, Resource Sources
+    private fun enhanceResourceAssignmentFile(fileName: String): MutableMap<String, PropertyDefinition> {
+
+        val filePath = "${bluePrintContext.rootPath}/$fileName"
+
+        log.info("enriching artifacts file(${filePath}")
 
         val resourceAssignmentProperties: MutableMap<String, PropertyDefinition> = hashMapOf()
 
@@ -133,8 +138,16 @@ open class BluePrintWorkflowEnhancerImpl(private val bluePrintRepoService: BlueP
                 as? MutableList<ResourceAssignment>
                 ?: throw BluePrintProcessorException("couldn't get ResourceAssignment definitions for the file($filePath)")
 
-        // Call Resource Assignment Enhancer
-        resourceAssignmentEnhancerService.enhanceBluePrint(bluePrintTypeEnhancerService, bluePrintRuntimeService, resourceAssignments)
+        val alreadyEnhancedKey = "enhanced-$fileName"
+        val alreadyEnhanced = bluePrintRuntimeService.check(alreadyEnhancedKey)
+
+        log.info("enhancing workflow resource mapping file($fileName) already enhanced($alreadyEnhanced)")
+
+        if (!alreadyEnhanced) {
+            // Call Resource Assignment Enhancer
+            resourceAssignmentEnhancerService.enhanceBluePrint(bluePrintTypeEnhancerService, bluePrintRuntimeService, resourceAssignments)
+            bluePrintRuntimeService.put(alreadyEnhancedKey, true.asJsonPrimitive())
+        }
 
         resourceAssignments.forEach { resourceAssignment ->
             resourceAssignmentProperties[resourceAssignment.name] = resourceAssignment.property!!
@@ -159,7 +172,7 @@ open class BluePrintWorkflowEnhancerImpl(private val bluePrintRepoService: BlueP
         var recipeDataType: DataType? = bluePrintContext.serviceTemplate.dataTypes?.get(dataTypeName)
 
         if (recipeDataType == null) {
-            log.info("DataType not present for the recipe({})", dataTypeName)
+            log.info("dataType not present for the recipe({})", dataTypeName)
             recipeDataType = DataType()
             recipeDataType.version = "1.0.0"
             recipeDataType.description = "Dynamic DataType definition for workflow($workflowName)."
@@ -172,7 +185,7 @@ open class BluePrintWorkflowEnhancerImpl(private val bluePrintRepoService: BlueP
             bluePrintContext.serviceTemplate.dataTypes?.put(dataTypeName, recipeDataType)
 
         } else {
-            log.info("Dynamic dataType($dataTypeName) already present for workflow($workflowName).")
+            log.info("dynamic dataType($dataTypeName) already present for workflow($workflowName).")
         }
         // Merge all the Recipe Properties
         mappingProperties.forEach { propertyName, propertyDefinition ->
index 5e41a50..b13932b 100644 (file)
   "tosca_definitions_version" : "controller_blueprint_1_0_0",
   "artifact_types" : { },
   "data_types" : {
-    "dt-v4-aggregate" : {
-      "description" : "This is dt-v4-aggregate Data Type",
-      "version" : "1.0.0",
-      "properties" : {
-        "ipv4-address" : {
-          "required" : true,
-          "type" : "string"
-        },
-        "ipv4-plen" : {
-          "required" : false,
-          "type" : "integer"
-        }
-      },
-      "derived_from" : "tosca.datatypes.Root"
-    },
-    "dt-license-key" : {
-      "description" : "This is dt-plicense-key Data Type",
-      "version" : "1.0.0",
-      "properties" : {
-        "license-key" : {
-          "required" : true,
-          "type" : "string"
-        }
-      },
-      "derived_from" : "tosca.datatypes.Root"
-    },
-    "datatype-resource-assignment" : {
-      "description" : "This is Resource Assignment Data Type",
-      "version" : "1.0.0",
-      "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" : {
-      "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",
-      "version" : "1.0.0",
-      "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"
-    },
-    "dt-resource-assignment-request" : {
-      "description" : "This is Dynamic Data type definition generated from resource mapping for the config template name base-config-template.",
-      "version" : "1.0.0",
-      "properties" : {
-        "hostname" : {
-          "required" : true,
-          "type" : "string"
-        },
-        "licenses" : {
-          "required" : true,
-          "type" : "list",
-          "entry_schema" : {
-            "type" : "dt-license-key"
-          }
-        },
-        "rs-db-source" : {
-          "required" : true,
-          "type" : "string"
-        },
-        "service" : {
-          "required" : true,
-          "type" : "string"
-        },
-        "service-instance-id" : {
-          "required" : true,
-          "type" : "string"
-        },
-        "mdsal-source" : {
-          "description" : "",
-          "required" : true,
-          "type" : "list",
-          "entry_schema" : {
-            "type" : "dt-v4-aggregate"
-          }
-        }
-      },
-      "derived_from" : "tosca.datatypes.Dynamic"
-    }
   },
   "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"
-    },
-    "tosca.nodes.Component" : {
-      "description" : "This is default Component Node",
-      "version" : "1.0.0",
-      "derived_from" : "tosca.nodes.Root"
-    },
-    "artifact-config-template" : {
-      "description" : "This is Configuration Velocity Template",
-      "version" : "1.0.0",
-      "properties" : {
-        "action-names" : {
-          "required" : true,
-          "type" : "list",
-          "entry_schema" : {
-            "type" : "string"
-          }
-        }
-      },
-      "capabilities" : {
-        "content" : {
-          "type" : "tosca.capabilities.Content",
-          "properties" : {
-            "content" : {
-              "required" : true,
-              "type" : "string"
-            }
-          }
-        },
-        "mapping" : {
-          "type" : "tosca.capabilities.Mapping",
-          "properties" : {
-            "mapping" : {
-              "required" : false,
-              "type" : "list",
-              "entry_schema" : {
-                "type" : "datatype-resource-assignment"
-              }
-            }
-          }
-        }
-      },
-      "derived_from" : "tosca.nodes.Artifact"
-    },
-    "tosca.nodes.Vnf" : {
-      "description" : "This is VNF Node Type",
-      "version" : "1.0.0",
-      "derived_from" : "tosca.nodes.Root"
-    },
-    "tosca.nodes.Artifact" : {
-      "description" : "This is Deprecated Artifact Node Type.",
-      "version" : "1.0.0",
-      "derived_from" : "tosca.nodes.Root"
-    },
-    "dg-activate-netconf" : {
-      "description" : "This is Download Netconf 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-netconf-executor",
-          "relationship" : "tosca.relationships.DependsOn"
-        }
-      },
-      "interfaces" : {
-        "CONFIG" : {
-          "operations" : {
-            "ActivateNetconf" : {
-              "inputs" : {
-                "params" : {
-                  "required" : false,
-                  "type" : "list",
-                  "entry_schema" : {
-                    "type" : "datatype-property"
-                  }
-                }
-              }
-            }
-          }
-        }
-      },
-      "derived_from" : "tosca.nodes.DG"
-    },
-    "source-input" : {
-      "description" : "This is Input Resource Source Node Type",
-      "version" : "1.0.0",
-      "properties" : {
-        "key" : {
-          "required" : false,
-          "type" : "string"
-        },
-        "key-dependencies" : {
-          "required" : true,
-          "type" : "list",
-          "entry_schema" : {
-            "type" : "string"
-          }
-        }
-      },
-      "derived_from" : "tosca.nodes.ResourceSource"
-    },
-    "tosca.nodes.ResourceSource" : {
-      "description" : "TOSCA base type for Resource Sources",
-      "version" : "1.0.0",
-      "derived_from" : "tosca.nodes.Root"
-    },
-    "component-resource-assignment" : {
-      "description" : "This is Resource Assignment Component API",
-      "version" : "1.0.0",
-      "capabilities" : {
-        "component-node" : {
-          "type" : "tosca.capabilities.Node"
-        }
-      },
-      "interfaces" : {
-        "ResourceAssignmentComponent" : {
-          "operations" : {
-            "process" : {
-              "inputs" : {
-                "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"
-                },
-                "action-name" : {
-                  "description" : "Action Name of the process",
-                  "required" : true,
-                  "type" : "string"
-                }
-              },
-              "outputs" : {
-                "resource-assignment-params" : {
-                  "required" : true,
-                  "type" : "string"
-                },
-                "status" : {
-                  "required" : true,
-                  "type" : "string"
-                }
-              }
-            }
-          }
-        }
-      },
-      "derived_from" : "tosca.nodes.Component"
-    },
-    "tosca.nodes.component.Jython" : {
-      "description" : "This is Jython Component",
-      "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"
-    },
-    "source-db" : {
-      "description" : "This is Database Resource Source Node Type",
-      "version" : "1.0.0",
-      "properties" : {
-        "type" : {
-          "required" : true,
-          "type" : "string",
-          "constraints" : [ {
-            "valid_values" : [ "SQL", "PLSQL" ]
-          } ]
-        },
-        "query" : {
-          "required" : true,
-          "type" : "string"
-        },
-        "input-key-mapping" : {
-          "required" : false,
-          "type" : "map",
-          "entry_schema" : {
-            "type" : "string"
-          }
-        },
-        "output-key-mapping" : {
-          "required" : false,
-          "type" : "map",
-          "entry_schema" : {
-            "type" : "string"
-          }
-        },
-        "key-dependencies" : {
-          "required" : true,
-          "type" : "list",
-          "entry_schema" : {
-            "type" : "string"
-          }
-        }
-      },
-      "derived_from" : "tosca.nodes.ResourceSource"
-    },
-    "vnf-netconf-device" : {
-      "description" : "This is VNF Device with Netconf  Capability",
-      "version" : "1.0.0",
-      "capabilities" : {
-        "netconf" : {
-          "type" : "tosca.capabilities.Netconf",
-          "properties" : {
-            "login-key" : {
-              "required" : true,
-              "type" : "string",
-              "default" : "sdnc"
-            },
-            "login-account" : {
-              "required" : true,
-              "type" : "string",
-              "default" : "sdnc-tacacs"
-            },
-            "source" : {
-              "required" : true,
-              "type" : "string",
-              "default" : "npm"
-            },
-            "target-ip-address" : {
-              "required" : true,
-              "type" : "string"
-            },
-            "port-number" : {
-              "required" : true,
-              "type" : "integer",
-              "default" : 830
-            },
-            "connection-time-out" : {
-              "required" : false,
-              "type" : "integer",
-              "default" : 30
-            }
-          }
-        }
-      },
-      "derived_from" : "tosca.nodes.Vnf"
-    },
-    "source-rest" : {
-      "description" : "This is Rest Resource Source Node Type",
-      "version" : "1.0.0",
-      "properties" : {
-        "type" : {
-          "required" : false,
-          "type" : "string",
-          "constraints" : [ {
-            "valid_values" : [ "JSON" ]
-          } ],
-          "default" : "JSON"
-        },
-        "url-path" : {
-          "required" : true,
-          "type" : "string"
-        },
-        "path" : {
-          "required" : true,
-          "type" : "string"
-        },
-        "expression-type" : {
-          "required" : false,
-          "type" : "string",
-          "constraints" : [ {
-            "valid_values" : [ "JSON_PATH", "JSON_POINTER" ]
-          } ],
-          "default" : "JSON_PATH"
-        },
-        "input-key-mapping" : {
-          "required" : false,
-          "type" : "map",
-          "entry_schema" : {
-            "type" : "string"
-          }
-        },
-        "output-key-mapping" : {
-          "required" : false,
-          "type" : "map",
-          "entry_schema" : {
-            "type" : "string"
-          }
-        },
-        "key-dependencies" : {
-          "required" : true,
-          "type" : "list",
-          "entry_schema" : {
-            "type" : "string"
-          }
-        }
-      },
-      "derived_from" : "tosca.nodes.ResourceSource"
-    },
-    "component-netconf-executor" : {
-      "description" : "This is Netconf Transaction Configuration Component API",
-      "version" : "1.0.0",
-      "capabilities" : {
-        "component-node" : {
-          "type" : "tosca.capabilities.Node"
-        }
-      },
-      "requirements" : {
-        "netconf-connection" : {
-          "capability" : "netconf",
-          "node" : "vnf-netconf-device",
-          "relationship" : "tosca.relationships.ConnectsTo"
-        }
-      },
-      "interfaces" : {
-        "NetconfExecutorComponent" : {
-          "operations" : {
-            "process" : {
-              "inputs" : {
-                "request-id" : {
-                  "description" : "Request Id used to store the generated configuration, in the database along with the template-name",
-                  "required" : true,
-                  "type" : "string"
-                },
-                "template-name" : {
-                  "description" : "Service Template Name",
-                  "required" : true,
-                  "type" : "string"
-                },
-                "template-version" : {
-                  "description" : "Service Template Version",
-                  "required" : true,
-                  "type" : "string"
-                },
-                "action-name" : {
-                  "description" : "Action 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" : {
-                  "description" : "Resource Type 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-id" : {
-                  "description" : "Resource Id 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"
-                },
-                "reservation-id" : {
-                  "description" : "Reservation Id used to send to NPM",
-                  "required" : false,
-                  "type" : "string"
-                },
-                "execution-script" : {
-                  "description" : "Python Script to Execute for this Component action, It should refer any one of Prython Artifact Definition for this Node Template.",
-                  "required" : true,
-                  "type" : "string"
-                }
-              },
-              "outputs" : {
-                "response-data" : {
-                  "description" : "Execution Response Data in JSON format.",
-                  "required" : false,
-                  "type" : "string"
-                },
-                "status" : {
-                  "description" : "Status of the Component Execution ( success or failure )",
-                  "required" : true,
-                  "type" : "string"
-                }
-              }
-            }
-          }
-        }
-      },
-      "derived_from" : "tosca.nodes.component.Jython"
-    }
   },
   "topology_template" : {
     "inputs" : {