Allow importing service with no instances 19/124719/2
authorKrupaNagabhushan <krupa.nagabhushan@est.tech>
Wed, 6 Oct 2021 15:58:35 +0000 (16:58 +0100)
committerMichael Morris <michael.morris@est.tech>
Fri, 8 Oct 2021 12:51:10 +0000 (12:51 +0000)
Issue-ID: SDC-3751
Signed-off-by: KrupaNagabhushan <krupa.nagabhushan@est.tech>
Change-Id: I383d9fd8901b9c3e968ba18bfc31a520a490be0b

catalog-be/src/main/java/org/openecomp/sdc/be/components/csar/YamlTemplateParsingHandler.java
catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ServiceImportBusinessLogic.java
catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ServiceImportBusinessLogicTest.java

index 0006f83..51794a3 100644 (file)
@@ -274,15 +274,18 @@ public class YamlTemplateParsingHandler {
 
     private Map<String, UploadComponentInstanceInfo> getInstances(String yamlName, Map<String, Object> toscaJson,
                                                                   Map<String, String> createdNodesToscaResourceNames) {
-        Map<String, Object> nodeTemlates = findFirstToscaMapElement(toscaJson, NODE_TEMPLATES).left().on(err -> failIfNoNodeTemplates(yamlName));
-        return getInstances(toscaJson, createdNodesToscaResourceNames, nodeTemlates);
+        Map<String, Object> nodeTemplates = findFirstToscaMapElement(toscaJson, NODE_TEMPLATES).left().on(err -> new HashMap<>());
+        if (nodeTemplates.isEmpty()) {
+            return Collections.emptyMap();
+        }
+        return getInstances(toscaJson, createdNodesToscaResourceNames, nodeTemplates);
     }
 
     private Map<String, UploadComponentInstanceInfo> getInstances(Map<String, Object> toscaJson, Map<String, String> createdNodesToscaResourceNames,
-                                                                  Map<String, Object> nodeTemlates) {
+                                                                  Map<String, Object> nodeTemplates) {
         Map<String, UploadComponentInstanceInfo> moduleComponentInstances;
         Map<String, Object> substitutionMappings = getSubstitutionMappings(toscaJson);
-        moduleComponentInstances = nodeTemlates.entrySet().stream()
+        moduleComponentInstances = nodeTemplates.entrySet().stream()
             .map(node -> buildModuleComponentInstanceInfo(node, substitutionMappings, createdNodesToscaResourceNames))
             .collect(Collectors.toMap(UploadComponentInstanceInfo::getName, i -> i));
         return moduleComponentInstances;
index 0c5acca..8a855e0 100644 (file)
@@ -251,9 +251,6 @@ public class ServiceImportBusinessLogic {
         try {
             ParsedToscaYamlInfo parsedToscaYamlInfo = csarBusinessLogic
                 .getParsedToscaYamlInfo(topologyTemplateYaml, yamlName, nodeTypesInfo, csarInfo, nodeName, service);
-            if (MapUtils.isEmpty(parsedToscaYamlInfo.getInstances())) {
-                throw new ComponentException(ActionStatus.NOT_TOPOLOGY_TOSCA_TEMPLATE, yamlName);
-            }
             log.debug("#createResourceFromYaml - Going to create resource {} and RIs ", service.getName());
             csfyp.setYamlName(yamlName);
             csfyp.setParsedToscaYamlInfo(parsedToscaYamlInfo);
@@ -1294,13 +1291,15 @@ public class ServiceImportBusinessLogic {
         log.debug("************* Going to create all nodes {}", yamlName);
         handleServiceNodeTypes(yamlName, service, topologyTemplateYaml, false, nodeTypesArtifactsToCreate, nodeTypesNewCreatedArtifacts,
             nodeTypesInfo, csarInfo, nodeName);
-        log.debug("************* Going to create all resource instances {}", yamlName);
-        service = createServiceInstances(yamlName, service, uploadComponentInstanceInfoMap, csarInfo.getCreatedNodes());
-        log.debug("************* Going to create all relations {}", yamlName);
-        service = createServiceInstancesRelations(csarInfo.getModifier(), yamlName, service, uploadComponentInstanceInfoMap);
-        log.debug("************* Going to create positions {}", yamlName);
-        compositionBusinessLogic.setPositionsForComponentInstances(service, csarInfo.getModifier().getUserId());
-        log.debug("************* Finished to set positions {}", yamlName);
+        if (!MapUtils.isEmpty(uploadComponentInstanceInfoMap)) {
+            log.debug("************* Going to create all resource instances {}", yamlName);
+            service = createServiceInstances(yamlName, service, uploadComponentInstanceInfoMap, csarInfo.getCreatedNodes());
+            log.debug("************* Going to create all relations {}", yamlName);
+            service = createServiceInstancesRelations(csarInfo.getModifier(), yamlName, service, uploadComponentInstanceInfoMap);
+            log.debug("************* Going to create positions {}", yamlName);
+            compositionBusinessLogic.setPositionsForComponentInstances(service, csarInfo.getModifier().getUserId());
+            log.debug("************* Finished to set positions {}", yamlName);
+        }
         return service;
     }
 
index adfd5de..6fcdd13 100644 (file)
@@ -1131,10 +1131,10 @@ class ServiceImportBusinessLogicTest extends ServiceImportBussinessLogicBaseTest
         Map<String, EnumMap<ArtifactsBusinessLogic.ArtifactOperationEnum, List<ArtifactDefinition>>> nodeTypesArtifactsToCreate = new HashMap<>();
         String nodeName = "org.openecomp.resource.derivedFrom.zxjTestImportServiceAb.test";
 
-        Assertions.assertThrows(ComponentException.class, () -> sIB1
-                .createRIAndRelationsFromYaml(yamlName, service, uploadComponentInstanceInfoMap,
-                        topologyTemplateYaml, nodeTypesNewCreatedArtifacts, nodeTypesInfo,
-                        csarInfo, nodeTypesArtifactsToCreate, nodeName));
+        Assertions.assertNotNull(sIB1
+            .createRIAndRelationsFromYaml(yamlName, service, uploadComponentInstanceInfoMap,
+                topologyTemplateYaml, nodeTypesNewCreatedArtifacts, nodeTypesInfo,
+                csarInfo, nodeTypesArtifactsToCreate, nodeName));
     }
 
     @Test