Fix the transform-templating for referenced complex types 55/131355/6
authorLukasz Rajewski <lukasz.rajewski@t-mobile.pl>
Tue, 4 Oct 2022 12:13:25 +0000 (14:13 +0200)
committerLukasz Rajewski <lukasz.rajewski@t-mobile.pl>
Tue, 4 Oct 2022 20:57:15 +0000 (20:57 +0000)
After fix the transform-templating will be closer to the
velocity artifact templating mechanism, what was not
a case before, when templating with complex variables like
json was not working.

Issue-ID: CCSDK-3774
Signed-off-by: Lukasz Rajewski <lukasz.rajewski@t-mobile.pl>
Change-Id: Icd5001cb2ea2de0220fe65a7c9c0510d1fba0911

components/model-catalog/blueprint-model/test-blueprint/baseconfiguration/Definitions/activation-blueprint.json
components/model-catalog/blueprint-model/test-blueprint/baseconfiguration/Definitions/data_types.json
components/model-catalog/blueprint-model/test-blueprint/baseconfiguration/Definitions/resources_definition_types.json
components/model-catalog/blueprint-model/test-blueprint/baseconfiguration/Definitions/transform-mapping.json [new file with mode: 0644]
ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/utils/ResourceAssignmentUtils.kt
ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceResolutionServiceTest.kt
ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/utils/ResourceAssignmentUtilsTest.kt

index c506ad0..e1509a6 100644 (file)
             "type": "artifact-mapping-resource",
             "file": "Definitions/maxoccurrence-mapping.json"
           },
+          "transform-template": {
+            "type": "artifact-template-velocity",
+            "file": "Templates/baseconfig-template.vtl"
+          },
+          "transform-mapping": {
+            "type": "artifact-mapping-resource",
+            "file": "Definitions/transform-mapping.json"
+          },
           "notemplate-mapping": {
             "type": "artifact-mapping-resource",
             "file": "Definitions/notemplate-mapping.json"
index 94c587a..1dd0f52 100644 (file)
           "required": true,
           "type": "string"
         },
+        "private_net_id": {
+          "required": true,
+          "type": "string"
+        },
         "firmware-version": {
           "type" : "string"
         },
index 7572101..9e69462 100644 (file)
       }
     }
   },
