diff options
2 files changed, 33 insertions, 18 deletions
diff --git a/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceResolutionService.kt b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceResolutionService.kt index f38bfad0d..3b0eda01e 100644 --- a/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceResolutionService.kt +++ b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceResolutionService.kt @@ -73,7 +73,7 @@ interface ResourceResolutionService { nodeTemplateName: String, artifactPrefix: String, properties: Map<String, Any> - ): Pair<String, JsonNode> + ): Pair<String, MutableList<ResourceAssignment>> /** Resolve resources for all the sources defined in a particular resource Definition[resolveDefinition] * with other [resourceDefinitions] dependencies for the sources [sources] @@ -137,12 +137,22 @@ open class ResourceResolutionServiceImpl( val templateMap: MutableMap<String, String> = hashMapOf() val assignmentMap: MutableMap<String, JsonNode> = hashMapOf() artifactNames.forEach { artifactName -> - val (resolvedStringContent, resolvedJsonContent) = resolveResources( + val (resolvedStringContent, resourceAssignmentList) = resolveResources( resourceAssignmentRuntimeService, nodeTemplateName, artifactName, properties ) + val resolvedJsonContent = resourceAssignmentList + .associateBy({ it.name }, { it.property?.value }) + .asJsonNode() + templateMap[artifactName] = resolvedStringContent assignmentMap[artifactName] = resolvedJsonContent + + val failedResolution = resourceAssignmentList.filter { it.status != "success" && it.property?.required == true }.map { it.name } + if (failedResolution.isNotEmpty()) { + log.error("Failed to resolve required resources($failedResolution)") + bluePrintRuntimeService.setBluePrintError(resourceAssignmentRuntimeService.getBluePrintError()) + } } return ResourceResolutionResult(templateMap, assignmentMap) } @@ -152,7 +162,7 @@ open class ResourceResolutionServiceImpl( nodeTemplateName: String, artifactPrefix: String, properties: Map<String, Any> - ): Pair<String, JsonNode> { + ): Pair<String, MutableList<ResourceAssignment>> { // Template Artifact Definition Name val artifactTemplate = "$artifactPrefix-template" @@ -196,9 +206,7 @@ open class ResourceResolutionServiceImpl( ResourceResolutionConstants.RESOURCE_RESOLUTION_INPUT_RESOLUTION_SUMMARY, false ) as Boolean - val assignmentMap = resourceAssignments - .associateBy({ it.name }, { it.property?.value }) - .asJsonNode() + val resolvedParamJsonContent = ResourceAssignmentUtils.generateResourceDataForAssignments(resourceAssignments.toList()) val artifactTemplateDefinition = bluePrintRuntimeService.bluePrintContext().checkNodeTemplateArtifact(nodeTemplateName, artifactTemplate) @@ -227,7 +235,7 @@ open class ResourceResolutionServiceImpl( log.info("Template resolution saved into database successfully : ($properties)") } - return Pair(resolvedContent, assignmentMap) + return Pair(resolvedContent, resourceAssignments) } override suspend fun resolveResourceDefinition( diff --git a/ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceResolutionServiceTest.kt b/ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceResolutionServiceTest.kt index d6fc52230..56a324638 100644 --- a/ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceResolutionServiceTest.kt +++ b/ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceResolutionServiceTest.kt @@ -29,11 +29,10 @@ import org.onap.ccsdk.cds.blueprintsprocessor.core.api.data.ExecutionServiceInpu import org.onap.ccsdk.cds.blueprintsprocessor.core.utils.PayloadUtils import org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution.processor.MockCapabilityScriptRA import org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution.utils.ResourceAssignmentUtils +import org.onap.ccsdk.cds.controllerblueprints.core.asJsonPrimitive import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintConstants import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintError import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintTypes -import org.onap.ccsdk.cds.controllerblueprints.core.asJsonPrimitive -import org.onap.ccsdk.cds.controllerblueprints.core.asJsonType import org.onap.ccsdk.cds.controllerblueprints.core.service.BluePrintContext import org.onap.ccsdk.cds.controllerblueprints.core.utils.BluePrintMetadataUtils import org.onap.ccsdk.cds.controllerblueprints.core.utils.JacksonUtils @@ -136,15 +135,20 @@ class ResourceResolutionServiceTest { "baseconfig", props ) - }.let { (templateMap, assignmentMap) -> + }.let { (templateMap, assignmentList) -> assertEquals("This is Sample Velocity Template", templateMap) - val expectedAssignmentMap = hashMapOf( - "service-instance-id" to "siid_1234", - "vnf-id" to "vnf_1234", - "vnf_name" to "temp_vnf" - ).asJsonType() - assertEquals(expectedAssignmentMap, assignmentMap) + val expectedAssignmentList = mutableListOf( + "service-instance-id" to "siid_1234", + "vnf-id" to "vnf_1234", + "vnf_name" to "temp_vnf" + ) + 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) } } @@ -321,8 +325,11 @@ class ResourceResolutionServiceTest { "vnf-id" : "vnf_1234", "vnf_name" : "temp_vnf" } - """.trimIndent(), it.first) - assertEquals("siid_1234", it.second["service-instance-id"].asText()) + """.trimIndent(), it.first + ) + val areEqual = it.second.first().name == "service-instance-id" && + "siid_1234" == it.second.first().property?.value?.asText() ?: null + assertEquals(true, areEqual) } } |