Merge "Correct Catalog DB beans" into dublin
authorSteve Smokowski <ss835w@att.com>
Wed, 1 May 2019 12:28:49 +0000 (12:28 +0000)
committerGerrit Code Review <gerrit@onap.org>
Wed, 1 May 2019 12:28:49 +0000 (12:28 +0000)
18 files changed:
adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoMulticloudUtils.java
adapters/mso-adapters-rest-interface/src/main/java/org/onap/so/openstack/mappers/StackInfoMapper.java
adapters/mso-catalog-db-adapter/src/main/resources/application.yaml
adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/inventory/create/CreateInventoryTask.java
adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/inventory/create/CreateInventoryTaskTest.java
asdc-controller/src/main/java/org/onap/so/asdc/client/ASDCController.java
asdc-controller/src/main/java/org/onap/so/asdc/installer/heat/ToscaResourceInstaller.java
asdc-controller/src/test/java/org/onap/so/asdc/installer/heat/ToscaResourceInstallerTest.java
bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/VfModuleBase.groovy
bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/ExtractPojosForBB.java
bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateVfModule.groovy
bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateVfModuleTest.groovy
bpmn/so-bpmn-infrastructure-common/src/test/resources/__files/DoCreateVfModule/createVnfARequest.xml
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIUpdateTasks.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/AAIConfigurationResources.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIUpdateTasksTest.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAIConfigurationResourcesTest.java
mso-catalog-db/src/main/java/org/onap/so/db/catalog/data/repository/HeatFilesRepository.java [new file with mode: 0644]

index 7bf68ff..8c570e2 100644 (file)
@@ -158,7 +158,7 @@ public class MsoMulticloudUtils extends MsoHeatUtils implements VduPlugin {
                     sdncDirectives = (String) stackInputs.get(key);
                 }
                 if (key == USER_DIRECTIVES) {
-                    sdncDirectives = (String) stackInputs.get(key);
+                    userDirectives = (String) stackInputs.get(key);
                 }
                 if (key == TEMPLATE_TYPE) {
                     templateType = (String) stackInputs.get(key);
@@ -340,7 +340,7 @@ public class MsoMulticloudUtils extends MsoHeatUtils implements VduPlugin {
                     workloadStack = JSON_MAPPER.treeToValue(node.at("/stacks/0"), Stack.class);
                 } else {
                     workloadStack = new Stack();
-                    workloadStack.setStackStatus(HeatStatus.NOTFOUND.toString());
+                    workloadStack.setStackStatus("NOT_FOUND");
                 }
             } catch (Exception e) {
                 logger.debug("Multicloud Get Exception mapping /stack/0: {} ", node.toString(), e);
index 8efa48c..d830e70 100644 (file)
@@ -95,5 +95,6 @@ public class StackInfoMapper {
         heatStatusMap.put("UPDATE_IN_PROGRESS", HeatStatus.UPDATING);
         heatStatusMap.put("UPDATE_FAILED", HeatStatus.FAILED);
         heatStatusMap.put("UPDATE_COMPLETE", HeatStatus.UPDATED);
+        heatStatusMap.put("NOT_FOUND", HeatStatus.NOTFOUND);
     }
 }
index 07b0008..b1528a0 100644 (file)
@@ -28,7 +28,6 @@ spring:
     password: ${DB_ADMIN_PASSWORD}
     outOfOrder: true
     validateOnMigrate: false
-    repeatableSqlMigrationPrefix: RATT
   jpa:
       show-sql: true
       hibernate:
@@ -53,4 +52,4 @@ management:
       prometheus:
         enabled: true # Whether exporting of metrics to Prometheus is enabled.
         step: 1m # Step size (i.e. reporting frequency) to use.
\ No newline at end of file
index 2bddd43..4958bbc 100644 (file)
@@ -7,9 +7,9 @@
  * 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.