+  "int_pktgen_private_net_id": {
+    "tags": "int_pktgen_private_net_id",
+    "name": "int_pktgen_private_net_id",
+    "property": {
+      "description": "int_pktgen_private_net_id",
+      "type": "string"
+    },
+    "updated-by": "Lukasz Rajewski <lukasz.rajewski@t-mobile.pl>",
+    "sources": {
+      "default": {
+        "type": "source-default",
+        "properties": {}
+      }
+    }
+  },
   "vnf_parameter": {
     "tags": "vnf_parameter",
     "name": "vnf_parameter",
diff --git a/components/model-catalog/blueprint-model/test-blueprint/baseconfiguration/Definitions/transform-mapping.json b/components/model-catalog/blueprint-model/test-blueprint/baseconfiguration/Definitions/transform-mapping.json
new file mode 100644 (file)
index 0000000..14dec09
--- /dev/null
@@ -0,0 +1,51 @@
+[
+  {
+    "name": "service-instance-id",
+    "input-param": true,
+    "property": {
+      "type": "string"
+    },
+    "dictionary-name": "service-instance-id",
+    "dictionary-source": "input",
+    "dependencies": [
+    ]
+  },
+  {
+    "name": "vnf-id",
+    "input-param": true,
+    "property": {
+      "type": "string"
+    },
+    "dictionary-name": "vnf-id",
+    "dictionary-source": "input",
+    "dependencies": []
+  },
+  {
+    "name": "vnf_name",
+    "input-param": false,
+    "property": {
+      "type": "string"
+    },
+    "dictionary-name": "vnf_name",
+    "dictionary-source": "sdnc",
+    "dependencies": [
+      "service-instance-id",
+      "vnf-id"
+    ]
+  },
+  {
+    "name": "private_net_id",
+    "input-param": true,
+    "property": {
+      "type": "string",
+      "metadata": {
+        "transform-template": "${vnf_name}_private2"
+      }
+    },
+    "dictionary-name": "int_pktgen_private_net_id",
+    "dictionary-source": "default",
+    "dependencies": [
+      "vnf_name"
+    ]
+  }
+]
\ No newline at end of file
index 7ab3126..8bc78dd 100644 (file)
@@ -136,7 +136,7 @@ class ResourceAssignmentUtils {
                 ?.let { if (it.contains("$")) it else null }
                 ?.let { template ->
                     val resolutionStore = raRuntimeService.getResolutionStore()
-                        .mapValues { e -> e.value.asText() } as MutableMap<String, Any>
+                        .mapValues { e -> if (e.value.isTextual) e.value.asText() else JacksonUtils.getJson(e.value) } as MutableMap<String, Any>
                     val newValue: JsonNode
                     try {
                         newValue = BluePrintVelocityTemplateService
index b39e709..9a021e8 100644 (file)
@@ -153,6 +153,61 @@ class ResourceResolutionServiceTest {
         }
     }
 
+    @Test
+    @Throws(Exception::class)
+    fun testResolveResourceWithTransform() {
+        runBlocking {
+
+            Assert.assertNotNull("failed to create ResourceResolutionService", resourceResolutionService)
+
+            val bluePrintRuntimeService = BluePrintMetadataUtils.getBluePrintRuntime(
+                "1234",
+                "./../../../../components/model-catalog/blueprint-model/test-blueprint/baseconfiguration"
+            )
+
+            val executionServiceInput =
+                JacksonUtils.readValueFromClassPathFile(
+                    "payload/requests/sample-resourceresolution-request.json",
+                    ExecutionServiceInput::class.java
+                )!!
+
+            val resourceAssignmentRuntimeService =
+                ResourceAssignmentUtils.transformToRARuntimeService(
+                    bluePrintRuntimeService,
+                    "testResolveResourceWithTransform"
+                )
+
+            // Prepare Inputs
+            PayloadUtils.prepareInputsFromWorkflowPayload(
+                bluePrintRuntimeService,
+                executionServiceInput.payload,
+                "resource-assignment"
+            )
+
+            resourceResolutionService.resolveResources(
+                resourceAssignmentRuntimeService,
+                "resource-assignment",
+                "transform",
+                props
+            )
+        }.let { (templateMap, assignmentList) ->
+            assertEquals("This is Sample Velocity Template", templateMap)
+
+            val expectedAssignmentList = mutableListOf(
+                "service-instance-id" to "siid_1234",
+                "vnf-id" to "vnf_1234",
+                "vnf_name" to "temp_vnf",
+                "private_net_id" to "temp_vnf_private2"
+            )
+            assertEquals(expectedAssignmentList.size, assignmentList.size)
+
+            val areEqual = expectedAssignmentList.zip(assignmentList).all { (it1, it2) ->
+                it1.first == it2.name && it1.second == it2.property?.value?.asText() ?: null
+            }
+            assertEquals(true, areEqual)
+        }
+    }
+
     /**
      * Always perform new resolution even if resolution exists in the database.
      */
index 2f07e3b..541d017 100644 (file)
@@ -362,10 +362,29 @@ class ResourceAssignmentUtilsTest {
         ResourceAssignmentUtils
             .setResourceDataValue(resourceAssignment, resourceAssignmentRuntimeService, value)
 
+        val valueJson = "{\"config\":{\"parameter\":\"address\",\"value\":\"0.0.0.0\"}}"
+        resourceAssignmentRuntimeService.putResolutionStore("vnf_config", JacksonUtils.objectMapper.readTree(valueJson))
+        val resourceAssignmentJson = ResourceAssignment()
+        resourceAssignmentJson.name = "vendor_vnf_configuration"
+        resourceAssignmentJson.property = PropertyDefinition()
+        resourceAssignmentJson.property!!.type = "json"
+
+        // Enable transform template
+        resourceAssignmentJson.property!!.metadata =
+            mutableMapOf(METADATA_TRANSFORM_TEMPLATE to "\${vnf_config}")
+
+        ResourceAssignmentUtils
+            .setResourceDataValue(resourceAssignmentJson, resourceAssignmentRuntimeService, JacksonUtils.objectMapper.createObjectNode())
+
         assertEquals(
             "abc-vnf_private2",
             resourceAssignment.property!!.value!!.asText()
         )
+
+        assertEquals(
+            valueJson,
+            resourceAssignmentJson.property!!.value!!.toString()
+        )
     }
 
     private fun initInputMapAndExpectedValuesForPrimitiveType() {