@@ -48,6 +48,7 @@ public class CreateInventoryTask {
     protected void executeExternalTask(ExternalTask externalTask, ExternalTaskService externalTaskService) {
         setupMDC(externalTask);
         boolean success = true;
+        boolean inventoryException = false;
         String auditInventoryString = externalTask.getVariable("auditInventoryResult");
         AAIObjectAuditList auditInventory = null;
         try {
@@ -61,6 +62,10 @@ public class CreateInventoryTask {
                 logger.info("Executing External Task Create Inventory, Retry Number: {} \n {}", auditInventory,
                         externalTask.getRetries());
                 createInventory.createInventory(auditInventory);
+            } catch (InventoryException e) {
+                logger.error("Error during inventory of stack", e);
+                success = false;
+                inventoryException = true;
             } catch (Exception e) {
                 logger.error("Error during inventory of stack", e);
                 success = false;
@@ -68,6 +73,9 @@ public class CreateInventoryTask {
             if (success) {
                 externalTaskService.complete(externalTask);
                 logger.debug("The External Task Id: {}  Successful", externalTask.getId());
+            } else if (inventoryException) {
+                logger.debug("The External Task Id: {}  Failed, Retry not needed", externalTask.getId());
+                externalTaskService.handleBpmnError(externalTask, "AAIInventoryFailure");
             } else {
                 if (externalTask.getRetries() == null) {
                     logger.debug("The External Task Id: {}  Failed, Setting Retries to Default Start Value: {}",
index 03622db..c358d3f 100644 (file)
@@ -10,12 +10,19 @@ import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.MockitoAnnotations;
+import org.onap.so.adapters.audit.AAIObjectAudit;
+import org.onap.so.adapters.audit.AAIObjectAuditList;
+import org.onap.so.client.graphinventory.GraphInventoryCommonObjectMapperProvider;
+import com.fasterxml.jackson.core.JsonProcessingException;
 
 public class CreateInventoryTaskTest {
 
     @Mock
     ExternalTask externalTask;
 
+    @Mock
+    CreateAAIInventory createAAIInventory;
+
     @Mock
     ExternalTaskService externalTaskService;
 
@@ -33,4 +40,17 @@ public class CreateInventoryTaskTest {
         inventoryTask.executeExternalTask(externalTask, externalTaskService);
         Mockito.verify(externalTaskService, times(1)).handleBpmnError(externalTask, "AAIInventoryFailure");
     }
+
+    @Test
+    public void testExecuteExternalTask_InventoryException() throws InventoryException, JsonProcessingException {
+        AAIObjectAuditList object = new AAIObjectAuditList();
+        AAIObjectAudit e = new AAIObjectAudit();
+        e.setDoesObjectExist(true);
+        object.getAuditList().add(e);
+        GraphInventoryCommonObjectMapperProvider objectMapper = new GraphInventoryCommonObjectMapperProvider();
+        doReturn(objectMapper.getMapper().writeValueAsString(e)).when(externalTask).getVariable("auditInventoryResult");
+        Mockito.doThrow(InventoryException.class).when(createAAIInventory).createInventory(Mockito.any());
+        inventoryTask.executeExternalTask(externalTask, externalTaskService);
+        Mockito.verify(externalTaskService, times(1)).handleBpmnError(externalTask, "AAIInventoryFailure");
+    }
 }
index 9b838c4..9597158 100644 (file)
@@ -62,7 +62,9 @@ import org.onap.so.asdc.installer.heat.ToscaResourceInstaller;
 import org.onap.so.asdc.tenantIsolation.DistributionStatus;
 import org.onap.so.asdc.tenantIsolation.WatchdogDistribution;
 import org.onap.so.asdc.util.ASDCNotificationLogging;
+import org.onap.so.db.request.beans.WatchdogComponentDistributionStatus;
 import org.onap.so.db.request.beans.WatchdogDistributionStatus;
+import org.onap.so.db.request.data.repository.WatchdogComponentDistributionStatusRepository;
 import org.onap.so.db.request.data.repository.WatchdogDistributionStatusRepository;
 import org.onap.so.logger.ErrorCode;
 import org.onap.so.logger.MessageEnum;
@@ -91,6 +93,9 @@ public class ASDCController {
     @Autowired
     private WatchdogDistributionStatusRepository wdsRepo;
 
+    @Autowired
+    protected WatchdogComponentDistributionStatusRepository watchdogCDStatusRepository;
+
     @Autowired
     private ASDCConfiguration asdcConfig;
 
@@ -104,6 +109,8 @@ public class ASDCController {
 
     private static final String UUID_PARAM = "(UUID:";
 
+    protected static final String MSO = "SO";
+
     @Autowired
     private WatchdogDistribution wd;
 
@@ -268,6 +275,52 @@ public class ASDCController {
         }
     }
 
+    protected void notifyErrorToAsdc(INotificationData iNotif, ToscaResourceStructure toscaResourceStructure,
+            DistributionStatusEnum deployStatus, VfResourceStructure resourceStructure, String errorMessage) {
+        // do csar lever first
+        this.sendCsarDeployNotification(iNotif, resourceStructure, toscaResourceStructure, deployStatus, errorMessage);
+        // at resource level
+        for (IResourceInstance resource : iNotif.getResources()) {
+            resourceStructure = new VfResourceStructure(iNotif, resource);
+            errorMessage = String.format("Resource with UUID: %s already exists", resource.getResourceUUID());
+            this.sendCsarDeployNotification(iNotif, resourceStructure, toscaResourceStructure, deployStatus,
+                    errorMessage);
+        }
+    }
+
+    protected boolean isCsarAlreadyDeployed(INotificationData iNotif, ToscaResourceStructure toscaResourceStructure) {
+        VfResourceStructure resourceStructure = null;
+        String errorMessage = "";
+        boolean csarAlreadyDeployed = false;
+        DistributionStatusEnum deployStatus = DistributionStatusEnum.DEPLOY_OK;
+        WatchdogComponentDistributionStatus wdStatus =
+                new WatchdogComponentDistributionStatus(iNotif.getDistributionID(), MSO);
+        try {
+            csarAlreadyDeployed = toscaInstaller.isCsarAlreadyDeployed(toscaResourceStructure);
+            if (csarAlreadyDeployed) {
+                deployStatus = DistributionStatusEnum.ALREADY_DEPLOYED;
+                resourceStructure = new VfResourceStructure(iNotif, null);
+                errorMessage = String.format("Csar with UUID: %s already exists",
+                        toscaResourceStructure.getToscaArtifact().getArtifactUUID());
+                wdStatus.setComponentDistributionStatus(DistributionStatusEnum.COMPONENT_DONE_OK.name());
+                watchdogCDStatusRepository.saveAndFlush(wdStatus);
+                logger.error(errorMessage);
+            }
+        } catch (ArtifactInstallerException e) {
+            deployStatus = DistributionStatusEnum.DEPLOY_ERROR;
+            resourceStructure = new VfResourceStructure(iNotif, null);
+            errorMessage = e.getMessage();
+            wdStatus.setComponentDistributionStatus(DistributionStatusEnum.COMPONENT_DONE_ERROR.name());
+            watchdogCDStatusRepository.saveAndFlush(wdStatus);
+            logger.warn("Tosca Checksums don't match, Tosca validation check failed", e);
+        }
+
+        if (deployStatus != DistributionStatusEnum.DEPLOY_OK) {
+            notifyErrorToAsdc(iNotif, toscaResourceStructure, deployStatus, resourceStructure, errorMessage);
+        }
+
+        return csarAlreadyDeployed;
+    }
 
     protected IDistributionClientDownloadResult downloadTheArtifact(IArtifactInfo artifact, String distributionId)
             throws ASDCDownloadException {
@@ -376,23 +429,14 @@ public class ASDCController {
     }
 
     protected void sendCsarDeployNotification(INotificationData iNotif, ResourceStructure resourceStructure,
-            ToscaResourceStructure toscaResourceStructure, boolean deploySuccessful, String errorReason) {
+            ToscaResourceStructure toscaResourceStructure, DistributionStatusEnum statusEnum, String errorReason) {
 
         IArtifactInfo csarArtifact = toscaResourceStructure.getToscaArtifact();
 
-        if (deploySuccessful) {
-
-            this.sendASDCNotification(NotificationType.DEPLOY, csarArtifact.getArtifactURL(),
-                    asdcConfig.getConsumerID(), resourceStructure.getNotification().getDistributionID(),
-                    DistributionStatusEnum.DEPLOY_OK, errorReason, System.currentTimeMillis());
-
-        } else {
-
-            this.sendASDCNotification(NotificationType.DEPLOY, csarArtifact.getArtifactURL(),
-                    asdcConfig.getConsumerID(), resourceStructure.getNotification().getDistributionID(),
-                    DistributionStatusEnum.DEPLOY_ERROR, errorReason, System.currentTimeMillis());
+        this.sendASDCNotification(NotificationType.DEPLOY, csarArtifact.getArtifactURL(), asdcConfig.getConsumerID(),
+                resourceStructure.getNotification().getDistributionID(), statusEnum, errorReason,
+                System.currentTimeMillis());
 
-        }
     }
 
     protected void deployResourceStructure(ResourceStructure resourceStructure,
@@ -657,7 +701,7 @@ public class ASDCController {
         String msoConfigPath = getMsoConfigPath();
         boolean hasVFResource = false;
         ToscaResourceStructure toscaResourceStructure = new ToscaResourceStructure(msoConfigPath);
-        boolean deploySuccessful = true;
+        DistributionStatusEnum deployStatus = DistributionStatusEnum.DEPLOY_OK;
         String errorMessage = null;
         boolean serviceDeployed = false;
 
@@ -667,16 +711,21 @@ public class ASDCController {
             String filePath =
                     msoConfigPath + "/ASDC/" + iArtifact.getArtifactVersion() + "/" + iArtifact.getArtifactName();
             File csarFile = new File(filePath);
-            String csarFilePath = csarFile.getAbsolutePath();
+
+
+            if (isCsarAlreadyDeployed(iNotif, toscaResourceStructure)) {
+                return;
+            }
 
             for (IResourceInstance resource : iNotif.getResources()) {
 
                 String resourceType = resource.getResourceType();
-                String category = resource.getCategory();
+
 
                 logger.info("Processing Resource Type: {}, Model UUID: {}", resourceType, resource.getResourceUUID());
 
-                if ("VF".equals(resourceType)) {
+                if ("VF".equals(resourceType) && resource.getArtifacts() != null
+                        && !resource.getArtifacts().isEmpty()) {
                     resourceStructure = new VfResourceStructure(iNotif, resource);
                 } else if ("PNF".equals(resourceType)) {
                     resourceStructure = new PnfResourceStructure(iNotif, resource);
@@ -694,7 +743,8 @@ public class ASDCController {
                         logger.debug("Processing Resource Type: " + resourceType + " and Model UUID: "
                                 + resourceStructure.getResourceInstance().getResourceUUID());
 
-                        if ("VF".equals(resourceType)) {
+                        if ("VF".equals(resourceType) && resource.getArtifacts() != null
+                                && !resource.getArtifacts().isEmpty()) {
                             hasVFResource = true;
                             for (IArtifactInfo artifact : resource.getArtifacts()) {
                                 IDistributionClientDownloadResult resultArtifact =
@@ -730,7 +780,7 @@ public class ASDCController {
                     }
 
                 } catch (ArtifactInstallerException e) {
-                    deploySuccessful = false;
+                    deployStatus = DistributionStatusEnum.DEPLOY_ERROR;
                     errorMessage = e.getMessage();
                     logger.error("Exception occurred", e);
                 }
@@ -743,12 +793,12 @@ public class ASDCController {
                     try {
                         this.deployResourceStructure(resourceStructure, toscaResourceStructure);
                     } catch (ArtifactInstallerException e) {
-                        deploySuccessful = false;
+                        deployStatus = DistributionStatusEnum.DEPLOY_ERROR;
                         errorMessage = e.getMessage();
                         logger.error("Exception occurred", e);
                     }
                 }
-                this.sendCsarDeployNotification(iNotif, resourceStructure, toscaResourceStructure, deploySuccessful,
+                this.sendCsarDeployNotification(iNotif, resourceStructure, toscaResourceStructure, deployStatus,
                         errorMessage);
             }
 
index 23c31f3..4e97b5f 100644 (file)
@@ -112,6 +112,8 @@ import org.onap.so.db.catalog.data.repository.ConfigurationResourceCustomization
 import org.onap.so.db.catalog.data.repository.ConfigurationResourceRepository;
 import org.onap.so.db.catalog.data.repository.CvnfcCustomizationRepository;
 import org.onap.so.db.catalog.data.repository.ExternalServiceToInternalServiceRepository;
+import org.onap.so.db.catalog.data.repository.HeatEnvironmentRepository;
+import org.onap.so.db.catalog.data.repository.HeatFilesRepository;
 import org.onap.so.db.catalog.data.repository.HeatTemplateRepository;
 import org.onap.so.db.catalog.data.repository.InstanceGroupRepository;
 import org.onap.so.db.catalog.data.repository.NetworkResourceCustomizationRepository;
@@ -121,6 +123,7 @@ import org.onap.so.db.catalog.data.repository.PnfResourceRepository;
 import org.onap.so.db.catalog.data.repository.ServiceProxyResourceCustomizationRepository;
 import org.onap.so.db.catalog.data.repository.ServiceRepository;
 import org.onap.so.db.catalog.data.repository.TempNetworkHeatTemplateRepository;
+import org.onap.so.db.catalog.data.repository.ToscaCsarRepository;
 import org.onap.so.db.catalog.data.repository.VFModuleCustomizationRepository;
 import org.onap.so.db.catalog.data.repository.VFModuleRepository;
 import org.onap.so.db.catalog.data.repository.VnfResourceRepository;
@@ -225,6 +228,12 @@ public class ToscaResourceInstaller {
     @Autowired
     protected HeatTemplateRepository heatRepo;
 
+    @Autowired
+    protected HeatEnvironmentRepository heatEnvRepo;
+
+    @Autowired
+    protected HeatFilesRepository heatFilesRepo;
+
     @Autowired
     protected NetworkResourceCustomizationRepository networkCustomizationRepo;
 
@@ -241,6 +250,9 @@ public class ToscaResourceInstaller {
     @Autowired
     protected ExternalServiceToInternalServiceRepository externalServiceToInternalServiceRepository;
 
+    @Autowired
+    protected ToscaCsarRepository toscaCsarRepo;
+
     @Autowired
     protected PnfResourceRepository pnfResourceRepository;
 
@@ -252,6 +264,31 @@ public class ToscaResourceInstaller {
 
     protected static final Logger logger = LoggerFactory.getLogger(ToscaResourceInstaller.class);
 
+    public boolean isCsarAlreadyDeployed(ToscaResourceStructure toscaResourceStructure)
+            throws ArtifactInstallerException {
+        boolean deployed = false;
+        if (toscaResourceStructure == null) {
+            return deployed;
+        }
+
+        IArtifactInfo inputToscaCsar = toscaResourceStructure.getToscaArtifact();
+        String checkSum = inputToscaCsar.getArtifactChecksum();
+        String artifactUuid = inputToscaCsar.getArtifactUUID();
+
+        Optional<ToscaCsar> toscaCsarObj = toscaCsarRepo.findById(artifactUuid);
+        if (toscaCsarObj.isPresent()) {
+            ToscaCsar toscaCsar = toscaCsarObj.get();
+            if (!toscaCsar.getArtifactChecksum().equalsIgnoreCase(checkSum)) {
+                String errorMessage =
+                        String.format("Csar with UUID: %s already exists.Their checksums don't match", artifactUuid);
+                throw new ArtifactInstallerException(errorMessage);
+            } else if (toscaCsar.getArtifactChecksum().equalsIgnoreCase(checkSum)) {
+                deployed = true;
+            }
+        }
+        return deployed;
+    }
+
     public boolean isResourceAlreadyDeployed(ResourceStructure vfResourceStruct, boolean serviceDeployed)
             throws ArtifactInstallerException {
         boolean status = false;
@@ -1108,77 +1145,95 @@ public class ToscaResourceInstaller {
 
     protected void createHeatTemplateFromArtifact(VfResourceStructure vfResourceStructure,
             ToscaResourceStructure toscaResourceStruct, VfModuleArtifact vfModuleArtifact) {
-        HeatTemplate heatTemplate = new HeatTemplate();
-        List<String> typeList = new ArrayList<>();
-        typeList.add(ASDCConfiguration.HEAT_NESTED);
-        typeList.add(ASDCConfiguration.HEAT_ARTIFACT);
 
-        heatTemplate.setTemplateBody(
-                verifyTheFilePrefixInArtifacts(vfModuleArtifact.getResult(), vfResourceStructure, typeList));
-        heatTemplate.setTemplateName(vfModuleArtifact.getArtifactInfo().getArtifactName());
+        HeatTemplate existingHeatTemplate =
+                heatRepo.findByArtifactUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
 
-        if (vfModuleArtifact.getArtifactInfo().getArtifactTimeout() != null) {
-            heatTemplate.setTimeoutMinutes(vfModuleArtifact.getArtifactInfo().getArtifactTimeout());
-        } else {
-            heatTemplate.setTimeoutMinutes(240);
-        }
+        if (existingHeatTemplate == null) {
+            HeatTemplate heatTemplate = new HeatTemplate();
+            List<String> typeList = new ArrayList<>();
+            typeList.add(ASDCConfiguration.HEAT_NESTED);
+            typeList.add(ASDCConfiguration.HEAT_ARTIFACT);
 
-        heatTemplate.setDescription(vfModuleArtifact.getArtifactInfo().getArtifactDescription());
-        heatTemplate.setVersion(BigDecimalVersion
-                .castAndCheckNotificationVersionToString(vfModuleArtifact.getArtifactInfo().getArtifactVersion()));
-        heatTemplate.setArtifactUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
+            heatTemplate.setTemplateBody(
+                    verifyTheFilePrefixInArtifacts(vfModuleArtifact.getResult(), vfResourceStructure, typeList));
+            heatTemplate.setTemplateName(vfModuleArtifact.getArtifactInfo().getArtifactName());
 
-        if (vfModuleArtifact.getArtifactInfo().getArtifactChecksum() != null) {
-            heatTemplate.setArtifactChecksum(vfModuleArtifact.getArtifactInfo().getArtifactChecksum());
-        } else {
-            heatTemplate.setArtifactChecksum(MANUAL_RECORD);
-        }
+            if (vfModuleArtifact.getArtifactInfo().getArtifactTimeout() != null) {
+                heatTemplate.setTimeoutMinutes(vfModuleArtifact.getArtifactInfo().getArtifactTimeout());
+            } else {
+                heatTemplate.setTimeoutMinutes(240);
+            }
 
-        Set<HeatTemplateParam> heatParam = extractHeatTemplateParameters(vfModuleArtifact.getResult(),
-                vfModuleArtifact.getArtifactInfo().getArtifactUUID());
-        heatTemplate.setParameters(heatParam);
-        vfModuleArtifact.setHeatTemplate(heatTemplate);
+            heatTemplate.setDescription(vfModuleArtifact.getArtifactInfo().getArtifactDescription());
+            heatTemplate.setVersion(BigDecimalVersion
+                    .castAndCheckNotificationVersionToString(vfModuleArtifact.getArtifactInfo().getArtifactVersion()));
+            heatTemplate.setArtifactUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
+
+            if (vfModuleArtifact.getArtifactInfo().getArtifactChecksum() != null) {
+                heatTemplate.setArtifactChecksum(vfModuleArtifact.getArtifactInfo().getArtifactChecksum());
+            } else {
+                heatTemplate.setArtifactChecksum(MANUAL_RECORD);
+            }
+
+            Set<HeatTemplateParam> heatParam = extractHeatTemplateParameters(vfModuleArtifact.getResult(),
+                    vfModuleArtifact.getArtifactInfo().getArtifactUUID());
+            heatTemplate.setParameters(heatParam);
+            vfModuleArtifact.setHeatTemplate(heatTemplate);
+        }
     }
 
     protected void createHeatEnvFromArtifact(VfResourceStructure vfResourceStructure,
             VfModuleArtifact vfModuleArtifact) {
-        HeatEnvironment heatEnvironment = new HeatEnvironment();
-        heatEnvironment.setName(vfModuleArtifact.getArtifactInfo().getArtifactName());
-        List<String> typeList = new ArrayList<>();
-        typeList.add(ASDCConfiguration.HEAT);
-        typeList.add(ASDCConfiguration.HEAT_VOL);
-        heatEnvironment.setEnvironment(
-                verifyTheFilePrefixInArtifacts(vfModuleArtifact.getResult(), vfResourceStructure, typeList));
-        heatEnvironment.setDescription(vfModuleArtifact.getArtifactInfo().getArtifactDescription());
-        heatEnvironment.setVersion(BigDecimalVersion
-                .castAndCheckNotificationVersionToString(vfModuleArtifact.getArtifactInfo().getArtifactVersion()));
-        heatEnvironment.setArtifactUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
-
-        if (vfModuleArtifact.getArtifactInfo().getArtifactChecksum() != null) {
-            heatEnvironment.setArtifactChecksum(vfModuleArtifact.getArtifactInfo().getArtifactChecksum());
-        } else {
-            heatEnvironment.setArtifactChecksum(MANUAL_RECORD);
+
+        HeatEnvironment existingHeatEnvironment =
+                heatEnvRepo.findByArtifactUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
+
+        if (existingHeatEnvironment == null) {
+            HeatEnvironment heatEnvironment = new HeatEnvironment();
+            heatEnvironment.setName(vfModuleArtifact.getArtifactInfo().getArtifactName());
+            List<String> typeList = new ArrayList<>();
+            typeList.add(ASDCConfiguration.HEAT);
+            typeList.add(ASDCConfiguration.HEAT_VOL);
+            heatEnvironment.setEnvironment(
+                    verifyTheFilePrefixInArtifacts(vfModuleArtifact.getResult(), vfResourceStructure, typeList));
+            heatEnvironment.setDescription(vfModuleArtifact.getArtifactInfo().getArtifactDescription());
+            heatEnvironment.setVersion(BigDecimalVersion
+                    .castAndCheckNotificationVersionToString(vfModuleArtifact.getArtifactInfo().getArtifactVersion()));
+            heatEnvironment.setArtifactUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
+
+            if (vfModuleArtifact.getArtifactInfo().getArtifactChecksum() != null) {
+                heatEnvironment.setArtifactChecksum(vfModuleArtifact.getArtifactInfo().getArtifactChecksum());
+            } else {
+                heatEnvironment.setArtifactChecksum(MANUAL_RECORD);
+            }
+            vfModuleArtifact.setHeatEnvironment(heatEnvironment);
         }
-        vfModuleArtifact.setHeatEnvironment(heatEnvironment);
     }
 
     protected void createHeatFileFromArtifact(VfResourceStructure vfResourceStructure,
             VfModuleArtifact vfModuleArtifact, ToscaResourceStructure toscaResourceStruct) {
 
-        HeatFiles heatFile = new HeatFiles();
-        heatFile.setAsdcUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
-        heatFile.setDescription(vfModuleArtifact.getArtifactInfo().getArtifactDescription());
-        heatFile.setFileBody(vfModuleArtifact.getResult());
-        heatFile.setFileName(vfModuleArtifact.getArtifactInfo().getArtifactName());
-        heatFile.setVersion(BigDecimalVersion
-                .castAndCheckNotificationVersionToString(vfModuleArtifact.getArtifactInfo().getArtifactVersion()));
-        toscaResourceStruct.setHeatFilesUUID(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
-        if (vfModuleArtifact.getArtifactInfo().getArtifactChecksum() != null) {
-            heatFile.setArtifactChecksum(vfModuleArtifact.getArtifactInfo().getArtifactChecksum());
-        } else {
-            heatFile.setArtifactChecksum(MANUAL_RECORD);
+        HeatFiles existingHeatFiles =
+                heatFilesRepo.findByArtifactUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
+
+        if (existingHeatFiles == null) {
+            HeatFiles heatFile = new HeatFiles();
+            heatFile.setAsdcUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
+            heatFile.setDescription(vfModuleArtifact.getArtifactInfo().getArtifactDescription());
+            heatFile.setFileBody(vfModuleArtifact.getResult());
+            heatFile.setFileName(vfModuleArtifact.getArtifactInfo().getArtifactName());
+            heatFile.setVersion(BigDecimalVersion
+                    .castAndCheckNotificationVersionToString(vfModuleArtifact.getArtifactInfo().getArtifactVersion()));
+            toscaResourceStruct.setHeatFilesUUID(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
+            if (vfModuleArtifact.getArtifactInfo().getArtifactChecksum() != null) {
+                heatFile.setArtifactChecksum(vfModuleArtifact.getArtifactInfo().getArtifactChecksum());
+            } else {
+                heatFile.setArtifactChecksum(MANUAL_RECORD);
+            }
+            vfModuleArtifact.setHeatFiles(heatFile);
+
         }
-        vfModuleArtifact.setHeatFiles(heatFile);
     }
 
     protected Service createService(ToscaResourceStructure toscaResourceStructure,
@@ -2124,10 +2179,12 @@ public class ToscaResourceInstaller {
             vfModuleCustomization.setVolumeHeatEnv(volVfModuleArtifact.getHeatEnvironment());
             vfModuleArtifact.incrementDeployedInDB();
         } else if (vfModuleArtifact.getArtifactInfo().getArtifactType().equals(ASDCConfiguration.HEAT_ENV)) {
-            if (vfModuleArtifact.getHeatEnvironment().getName().contains("volume")) {
-                vfModuleCustomization.setVolumeHeatEnv(vfModuleArtifact.getHeatEnvironment());
-            } else {
-                vfModuleCustomization.setHeatEnvironment(vfModuleArtifact.getHeatEnvironment());
+            if (vfModuleArtifact.getHeatEnvironment() != null) {
+                if (vfModuleArtifact.getHeatEnvironment().getName().contains("volume")) {
+                    vfModuleCustomization.setVolumeHeatEnv(vfModuleArtifact.getHeatEnvironment());
+                } else {
+                    vfModuleCustomization.setHeatEnvironment(vfModuleArtifact.getHeatEnvironment());
+                }
             }
             vfModuleArtifact.incrementDeployedInDB();
         } else if (vfModuleArtifact.getArtifactInfo().getArtifactType().equals(ASDCConfiguration.HEAT_ARTIFACT)) {
index ce70a25..dd107f7 100644 (file)
@@ -24,12 +24,14 @@ import static com.shazam.shazamcrest.MatcherAssert.assertThat;
 import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 import java.util.ArrayList;
 import java.util.List;
 import org.hibernate.exception.LockAcquisitionException;
@@ -39,6 +41,7 @@ import org.junit.Test;
 import org.junit.rules.ExpectedException;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
+import org.onap.sdc.api.notification.IArtifactInfo;
 import org.onap.sdc.api.notification.IResourceInstance;
 import org.onap.sdc.tosca.parser.api.ISdcCsarHelper;
 import org.onap.sdc.tosca.parser.impl.SdcCsarHelperImpl;
@@ -58,15 +61,17 @@ import org.onap.so.db.catalog.beans.ConfigurationResource;
 import org.onap.so.db.catalog.beans.ConfigurationResourceCustomization;
 import org.onap.so.db.catalog.beans.Service;
 import org.onap.so.db.catalog.beans.ServiceProxyResourceCustomization;
+import org.onap.so.db.catalog.beans.ToscaCsar;
 import org.onap.so.db.catalog.data.repository.AllottedResourceCustomizationRepository;
 import org.onap.so.db.catalog.data.repository.AllottedResourceRepository;
 import org.onap.so.db.catalog.data.repository.ConfigurationResourceCustomizationRepository;
 import org.onap.so.db.catalog.data.repository.ServiceRepository;
+import org.onap.so.db.catalog.data.repository.ToscaCsarRepository;
 import org.onap.so.db.request.beans.WatchdogComponentDistributionStatus;
 import org.onap.so.db.request.data.repository.WatchdogComponentDistributionStatusRepository;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.util.ReflectionTestUtils;
-
+import java.util.Optional;
 
 public class ToscaResourceInstallerTest extends BaseTest {
     @Autowired
@@ -116,6 +121,37 @@ public class ToscaResourceInstallerTest extends BaseTest {
         statusData = new JsonStatusData();
     }
 
+    @Test
+    public void isCsarAlreadyDeployedTest() throws ArtifactInstallerException {
+        IArtifactInfo inputCsar = mock(IArtifactInfo.class);
+        String artifactUuid = "0122c05e-e13a-4c63-b5d2-475ccf13aa74";
+        String checkSum = "MGUzNjJjMzk3OTBkYzExYzQ0MDg2ZDc2M2E2ZjZiZmY=";
+
+        doReturn(checkSum).when(inputCsar).getArtifactChecksum();
+        doReturn(artifactUuid).when(inputCsar).getArtifactUUID();
+
+        doReturn(inputCsar).when(toscaResourceStructure).getToscaArtifact();
+
+        ToscaCsar toscaCsar = mock(ToscaCsar.class);
+
+        Optional<ToscaCsar> returnValue = Optional.of(toscaCsar);
+
+        ToscaCsarRepository toscaCsarRepo = spy(ToscaCsarRepository.class);
+
+
+        doReturn(artifactUuid).when(toscaCsar).getArtifactUUID();
+        doReturn(checkSum).when(toscaCsar).getArtifactChecksum();
+        doReturn(returnValue).when(toscaCsarRepo).findById(artifactUuid);
+
+        ReflectionTestUtils.setField(toscaInstaller, "toscaCsarRepo", toscaCsarRepo);
+
+        boolean isCsarDeployed = toscaInstaller.isCsarAlreadyDeployed(toscaResourceStructure);
+        assertTrue(isCsarDeployed);
+        verify(toscaCsarRepo, times(1)).findById(artifactUuid);
+        verify(toscaResourceStructure, times(1)).getToscaArtifact();
+        verify(toscaCsar, times(2)).getArtifactChecksum();
+    }
+
     @Test
     public void isResourceAlreadyDeployedTest() throws Exception {
         notificationData.setServiceName("serviceName");
index c4ef165..07d8ec9 100644 (file)
@@ -9,9 +9,9 @@
  * 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.
@@ -40,839 +40,924 @@ public abstract class VfModuleBase extends AbstractServiceTaskProcessor {
     private static final Logger logger = LoggerFactory.getLogger( VfModuleBase.class);
 
 
-       protected XmlParser xmlParser = new XmlParser()
-
-       /**
-        * Get the XmlParser.
-        *
-        * @return the XmlParser.
-        */
-       protected XmlParser getXmlParser() {
-               return xmlParser
-       }
-       
-       /**
-        * Find the VF Module with specified ID in the specified Generic VF.  If no such
-        * VF Module is found, null is returned.
-        * 
-        * @param genericVnf The Generic VNF in which to search for the specified VF Moduel.
-        * @param vfModuleId The ID of the VF Module for which to search.
-        * @return a VFModule object for the found VF Module or null if no VF Module is found.
-        */
-       protected VfModule findVfModule(String genericVnf, String vfModuleId) {
-               
-               def genericVnfNode = xmlParser.parseText(genericVnf)
-               def vfModulesNode = utils.getChildNode(genericVnfNode, 'vf-modules')
-               if (vfModulesNode == null) {
-                       return null
-               }
-               def vfModuleList = utils.getIdenticalChildren(vfModulesNode, 'vf-module')
-               for (vfModuleNode in vfModuleList) {
-                       def vfModuleIdNode = utils.getChildNode(vfModuleNode, 'vf-module-id')
-                       if ((vfModuleIdNode != null) && (vfModuleIdNode.text().equals(vfModuleId))) {
-                               return new VfModule(vfModuleNode, (vfModuleList.size() == 1))
-                       }
-               }
-               return null
-       }
-       
-       /**
-        * Transform all '*_network' parameter specifications from the incoming '*-params' root
-        * element to a corresponding list of 'vnf-networks' specifications (typically used when
-        * invoking the VNF Rest Adpater). Each element in '*-params' whose name attribute ends
-        * with '_network' is used to create an 'vnf-networks' element.
-        * 
-        * @param paramsNode A Node representing a '*-params' element.
-        * @return a String of 'vnf-networks' elements, one for each 'param' element whose name
-        * attribute ends with '_network'.
-        */
-       protected String transformNetworkParamsToVnfNetworks(String paramsRootXml) {
-               if ((paramsRootXml == null) || (paramsRootXml.isEmpty())) {
-                       return ''
-               }
-               def String vnfNetworks = ''
-               try {
-                       paramsRootXml = utils.removeXmlNamespaces(paramsRootXml)
-                       def paramsNode = xmlParser.parseText(paramsRootXml)
-                       def params = utils.getIdenticalChildren(paramsNode, 'param')
-                       for (param in params) {
-                               def String attrName = (String) param.attribute('name')
-                               if (attrName.endsWith('_network')) {
-                                       def networkRole = attrName.substring(0, (attrName.length()-'_network'.length()))
-                                       def networkName = param.text()
-                                       String vnfNetwork = """
+    protected XmlParser xmlParser = new XmlParser()
+
+    /**
+     * Get the XmlParser.
+     *
+     * @return the XmlParser.
+     */
+    protected XmlParser getXmlParser() {
+        return xmlParser
+    }
+
+    /**
+     * Find the VF Module with specified ID in the specified Generic VF.  If no such
+     * VF Module is found, null is returned.
+     *
+     * @param genericVnf The Generic VNF in which to search for the specified VF Moduel.
+     * @param vfModuleId The ID of the VF Module for which to search.
+     * @return a VFModule object for the found VF Module or null if no VF Module is found.
+     */
+    protected VfModule findVfModule(String genericVnf, String vfModuleId) {
+
+        def genericVnfNode = xmlParser.parseText(genericVnf)
+        def vfModulesNode = utils.getChildNode(genericVnfNode, 'vf-modules')
+        if (vfModulesNode == null) {
+            return null
+        }
+        def vfModuleList = utils.getIdenticalChildren(vfModulesNode, 'vf-module')
+        for (vfModuleNode in vfModuleList) {
+            def vfModuleIdNode = utils.getChildNode(vfModuleNode, 'vf-module-id')
+            if ((vfModuleIdNode != null) && (vfModuleIdNode.text().equals(vfModuleId))) {
+                return new VfModule(vfModuleNode, (vfModuleList.size() == 1))
+            }
+        }
+        return null
+    }
+
+    /**
+     * Transform all '*_network' parameter specifications from the incoming '*-params' root
+     * element to a corresponding list of 'vnf-networks' specifications (typically used when
+     * invoking the VNF Rest Adpater). Each element in '*-params' whose name attribute ends
+     * with '_network' is used to create an 'vnf-networks' element.
+     *
+     * @param paramsNode A Node representing a '*-params' element.
+     * @return a String of 'vnf-networks' elements, one for each 'param' element whose name
+     * attribute ends with '_network'.
+     */
+    protected String transformNetworkParamsToVnfNetworks(String paramsRootXml) {
+        if ((paramsRootXml == null) || (paramsRootXml.isEmpty())) {
+            return ''
+        }
+        def String vnfNetworks = ''
+        try {
+            paramsRootXml = utils.removeXmlNamespaces(paramsRootXml)
+            def paramsNode = xmlParser.parseText(paramsRootXml)
+            def params = utils.getIdenticalChildren(paramsNode, 'param')
+            for (param in params) {
+                def String attrName = (String) param.attribute('name')
+                if (attrName.endsWith('_network')) {
+                    def networkRole = attrName.substring(0, (attrName.length()-'_network'.length()))
+                    def networkName = param.text()
+                    String vnfNetwork = """
                                                <vnf-networks>
                                                        <network-role>${MsoUtils.xmlEscape(networkRole)}</network-role>
                                                        <network-name>${MsoUtils.xmlEscape(networkName)}</network-name>
                                                </vnf-networks>
                                        """
-                                       vnfNetworks = vnfNetworks + vnfNetwork
-                               }
-                       }
-               } catch (Exception e) {
-                       logger.warn("{} {} {} {} {}", MessageEnum.BPMN_GENERAL_WARNING.toString(),
-                                       'Exception transforming network params to vnfNetworks', "BPMN",
-                                       ErrorCode.UnknownError.getValue(), 'Exception is: \n' + e);
-               }
-               return vnfNetworks
-       }
-
-       /**
-        * Transform the parameter specifications from the incoming '*-params' root element to
-        * a corresponding list of 'entry's (typically used when invoking the VNF Rest Adpater).
-        * Each element in '*-params' is used to create an 'entry' element.
-        *
-        * @param paramsNode A Node representing a '*-params' element.
-        * @return a String of 'entry' elements, one for each 'param' element.
-        */
-       protected String transformParamsToEntries(String paramsRootXml) {
-               if ((paramsRootXml == null) || (paramsRootXml.isEmpty())) {
-                       return ''
-               }
-               def String entries = ''
-               try {
-                       paramsRootXml = utils.removeXmlNamespaces(paramsRootXml)
-                       def paramsNode = xmlParser.parseText(paramsRootXml)
-                       def params = utils.getIdenticalChildren(paramsNode, 'param')
-                       for (param in params) {
-                               def key = (String) param.attribute('name')
-                               if (key == null) {
-                                       key = ''
-                               }
-                               def value = (String) param.text()
-                               String entry = """
+                    vnfNetworks = vnfNetworks + vnfNetwork
+                }
+            }
+        } catch (Exception e) {
+            logger.warn("{} {} {} {} {}", MessageEnum.BPMN_GENERAL_WARNING.toString(),
+                            'Exception transforming network params to vnfNetworks', "BPMN",
+                            ErrorCode.UnknownError.getValue(), 'Exception is: \n' + e);
+        }
+        return vnfNetworks
+    }
+
+    /**
+     * Transform the parameter specifications from the incoming '*-params' root element to
+     * a corresponding list of 'entry's (typically used when invoking the VNF Rest Adpater).
+     * Each element in '*-params' is used to create an 'entry' element.
+     *
+     * @param paramsNode A Node representing a '*-params' element.
+     * @return a String of 'entry' elements, one for each 'param' element.
+     */
+    protected String transformParamsToEntries(String paramsRootXml) {
+        if ((paramsRootXml == null) || (paramsRootXml.isEmpty())) {
+            return ''
+        }
+        def String entries = ''
+        try {
+            paramsRootXml = utils.removeXmlNamespaces(paramsRootXml)
+            def paramsNode = xmlParser.parseText(paramsRootXml)
+            def params = utils.getIdenticalChildren(paramsNode, 'param')
+            for (param in params) {
+                def key = (String) param.attribute('name')
+                if (key == null) {
+                    key = ''
+                }
+                def value = (String) param.text()
+                String entry = """
                                        <entry>
                                                <key>${MsoUtils.xmlEscape(key)}</key>
                                                <value>${MsoUtils.xmlEscape(value)}</value>
                                        </entry>
                                """
-                               entries = entries + entry
-                       }
-               } catch (Exception e) {
-                       logger.warn("{} {} {} {} {}", MessageEnum.BPMN_GENERAL_WARNING.toString(),
-                                       'Exception transforming params to entries', "BPMN",
-                                       ErrorCode.UnknownError.getValue(), 'Exception transforming params to entries' + e);
-               }
-               return entries
-       }
-       
-       /**
-        * Transform the parameter specifications from the incoming '*-params' root element to
-        * a corresponding list of 'entry's (typically used when invoking the VNF Rest Adpater).
-        * Each element in '*-params' is used to create an 'entry' element.
-        *
-        * @param paramsNode A Node representing a '*-params' element.
-        * @return a String of 'entry' elements, one for each 'param' element.
-        */
-       protected String transformVolumeParamsToEntries(String paramsRootXml) {
-               if ((paramsRootXml == null) || (paramsRootXml.isEmpty())) {
-                       return ''
-               }
-               def String entries = ''
-               try {
-                       paramsRootXml = utils.removeXmlNamespaces(paramsRootXml)
-                       def paramsNode = xmlParser.parseText(paramsRootXml)
-                       def params = utils.getIdenticalChildren(paramsNode, 'param')
-                       for (param in params) {
-                               def key = (String) param.attribute('name')
-                               if (key == null) {
-                                       key = ''
-                               }
-                               if ( !(key in ['vnf_id', 'vnf_name', 'vf_module_id', 'vf_module_name'])) {
-                                       def value = (String) param.text()
-                                       String entry = """
+                entries = entries + entry
+            }
+        } catch (Exception e) {
+            logger.warn("{} {} {} {} {}", MessageEnum.BPMN_GENERAL_WARNING.toString(),
+                            'Exception transforming params to entries', "BPMN",
+                            ErrorCode.UnknownError.getValue(), 'Exception transforming params to entries' + e);
+        }
+        return entries
+    }
+
+    /**
+     * Transform the parameter specifications from the incoming '*-params' root element to
+     * a corresponding list of 'entry's (typically used when invoking the VNF Rest Adpater).
+     * Each element in '*-params' is used to create an 'entry' element.
+     *
+     * @param paramsNode A Node representing a '*-params' element.
+     * @return a String of 'entry' elements, one for each 'param' element.
+     */
+    protected String transformVolumeParamsToEntries(String paramsRootXml) {
+        if ((paramsRootXml == null) || (paramsRootXml.isEmpty())) {
+            return ''
+        }
+        def String entries = ''
+        try {
+            paramsRootXml = utils.removeXmlNamespaces(paramsRootXml)
+            def paramsNode = xmlParser.parseText(paramsRootXml)
+            def params = utils.getIdenticalChildren(paramsNode, 'param')
+            for (param in params) {
+                def key = (String) param.attribute('name')
+                if (key == null) {
+                    key = ''
+                }
+                if ( !(key in [
+                    'vnf_id',
+                    'vnf_name',
+                    'vf_module_id',
+                    'vf_module_name'
+                ])) {
+                    def value = (String) param.text()
+                    String entry = """
                                                <entry>
                                                        <key>${MsoUtils.xmlEscape(key)}</key>
                                                        <value>${MsoUtils.xmlEscape(value)}</value>
                                                </entry>
                                        """
-                                       entries = entries + entry
-                               }
-                       }
-               } catch (Exception e) {
-                       logger.warn("{} {} {} {} {}", MessageEnum.BPMN_GENERAL_WARNING.toString(),
-                                       'Exception transforming params to entries', "BPMN",
-                                       ErrorCode.UnknownError.getValue(), 'Exception transforming params to entries' + e);
-               }
-               return entries
-       }
-
-       /*
-        * Parses VNF parameters passed in on the incoming requests and SDNC parameters returned from SDNC get response
-        * and puts them into the format expected by VNF adapter.
-        * @param vnfParamsMap -  map of VNF parameters passed in the request body
-        * @param sdncGetResponse - response string from SDNC GET topology request
-        * @param vnfId
-        * @param vnfName
-        * @param vfModuleId
-        * @param vfModuleName
-        * @param vfModuleIndex - can be null
-        * @return a String of key/value entries for vfModuleParams
-        */
-         
-        
-        protected String buildVfModuleParams(Map<String, String> vnfParamsMap, String sdncGetResponse, String vnfId, String vnfName,
-               String vfModuleId, String vfModuleName, String vfModuleIndex, String environmentContext, String workloadContext) {
-               
-               //Get SDNC Response Data
-               
-               String data = utils.getNodeXml(sdncGetResponse, "response-data")
-
-               String serviceData = utils.getNodeXml(data, "service-data")
-               serviceData = utils.removeXmlPreamble(serviceData)
-               serviceData = utils.removeXmlNamespaces(serviceData)
-               String vnfRequestInfo = utils.getNodeXml(serviceData, "vnf-request-information")
-               String oldVnfId = utils.getNodeXml(vnfRequestInfo, "vnf-id")
-               oldVnfId = utils.removeXmlPreamble(oldVnfId)
-               oldVnfId = utils.removeXmlNamespaces(oldVnfId)
-               serviceData = serviceData.replace(oldVnfId, "")
-               def vnfId1 = utils.getNodeText(serviceData, "vnf-id")
-               
-               Map<String, String> paramsMap = new HashMap<String, String>()
-               
-               if (vfModuleIndex != null) {
-                       paramsMap.put("vf_module_index", "${vfModuleIndex}")
-               }
-
-               // Add-on data
-               paramsMap.put("vnf_id", "${vnfId}")
-               paramsMap.put("vnf_name", "${vnfName}")
-               paramsMap.put("vf_module_id", "${vfModuleId}")
-               paramsMap.put("vf_module_name", "${vfModuleName}")
-               paramsMap.put("environment_context", "${environmentContext}")
-               paramsMap.put("workload_context", "${workloadContext}")
-               
-               InputSource source = new InputSource(new StringReader(data));
-               DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
-               docFactory.setNamespaceAware(true)
-               DocumentBuilder docBuilder = docFactory.newDocumentBuilder()
-               Document responseXml = docBuilder.parse(source)
-
-
-               // Availability Zones Data
-               
-               NodeList aZonesList = responseXml.getElementsByTagNameNS("*", "availability-zones")
-               String aZonePosition = "0"
-               for (int z = 0; z < aZonesList.getLength(); z++) {
-                       Node node = aZonesList.item(z)
-                       if (node.getNodeType() == Node.ELEMENT_NODE) {
-                               Element eElement = (Element) node
-                               String aZoneValue = utils.getElementText(eElement, "availability-zone")
-                               aZonePosition = z.toString()
-                               paramsMap.put("availability_zone_${aZonePosition}", "${aZoneValue}")
-                       }
-               }
-
-               // Map of network-roles and network-tags from vm-networks
-               
-               NodeList vmNetworksListGlobal = responseXml.getElementsByTagNameNS("*", "vm-networks")
-               Map<String, String> networkRoleMap = new HashMap<String, String>()
-               for(int n = 0; n < vmNetworksListGlobal.getLength(); n++){
-                       Node nodeNetworkKey = vmNetworksListGlobal.item(n)
-                       if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
-                               Element eElementNetworkKey = (Element) nodeNetworkKey
-                               String networkRole = utils.getElementText(eElementNetworkKey, "network-role")
-                               String networkRoleValue = utils.getElementText(eElementNetworkKey, "network-role-tag")
-                               if (networkRoleValue.isEmpty()) {
-                                       networkRoleValue = networkRole
-                               }
-                               networkRoleMap.put(networkRole, networkRoleValue)                               
-                       }
-               }               
-
-               // VNF Networks Data
-               
-               StringBuilder sbNet = new StringBuilder()
-               
-               NodeList vnfNetworkList = responseXml.getElementsByTagNameNS("*", "vnf-networks")
-               for (int x = 0; x < vnfNetworkList.getLength(); x++) {
-                       Node node = vnfNetworkList.item(x)
-                       if (node.getNodeType() == Node.ELEMENT_NODE) {
-                               Element eElement = (Element) node
-                               String vnfNetworkKey = utils.getElementText(eElement, "network-role-tag")
-                               String networkRole = utils.getElementText(eElement, "network-role")
-                               if (vnfNetworkKey.isEmpty()) {
-                                       vnfNetworkKey = networkRoleMap.get(networkRole)
-                                       if (vnfNetworkKey == null || vnfNetworkKey.isEmpty()) {
-                                               vnfNetworkKey = networkRole
-                                       }                                       
-                               }                               
-                               String vnfNetworkNeutronIdValue = utils.getElementText(eElement, "neutron-id")
-                               String vnfNetworkNetNameValue = utils.getElementText(eElement, "network-name")
-                               String vnfNetworkSubNetIdValue = utils.getElementText(eElement, "subnet-id")
-                               String vnfNetworkV6SubNetIdValue = utils.getElementText(eElement, "ipv6-subnet-id")
-                               String vnfNetworkNetFqdnValue = utils.getElementText(eElement, "contrail-network-fqdn")
-                               paramsMap.put("${vnfNetworkKey}_net_id", "${vnfNetworkNeutronIdValue}")
-                               paramsMap.put("${vnfNetworkKey}_net_name", "${vnfNetworkNetNameValue}")
-                               paramsMap.put("${vnfNetworkKey}_subnet_id", "${vnfNetworkSubNetIdValue}")
-                               paramsMap.put("${vnfNetworkKey}_v6_subnet_id", "${vnfNetworkV6SubNetIdValue}")
-                               paramsMap.put("${vnfNetworkKey}_net_fqdn", "${vnfNetworkNetFqdnValue}")
-                               
-                               NodeList sriovVlanFilterList = eElement.getElementsByTagNameNS("*","sriov-vlan-filter-list")
-                               StringBuffer sriovFilterBuf = new StringBuffer()
-                               String values = ""
-                               for(int i = 0; i < sriovVlanFilterList.getLength(); i++){
-                                       Node node1 = sriovVlanFilterList.item(i)
-                                       if (node1.getNodeType() == Node.ELEMENT_NODE) {
-                                               Element eElement1 = (Element) node1
-                                               String value = utils.getElementText(eElement1, "sriov-vlan-filter")
-                                               if (i != sriovVlanFilterList.getLength() - 1) {
-                                                       values = sriovFilterBuf.append(value + ",")
-                                               }
-                                               else {
-                                                       values = sriovFilterBuf.append(value);
-                                               }
-                                       }
-                               }
-                               if (!values.isEmpty()) {
-                                               paramsMap.put("${vnfNetworkKey}_ATT_VF_VLAN_FILTER", "${values}")
-                                       }
-                               }
-               }
-
-               // VNF-VMS Data
-               
-               def key
-               def value
-               def networkKey
-               def networkValue
-               def floatingIPKey
-               def floatingIPKeyValue
-               def floatingIPV6Key
-               def floatingIPV6KeyValue
-               StringBuilder sb = new StringBuilder()
-
-               NodeList vmsList = responseXml.getElementsByTagNameNS("*","vnf-vms")
-               for (int x = 0; x < vmsList.getLength(); x++) {
-                       Node node = vmsList.item(x)
-                       if (node.getNodeType() == Node.ELEMENT_NODE) {
-                               Element eElement = (Element) node
-                               key = utils.getElementText(eElement, "vm-type")
-                               String values
-                               String position = "0"
-                               StringBuilder sb1 = new StringBuilder()
-                               NodeList valueList = eElement.getElementsByTagNameNS("*","vm-names")
-                               NodeList vmNetworksList = eElement.getElementsByTagNameNS("*","vm-networks")
-                               for(int i = 0; i < valueList.getLength(); i++){
-                                       Node node1 = valueList.item(i)
-                                       if (node1.getNodeType() == Node.ELEMENT_NODE) {
-                                               Element eElement1 = (Element) node1
-                                               value = utils.getElementText(eElement1, "vm-name")
-                                               if (i != valueList.getLength() - 1) {
-                                                       values = sb1.append(value + ",")
-                                               }
-                                               else {
-                                                       values = sb1.append(value);
-                                               }
-                                               position = i.toString()
-                                               paramsMap.put("${key}_name_${position}", "${value}")
-                                       }
-                               }
-                               for(int n = 0; n < vmNetworksList.getLength(); n++){
-                                       String floatingIpKeyValueStr = ""
-                                       String floatingIpV6KeyValueStr = ""
-                                       Node nodeNetworkKey = vmNetworksList.item(n)
-                                       if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
-                                               Element eElementNetworkKey = (Element) nodeNetworkKey
-                                               String ipAddressValues
-                                               String ipV6AddressValues
-                                               String networkPosition = "0"
-                                               StringBuilder sb2 = new StringBuilder()
-                                               StringBuilder sb3 = new StringBuilder()
-                                               StringBuilder sb4 = new StringBuilder()
-                                               networkKey = utils.getElementText(eElementNetworkKey, "network-role-tag")
-                                               if (networkKey.isEmpty()) {
-                                                       networkKey = utils.getElementText(eElementNetworkKey, "network-role")
-                                               }
-                                               floatingIPKey = key + '_' + networkKey + '_floating_ip'
-                                               floatingIPKeyValue = utils.getElementText(eElementNetworkKey, "floating-ip")
-                                               if(!floatingIPKeyValue.isEmpty()){
-                                                       paramsMap.put("$floatingIPKey", "$floatingIPKeyValue")
-                                               }
-                                               floatingIPV6Key = key + '_' + networkKey + '_floating_v6_ip'
-                                               floatingIPV6KeyValue = utils.getElementText(eElementNetworkKey, "floating-ip-v6")
-                                               if(!floatingIPV6KeyValue.isEmpty()){
-                                                       paramsMap.put("$floatingIPV6Key", "$floatingIPV6KeyValue")
-                                               }
-                                               NodeList networkIpsList = eElementNetworkKey.getElementsByTagNameNS("*","network-ips")
-                                               for(int a = 0; a < networkIpsList.getLength(); a++){
-                                                       Node ipAddress = networkIpsList.item(a)
-                                                       if (ipAddress.getNodeType() == Node.ELEMENT_NODE) {
-                                                               Element eElementIpAddress = (Element) ipAddress
-                                                               String ipAddressValue = utils.getElementText(eElementIpAddress, "ip-address")
-                                                               if (a != networkIpsList.getLength() - 1) {
-                                                                       ipAddressValues = sb2.append(ipAddressValue + ",")
-                                                               }
-                                                               else {
-                                                                       ipAddressValues = sb2.append(ipAddressValue);
-                                                               }
-                                                               networkPosition = a.toString()
-                                                               paramsMap.put("${key}_${networkKey}_ip_${networkPosition}", "${ipAddressValue}")
-                                                       }
-                                               }
-                                               
-                                               paramsMap.put("${key}_${networkKey}_ips", "${ipAddressValues}")
-                                               
-                                               NodeList interfaceRoutePrefixesList = eElementNetworkKey.getElementsByTagNameNS("*","interface-route-prefixes")
-                                               String interfaceRoutePrefixValues = sb3.append("[")
-                                               
-                                               for(int a = 0; a < interfaceRoutePrefixesList.getLength(); a++){
-                                                       Node interfaceRoutePrefix = interfaceRoutePrefixesList.item(a)
-                                                       if (interfaceRoutePrefix.getNodeType() == Node.ELEMENT_NODE) {
-                                                               Element eElementInterfaceRoutePrefix = (Element) interfaceRoutePrefix
-                                                               String interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix-cidr")
-                                                               if (interfaceRoutePrefixValue == null || interfaceRoutePrefixValue.isEmpty()) {
-                                                                       interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix")
-                                                               }
-                                                               if (a != interfaceRoutePrefixesList.getLength() - 1) {
-                                                                       interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}" + ",")
-                                                               }
-                                                               else {
-                                                                       interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}")
-                                                               }
-                                                       }
-                                               }
-                                               interfaceRoutePrefixValues = sb3.append("]")
-                                               if (interfaceRoutePrefixesList.getLength() > 0) {
-                                                       paramsMap.put("${key}_${networkKey}_route_prefixes", "${interfaceRoutePrefixValues}")
-                                               }
-                                               
-                                               NodeList networkIpsV6List = eElementNetworkKey.getElementsByTagNameNS("*","network-ips-v6")
-                                               for(int a = 0; a < networkIpsV6List.getLength(); a++){
-                                                       Node ipV6Address = networkIpsV6List.item(a)
-                                                       if (ipV6Address.getNodeType() == Node.ELEMENT_NODE) {
-                                                               Element eElementIpV6Address = (Element) ipV6Address
-                                                               String ipV6AddressValue = utils.getElementText(eElementIpV6Address, "ip-address-ipv6")
-                                                               if (a != networkIpsV6List.getLength() - 1) {
-                                                                       ipV6AddressValues = sb4.append(ipV6AddressValue + ",")
-                                                               }
-                                                               else {
-                                                                       ipV6AddressValues = sb4.append(ipV6AddressValue);
-                                                               }
-                                                               networkPosition = a.toString()
-                                                               paramsMap.put("${key}_${networkKey}_v6_ip_${networkPosition}", "${ipV6AddressValue}")
-                                                       }
-                                               }
-                                               paramsMap.put("${key}_${networkKey}_v6_ips", "${ipV6AddressValues}")
-                                       }
-                               }
-                               paramsMap.put("${key}_names", "${values}")
-                       }
-               }
-       //SDNC Response Params
-               String sdncResponseParams = ""
-               List<String> sdncResponseParamsToSkip = ["vnf_id", "vf_module_id", "vnf_name", "vf_module_name"]
-               String vnfParamsChildNodes = utils.getChildNodes(data, "vnf-parameters")
-               if(vnfParamsChildNodes == null || vnfParamsChildNodes.length() < 1){
-                       // No SDNC params
-               }else{
-                       NodeList paramsList = responseXml.getElementsByTagNameNS("*", "vnf-parameters")
-                       for (int z = 0; z < paramsList.getLength(); z++) {
-                               Node node = paramsList.item(z)
-                               Element eElement = (Element) node
-                               String vnfParameterName = utils.getElementText(eElement, "vnf-parameter-name")
-                               if (!sdncResponseParamsToSkip.contains(vnfParameterName)) {
-                                       String vnfParameterValue = utils.getElementText(eElement, "vnf-parameter-value")
-                                       paramsMap.put("${vnfParameterName}", "${vnfParameterValue}")
-                               }
-                       }
-               }
-               
-               // Parameters received from the request should overwrite any parameters received from SDNC
-               if (vnfParamsMap != null) {
-                       for (Map.Entry<String, String> entry : vnfParamsMap.entrySet()) {
-                               String vnfKey = entry.getKey()
-                               String vnfValue = entry.getValue()
-                               paramsMap.put("$vnfKey", "$vnfValue")
-                       }
-               }
-               
-               StringBuilder sbParams = new StringBuilder()
-               def vfModuleParams = ""
-               for (Map.Entry<String, String> entry : paramsMap.entrySet()) {
-                       String paramsXml
-                       String paramName = entry.getKey()
-                       String paramValue = entry.getValue()
-                       paramsXml =
-                                       """<entry>
+                    entries = entries + entry
+                }
+            }
+        } catch (Exception e) {
+            logger.warn("{} {} {} {} {}", MessageEnum.BPMN_GENERAL_WARNING.toString(),
+                            'Exception transforming params to entries', "BPMN",
+                            ErrorCode.UnknownError.getValue(), 'Exception transforming params to entries' + e);
+        }
+        return entries
+    }
+
+    /*
+     * Parses VNF parameters passed in on the incoming requests and SDNC parameters returned from SDNC get response
+     * and puts them into the format expected by VNF adapter.
+     * @param vnfParamsMap -  map of VNF parameters passed in the request body
+     * @param sdncGetResponse - response string from SDNC GET topology request
+     * @param vnfId
+     * @param vnfName
+     * @param vfModuleId
+     * @param vfModuleName
+     * @param vfModuleIndex - can be null
+     * @return a String of key/value entries for vfModuleParams
+     */
+
+
+    protected String buildVfModuleParams(Map<String, String> vnfParamsMap, String sdncGetResponse, String vnfId, String vnfName,
+                    String vfModuleId, String vfModuleName, String vfModuleIndex, String environmentContext, String workloadContext) {
+
+        //Get SDNC Response Data
+
+        String data = utils.getNodeXml(sdncGetResponse, "response-data")
+
+        String serviceData = utils.getNodeXml(data, "service-data")
+        serviceData = utils.removeXmlPreamble(serviceData)
+        serviceData = utils.removeXmlNamespaces(serviceData)
+        String vnfRequestInfo = utils.getNodeXml(serviceData, "vnf-request-information")
+        String oldVnfId = utils.getNodeXml(vnfRequestInfo, "vnf-id")
+        oldVnfId = utils.removeXmlPreamble(oldVnfId)
+        oldVnfId = utils.removeXmlNamespaces(oldVnfId)
+        serviceData = serviceData.replace(oldVnfId, "")
+        def vnfId1 = utils.getNodeText(serviceData, "vnf-id")
+
+        Map<String, String> paramsMap = new HashMap<String, String>()
+
+        if (vfModuleIndex != null) {
+            paramsMap.put("vf_module_index", "${vfModuleIndex}")
+        }
+
+        // Add-on data
+        paramsMap.put("vnf_id", "${vnfId}")
+        paramsMap.put("vnf_name", "${vnfName}")
+        paramsMap.put("vf_module_id", "${vfModuleId}")
+        paramsMap.put("vf_module_name", "${vfModuleName}")
+        paramsMap.put("environment_context", "${environmentContext}")
+        paramsMap.put("workload_context", "${workloadContext}")
+
+        InputSource source = new InputSource(new StringReader(data));
+        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
+        docFactory.setNamespaceAware(true)
+        DocumentBuilder docBuilder = docFactory.newDocumentBuilder()
+        Document responseXml = docBuilder.parse(source)
+
+
+        // Availability Zones Data
+
+        NodeList aZonesList = responseXml.getElementsByTagNameNS("*", "availability-zones")
+        String aZonePosition = "0"
+        for (int z = 0; z < aZonesList.getLength(); z++) {
+            Node node = aZonesList.item(z)
+            if (node.getNodeType() == Node.ELEMENT_NODE) {
+                Element eElement = (Element) node
+                String aZoneValue = utils.getElementText(eElement, "availability-zone")
+                aZonePosition = z.toString()
+                paramsMap.put("availability_zone_${aZonePosition}", "${aZoneValue}")
+            }
+        }
+
+        // Map of network-roles and network-tags from vm-networks
+
+        NodeList vmNetworksListGlobal = responseXml.getElementsByTagNameNS("*", "vm-networks")
+        Map<String, String> networkRoleMap = new HashMap<String, String>()
+        for(int n = 0; n < vmNetworksListGlobal.getLength(); n++){
+            Node nodeNetworkKey = vmNetworksListGlobal.item(n)
+            if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
+                Element eElementNetworkKey = (Element) nodeNetworkKey
+                String networkRole = utils.getElementText(eElementNetworkKey, "network-role")
+                String networkRoleValue = utils.getElementText(eElementNetworkKey, "network-role-tag")
+                if (networkRoleValue.isEmpty()) {
+                    networkRoleValue = networkRole
+                }
+                networkRoleMap.put(networkRole, networkRoleValue)
+            }
+        }
+
+        // VNF Networks Data
+
+        StringBuilder sbNet = new StringBuilder()
+
+        NodeList vnfNetworkList = responseXml.getElementsByTagNameNS("*", "vnf-networks")
+        for (int x = 0; x < vnfNetworkList.getLength(); x++) {
+            Node node = vnfNetworkList.item(x)
+            if (node.getNodeType() == Node.ELEMENT_NODE) {
+                Element eElement = (Element) node
+                String vnfNetworkKey = utils.getElementText(eElement, "network-role-tag")
+                String networkRole = utils.getElementText(eElement, "network-role")
+                if (vnfNetworkKey.isEmpty()) {
+                    vnfNetworkKey = networkRoleMap.get(networkRole)
+                    if (vnfNetworkKey == null || vnfNetworkKey.isEmpty()) {
+                        vnfNetworkKey = networkRole
+                    }
+                }
+                String vnfNetworkNeutronIdValue = utils.getElementText(eElement, "neutron-id")
+                String vnfNetworkNetNameValue = utils.getElementText(eElement, "network-name")
+                String vnfNetworkSubNetIdValue = utils.getElementText(eElement, "subnet-id")
+                String vnfNetworkV6SubNetIdValue = utils.getElementText(eElement, "ipv6-subnet-id")
+                String vnfNetworkNetFqdnValue = utils.getElementText(eElement, "contrail-network-fqdn")
+                paramsMap.put("${vnfNetworkKey}_net_id", "${vnfNetworkNeutronIdValue}")
+                paramsMap.put("${vnfNetworkKey}_net_name", "${vnfNetworkNetNameValue}")
+                paramsMap.put("${vnfNetworkKey}_subnet_id", "${vnfNetworkSubNetIdValue}")
+                paramsMap.put("${vnfNetworkKey}_v6_subnet_id", "${vnfNetworkV6SubNetIdValue}")
+                paramsMap.put("${vnfNetworkKey}_net_fqdn", "${vnfNetworkNetFqdnValue}")
+
+                NodeList sriovVlanFilterList = eElement.getElementsByTagNameNS("*","sriov-vlan-filter-list")
+                StringBuffer sriovFilterBuf = new StringBuffer()
+                String values = ""
+                for(int i = 0; i < sriovVlanFilterList.getLength(); i++){
+                    Node node1 = sriovVlanFilterList.item(i)
+                    if (node1.getNodeType() == Node.ELEMENT_NODE) {
+                        Element eElement1 = (Element) node1
+                        String value = utils.getElementText(eElement1, "sriov-vlan-filter")
+                        if (i != sriovVlanFilterList.getLength() - 1) {
+                            values = sriovFilterBuf.append(value + ",")
+                        }
+                        else {
+                            values = sriovFilterBuf.append(value);
+                        }
+                    }
+                }
+                if (!values.isEmpty()) {
+                    paramsMap.put("${vnfNetworkKey}_ATT_VF_VLAN_FILTER", "${values}")
+                }
+            }
+        }
+
+        // VNF-VMS Data
+
+        def key
+        def value
+        def networkKey
+        def networkValue
+        def floatingIPKey
+        def floatingIPKeyValue
+        def floatingIPV6Key
+        def floatingIPV6KeyValue
+        StringBuilder sb = new StringBuilder()
+
+        NodeList vmsList = responseXml.getElementsByTagNameNS("*","vnf-vms")
+        for (int x = 0; x < vmsList.getLength(); x++) {
+            Node node = vmsList.item(x)
+            if (node.getNodeType() == Node.ELEMENT_NODE) {
+                Element eElement = (Element) node
+                key = utils.getElementText(eElement, "vm-type")
+                String values
+                String position = "0"
+                StringBuilder sb1 = new StringBuilder()
+                NodeList valueList = eElement.getElementsByTagNameNS("*","vm-names")
+                NodeList vmNetworksList = eElement.getElementsByTagNameNS("*","vm-networks")
+                for(int i = 0; i < valueList.getLength(); i++){
+                    Node node1 = valueList.item(i)
+                    if (node1.getNodeType() == Node.ELEMENT_NODE) {
+                        Element eElement1 = (Element) node1
+                        value = utils.getElementText(eElement1, "vm-name")
+                        if (i != valueList.getLength() - 1) {
+                            values = sb1.append(value + ",")
+                        }
+                        else {
+                            values = sb1.append(value);
+                        }
+                        position = i.toString()
+                        paramsMap.put("${key}_name_${position}", "${value}")
+                    }
+                }
+                for(int n = 0; n < vmNetworksList.getLength(); n++){
+                    String floatingIpKeyValueStr = ""
+                    String floatingIpV6KeyValueStr = ""
+                    Node nodeNetworkKey = vmNetworksList.item(n)
+                    if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
+                        Element eElementNetworkKey = (Element) nodeNetworkKey
+                        String ipAddressValues
+                        String ipV6AddressValues
+                        String networkPosition = "0"
+                        StringBuilder sb2 = new StringBuilder()
+                        StringBuilder sb3 = new StringBuilder()
+                        StringBuilder sb4 = new StringBuilder()
+                        networkKey = utils.getElementText(eElementNetworkKey, "network-role-tag")
+                        if (networkKey.isEmpty()) {
+                            networkKey = utils.getElementText(eElementNetworkKey, "network-role")
+                        }
+                        floatingIPKey = key + '_' + networkKey + '_floating_ip'
+                        floatingIPKeyValue = utils.getElementText(eElementNetworkKey, "floating-ip")
+                        if(!floatingIPKeyValue.isEmpty()){
+                            paramsMap.put("$floatingIPKey", "$floatingIPKeyValue")
+                        }
+                        floatingIPV6Key = key + '_' + networkKey + '_floating_v6_ip'
+                        floatingIPV6KeyValue = utils.getElementText(eElementNetworkKey, "floating-ip-v6")
+                        if(!floatingIPV6KeyValue.isEmpty()){
+                            paramsMap.put("$floatingIPV6Key", "$floatingIPV6KeyValue")
+                        }
+                        NodeList networkIpsList = eElementNetworkKey.getElementsByTagNameNS("*","network-ips")
+                        for(int a = 0; a < networkIpsList.getLength(); a++){
+                            Node ipAddress = networkIpsList.item(a)
+                            if (ipAddress.getNodeType() == Node.ELEMENT_NODE) {
+                                Element eElementIpAddress = (Element) ipAddress
+                                String ipAddressValue = utils.getElementText(eElementIpAddress, "ip-address")
+                                if (a != networkIpsList.getLength() - 1) {
+                                    ipAddressValues = sb2.append(ipAddressValue + ",")
+                                }
+                                else {
+                                    ipAddressValues = sb2.append(ipAddressValue);
+                                }
+                                networkPosition = a.toString()
+                                paramsMap.put("${key}_${networkKey}_ip_${networkPosition}", "${ipAddressValue}")
+                            }
+                        }
+
+                        paramsMap.put("${key}_${networkKey}_ips", "${ipAddressValues}")
+
+                        NodeList interfaceRoutePrefixesList = eElementNetworkKey.getElementsByTagNameNS("*","interface-route-prefixes")
+                        String interfaceRoutePrefixValues = sb3.append("[")
+
+                        for(int a = 0; a < interfaceRoutePrefixesList.getLength(); a++){
+                            Node interfaceRoutePrefix = interfaceRoutePrefixesList.item(a)
+                            if (interfaceRoutePrefix.getNodeType() == Node.ELEMENT_NODE) {
+                                Element eElementInterfaceRoutePrefix = (Element) interfaceRoutePrefix
+                                String interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix-cidr")
+                                if (interfaceRoutePrefixValue == null || interfaceRoutePrefixValue.isEmpty()) {
+                                    interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix")
+                                }
+                                if (a != interfaceRoutePrefixesList.getLength() - 1) {
+                                    interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}" + ",")
+                                }
+                                else {
+                                    interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}")
+                                }
+                            }
+                        }
+                        interfaceRoutePrefixValues = sb3.append("]")
+                        if (interfaceRoutePrefixesList.getLength() > 0) {
+                            paramsMap.put("${key}_${networkKey}_route_prefixes", "${interfaceRoutePrefixValues}")
+                        }
+
+                        NodeList networkIpsV6List = eElementNetworkKey.getElementsByTagNameNS("*","network-ips-v6")
+                        for(int a = 0; a < networkIpsV6List.getLength(); a++){
+                            Node ipV6Address = networkIpsV6List.item(a)
+                            if (ipV6Address.getNodeType() == Node.ELEMENT_NODE) {
+                                Element eElementIpV6Address = (Element) ipV6Address
+                                String ipV6AddressValue = utils.getElementText(eElementIpV6Address, "ip-address-ipv6")
+                                if (a != networkIpsV6List.getLength() - 1) {
+                                    ipV6AddressValues = sb4.append(ipV6AddressValue + ",")
+                                }
+                                else {
+                                    ipV6AddressValues = sb4.append(ipV6AddressValue);
+                                }
+                                networkPosition = a.toString()
+                                paramsMap.put("${key}_${networkKey}_v6_ip_${networkPosition}", "${ipV6AddressValue}")
+                            }
+                        }
+                        paramsMap.put("${key}_${networkKey}_v6_ips", "${ipV6AddressValues}")
+                    }
+                }
+                paramsMap.put("${key}_names", "${values}")
+            }
+        }
+        //SDNC Response Params
+        String sdncResponseParams = ""
+        List<String> sdncResponseParamsToSkip = [
+            "vnf_id",
+            "vf_module_id",
+            "vnf_name",
+            "vf_module_name"
+        ]
+        String vnfParamsChildNodes = utils.getChildNodes(data, "vnf-parameters")
+        if(vnfParamsChildNodes == null || vnfParamsChildNodes.length() < 1){
+            // No SDNC params
+        }else{
+            NodeList paramsList = responseXml.getElementsByTagNameNS("*", "vnf-parameters")
+            for (int z = 0; z < paramsList.getLength(); z++) {
+                Node node = paramsList.item(z)
+                Element eElement = (Element) node
+                String vnfParameterName = utils.getElementText(eElement, "vnf-parameter-name")
+                if (!sdncResponseParamsToSkip.contains(vnfParameterName)) {
+                    String vnfParameterValue = utils.getElementText(eElement, "vnf-parameter-value")
+                    paramsMap.put("${vnfParameterName}", "${vnfParameterValue}")
+                }
+            }
+        }
+
+        // make the sdnc_directives parameter
+        String sdncDirectives = "{}"
+        StringBuilder sdncDirectivesBuilder = new StringBuilder()
+        sdncDirectivesBuilder.append("{ \"attributes\": [")
+        int pcnt = 0
+        for (Map.Entry<String, String> entry : paramsMap.entrySet()) {
+                String attributeName = entry.getKey()
+                String attributeValue = entry.getValue()
+                if (pcnt > 0) {
+                    sdncDirectivesBuilder.append(",")
+                }
+                pcnt++
+                sdncDirectivesBuilder.append("{\"attribute_name\":\"${attributeName}\",")
+                sdncDirectivesBuilder.append("\"attribute_value\":\"${attributeValue}\"}")
+        }
+        if (pcnt > 0) {
+            sdncDirectives = sdncDirectivesBuilder.append("]}").toString()
+        }
+        paramsMap.put("sdnc_directives", "${sdncDirectives}")
+
+        // Parameters received from the request should overwrite any parameters received from SDNC
+        // Also build the user_directives parameter
+        String userDirectives = "{}"
+        if (vnfParamsMap != null) {
+            StringBuilder userDirectivesBuilder = new StringBuilder()
+            userDirectivesBuilder.append("{ \"attributes\": [")
+            pcnt = 0
+            for (Map.Entry<String, String> entry : vnfParamsMap.entrySet()) {
+                String vnfKey = entry.getKey()
+                String vnfValue = entry.getValue()
+                paramsMap.put("$vnfKey", "$vnfValue")
+                if (pcnt > 0) {
+                    userDirectivesBuilder.append(",")
+                }
+                pcnt++
+                userDirectivesBuilder.append("{\"attribute_name\":\"${vnfKey}\",")
+                userDirectivesBuilder.append("\"attribute_value\":\"${vnfValue}\"}")
+            }
+            if (pcnt > 0) {
+                userDirectives = userDirectivesBuilder.append("]}").toString()
+            }
+        }
+        paramsMap.put("user_directives", "${userDirectives}")
+
+        StringBuilder sbParams = new StringBuilder()
+        def vfModuleParams = ""
+        for (Map.Entry<String, String> entry : paramsMap.entrySet()) {
+            String paramsXml
+            String paramName = entry.getKey()
+            String paramValue = entry.getValue()
+            paramsXml =
+                            """<entry>
                                                        <key>${MsoUtils.xmlEscape(paramName)}</key>
                                                        <value>${MsoUtils.xmlEscape(paramValue)}</value>
                                                </entry>
                                                """
-       
-                       vfModuleParams = sbParams.append(paramsXml)
-               }
-               
-               return vfModuleParams
-       
-       }
-       
-                       
-                       /*
-                        * Parses VNF parameters passed in on the incoming requests and SDNC parameters returned from SDNC get response
-                        * for both VNF and VF Module
-                        * and puts them into the format expected by VNF adapter.
-                        * @param vnfParamsMap -  map of VNF parameters passed in the request body
-                        * @param vnfSdncGetResponse - response string from SDNC GET VNF topology request
-                        * @param vfmoduleSdncGetResponse - response string from SDNC GET VF Module topology request
-                        * @param vnfId
-                        * @param vnfName
-                        * @param vfModuleId
-                        * @param vfModuleName
-                        * @param vfModuleIndex - can be null
-                        * @return a String of key/value entries for vfModuleParams
-                        */                       
-                        
-                        protected String buildVfModuleParamsFromCombinedTopologies(Map<String, String> vnfParamsMap, String vnfSdncGetResponse, String vfmoduleSdncGetResponse, String vnfId, String vnfName,
-                                       String vfModuleId, String vfModuleName, String vfModuleIndex, String environmentContext, String workloadContext) {
-                                       
-                                       // Set up initial parameters
-                                       
-                                       Map<String, String> paramsMap = new HashMap<String, String>()
-                                       
-                                       if (vfModuleIndex != null) {
-                                               paramsMap.put("vf_module_index", "${vfModuleIndex}")
-                                       }
-               
-                                       // Add-on data
-                                       paramsMap.put("vnf_id", "${vnfId}")
-                                       paramsMap.put("vnf_name", "${vnfName}")
-                                       paramsMap.put("vf_module_id", "${vfModuleId}")
-                                       paramsMap.put("vf_module_name", "${vfModuleName}")
-                                       paramsMap.put("environment_context","${environmentContext}")            
-                                       paramsMap.put("workload_context", "${workloadContext}")                 
-                                       
-                                       //Get SDNC Response Data for VNF
-                                       
-                                       String vnfData = utils.getNodeXml(vnfSdncGetResponse, "response-data")
-               
-                                       String vnfTopology = utils.getNodeXml(vnfData, "vnf-topology")
-                                       vnfTopology = utils.removeXmlPreamble(vnfTopology)
-                                       vnfTopology = utils.removeXmlNamespaces(vnfTopology)
-                                                                               
-                                       InputSource sourceVnf = new InputSource(new StringReader(vnfData));
-                                       DocumentBuilderFactory docFactoryVnf = DocumentBuilderFactory.newInstance();
-                                       docFactoryVnf.setNamespaceAware(true)
-                                       DocumentBuilder docBuilderVnf = docFactoryVnf.newDocumentBuilder()
-                                       Document responseXmlVnf = docBuilderVnf.parse(sourceVnf)
-                               
-                                       // Availability Zones Data
-                                       
-                                       NodeList aZonesList = responseXmlVnf.getElementsByTagNameNS("*", "availability-zones")
-                                       String aZonePosition = "0"
-                                       for (int z = 0; z < aZonesList.getLength(); z++) {
-                                               Node node = aZonesList.item(z)
-                                               if (node.getNodeType() == Node.ELEMENT_NODE) {
-                                                       Element eElement = (Element) node
-                                                       String aZoneValue = utils.getElementText(eElement, "availability-zone")
-                                                       aZonePosition = z.toString()
-                                                       paramsMap.put("availability_zone_${aZonePosition}", "${aZoneValue}")
-                                               }
-                                       }
-               
-                                       //Get SDNC Response Data for VF Module
-                                       
-                                       String vfModuleData = utils.getNodeXml(vfmoduleSdncGetResponse, "response-data")
-               
-                                       String vfModuleTopology = utils.getNodeXml(vfModuleData, "vf-module-topology")
-                                       vfModuleTopology = utils.removeXmlPreamble(vfModuleTopology)
-                                       vfModuleTopology = utils.removeXmlNamespaces(vfModuleTopology)
-                                       String vfModuleTopologyIdentifier = utils.getNodeXml(vfModuleTopology, "vf-module-topology-identifier")
-                                       
-                                       InputSource sourceVfModule = new InputSource(new StringReader(vfModuleData));
-                                       DocumentBuilderFactory docFactoryVfModule = DocumentBuilderFactory.newInstance();
-                                       docFactoryVfModule.setNamespaceAware(true)
-                                       DocumentBuilder docBuilderVfModule = docFactoryVfModule.newDocumentBuilder()
-                                       Document responseXmlVfModule = docBuilderVfModule.parse(sourceVfModule)
-                                       
-                                       // Map of network-roles and network-tags from vm-networks
-                                       
-                                       NodeList vmNetworksListGlobal = responseXmlVfModule.getElementsByTagNameNS("*", "vm-networks")
-                                       Map<String, String> networkRoleMap = new HashMap<String, String>()
-                                       for(int n = 0; n < vmNetworksListGlobal.getLength(); n++){
-                                               Node nodeNetworkKey = vmNetworksListGlobal.item(n)
-                                               if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
-                                                       Element eElementNetworkKey = (Element) nodeNetworkKey
-                                                       String networkRole = utils.getElementText(eElementNetworkKey, "network-role")
-                                                       String networkRoleValue = utils.getElementText(eElementNetworkKey, "network-role-tag")
-                                                       if (networkRoleValue.isEmpty()) {
-                                                               networkRoleValue = networkRole
-                                                       }
-                                                       networkRoleMap.put(networkRole, networkRoleValue)
-                                               }
-                                       }                       
-               
-                                       // VNF Networks Data
-                                       
-                                       StringBuilder sbNet = new StringBuilder()
-                                       
-                                       NodeList vnfNetworkList = responseXmlVnf.getElementsByTagNameNS("*", "vnf-networks")
-                                       for (int x = 0; x < vnfNetworkList.getLength(); x++) {
-                                               Node node = vnfNetworkList.item(x)
-                                               if (node.getNodeType() == Node.ELEMENT_NODE) {
-                                                       Element eElement = (Element) node
-                                                       String vnfNetworkKey = utils.getElementText(eElement, "network-role-tag")
-                                                       String networkRole = utils.getElementText(eElement, "network-role")
-                                                       if (vnfNetworkKey.isEmpty()) {
-                                                               vnfNetworkKey = networkRoleMap.get(networkRole)
-                                                               if (vnfNetworkKey == null || vnfNetworkKey.isEmpty()) {
-                                                                       vnfNetworkKey = networkRole
-                                                               }                                       
-                                                       }       
-                                                       String vnfNetworkNeutronIdValue = utils.getElementText(eElement, "neutron-id")
-                                                       String vnfNetworkNetNameValue = utils.getElementText(eElement, "network-name")
-                                                       String vnfNetworkSubNetIdValue = utils.getElementText(eElement, "subnet-id")
-                                                       String vnfNetworkV6SubNetIdValue = utils.getElementText(eElement, "ipv6-subnet-id")
-                                                       String vnfNetworkNetFqdnValue = utils.getElementText(eElement, "contrail-network-fqdn")
-                                                       paramsMap.put("${vnfNetworkKey}_net_id", "${vnfNetworkNeutronIdValue}")
-                                                       paramsMap.put("${vnfNetworkKey}_net_name", "${vnfNetworkNetNameValue}")
-                                                       paramsMap.put("${vnfNetworkKey}_subnet_id", "${vnfNetworkSubNetIdValue}")
-                                                       paramsMap.put("${vnfNetworkKey}_v6_subnet_id", "${vnfNetworkV6SubNetIdValue}")
-                                                       paramsMap.put("${vnfNetworkKey}_net_fqdn", "${vnfNetworkNetFqdnValue}")
-                                                       
-                                                       NodeList sriovVlanFilterList = eElement.getElementsByTagNameNS("*","sriov-vlan-filter-list")
-                                                       StringBuffer sriovFilterBuf = new StringBuffer()
-                                                       String values = ""
-                                                       for(int i = 0; i < sriovVlanFilterList.getLength(); i++){
-                                                               Node node1 = sriovVlanFilterList.item(i)
-                                                               if (node1.getNodeType() == Node.ELEMENT_NODE) {
-                                                                       Element eElement1 = (Element) node1
-                                                                       String value = utils.getElementText(eElement1, "sriov-vlan-filter")
-                                                                       if (i != sriovVlanFilterList.getLength() - 1) {
-                                                                               values = sriovFilterBuf.append(value + ",")
-                                                                       }
-                                                                       else {
-                                                                               values = sriovFilterBuf.append(value);
-                                                                       }
-                                                               }
-                                                       }
-                                                       if (!values.isEmpty()) {
-                                                                       paramsMap.put("${vnfNetworkKey}_ATT_VF_VLAN_FILTER", "${values}")
-                                                               }
-                                                       }
-                                       }
-                                       
-               
-                               
-                                       // VMS Data
-                                       
-                                       def key
-                                       def value
-                                       def networkKey
-                                       def networkValue
-                                       def floatingIPKey
-                                       def floatingIPKeyValue
-                                       def floatingIPV6Key
-                                       def floatingIPV6KeyValue
-                                       StringBuilder sb = new StringBuilder()
-               
-                                       NodeList vmsList = responseXmlVfModule.getElementsByTagNameNS("*","vm")
-                                       for (int x = 0; x < vmsList.getLength(); x++) {
-                                               Node node = vmsList.item(x)
-                                               if (node.getNodeType() == Node.ELEMENT_NODE) {
-                                                       Element eElement = (Element) node
-                                                       key = utils.getElementText(eElement, "vm-type")
-                                                       String values
-                                                       String position = "0"
-                                                       StringBuilder sb1 = new StringBuilder()
-                                                       NodeList valueList = eElement.getElementsByTagNameNS("*","vm-names")
-                                                       NodeList vmNetworksList = eElement.getElementsByTagNameNS("*","vm-networks")
-                                                       for(int i = 0; i < valueList.getLength(); i++){
-                                                               Node node1 = valueList.item(i)
-                                                               if (node1.getNodeType() == Node.ELEMENT_NODE) {
-                                                                       Element eElement1 = (Element) node1
-                                                                       value = utils.getElementText(eElement1, "vm-name")
-                                                                       if (i != valueList.getLength() - 1) {
-                                                                               values = sb1.append(value + ",")
-                                                                       }
-                                                                       else {
-                                                                               values = sb1.append(value);
-                                                                       }
-                                                                       position = i.toString()
-                                                                       paramsMap.put("${key}_name_${position}", "${value}")
-                                                               }
-                                                       }
-                                                       for(int n = 0; n < vmNetworksList.getLength(); n++){
-                                                               String floatingIpKeyValueStr = ""
-                                                               String floatingIpV6KeyValueStr = ""
-                                                               Node nodeNetworkKey = vmNetworksList.item(n)
-                                                               if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
-                                                                       Element eElementNetworkKey = (Element) nodeNetworkKey
-                                                                       String ipAddressValues
-                                                                       String ipV6AddressValues
-                                                                       String networkPosition = "0"
-                                                                       StringBuilder sb2 = new StringBuilder()
-                                                                       StringBuilder sb3 = new StringBuilder()
-                                                                       StringBuilder sb4 = new StringBuilder()
-                                                                       networkKey = utils.getElementText(eElementNetworkKey, "network-role-tag")
-                                                                       if (networkKey.isEmpty()) {
-                                                                               networkKey = utils.getElementText(eElementNetworkKey, "network-role")
-                                                                       }
-                                                                       floatingIPKey = key + '_' + networkKey + '_floating_ip'
-                                                                       floatingIPKeyValue = utils.getElementText(eElementNetworkKey, "floating-ip")
-                                                                       if(!floatingIPKeyValue.isEmpty()){
-                                                                               paramsMap.put("$floatingIPKey", "$floatingIPKeyValue")
-                                                                       }
-                                                                       floatingIPV6Key = key + '_' + networkKey + '_floating_v6_ip'
-                                                                       floatingIPV6KeyValue = utils.getElementText(eElementNetworkKey, "floating-ip-v6")
-                                                                       if(!floatingIPV6KeyValue.isEmpty()){
-                                                                               paramsMap.put("$floatingIPV6Key", "$floatingIPV6KeyValue")
-                                                                       }
-                                                                       NodeList networkIpsList = eElementNetworkKey.getElementsByTagNameNS("*","network-ips")
-                                                                       for(int a = 0; a < networkIpsList.getLength(); a++){
-                                                                               Node ipAddress = networkIpsList.item(a)
-                                                                               if (ipAddress.getNodeType() == Node.ELEMENT_NODE) {
-                                                                                       Element eElementIpAddress = (Element) ipAddress
-                                                                                       String ipAddressValue = utils.getElementText(eElementIpAddress, "ip-address")
-                                                                                       if (a != networkIpsList.getLength() - 1) {
-                                                                                               ipAddressValues = sb2.append(ipAddressValue + ",")
-                                                                                       }
-                                                                                       else {
-                                                                                               ipAddressValues = sb2.append(ipAddressValue);
-                                                                                       }
-                                                                                       networkPosition = a.toString()
-                                                                                       paramsMap.put("${key}_${networkKey}_ip_${networkPosition}", "${ipAddressValue}")
-                                                                               }
-                                                                       }
-                                                                       
-                                                                       paramsMap.put("${key}_${networkKey}_ips", "${ipAddressValues}")
-                                                                       
-                                                                       NodeList interfaceRoutePrefixesList = eElementNetworkKey.getElementsByTagNameNS("*","interface-route-prefixes")
-                                                                       String interfaceRoutePrefixValues = sb3.append("[")
-                                                                       
-                                                                       for(int a = 0; a < interfaceRoutePrefixesList.getLength(); a++){
-                                                                               Node interfaceRoutePrefix = interfaceRoutePrefixesList.item(a)
-                                                                               if (interfaceRoutePrefix.getNodeType() == Node.ELEMENT_NODE) {
-                                                                                       Element eElementInterfaceRoutePrefix = (Element) interfaceRoutePrefix
-                                                                                       String interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix-cidr")
-                                                                                       if (interfaceRoutePrefixValue == null || interfaceRoutePrefixValue.isEmpty()) {
-                                                                                               interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix")
-                                                                                       }
-                                                                                       if (a != interfaceRoutePrefixesList.getLength() - 1) {
-                                                                                               interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}" + ",")
-                                                                                       }
-                                                                                       else {
-                                                                                               interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}")
-                                                                                       }
-                                                                               }
-                                                                       }
-                                                                       interfaceRoutePrefixValues = sb3.append("]")
-                                                                       if (interfaceRoutePrefixesList.getLength() > 0) {
-                                                                               paramsMap.put("${key}_${networkKey}_route_prefixes", "${interfaceRoutePrefixValues}")
-                                                                       }
-                                                                       
-                                                                       NodeList networkIpsV6List = eElementNetworkKey.getElementsByTagNameNS("*","network-ips-v6")
-                                                                       for(int a = 0; a < networkIpsV6List.getLength(); a++){
-                                                                               Node ipV6Address = networkIpsV6List.item(a)
-                                                                               if (ipV6Address.getNodeType() == Node.ELEMENT_NODE) {
-                                                                                       Element eElementIpV6Address = (Element) ipV6Address
-                                                                                       String ipV6AddressValue = utils.getElementText(eElementIpV6Address, "ip-address-ipv6")
-                                                                                       if (a != networkIpsV6List.getLength() - 1) {
-                                                                                               ipV6AddressValues = sb4.append(ipV6AddressValue + ",")
-                                                                                       }
-                                                                                       else {
-                                                                                               ipV6AddressValues = sb4.append(ipV6AddressValue);
-                                                                                       }
-                                                                                       networkPosition = a.toString()
-                                                                                       paramsMap.put("${key}_${networkKey}_v6_ip_${networkPosition}", "${ipV6AddressValue}")
-                                                                               }
-                                                                       }
-                                                                       paramsMap.put("${key}_${networkKey}_v6_ips", "${ipV6AddressValues}")
-                                                               }
-                                                       }
-                                                       paramsMap.put("${key}_names", "${values}")
-                                               }
-                                       }
-                               //SDNC Response Params
-                                       List<String> sdncResponseParamsToSkip = ["vnf_id", "vf_module_id", "vnf_name", "vf_module_name"]
-                                       
-                                       String vnfParamsChildNodes = utils.getChildNodes(vnfData, "param")
-                                       if(vnfParamsChildNodes == null || vnfParamsChildNodes.length() < 1){
-                                               // No SDNC params for VNF
-                                       }else{
-                                               NodeList paramsList = responseXmlVnf.getElementsByTagNameNS("*", "param")
-                                               for (int z = 0; z < paramsList.getLength(); z++) {
-                                                       Node node = paramsList.item(z)
-                                                       Element eElement = (Element) node
-                                                       String vnfParameterName = utils.getElementText(eElement, "name")
-                                                       if (!sdncResponseParamsToSkip.contains(vnfParameterName)) {
-                                                               String vnfParameterValue = utils.getElementText(eElement, "value")
-                                                               paramsMap.put("${vnfParameterName}", "${vnfParameterValue}")
-                                                       }
-                                               }
-                                       }
-                                       
-                                       String vfModuleParamsChildNodes = utils.getChildNodes(vfModuleData, "param")
-                                       if(vfModuleParamsChildNodes == null || vfModuleParamsChildNodes.length() < 1){
-                                               // No SDNC params for VF Module
-                                       }else{
-                                               NodeList paramsList = responseXmlVfModule.getElementsByTagNameNS("*", "param")
-                                               for (int z = 0; z < paramsList.getLength(); z++) {
-                                                       Node node = paramsList.item(z)
-                                                       Element eElement = (Element) node
-                                                       String vnfParameterName = utils.getElementText(eElement, "name")
-                                                       if (!sdncResponseParamsToSkip.contains(vnfParameterName)) {
-                                                               String vnfParameterValue = utils.getElementText(eElement, "value")
-                                                               paramsMap.put("${vnfParameterName}", "${vnfParameterValue}")
-                                                       }
-                                               }
-                                       }
-                                       
-                               // Parameters received from the request should overwrite any parameters received from SDNC
-                               if (vnfParamsMap != null) {
-                                       for (Map.Entry<String, String> entry : vnfParamsMap.entrySet()) {
-                                               String vnfKey = entry.getKey()
-                                               String vnfValue = entry.getValue()
-                                               paramsMap.put("$vnfKey", "$vnfValue")
-                                       }
-                               }
-                               
-                               StringBuilder sbParams = new StringBuilder()
-                               def vfModuleParams = ""
-                               for (Map.Entry<String, String> entry : paramsMap.entrySet()) {
-                                       String paramsXml
-                                       String paramName = entry.getKey()
-                                       String paramValue = entry.getValue()
-                                       paramsXml =
-                                                       """<entry>
+
+            vfModuleParams = sbParams.append(paramsXml)
+        }
+
+        return vfModuleParams
+
+    }
+
+
+    /*
+     * Parses VNF parameters passed in on the incoming requests and SDNC parameters returned from SDNC get response
+     * for both VNF and VF Module
+     * and puts them into the format expected by VNF adapter.
+     * @param vnfParamsMap -  map of VNF parameters passed in the request body
+     * @param vnfSdncGetResponse - response string from SDNC GET VNF topology request
+     * @param vfmoduleSdncGetResponse - response string from SDNC GET VF Module topology request
+     * @param vnfId
+     * @param vnfName
+     * @param vfModuleId
+     * @param vfModuleName
+     * @param vfModuleIndex - can be null
+     * @return a String of key/value entries for vfModuleParams
+     */
+
+    protected String buildVfModuleParamsFromCombinedTopologies(Map<String, String> vnfParamsMap, String vnfSdncGetResponse, String vfmoduleSdncGetResponse, String vnfId, String vnfName,
+                    String vfModuleId, String vfModuleName, String vfModuleIndex, String environmentContext, String workloadContext) {
+
+        // Set up initial parameters
+
+        Map<String, String> paramsMap = new HashMap<String, String>()
+
+        if (vfModuleIndex != null) {
+            paramsMap.put("vf_module_index", "${vfModuleIndex}")
+        }
+
+        // Add-on data
+        paramsMap.put("vnf_id", "${vnfId}")
+        paramsMap.put("vnf_name", "${vnfName}")
+        paramsMap.put("vf_module_id", "${vfModuleId}")
+        paramsMap.put("vf_module_name", "${vfModuleName}")
+        paramsMap.put("environment_context","${environmentContext}")
+        paramsMap.put("workload_context", "${workloadContext}")
+
+        //Get SDNC Response Data for VNF
+
+        String vnfData = utils.getNodeXml(vnfSdncGetResponse, "response-data")
+
+        String vnfTopology = utils.getNodeXml(vnfData, "vnf-topology")
+        vnfTopology = utils.removeXmlPreamble(vnfTopology)
+        vnfTopology = utils.removeXmlNamespaces(vnfTopology)
+
+        InputSource sourceVnf = new InputSource(new StringReader(vnfData));
+        DocumentBuilderFactory docFactoryVnf = DocumentBuilderFactory.newInstance();
+        docFactoryVnf.setNamespaceAware(true)
+        DocumentBuilder docBuilderVnf = docFactoryVnf.newDocumentBuilder()
+        Document responseXmlVnf = docBuilderVnf.parse(sourceVnf)
+
+        // Availability Zones Data
+
+        NodeList aZonesList = responseXmlVnf.getElementsByTagNameNS("*", "availability-zones")
+        String aZonePosition = "0"
+        for (int z = 0; z < aZonesList.getLength(); z++) {
+            Node node = aZonesList.item(z)
+            if (node.getNodeType() == Node.ELEMENT_NODE) {
+                Element eElement = (Element) node
+                String aZoneValue = utils.getElementText(eElement, "availability-zone")
+                aZonePosition = z.toString()
+                paramsMap.put("availability_zone_${aZonePosition}", "${aZoneValue}")
+            }
+        }
+
+        //Get SDNC Response Data for VF Module
+
+        String vfModuleData = utils.getNodeXml(vfmoduleSdncGetResponse, "response-data")
+
+        String vfModuleTopology = utils.getNodeXml(vfModuleData, "vf-module-topology")
+        vfModuleTopology = utils.removeXmlPreamble(vfModuleTopology)
+        vfModuleTopology = utils.removeXmlNamespaces(vfModuleTopology)
+        String vfModuleTopologyIdentifier = utils.getNodeXml(vfModuleTopology, "vf-module-topology-identifier")
+
+        InputSource sourceVfModule = new InputSource(new StringReader(vfModuleData));
+        DocumentBuilderFactory docFactoryVfModule = DocumentBuilderFactory.newInstance();
+        docFactoryVfModule.setNamespaceAware(true)
+        DocumentBuilder docBuilderVfModule = docFactoryVfModule.newDocumentBuilder()
+        Document responseXmlVfModule = docBuilderVfModule.parse(sourceVfModule)
+
+        // Map of network-roles and network-tags from vm-networks
+
+        NodeList vmNetworksListGlobal = responseXmlVfModule.getElementsByTagNameNS("*", "vm-networks")
+        Map<String, String> networkRoleMap = new HashMap<String, String>()
+        for(int n = 0; n < vmNetworksListGlobal.getLength(); n++){
+            Node nodeNetworkKey = vmNetworksListGlobal.item(n)
+            if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
+                Element eElementNetworkKey = (Element) nodeNetworkKey
+                String networkRole = utils.getElementText(eElementNetworkKey, "network-role")
+                String networkRoleValue = utils.getElementText(eElementNetworkKey, "network-role-tag")
+                if (networkRoleValue.isEmpty()) {
+                    networkRoleValue = networkRole
+                }
+                networkRoleMap.put(networkRole, networkRoleValue)
+            }
+        }
+
+        // VNF Networks Data
+
+        StringBuilder sbNet = new StringBuilder()
+
+        NodeList vnfNetworkList = responseXmlVnf.getElementsByTagNameNS("*", "vnf-networks")
+        for (int x = 0; x < vnfNetworkList.getLength(); x++) {
+            Node node = vnfNetworkList.item(x)
+            if (node.getNodeType() == Node.ELEMENT_NODE) {
+                Element eElement = (Element) node
+                String vnfNetworkKey = utils.getElementText(eElement, "network-role-tag")
+                String networkRole = utils.getElementText(eElement, "network-role")
+                if (vnfNetworkKey.isEmpty()) {
+                    vnfNetworkKey = networkRoleMap.get(networkRole)
+                    if (vnfNetworkKey == null || vnfNetworkKey.isEmpty()) {
+                        vnfNetworkKey = networkRole
+                    }
+                }
+                String vnfNetworkNeutronIdValue = utils.getElementText(eElement, "neutron-id")
+                String vnfNetworkNetNameValue = utils.getElementText(eElement, "network-name")
+                String vnfNetworkSubNetIdValue = utils.getElementText(eElement, "subnet-id")
+                String vnfNetworkV6SubNetIdValue = utils.getElementText(eElement, "ipv6-subnet-id")
+                String vnfNetworkNetFqdnValue = utils.getElementText(eElement, "contrail-network-fqdn")
+                paramsMap.put("${vnfNetworkKey}_net_id", "${vnfNetworkNeutronIdValue}")
+                paramsMap.put("${vnfNetworkKey}_net_name", "${vnfNetworkNetNameValue}")
+                paramsMap.put("${vnfNetworkKey}_subnet_id", "${vnfNetworkSubNetIdValue}")
+                paramsMap.put("${vnfNetworkKey}_v6_subnet_id", "${vnfNetworkV6SubNetIdValue}")
+                paramsMap.put("${vnfNetworkKey}_net_fqdn", "${vnfNetworkNetFqdnValue}")
+
+                NodeList sriovVlanFilterList = eElement.getElementsByTagNameNS("*","sriov-vlan-filter-list")
+                StringBuffer sriovFilterBuf = new StringBuffer()
+                String values = ""
+                for(int i = 0; i < sriovVlanFilterList.getLength(); i++){
+                    Node node1 = sriovVlanFilterList.item(i)
+                    if (node1.getNodeType() == Node.ELEMENT_NODE) {
+                        Element eElement1 = (Element) node1
+                        String value = utils.getElementText(eElement1, "sriov-vlan-filter")
+                        if (i != sriovVlanFilterList.getLength() - 1) {
+                            values = sriovFilterBuf.append(value + ",")
+                        }
+                        else {
+                            values = sriovFilterBuf.append(value);
+                        }
+                    }
+                }
+                if (!values.isEmpty()) {
+                    paramsMap.put("${vnfNetworkKey}_ATT_VF_VLAN_FILTER", "${values}")
+                }
+            }
+        }
+
+
+
+        // VMS Data
+
+        def key
+        def value
+        def networkKey
+        def networkValue
+        def floatingIPKey
+        def floatingIPKeyValue
+        def floatingIPV6Key
+        def floatingIPV6KeyValue
+        StringBuilder sb = new StringBuilder()
+
+        NodeList vmsList = responseXmlVfModule.getElementsByTagNameNS("*","vm")
+        for (int x = 0; x < vmsList.getLength(); x++) {
+            Node node = vmsList.item(x)
+            if (node.getNodeType() == Node.ELEMENT_NODE) {
+                Element eElement = (Element) node
+                key = utils.getElementText(eElement, "vm-type")
+                String values
+                String position = "0"
+                StringBuilder sb1 = new StringBuilder()
+                NodeList valueList = eElement.getElementsByTagNameNS("*","vm-names")
+                NodeList vmNetworksList = eElement.getElementsByTagNameNS("*","vm-networks")
+                for(int i = 0; i < valueList.getLength(); i++){
+                    Node node1 = valueList.item(i)
+                    if (node1.getNodeType() == Node.ELEMENT_NODE) {
+                        Element eElement1 = (Element) node1
+                        value = utils.getElementText(eElement1, "vm-name")
+                        if (i != valueList.getLength() - 1) {
+                            values = sb1.append(value + ",")
+                        }
+                        else {
+                            values = sb1.append(value);
+                        }
+                        position = i.toString()
+                        paramsMap.put("${key}_name_${position}", "${value}")
+                    }
+                }
+                for(int n = 0; n < vmNetworksList.getLength(); n++){
+                    String floatingIpKeyValueStr = ""
+                    String floatingIpV6KeyValueStr = ""
+                    Node nodeNetworkKey = vmNetworksList.item(n)
+                    if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
+                        Element eElementNetworkKey = (Element) nodeNetworkKey
+                        String ipAddressValues
+                        String ipV6AddressValues
+                        String networkPosition = "0"
+                        StringBuilder sb2 = new StringBuilder()
+                        StringBuilder sb3 = new StringBuilder()
+                        StringBuilder sb4 = new StringBuilder()
+                        networkKey = utils.getElementText(eElementNetworkKey, "network-role-tag")
+                        if (networkKey.isEmpty()) {
+                            networkKey = utils.getElementText(eElementNetworkKey, "network-role")
+                        }
+                        floatingIPKey = key + '_' + networkKey + '_floating_ip'
+                        floatingIPKeyValue = utils.getElementText(eElementNetworkKey, "floating-ip")
+                        if(!floatingIPKeyValue.isEmpty()){
+                            paramsMap.put("$floatingIPKey", "$floatingIPKeyValue")
+                        }
+                        floatingIPV6Key = key + '_' + networkKey + '_floating_v6_ip'
+                        floatingIPV6KeyValue = utils.getElementText(eElementNetworkKey, "floating-ip-v6")
+                        if(!floatingIPV6KeyValue.isEmpty()){
+                            paramsMap.put("$floatingIPV6Key", "$floatingIPV6KeyValue")
+                        }
+                        NodeList networkIpsList = eElementNetworkKey.getElementsByTagNameNS("*","network-ips")
+                        for(int a = 0; a < networkIpsList.getLength(); a++){
+                            Node ipAddress = networkIpsList.item(a)
+                            if (ipAddress.getNodeType() == Node.ELEMENT_NODE) {
+                                Element eElementIpAddress = (Element) ipAddress
+                                String ipAddressValue = utils.getElementText(eElementIpAddress, "ip-address")
+                                if (a != networkIpsList.getLength() - 1) {
+                                    ipAddressValues = sb2.append(ipAddressValue + ",")
+                                }
+                                else {
+                                    ipAddressValues = sb2.append(ipAddressValue);
+                                }
+                                networkPosition = a.toString()
+                                paramsMap.put("${key}_${networkKey}_ip_${networkPosition}", "${ipAddressValue}")
+                            }
+                        }
+
+                        paramsMap.put("${key}_${networkKey}_ips", "${ipAddressValues}")
+
+                        NodeList interfaceRoutePrefixesList = eElementNetworkKey.getElementsByTagNameNS("*","interface-route-prefixes")
+                        String interfaceRoutePrefixValues = sb3.append("[")
+
+                        for(int a = 0; a < interfaceRoutePrefixesList.getLength(); a++){
+                            Node interfaceRoutePrefix = interfaceRoutePrefixesList.item(a)
+                            if (interfaceRoutePrefix.getNodeType() == Node.ELEMENT_NODE) {
+                                Element eElementInterfaceRoutePrefix = (Element) interfaceRoutePrefix
+                                String interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix-cidr")
+                                if (interfaceRoutePrefixValue == null || interfaceRoutePrefixValue.isEmpty()) {
+                                    interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix")
+                                }
+                                if (a != interfaceRoutePrefixesList.getLength() - 1) {
+                                    interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}" + ",")
+                                }
+                                else {
+                                    interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}")
+                                }
+                            }
+                        }
+                        interfaceRoutePrefixValues = sb3.append("]")
+                        if (interfaceRoutePrefixesList.getLength() > 0) {
+                            paramsMap.put("${key}_${networkKey}_route_prefixes", "${interfaceRoutePrefixValues}")
+                        }
+
+                        NodeList networkIpsV6List = eElementNetworkKey.getElementsByTagNameNS("*","network-ips-v6")
+                        for(int a = 0; a < networkIpsV6List.getLength(); a++){
+                            Node ipV6Address = networkIpsV6List.item(a)
+                            if (ipV6Address.getNodeType() == Node.ELEMENT_NODE) {
+                                Element eElementIpV6Address = (Element) ipV6Address
+                                String ipV6AddressValue = utils.getElementText(eElementIpV6Address, "ip-address-ipv6")
+                                if (a != networkIpsV6List.getLength() - 1) {
+                                    ipV6AddressValues = sb4.append(ipV6AddressValue + ",")
+                                }
+                                else {
+                                    ipV6AddressValues = sb4.append(ipV6AddressValue);
+                                }
+                                networkPosition = a.toString()
+                                paramsMap.put("${key}_${networkKey}_v6_ip_${networkPosition}", "${ipV6AddressValue}")
+                            }
+                        }
+                        paramsMap.put("${key}_${networkKey}_v6_ips", "${ipV6AddressValues}")
+                    }
+                }
+                paramsMap.put("${key}_names", "${values}")
+            }
+        }
+        //SDNC Response Params
+        List<String> sdncResponseParamsToSkip = [
+            "vnf_id",
+            "vf_module_id",
+            "vnf_name",
+            "vf_module_name"
+        ]
+
+        String vnfParamsChildNodes = utils.getChildNodes(vnfData, "param")
+        if(vnfParamsChildNodes == null || vnfParamsChildNodes.length() < 1){
+            // No SDNC params for VNF
+        }else{
+            NodeList paramsList = responseXmlVnf.getElementsByTagNameNS("*", "param")
+            for (int z = 0; z < paramsList.getLength(); z++) {
+                Node node = paramsList.item(z)
+                Element eElement = (Element) node
+                String vnfParameterName = utils.getElementText(eElement, "name")
+                if (!sdncResponseParamsToSkip.contains(vnfParameterName)) {
+                    String vnfParameterValue = utils.getElementText(eElement, "value")
+                    paramsMap.put("${vnfParameterName}", "${vnfParameterValue}")
+                }
+            }
+        }
+
+        String vfModuleParamsChildNodes = utils.getChildNodes(vfModuleData, "param")
+        if(vfModuleParamsChildNodes == null || vfModuleParamsChildNodes.length() < 1){
+            // No SDNC params for VF Module
+        }else{
+            NodeList paramsList = responseXmlVfModule.getElementsByTagNameNS("*", "param")
+            for (int z = 0; z < paramsList.getLength(); z++) {
+                Node node = paramsList.item(z)
+                Element eElement = (Element) node
+                String vnfParameterName = utils.getElementText(eElement, "name")
+                if (!sdncResponseParamsToSkip.contains(vnfParameterName)) {
+                    String vnfParameterValue = utils.getElementText(eElement, "value")
+                    paramsMap.put("${vnfParameterName}", "${vnfParameterValue}")
+                }
+            }
+        }
+
+        // make the sdnc_directives parameter
+        String sdncDirectives = "{}"
+        StringBuilder sdncDirectivesBuilder = new StringBuilder()
+        sdncDirectivesBuilder.append("{ \"attributes\": [")
+        int pcnt = 0
+        for (Map.Entry<String, String> entry : paramsMap.entrySet()) {
+                String attributeName = entry.getKey()
+                String attributeValue = entry.getValue()
+                if (pcnt > 0) {
+                    sdncDirectivesBuilder.append(",")
+                }
+                pcnt++
+                sdncDirectivesBuilder.append("{\"attribute_name\":\"${attributeName}\",")
+                sdncDirectivesBuilder.append("\"attribute_value\":\"${attributeValue}\"}")
+        }
+        if (pcnt > 0) {
+            sdncDirectives = sdncDirectivesBuilder.append("]}").toString()
+        }
+        paramsMap.put("sdnc_directives", "${sdncDirectives}")
+
+
+        // Parameters received from the request should overwrite any parameters received from SDNC
+        String userDirectives = "{}"
+        if (vnfParamsMap != null) {
+            StringBuilder userDirectivesBuilder = new StringBuilder()
+            userDirectivesBuilder.append("{ \"attributes\": [")
+            pcnt = 0
+            for (Map.Entry<String, String> entry : vnfParamsMap.entrySet()) {
+                String vnfKey = entry.getKey()
+                String vnfValue = entry.getValue()
+                paramsMap.put("$vnfKey", "$vnfValue")
+                if (pcnt > 0) {
+                    userDirectivesBuilder.append(",")
+                }
+                pcnt++
+                userDirectivesBuilder.append("{\"attribute_name\":\"${vnfKey}\",")
+                userDirectivesBuilder.append("\"attribute_value\":\"${vnfValue}\"}")
+            }
+            if (pcnt > 0) {
+                userDirectives = userDirectivesBuilder.append("]}").toString()
+            }
+        }
+        paramsMap.put("user_directives", "${userDirectives}")
+
+        StringBuilder sbParams = new StringBuilder()
+        def vfModuleParams = ""
+        for (Map.Entry<String, String> entry : paramsMap.entrySet()) {
+            String paramsXml
+            String paramName = entry.getKey()
+            String paramValue = entry.getValue()
+            paramsXml =
+                            """<entry>
                                                <key>${MsoUtils.xmlEscape(paramName)}</key>
                                                <value>${MsoUtils.xmlEscape(paramValue)}</value>
                                        </entry>
                                        """
-               
-                                       vfModuleParams = sbParams.append(paramsXml)
-                               }
-                               
-                               return vfModuleParams
-                               
-                       }
-       
-
-       /*
-        * VBNG specific method that parses VNF parameters passed in on the 
-        * incoming requests and SDNC parameters returned from SDNC get response
-        * and puts them into the format expected by VNF adapter.
-        * @param vnfParamsMap -  map of VNF parameters passed in the request body
-        * @param sdncGetResponse - response string from SDNC GET topology request
-        * @param vnfId
-        * @param vnfName
-        * @param vfModuleId
-        * @param vfModuleName
-        * @return a String of key/value entries for vfModuleParams
-        */
-       
-       protected String buildVfModuleParamsVbng(String vnfParams, String sdncGetResponse, String vnfId, String vnfName,
-                       String vfModuleId, String vfModuleName) {
-                               
-               //Get SDNC Response Data
-                               
-               String data = utils.getNodeXml(sdncGetResponse, "response-data")
-       
-               
-       
-               // Add-on data
-               String vnfInfo =
-                       """<entry>
+
+            vfModuleParams = sbParams.append(paramsXml)
+        }
+
+        return vfModuleParams
+
+    }
+
+
+    /*
+     * VBNG specific method that parses VNF parameters passed in on the
+     * incoming requests and SDNC parameters returned from SDNC get response
+     * and puts them into the format expected by VNF adapter.
+     * @param vnfParamsMap -  map of VNF parameters passed in the request body
+     * @param sdncGetResponse - response string from SDNC GET topology request
+     * @param vnfId
+     * @param vnfName
+     * @param vfModuleId
+     * @param vfModuleName
+     * @return a String of key/value entries for vfModuleParams
+     */
+
+    protected String buildVfModuleParamsVbng(String vnfParams, String sdncGetResponse, String vnfId, String vnfName,
+                    String vfModuleId, String vfModuleName) {
+
+        //Get SDNC Response Data
+
+        String data = utils.getNodeXml(sdncGetResponse, "response-data")
+
+
+
+        // Add-on data
+        String vnfInfo =
+                        """<entry>
                                <key>vnf_id</key>
                                <value>${MsoUtils.xmlEscape(vnfId)}</value>
                        </entry>
@@ -889,347 +974,352 @@ public abstract class VfModuleBase extends AbstractServiceTaskProcessor {
                                <value>${MsoUtils.xmlEscape(vfModuleName)}</value>
                        </entry>"""
 
-               logger.debug("vnfInfo: " + vnfInfo)
-               InputSource source = new InputSource(new StringReader(data));
-               DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
-               docFactory.setNamespaceAware(true)
-               DocumentBuilder docBuilder = docFactory.newDocumentBuilder()
-               Document responseXml = docBuilder.parse(source)
-
-
-               // Availability Zones Data
-               String aZones = ""
-               StringBuilder sbAZone = new StringBuilder()
-               NodeList aZonesList = responseXml.getElementsByTagNameNS("*", "availability-zones")
-               String aZonePosition = "0"
-               for (int z = 0; z < aZonesList.getLength(); z++) {
-                       Node node = aZonesList.item(z)
-                       if (node.getNodeType() == Node.ELEMENT_NODE) {
-                               Element eElement = (Element) node
-                               String aZoneValue = utils.getElementText(eElement, "availability-zone")
-                               aZonePosition = z.toString()
-                               String aZoneXml =
-                                       """<entry>
+        logger.debug("vnfInfo: " + vnfInfo)
+        InputSource source = new InputSource(new StringReader(data));
+        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
+        docFactory.setNamespaceAware(true)
+        DocumentBuilder docBuilder = docFactory.newDocumentBuilder()
+        Document responseXml = docBuilder.parse(source)
+
+
+        // Availability Zones Data
+        String aZones = ""
+        StringBuilder sbAZone = new StringBuilder()
+        NodeList aZonesList = responseXml.getElementsByTagNameNS("*", "availability-zones")
+        String aZonePosition = "0"
+        for (int z = 0; z < aZonesList.getLength(); z++) {
+            Node node = aZonesList.item(z)
+            if (node.getNodeType() == Node.ELEMENT_NODE) {
+                Element eElement = (Element) node
+                String aZoneValue = utils.getElementText(eElement, "availability-zone")
+                aZonePosition = z.toString()
+                String aZoneXml =
+                                """<entry>
                                                <key>availability_zone_${MsoUtils.xmlEscape(aZonePosition)}</key>
                                                <value>${MsoUtils.xmlEscape(aZoneValue)}</value>
                                        </entry>"""
-                               aZones = sbAZone.append(aZoneXml)
-                       }
-               }
-       
-               // Map of network-roles and network-tags from vm-networks
-               
-               NodeList vmNetworksListGlobal = responseXml.getElementsByTagNameNS("*", "vm-networks")
-               Map<String, String> networkRoleMap = new HashMap<String, String>()
-               for(int n = 0; n < vmNetworksListGlobal.getLength(); n++){
-                       Node nodeNetworkKey = vmNetworksListGlobal.item(n)
-                       if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
-                               Element eElementNetworkKey = (Element) nodeNetworkKey
-                               String networkRole = utils.getElementText(eElementNetworkKey, "network-role")
-                               String networkRoleValue = utils.getElementText(eElementNetworkKey, "network-role-tag")
-                               if (networkRoleValue.isEmpty()) {
-                                       networkRoleValue = networkRole
-                               }
-                               networkRoleMap.put(networkRole, networkRoleValue)
-                       }
-               }
-       
-               // VNF Networks Data
-               String vnfNetworkNetId = ""
-               String vnfNetworkNetName = ""
-               String vnfNetworkSubNetId = ""
-               String vnfNetworkV6SubNetId = ""
-               String vnfNetworkNetFqdn = ""
-               String vnfNetworksSriovVlanFilters = ""
-               StringBuilder sbNet = new StringBuilder()
-               StringBuilder sbNet2 = new StringBuilder()
-               StringBuilder sbNet3 = new StringBuilder()
-               StringBuilder sbNet4 = new StringBuilder()
-               StringBuilder sbNet5 = new StringBuilder()
-               StringBuilder sbNet6 = new StringBuilder()
-               NodeList vnfNetworkList = responseXml.getElementsByTagNameNS("*", "vnf-networks")
-               for (int x = 0; x < vnfNetworkList.getLength(); x++) {
-                       Node node = vnfNetworkList.item(x)
-                       if (node.getNodeType() == Node.ELEMENT_NODE) {
-                               Element eElement = (Element) node
-                               String vnfNetworkKey = utils.getElementText(eElement, "network-role-tag")
-                               String networkRole = utils.getElementText(eElement, "network-role")
-                               if (vnfNetworkKey.isEmpty()) {
-                                       vnfNetworkKey = networkRoleMap.get(networkRole)
-                                       if (vnfNetworkKey == null || vnfNetworkKey.isEmpty()) {
-                                               vnfNetworkKey = networkRole
-                                       }                                       
-                               }
-                               String vnfNetworkNeutronIdValue = utils.getElementText(eElement, "neutron-id")
-                               String vnfNetworkNetNameValue = utils.getElementText(eElement, "network-name")
-                               String vnfNetworkSubNetIdValue = utils.getElementText(eElement, "subnet-id")
-                               String vnfNetworkV6SubNetIdValue = utils.getElementText(eElement, "ipv6-subnet-id")
-                               String vnfNetworkNetFqdnValue = utils.getElementText(eElement, "contrail-network-fqdn")
-                               String vnfNetworkNetIdXml =
-                                               """<entry>
+                aZones = sbAZone.append(aZoneXml)
+            }
+        }
+
+        // Map of network-roles and network-tags from vm-networks
+
+        NodeList vmNetworksListGlobal = responseXml.getElementsByTagNameNS("*", "vm-networks")
+        Map<String, String> networkRoleMap = new HashMap<String, String>()
+        for(int n = 0; n < vmNetworksListGlobal.getLength(); n++){
+            Node nodeNetworkKey = vmNetworksListGlobal.item(n)
+            if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
+                Element eElementNetworkKey = (Element) nodeNetworkKey
+                String networkRole = utils.getElementText(eElementNetworkKey, "network-role")
+                String networkRoleValue = utils.getElementText(eElementNetworkKey, "network-role-tag")
+                if (networkRoleValue.isEmpty()) {
+                    networkRoleValue = networkRole
+                }
+                networkRoleMap.put(networkRole, networkRoleValue)
+            }
+        }
+
+        // VNF Networks Data
+        String vnfNetworkNetId = ""
+        String vnfNetworkNetName = ""
+        String vnfNetworkSubNetId = ""
+        String vnfNetworkV6SubNetId = ""
+        String vnfNetworkNetFqdn = ""
+        String vnfNetworksSriovVlanFilters = ""
+        StringBuilder sbNet = new StringBuilder()
+        StringBuilder sbNet2 = new StringBuilder()
+        StringBuilder sbNet3 = new StringBuilder()
+        StringBuilder sbNet4 = new StringBuilder()
+        StringBuilder sbNet5 = new StringBuilder()
+        StringBuilder sbNet6 = new StringBuilder()
+        NodeList vnfNetworkList = responseXml.getElementsByTagNameNS("*", "vnf-networks")
+        for (int x = 0; x < vnfNetworkList.getLength(); x++) {
+            Node node = vnfNetworkList.item(x)
+            if (node.getNodeType() == Node.ELEMENT_NODE) {
+                Element eElement = (Element) node
+                String vnfNetworkKey = utils.getElementText(eElement, "network-role-tag")
+                String networkRole = utils.getElementText(eElement, "network-role")
+                if (vnfNetworkKey.isEmpty()) {
+                    vnfNetworkKey = networkRoleMap.get(networkRole)
+                    if (vnfNetworkKey == null || vnfNetworkKey.isEmpty()) {
+                        vnfNetworkKey = networkRole
+                    }
+                }
+                String vnfNetworkNeutronIdValue = utils.getElementText(eElement, "neutron-id")
+                String vnfNetworkNetNameValue = utils.getElementText(eElement, "network-name")
+                String vnfNetworkSubNetIdValue = utils.getElementText(eElement, "subnet-id")
+                String vnfNetworkV6SubNetIdValue = utils.getElementText(eElement, "ipv6-subnet-id")
+                String vnfNetworkNetFqdnValue = utils.getElementText(eElement, "contrail-network-fqdn")
+                String vnfNetworkNetIdXml =
+                                """<entry>
                                                        <key>${MsoUtils.xmlEscape(vnfNetworkKey)}_net_id</key>
                                                        <value>${MsoUtils.xmlEscape(vnfNetworkNeutronIdValue)}</value>
                                                </entry>"""
-                               vnfNetworkNetId = sbNet.append(vnfNetworkNetIdXml)
-                               String vnfNetworkNetNameXml =
-                                               """<entry>
+                vnfNetworkNetId = sbNet.append(vnfNetworkNetIdXml)
+                String vnfNetworkNetNameXml =
+                                """<entry>
                                                <key>${MsoUtils.xmlEscape(vnfNetworkKey)}_net_name</key>
                                                <value>${MsoUtils.xmlEscape(vnfNetworkNetNameValue)}</value>
                                </entry>"""
-                               vnfNetworkNetName = sbNet2.append(vnfNetworkNetNameXml)
-                               String vnfNetworkSubNetIdXml =
-                                               """<entry>
+                vnfNetworkNetName = sbNet2.append(vnfNetworkNetNameXml)
+                String vnfNetworkSubNetIdXml =
+                                """<entry>
                                                <key>${MsoUtils.xmlEscape(vnfNetworkKey)}_subnet_id</key>
                                                <value>${MsoUtils.xmlEscape(vnfNetworkSubNetIdValue)}</value>
                                </entry>"""
-                               vnfNetworkSubNetId = sbNet3.append(vnfNetworkSubNetIdXml)
-                               String vnfNetworkV6SubNetIdXml =
-                                               """<entry>
+                vnfNetworkSubNetId = sbNet3.append(vnfNetworkSubNetIdXml)
+                String vnfNetworkV6SubNetIdXml =
+                                """<entry>
                                                <key>${MsoUtils.xmlEscape(vnfNetworkKey)}_v6_subnet_id</key>
                                                <value>${MsoUtils.xmlEscape(vnfNetworkV6SubNetIdValue)}</value>
                                </entry>"""
-                               vnfNetworkV6SubNetId = sbNet5.append(vnfNetworkV6SubNetIdXml)
-                               String vnfNetworkNetFqdnXml =
-                                               """<entry>
+                vnfNetworkV6SubNetId = sbNet5.append(vnfNetworkV6SubNetIdXml)
+                String vnfNetworkNetFqdnXml =
+                                """<entry>
                                                <key>${MsoUtils.xmlEscape(vnfNetworkKey)}_net_fqdn</key>
                                                <value>${MsoUtils.xmlEscape(vnfNetworkNetFqdnValue)}</value>
                                </entry>"""
-                               vnfNetworkNetFqdn = sbNet4.append(vnfNetworkNetFqdnXml)
-                                               
-                               NodeList sriovVlanFilterList = eElement.getElementsByTagNameNS("*","sriov-vlan-filter-list")
-                               StringBuffer sriovFilterBuf = new StringBuffer()
-                               String values = ""
-                               for(int i = 0; i < sriovVlanFilterList.getLength(); i++){
-                                       Node node1 = sriovVlanFilterList.item(i)
-                                       if (node1.getNodeType() == Node.ELEMENT_NODE) {
-                                               Element eElement1 = (Element) node1
-                                               String value = utils.getElementText(eElement1, "sriov-vlan-filter")
-                                               if (i != sriovVlanFilterList.getLength() - 1) {
-                                                       values = sriovFilterBuf.append(value + ",")
-                                               }
-                                               else {
-                                                       values = sriovFilterBuf.append(value);
-                                               }
-                                       }
-                               }
-                               if (!values.isEmpty()) {
-                                               String vnfNetworkSriovVlanFilterXml =
-                                                               """<entry>
+                vnfNetworkNetFqdn = sbNet4.append(vnfNetworkNetFqdnXml)
+
+                NodeList sriovVlanFilterList = eElement.getElementsByTagNameNS("*","sriov-vlan-filter-list")
+                StringBuffer sriovFilterBuf = new StringBuffer()
+                String values = ""
+                for(int i = 0; i < sriovVlanFilterList.getLength(); i++){
+                    Node node1 = sriovVlanFilterList.item(i)
+                    if (node1.getNodeType() == Node.ELEMENT_NODE) {
+                        Element eElement1 = (Element) node1
+                        String value = utils.getElementText(eElement1, "sriov-vlan-filter")
+                        if (i != sriovVlanFilterList.getLength() - 1) {
+                            values = sriovFilterBuf.append(value + ",")
+                        }
+                        else {
+                            values = sriovFilterBuf.append(value);
+                        }
+                    }
+                }
+                if (!values.isEmpty()) {
+                    String vnfNetworkSriovVlanFilterXml =
+                                    """<entry>
                                                <key>${MsoUtils.xmlEscape(vnfNetworkKey)}_ATT_VF_VLAN_FILTER</key>
                                                <value>${MsoUtils.xmlEscape(values)}</value>
                                        </entry>"""
-                                               vnfNetworksSriovVlanFilters = sbNet6.append(vnfNetworkSriovVlanFilterXml)
-                               }
-                       }
-               }
-       
-               // VNF-VMS Data
-               String vnfVMS = ""
-               String vnfVMSPositions = ""
-               String vmNetworks = ""
-               String vmNetworksPositions = ""
-               String vmNetworksPositionsV6 = ""
-               String interfaceRoutePrefixes = ""
-               def key
-               def value
-               def networkKey
-               def networkValue
-               def floatingIPKey
-               def floatingIPKeyValue
-               def floatingIPV6Key
-               def floatingIPV6KeyValue
-               StringBuilder sb = new StringBuilder()
-               StringBuilder sbPositions = new StringBuilder()
-               StringBuilder sbVmNetworks = new StringBuilder()
-               StringBuilder sbNetworksPositions = new StringBuilder()
-               StringBuilder sbInterfaceRoutePrefixes = new StringBuilder()
-               StringBuilder sbNetworksPositionsV6 = new StringBuilder()
-
-               NodeList vmsList = responseXml.getElementsByTagNameNS("*","vnf-vms")
-               for (int x = 0; x < vmsList.getLength(); x++) {
-                       Node node = vmsList.item(x)
-                       if (node.getNodeType() == Node.ELEMENT_NODE) {
-                               Element eElement = (Element) node
-                               key = utils.getElementText(eElement, "vm-type")
-                               String values
-                               String position = "0"
-                               StringBuilder sb1 = new StringBuilder()
-                               NodeList valueList = eElement.getElementsByTagNameNS("*","vm-names")
-                               NodeList vmNetworksList = eElement.getElementsByTagNameNS("*","vm-networks")
-                               for(int i = 0; i < valueList.getLength(); i++){
-                                       Node node1 = valueList.item(i)
-                                       if (node1.getNodeType() == Node.ELEMENT_NODE) {
-                                               Element eElement1 = (Element) node1
-                                               value = utils.getElementText(eElement1, "vm-name")
-                                               if (i != valueList.getLength() - 1) {
-                                                       values = sb1.append(value + ",")
-                                               }
-                                               else {
-                                                       values = sb1.append(value);
-                                               }
-                                               position = i.toString()
-                                               String vnfPositionXml =
-                                                               """<entry>
+                    vnfNetworksSriovVlanFilters = sbNet6.append(vnfNetworkSriovVlanFilterXml)
+                }
+            }
+        }
+
+        // VNF-VMS Data
+        String vnfVMS = ""
+        String vnfVMSPositions = ""
+        String vmNetworks = ""
+        String vmNetworksPositions = ""
+        String vmNetworksPositionsV6 = ""
+        String interfaceRoutePrefixes = ""
+        def key
+        def value
+        def networkKey
+        def networkValue
+        def floatingIPKey
+        def floatingIPKeyValue
+        def floatingIPV6Key
+        def floatingIPV6KeyValue
+        StringBuilder sb = new StringBuilder()
+        StringBuilder sbPositions = new StringBuilder()
+        StringBuilder sbVmNetworks = new StringBuilder()
+        StringBuilder sbNetworksPositions = new StringBuilder()
+        StringBuilder sbInterfaceRoutePrefixes = new StringBuilder()
+        StringBuilder sbNetworksPositionsV6 = new StringBuilder()
+
+        NodeList vmsList = responseXml.getElementsByTagNameNS("*","vnf-vms")
+        for (int x = 0; x < vmsList.getLength(); x++) {
+            Node node = vmsList.item(x)
+            if (node.getNodeType() == Node.ELEMENT_NODE) {
+                Element eElement = (Element) node
+                key = utils.getElementText(eElement, "vm-type")
+                String values
+                String position = "0"
+                StringBuilder sb1 = new StringBuilder()
+                NodeList valueList = eElement.getElementsByTagNameNS("*","vm-names")
+                NodeList vmNetworksList = eElement.getElementsByTagNameNS("*","vm-networks")
+                for(int i = 0; i < valueList.getLength(); i++){
+                    Node node1 = valueList.item(i)
+                    if (node1.getNodeType() == Node.ELEMENT_NODE) {
+                        Element eElement1 = (Element) node1
+                        value = utils.getElementText(eElement1, "vm-name")
+                        if (i != valueList.getLength() - 1) {
+                            values = sb1.append(value + ",")
+                        }
+                        else {
+                            values = sb1.append(value);
+                        }
+                        position = i.toString()
+                        String vnfPositionXml =
+                                        """<entry>
                                                                <key>${MsoUtils.xmlEscape(key)}_name_${MsoUtils.xmlEscape(position)}</key>
                                                                <value>${MsoUtils.xmlEscape(value)}</value>
                                                        </entry>"""
-                                                nfVMSPositions = sbPositions.append(vnfPositionXml)
-                                       }
-                               }
-                               for(int n = 0; n < vmNetworksList.getLength(); n++){
-                                       String floatingIpKeyValueStr = ""
-                                       String floatingIpV6KeyValueStr = ""
-                                       Node nodeNetworkKey = vmNetworksList.item(n)
-                                       if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
-                                               Element eElementNetworkKey = (Element) nodeNetworkKey
-                                               String ipAddressValues
-                                               String ipV6AddressValues
-                                               String networkPosition = "0"
-                                               StringBuilder sb2 = new StringBuilder()
-                                               StringBuilder sb3 = new StringBuilder()
-                                               StringBuilder sb4 = new StringBuilder()
-                                               networkKey = utils.getElementText(eElementNetworkKey, "network-role-tag")
-                                               if (networkKey.isEmpty()) {
-                                                       networkKey = utils.getElementText(eElementNetworkKey, "network-role")
-                                               }
-                                               floatingIPKey = key + '_' + networkKey + '_floating_ip'
-                                               floatingIPKeyValue = utils.getElementText(eElementNetworkKey, "floating-ip")
-                                               if(!floatingIPKeyValue.isEmpty()){
-                                                       floatingIpKeyValueStr = """<entry>
+                        nfVMSPositions = sbPositions.append(vnfPositionXml)
+                    }
+                }
+                for(int n = 0; n < vmNetworksList.getLength(); n++){
+                    String floatingIpKeyValueStr = ""
+                    String floatingIpV6KeyValueStr = ""
+                    Node nodeNetworkKey = vmNetworksList.item(n)
+                    if (nodeNetworkKey.getNodeType() == Node.ELEMENT_NODE) {
+                        Element eElementNetworkKey = (Element) nodeNetworkKey
+                        String ipAddressValues
+                        String ipV6AddressValues
+                        String networkPosition = "0"
+                        StringBuilder sb2 = new StringBuilder()
+                        StringBuilder sb3 = new StringBuilder()
+                        StringBuilder sb4 = new StringBuilder()
+                        networkKey = utils.getElementText(eElementNetworkKey, "network-role-tag")
+                        if (networkKey.isEmpty()) {
+                            networkKey = utils.getElementText(eElementNetworkKey, "network-role")
+                        }
+                        floatingIPKey = key + '_' + networkKey + '_floating_ip'
+                        floatingIPKeyValue = utils.getElementText(eElementNetworkKey, "floating-ip")
+                        if(!floatingIPKeyValue.isEmpty()){
+                            floatingIpKeyValueStr = """<entry>
                                                                <key>$floatingIPKey</key>
                                                                <value>$floatingIPKeyValue</value>
                                                        </entry>"""
-                                               }
-                                               floatingIPV6Key = key + '_' + networkKey + '_floating_v6_ip'
-                                               floatingIPV6KeyValue = utils.getElementText(eElementNetworkKey, "floating-ip-v6")
-                                               if(!floatingIPV6KeyValue.isEmpty()){
-                                                       floatingIpV6KeyValueStr = """<entry>
+                        }
+                        floatingIPV6Key = key + '_' + networkKey + '_floating_v6_ip'
+                        floatingIPV6KeyValue = utils.getElementText(eElementNetworkKey, "floating-ip-v6")
+                        if(!floatingIPV6KeyValue.isEmpty()){
+                            floatingIpV6KeyValueStr = """<entry>
                                                                <key>$floatingIPV6Key</key>
                                                                <value>$floatingIPV6KeyValue</value>
                                                        </entry>"""
-                                               }
-                                               NodeList networkIpsList = eElementNetworkKey.getElementsByTagNameNS("*","network-ips")
-                                               for(int a = 0; a < networkIpsList.getLength(); a++){
-                                                       Node ipAddress = networkIpsList.item(a)
-                                                       if (ipAddress.getNodeType() == Node.ELEMENT_NODE) {
-                                                               Element eElementIpAddress = (Element) ipAddress
-                                                               String ipAddressValue = utils.getElementText(eElementIpAddress, "ip-address")
-                                                               if (a != networkIpsList.getLength() - 1) {
-                                                                       ipAddressValues = sb2.append(ipAddressValue + ",")
-                                                               }
-                                                               else {
-                                                                       ipAddressValues = sb2.append(ipAddressValue);
-                                                               }
-                                                               networkPosition = a.toString()
-                                                               String vmNetworksPositionsXml =
-                                                                                               """<entry>
+                        }
+                        NodeList networkIpsList = eElementNetworkKey.getElementsByTagNameNS("*","network-ips")
+                        for(int a = 0; a < networkIpsList.getLength(); a++){
+                            Node ipAddress = networkIpsList.item(a)
+                            if (ipAddress.getNodeType() == Node.ELEMENT_NODE) {
+                                Element eElementIpAddress = (Element) ipAddress
+                                String ipAddressValue = utils.getElementText(eElementIpAddress, "ip-address")
+                                if (a != networkIpsList.getLength() - 1) {
+                                    ipAddressValues = sb2.append(ipAddressValue + ",")
+                                }
+                                else {
+                                    ipAddressValues = sb2.append(ipAddressValue);
+                                }
+                                networkPosition = a.toString()
+                                String vmNetworksPositionsXml =
+                                                """<entry>
                                                                                <key>${MsoUtils.xmlEscape(key)}_${MsoUtils.xmlEscape(networkKey)}_ip_${MsoUtils.xmlEscape(networkPosition)}</key>
                                                                                <value>${MsoUtils.xmlEscape(ipAddressValue)}</value>
                                                                        </entry>"""
-                                                               vmNetworksPositions = sbNetworksPositions.append(vmNetworksPositionsXml)
-                                                       }
-                                               }
-                                               vmNetworksPositions = sbNetworksPositions.append(floatingIpKeyValueStr).append(floatingIpV6KeyValueStr)
-                                                       
-                                               String vmNetworksXml =
-                                                                               """<entry>
+                                vmNetworksPositions = sbNetworksPositions.append(vmNetworksPositionsXml)
+                            }
+                        }
+                        vmNetworksPositions = sbNetworksPositions.append(floatingIpKeyValueStr).append(floatingIpV6KeyValueStr)
+
+                        String vmNetworksXml =
+                                        """<entry>
                                                                <key>${MsoUtils.xmlEscape(key)}_${MsoUtils.xmlEscape(networkKey)}_ips</key>
                                                                <value>${MsoUtils.xmlEscape(ipAddressValues)}</value>
                                                        </entry>"""
-                                               vmNetworks = sbVmNetworks.append(vmNetworksXml)
-                                                               
-                                               NodeList interfaceRoutePrefixesList = eElementNetworkKey.getElementsByTagNameNS("*","interface-route-prefixes")
-                                               String interfaceRoutePrefixValues = sb3.append("[")
-                                                               
-                                               for(int a = 0; a < interfaceRoutePrefixesList.getLength(); a++){
-                                                       Node interfaceRoutePrefix = interfaceRoutePrefixesList.item(a)
-                                                       if (interfaceRoutePrefix.getNodeType() == Node.ELEMENT_NODE) {
-                                                               Element eElementInterfaceRoutePrefix = (Element) interfaceRoutePrefix
-                                                               String interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix-cidr")
-                                                               if (interfaceRoutePrefixValue == null || interfaceRoutePrefixValue.isEmpty()) {
-                                                                       interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix")
-                                                               }
-                                                               if (a != interfaceRoutePrefixesList.getLength() - 1) {
-                                                                       interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}" + ",")
-                                                               }
-                                                               else {
-                                                                       interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}")
-                                                               }
-                                                       }
-                                               }
-                                               interfaceRoutePrefixValues = sb3.append("]")
-                                               if (interfaceRoutePrefixesList.getLength() > 0) {
-                                                       String interfaceRoutePrefixesXml =
-                                                                                                       """<entry>
+                        vmNetworks = sbVmNetworks.append(vmNetworksXml)
+
+                        NodeList interfaceRoutePrefixesList = eElementNetworkKey.getElementsByTagNameNS("*","interface-route-prefixes")
+                        String interfaceRoutePrefixValues = sb3.append("[")
+
+                        for(int a = 0; a < interfaceRoutePrefixesList.getLength(); a++){
+                            Node interfaceRoutePrefix = interfaceRoutePrefixesList.item(a)
+                            if (interfaceRoutePrefix.getNodeType() == Node.ELEMENT_NODE) {
+                                Element eElementInterfaceRoutePrefix = (Element) interfaceRoutePrefix
+                                String interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix-cidr")
+                                if (interfaceRoutePrefixValue == null || interfaceRoutePrefixValue.isEmpty()) {
+                                    interfaceRoutePrefixValue = utils.getElementText(eElementInterfaceRoutePrefix, "interface-route-prefix")
+                                }
+                                if (a != interfaceRoutePrefixesList.getLength() - 1) {
+                                    interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}" + ",")
+                                }
+                                else {
+                                    interfaceRoutePrefixValues = sb3.append("{\"interface_route_table_routes_route_prefix\": \"" + interfaceRoutePrefixValue + "\"}")
+                                }
+                            }
+                        }
+                        interfaceRoutePrefixValues = sb3.append("]")
+                        if (interfaceRoutePrefixesList.getLength() > 0) {
+                            String interfaceRoutePrefixesXml =
+                                            """<entry>
                                                                                        <key>${MsoUtils.xmlEscape(key)}_${MsoUtils.xmlEscape(networkKey)}_route_prefixes</key>
                                                                                        <value>${MsoUtils.xmlEscape(interfaceRoutePrefixValues)}</value>
-                                                                               </entry>"""                                     
-                                                       interfaceRoutePrefixes = sbInterfaceRoutePrefixes.append(interfaceRoutePrefixesXml)
-                                               }
-                                                       
-                                               NodeList networkIpsV6List = eElementNetworkKey.getElementsByTagNameNS("*","network-ips-v6")
-                                               for(int a = 0; a < networkIpsV6List.getLength(); a++){
-                                                       Node ipV6Address = networkIpsV6List.item(a)
-                                                       if (ipV6Address.getNodeType() == Node.ELEMENT_NODE) {
-                                                               Element eElementIpV6Address = (Element) ipV6Address
-                                                               String ipV6AddressValue = utils.getElementText(eElementIpV6Address, "ip-address-ipv6")
-                                                               if (a != networkIpsV6List.getLength() - 1) {
-                                                                       ipV6AddressValues = sb4.append(ipV6AddressValue + ",")
-                                                               }
-                                                               else {
-                                                                       ipV6AddressValues = sb4.append(ipV6AddressValue);
-                                                               }
-                                                               networkPosition = a.toString()
-                                                               String vmNetworksPositionsV6Xml =
-                                                                               """<entry>
+                                                                               </entry>"""
+                            interfaceRoutePrefixes = sbInterfaceRoutePrefixes.append(interfaceRoutePrefixesXml)
+                        }
+
+                        NodeList networkIpsV6List = eElementNetworkKey.getElementsByTagNameNS("*","network-ips-v6")
+                        for(int a = 0; a < networkIpsV6List.getLength(); a++){
+                            Node ipV6Address = networkIpsV6List.item(a)
+                            if (ipV6Address.getNodeType() == Node.ELEMENT_NODE) {
+                                Element eElementIpV6Address = (Element) ipV6Address
+                                String ipV6AddressValue = utils.getElementText(eElementIpV6Address, "ip-address-ipv6")
+                                if (a != networkIpsV6List.getLength() - 1) {
+                                    ipV6AddressValues = sb4.append(ipV6AddressValue + ",")
+                                }
+                                else {
+                                    ipV6AddressValues = sb4.append(ipV6AddressValue);
+                                }
+                                networkPosition = a.toString()
+                                String vmNetworksPositionsV6Xml =
+                                                """<entry>
                                                                                <key>${MsoUtils.xmlEscape(key)}_${MsoUtils.xmlEscape(networkKey)}_v6_ip_${MsoUtils.xmlEscape(networkPosition)}</key>
                                                                                <value>${MsoUtils.xmlEscape(ipV6AddressValue)}</value>
                                                                                </entry>"""
-                                                               vmNetworksPositionsV6 = sbNetworksPositionsV6.append(vmNetworksPositionsV6Xml)
-                                                       }
-                                               }
-                                               String vmNetworksV6Xml =
-                                                               """<entry>
+                                vmNetworksPositionsV6 = sbNetworksPositionsV6.append(vmNetworksPositionsV6Xml)
+                            }
+                        }
+                        String vmNetworksV6Xml =
+                                        """<entry>
                                                                <key>${MsoUtils.xmlEscape(key)}_${MsoUtils.xmlEscape(networkKey)}_v6_ips</key>
                                                                <value>${MsoUtils.xmlEscape(ipV6AddressValues)}</value>
                                                        </entry>"""
-                                               vmNetworks = sbVmNetworks.append(vmNetworksV6Xml)
-                                       }
-                               }
-                               String vnfXml =
-                                                               """<entry>
+                        vmNetworks = sbVmNetworks.append(vmNetworksV6Xml)
+                    }
+                }
+                String vnfXml =
+                                """<entry>
                                <key>${MsoUtils.xmlEscape(key)}_names</key>
                                <value>${MsoUtils.xmlEscape(values)}</value>
                                        </entry>"""
-                               vnfVMS = sb.append(vnfXml)
-                       }
-               }
-       //SDNC Response Params
-               String sdncResponseParams = ""
-               List<String> sdncResponseParamsToSkip = ["vnf_id", "vf_module_id", "vnf_name", "vf_module_name"]
-               String vnfParamsChildNodes = utils.getChildNodes(data, "vnf-parameters")
-               if(vnfParamsChildNodes == null || vnfParamsChildNodes.length() < 1){
-                       // No SDNC params
-               }else{
-                       NodeList paramsList = responseXml.getElementsByTagNameNS("*", "vnf-parameters")
-                       for (int z = 0; z < paramsList.getLength(); z++) {
-                               Node node = paramsList.item(z)
-                               Element eElement = (Element) node
-                               String vnfParameterName = utils.getElementText(eElement, "vnf-parameter-name")
-                               if (!sdncResponseParamsToSkip.contains(vnfParameterName)) {
-                                       String vnfParameterValue = utils.getElementText(eElement, "vnf-parameter-value")
-                                       String paraEntry =
-                                               """<entry>
+                vnfVMS = sb.append(vnfXml)
+            }
+        }
+        //SDNC Response Params
+        String sdncResponseParams = ""
+        List<String> sdncResponseParamsToSkip = [
+            "vnf_id",
+            "vf_module_id",
+            "vnf_name",
+            "vf_module_name"
+        ]
+        String vnfParamsChildNodes = utils.getChildNodes(data, "vnf-parameters")
+        if(vnfParamsChildNodes == null || vnfParamsChildNodes.length() < 1){
+            // No SDNC params
+        }else{
+            NodeList paramsList = responseXml.getElementsByTagNameNS("*", "vnf-parameters")
+            for (int z = 0; z < paramsList.getLength(); z++) {
+                Node node = paramsList.item(z)
+                Element eElement = (Element) node
+                String vnfParameterName = utils.getElementText(eElement, "vnf-parameter-name")
+                if (!sdncResponseParamsToSkip.contains(vnfParameterName)) {
+                    String vnfParameterValue = utils.getElementText(eElement, "vnf-parameter-value")
+                    String paraEntry =
+                                    """<entry>
                                                        <key>${MsoUtils.xmlEscape(vnfParameterName)}</key>
                                                        <value>${MsoUtils.xmlEscape(vnfParameterValue)}</value>
                                                </entry>"""
-                                       sdncResponseParams = sb.append(paraEntry)
-                               }
-                       }
-               }
-       
-       
-               def vfModuleParams = """
+                    sdncResponseParams = sb.append(paraEntry)
+                }
+            }
+        }
+
+
+        def vfModuleParams = """
                ${vnfInfo}
                ${aZones}
                ${vnfNetworkNetId}
@@ -1247,8 +1337,8 @@ public abstract class VfModuleBase extends AbstractServiceTaskProcessor {
                ${vnfParams}
                ${sdncResponseParams}"""
 
-               return vfModuleParams
+        return vfModuleParams
 
-       }
+    }
 
 }
index 4332a6c..86bbead 100644 (file)
@@ -47,7 +47,7 @@ public class ExtractPojosForBB {
         return extractByKey(execution, key, execution.getLookupMap().get(key));
     }
 
-    public <T> T extractByKey(BuildingBlockExecution execution, ResourceKey key, String value)
+    protected <T> T extractByKey(BuildingBlockExecution execution, ResourceKey key, String value)
             throws BBObjectNotFoundException {
 
         Optional<T> result = Optional.empty();
index 6b4fc84..ea9987e 100644 (file)
@@ -270,11 +270,11 @@ public class DoCreateVfModule extends VfModuleBase {
                                Map<String,String> vfModuleInputParams = execution.getVariable("vfModuleInputParams")
                                if (oofDirectives != null && vfModuleInputParams != null) {
                                        vfModuleInputParams.put("oof_directives", oofDirectives)
-                                       vfModuleInputParams.put("sdnc_directives", "{}")
+                                       //vfModuleInputParams.put("sdnc_directives", "{}")
                                        logger.debug("OofDirectives are: " + oofDirectives)
                                } else if (vfModuleInputParams != null) {
                                        vfModuleInputParams.put("oof_directives", "{}")
-                                       vfModuleInputParams.put("sdnc_directives", "{}")
+                                       //vfModuleInputParams.put("sdnc_directives", "{}")
                                }
                                if (vfModuleInputParams != null) {
                                        execution.setVariable("DCVFM_vnfParamsMap", vfModuleInputParams)
index faa6a0e..5a6ad42 100644 (file)
@@ -7,9 +7,9 @@
  * 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.
@@ -47,6 +47,9 @@ import static org.mockito.Mockito.*
 class DoCreateVfModuleTest {
     def prefix = "DCVFM_"
 
+    @Rule
+    public WireMockRule wireMockRule = new WireMockRule(8090);
+
     @Captor
     static ArgumentCaptor<ExecutionEntity> captor = ArgumentCaptor.forClass(ExecutionEntity.class)
 
@@ -54,7 +57,7 @@ class DoCreateVfModuleTest {
     void init() throws IOException {
         MockitoAnnotations.initMocks(this);
     }
-  
+
     @Test
     void testQueryAAIVfModule() {
         ExecutionEntity mockExecution = setupMock()
@@ -90,7 +93,7 @@ class DoCreateVfModuleTest {
         Mockito.verify(mockExecution).setVariable("DCVFM_queryAAIVfModuleForStatusResponseCode", 200)
     }
 
-  
+
 
     @Test
     void testPreProcessVNFAdapterRequest() {
@@ -122,7 +125,7 @@ class DoCreateVfModuleTest {
         map.put("vrr_image_name", "MDT17");
         map.put("availability_zone_0", "nova");
         map.put("vrr_flavor_name", "ns.c16r32d128.v1");
-        when(mockExecution.getVariable("vnfParamsMap")).thenReturn(map)
+        when(mockExecution.getVariable(prefix + "vnfParamsMap")).thenReturn(map)
         when(mockExecution.getVariable("mso-request-id")).thenReturn("testRequestId-1503410089303")
         when(mockExecution.getVariable("mso.use.qualified.host")).thenReturn("true")
         when(mockExecution.getVariable("mso.workflow.message.endpoint")).thenReturn("http://localhost:28080/mso/WorkflowMesssage")
@@ -155,7 +158,7 @@ class DoCreateVfModuleTest {
         Mockito.verify(mockExecution).setVariable(prefix + "queryCloudRegionReturnCode", "200")
     }
 
-  
+
 
     @Test
     void testCreateNetworkPoliciesInAAI() {
@@ -181,7 +184,7 @@ class DoCreateVfModuleTest {
         Mockito.verify(mockExecution).setVariable(prefix + "aaiQqueryNetworkPolicyByFqdnReturnCode", 200)
     }
 
-   
+
 
     private static ExecutionEntity setupMock() {
         ProcessDefinition mockProcessDefinition = mock(ProcessDefinition.class)
index f78d38f..782936c 100644 (file)
@@ -1,5 +1,6 @@
 <createVfModuleRequest>
     <cloudSiteId>RDM2WAGPLCP</cloudSiteId>
+    <cloudOwner>null</cloudOwner>
     <tenantId>fba1bd1e195a404cacb9ce17a9b2b421</tenantId>
     <vnfId>skask</vnfId>
     <vnfName>skask-test</vnfName>
             <key>workload_context</key>
             <value>null</value>
         </entry>
+        <entry>
+            <key>user_directives</key>
+            <value>{ &quot;attributes&quot;: [{&quot;attribute_name&quot;:&quot;vrr_image_name&quot;,&quot;attribute_value&quot;:&quot;MDT17&quot;},{&quot;attribute_name&quot;:&quot;availability_zone_0&quot;,&quot;attribute_value&quot;:&quot;nova&quot;},{&quot;attribute_name&quot;:&quot;vrr_flavor_name&quot;,&quot;attribute_value&quot;:&quot;ns.c16r32d128.v1&quot;}]}</value>
+        </entry>
         <entry>
             <key>vf_module_name</key>
             <value>PCRF::module-0-2</value>
             <key>ADIG_SRIOV_1_subnet_id</key>
             <value></value>
         </entry>
+        <entry>
+            <key>vrr_flavor_name</key>
+            <value>ns.c16r32d128.v1</value>
+        </entry>
         <entry>
             <key>ADIG_SRIOV_2_net_name</key>
             <value>ADIG_SRIOV_2</value>
             <key>vrra_ADIG_SRIOV_2_ips</key>
             <value>null</value>
         </entry>
+        <entry>
+            <key>sdnc_directives</key>
+            <value>{ &quot;attributes&quot;: [{&quot;attribute_name&quot;:&quot;vf_module_id&quot;,&quot;attribute_value&quot;:&quot;cb510af0-5b21-4bc7-86d9-323cb396ce32&quot;},{&quot;attribute_name&quot;:&quot;vrra_Internal-Network1_ips&quot;,&quot;attribute_value&quot;:&quot;null&quot;},{&quot;attribute_name&quot;:&quot;ADIG_SRIOV_2_subnet_id&quot;,&quot;attribute_value&quot;:&quot;&quot;},{&quot;attribute_name&quot;:&quot;vrra_ADIGOam.OAM_v6_ips&quot;,&quot;attribute_value&quot;:&quot;null&quot;},{&quot;attribute_name&quot;:&quot;vnf_name&quot;,&quot;attribute_value&quot;:&quot;skask-test&quot;},{&quot;attribute_name&quot;:&quot;ADIGOam.OAM_v6_subnet_id&quot;,&quot;attribute_value&quot;:&quot;&quot;},{&quot;attribute_name&quot;:&quot;workload_context&quot;,&quot;attribute_value&quot;:&quot;null&quot;},{&quot;attribute_name&quot;:&quot;vf_module_name&quot;,&quot;attribute_value&quot;:&quot;PCRF::module-0-2&quot;},{&quot;attribute_name&quot;:&quot;vnf_id&quot;,&quot;attribute_value&quot;:&quot;skask&quot;},{&quot;attribute_name&quot;:&quot;ADIG_SRIOV_2_v6_subnet_id&quot;,&quot;attribute_value&quot;:&quot;&quot;},{&quot;attribute_name&quot;:&quot;vrra_ADIG_SRIOV_1_ips&quot;,&quot;attribute_value&quot;:&quot;null&quot;},{&quot;attribute_name&quot;:&quot;ADIG_SRIOV_1_v6_subnet_id&quot;,&quot;attribute_value&quot;:&quot;&quot;},{&quot;attribute_name&quot;:&quot;ADIG_SRIOV_1_subnet_id&quot;,&quot;attribute_value&quot;:&quot;&quot;},{&quot;attribute_name&quot;:&quot;ADIG_SRIOV_2_net_name&quot;,&quot;attribute_value&quot;:&quot;ADIG_SRIOV_2&quot;},{&quot;attribute_name&quot;:&quot;ADIGOam.OAM_subnet_id&quot;,&quot;attribute_value&quot;:&quot;&quot;},{&quot;attribute_name&quot;:&quot;ADIGOam.OAM_net_id&quot;,&quot;attribute_value&quot;:&quot;491c7cef-a3f4-4990-883e-b0af397466d0&quot;},{&quot;attribute_name&quot;:&quot;environment_context&quot;,&quot;attribute_value&quot;:&quot;null&quot;},{&quot;attribute_name&quot;:&quot;ADIG_SRIOV_1_net_fqdn&quot;,&quot;attribute_value&quot;:&quot;&quot;},{&quot;attribute_name&quot;:&quot;ADIGOam.OAM_net_name&quot;,&quot;attribute_value&quot;:&quot;ADIGOAM.OAM&quot;},{&quot;attribute_name&quot;:&quot;vrra_name_0&quot;,&quot;attribute_value&quot;:&quot;frkdevRvrra24&quot;},{&quot;attribute_name&quot;:&quot;vrra_ADIG_SRIOV_2_ips&quot;,&quot;attribute_value&quot;:&quot;null&quot;},{&quot;attribute_name&quot;:&quot;ADIG_SRIOV_2_net_fqdn&quot;,&quot;attribute_value&quot;:&quot;&quot;},{&quot;attribute_name&quot;:&quot;vrra_Internal-Network2_ips&quot;,&quot;attribute_value&quot;:&quot;null&quot;},{&quot;attribute_name&quot;:&quot;ADIG_SRIOV_1_net_name&quot;,&quot;attribute_value&quot;:&quot;ADIG_SRIOV_1&quot;},{&quot;attribute_name&quot;:&quot;vrra_ADIG_SRIOV_1_v6_ips&quot;,&quot;attribute_value&quot;:&quot;null&quot;},{&quot;attribute_name&quot;:&quot;vrra_ADIGOam.OAM_ips&quot;,&quot;attribute_value&quot;:&quot;null&quot;},{&quot;attribute_name&quot;:&quot;vrra_Internal-Network1_v6_ips&quot;,&quot;attribute_value&quot;:&quot;null&quot;},{&quot;attribute_name&quot;:&quot;ADIGOam.OAM_net_fqdn&quot;,&quot;attribute_value&quot;:&quot;&quot;},{&quot;attribute_name&quot;:&quot;vrra_names&quot;,&quot;attribute_value&quot;:&quot;frkdevRvrra24&quot;},{&quot;attribute_name&quot;:&quot;ADIG_SRIOV_1_net_id&quot;,&quot;attribute_value&quot;:&quot;491c7cef-a3f4-4990-883e-b0af397466d0&quot;},{&quot;attribute_name&quot;:&quot;vrra_Internal-Network2_v6_ips&quot;,&quot;attribute_value&quot;:&quot;null&quot;},{&quot;attribute_name&quot;:&quot;vrra_ADIG_SRIOV_2_v6_ips&quot;,&quot;attribute_value&quot;:&quot;null&quot;},{&quot;attribute_name&quot;:&quot;ADIG_SRIOV_2_net_id&quot;,&quot;attribute_value&quot;:&quot;491c7cef-a3f4-4990-883e-b0af397466d0&quot;},{&quot;attribute_name&quot;:&quot;vf_module_index&quot;,&quot;attribute_value&quot;:&quot;index&quot;},{&quot;attribute_name&quot;:&quot;availability_zone_0&quot;,&quot;attribute_value&quot;:&quot;frkde-esx-az01&quot;}]}</value>
+        </entry>
         <entry>
             <key>ADIG_SRIOV_2_net_fqdn</key>
             <value></value>
             <key>vrra_Internal-Network1_v6_ips</key>
             <value>null</value>
         </entry>
+        <entry>
+            <key>vrr_image_name</key>
+            <value>MDT17</value>
+        </entry>
         <entry>
             <key>ADIGOam.OAM_net_fqdn</key>
             <value></value>
         </entry>
         <entry>
             <key>availability_zone_0</key>
-            <value>frkde-esx-az01</value>
+            <value>nova</value>
         </entry>
 
+
     </vfModuleParams>
     <msoRequest>
         <requestId>testRequestId</requestId>
     </msoRequest>
     <messageId>testRequestId-1503410089303-1513204371234</messageId>
     <notificationUrl>http://localhost:28080/mso/WorkflowMesssage/VNFAResponse/testRequestId-1503410089303-1513204371234</notificationUrl>
-</createVfModuleRequest>
\ No newline at end of file
+</createVfModuleRequest>
index 3304d1b..01bdc09 100644 (file)
@@ -481,6 +481,16 @@ public class AAIUpdateTasks {
         }
     }
 
+    public void updateOrchestrationStatusAssignFabricConfiguration(BuildingBlockExecution execution) {
+        try {
+            Configuration configuration = extractPojosForBB.extractByKey(execution, ResourceKey.CONFIGURATION_ID);
+            aaiConfigurationResources.updateOrchestrationStatusConfiguration(configuration,
+                    OrchestrationStatus.ASSIGNED);
+        } catch (Exception ex) {
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
+        }
+    }
+
     public void updateOrchestrationStatusActivateFabricConfiguration(BuildingBlockExecution execution) {
         try {
             Configuration configuration = extractPojosForBB.extractByKey(execution, ResourceKey.CONFIGURATION_ID);
index 746f136..1453e40 100644 (file)
@@ -49,7 +49,7 @@ public class AAIConfigurationResources {
     public void createConfiguration(Configuration configuration) {
         AAIResourceUri configurationURI =
                 AAIUriFactory.createResourceUri(AAIObjectType.CONFIGURATION, configuration.getConfigurationId());
-        configuration.setOrchestrationStatus(OrchestrationStatus.ASSIGNED);
+        configuration.setOrchestrationStatus(OrchestrationStatus.INVENTORIED);
         org.onap.aai.domain.yang.Configuration aaiConfiguration = aaiObjectMapper.mapConfiguration(configuration);
         injectionHelper.getAaiClient().create(configurationURI, aaiConfiguration);
     }
index 7109ac8..905f244 100644 (file)
@@ -665,6 +665,18 @@ public class AAIUpdateTasksTest extends BaseTaskTest {
                 OrchestrationStatus.ACTIVE);
     }
 
+    @Test
+    public void updateOrchestrationStatusAssignedFabricConfigurationTest() throws Exception {
+        gBBInput = execution.getGeneralBuildingBlock();
+        doNothing().when(aaiConfigurationResources).updateOrchestrationStatusConfiguration(configuration,
+                OrchestrationStatus.ASSIGNED);
+
+        aaiUpdateTasks.updateOrchestrationStatusAssignFabricConfiguration(execution);
+
+        verify(aaiConfigurationResources, times(1)).updateOrchestrationStatusConfiguration(configuration,
+                OrchestrationStatus.ASSIGNED);
+    }
+
     @Test
     public void updateContrailServiceInstanceFqdnVfModuleTest() throws Exception {
         execution.setVariable("contrailServiceInstanceFqdn", "newContrailServiceInstanceFqdn");
index 2e1a40d..be58ccb 100644 (file)
@@ -98,7 +98,7 @@ public class AAIConfigurationResourcesTest extends TestDataSetup {
 
         aaiConfigurationResources.createConfiguration(configuration);
 
-        assertEquals(OrchestrationStatus.ASSIGNED, configuration.getOrchestrationStatus());
+        assertEquals(OrchestrationStatus.INVENTORIED, configuration.getOrchestrationStatus());
         verify(MOCK_aaiResourcesClient, times(1)).create(any(AAIResourceUri.class),
                 isA(org.onap.aai.domain.yang.Configuration.class));
     }
diff --git a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/data/repository/HeatFilesRepository.java b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/data/repository/HeatFilesRepository.java
new file mode 100644 (file)
index 0000000..acefb75
--- /dev/null
@@ -0,0 +1,30 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.db.catalog.data.repository;
+
+import org.onap.so.db.catalog.beans.HeatFiles;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.rest.core.annotation.RepositoryRestResource;
+
+@RepositoryRestResource(collectionResourceRel = "heatFiles", path = "heatFiles")
+public interface HeatFilesRepository extends JpaRepository<HeatFiles, String> {
+    HeatFiles findByArtifactUuid(String artifactUUID);
+}