--- /dev/null
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2019 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.adapters.inventory.delete;
+
+import org.onap.so.client.aai.AAIResourcesClient;
+import org.onap.so.cloud.CloudConfig;
+import org.onap.so.cloud.resource.beans.CloudInformation;
+import org.onap.so.db.catalog.beans.CloudIdentity;
+import org.onap.so.db.catalog.beans.CloudSite;
+import org.onap.so.heatbridge.HeatBridgeApi;
+import org.onap.so.heatbridge.HeatBridgeImpl;
+import org.onap.so.openstack.exceptions.MsoCloudSiteNotFound;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+import org.springframework.stereotype.Component;
+
+@Component
+public class DeleteAAIInventory {
+
+    private static final Logger logger = LoggerFactory.getLogger(DeleteAAIInventory.class);
+
+    private AAIResourcesClient aaiClient;
+
+    @Autowired
+    protected CloudConfig cloudConfig;
+
+    @Autowired
+    protected Environment env;
+
+    public void heatbridge(CloudInformation cloudInformation, boolean dryrun) {
+        try {
+            if (!dryrun) {
+                logger.debug("Heatbridge delete executing");
+
+                CloudSite cloudSite = cloudConfig.getCloudSite(cloudInformation.getRegionId())
+                        .orElseThrow(() -> new MsoCloudSiteNotFound(cloudInformation.getRegionId()));
+                CloudIdentity cloudIdentity = cloudSite.getIdentityService();
+                HeatBridgeApi heatBridgeClient = new HeatBridgeImpl(new AAIResourcesClient(), cloudIdentity,
+                        cloudInformation.getOwner(), cloudInformation.getRegionId(), cloudSite.getRegionId(),
+                        cloudInformation.getTenantId());
+                heatBridgeClient.authenticate();
+                heatBridgeClient.deleteVfModuleData(cloudInformation.getVnfId(), cloudInformation.getVfModuleId());
+            }
+        } catch (Exception ex) {
+            logger.debug("Heatbrige failed for stackId: " + cloudInformation.getTemplateInstanceId(), ex);
+        }
+    }
+
+    protected AAIResourcesClient getAaiClient() {
+        if (aaiClient == null)
+            return new AAIResourcesClient();
+        else
+            return aaiClient;
+    }
+
+    protected void setAaiClient(AAIResourcesClient aaiResource) {
+        aaiClient = aaiResource;
+    }
+}
 
--- /dev/null
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2019 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.adapters.inventory.delete;
+
+import javax.annotation.PostConstruct;
+import org.camunda.bpm.client.ExternalTaskClient;
+import org.onap.so.utils.ExternalTaskServiceUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Profile;
+import org.springframework.core.env.Environment;
+import org.springframework.stereotype.Component;
+
+@Component
+@Profile("!test")
+public class DeleteInventoryService {
+
+    @Autowired
+    public Environment env;
+
+    @Autowired
+    private DeleteInventoryTask deleteInventory;
+
+    @Autowired
+    private ExternalTaskServiceUtils externalTaskServiceUtils;
+
+    @PostConstruct
+    public void auditAAIInventory() throws Exception {
+        ExternalTaskClient client = externalTaskServiceUtils.createExternalTaskClient();
+        client.subscribe("InventoryDelete")
+                .lockDuration(Long.parseLong(env.getProperty("mso.audit.lock-time", "60000")))
+                .handler(deleteInventory::executeExternalTask).open();
+    }
+
+}
 
--- /dev/null
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
+ *
+ * Copyright (C) 2019 IBM
+ * ================================================================================
+ * 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.adapters.inventory.delete;
+
+import org.camunda.bpm.client.task.ExternalTask;
+import org.camunda.bpm.client.task.ExternalTaskService;
+import org.onap.logging.ref.slf4j.ONAPLogConstants;
+import org.onap.so.cloud.resource.beans.CloudInformation;
+import org.onap.so.logging.tasks.AuditMDCSetup;
+import org.onap.so.utils.ExternalTaskUtils;
+import org.onap.so.utils.RetrySequenceLevel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class DeleteInventoryTask extends ExternalTaskUtils {
+
+    private static final String UNABLE_TO_WRITE_ALL_INVENTORY_TO_A_AI = "Unable to write all inventory to A&AI";
+
+    private static final Logger logger = LoggerFactory.getLogger(DeleteInventoryTask.class);
+
+    private static final String AAI_INVENTORY_FAILURE = "AAIInventoryFailure";
+
+    @Autowired
+    private DeleteAAIInventory deleteInventory;
+
+    @Autowired
+    private Environment env;
+
+    @Autowired
+    private AuditMDCSetup mdcSetup;
+
+    public DeleteInventoryTask() {
+        super(RetrySequenceLevel.SHORT);
+    }
+
+    protected void executeExternalTask(ExternalTask externalTask, ExternalTaskService externalTaskService) {
+        mdcSetup.setupMDC(externalTask);
+        boolean inventoryException = false;
+        String externalTaskId = externalTask.getId();
+        CloudInformation cloudInformation = externalTask.getVariable("cloudInformation");
+        boolean success = true;
+        if (cloudInformation != null) {
+            Integer retryCount = externalTask.getRetries();
+            try {
+                deleteInventory.heatbridge(cloudInformation, env.getProperty("heatBridgeDryrun", Boolean.class, true));
+            } catch (Exception e) {
+                logger.error("Error during inventory of stack", e);
+                success = false;
+            }
+            mdcSetup.setElapsedTime();
+            if (success) {
+                externalTaskService.complete(externalTask);
+                mdcSetup.setResponseCode(ONAPLogConstants.ResponseStatus.COMPLETE.toString());
+                logger.debug("The External Task Id: {}  Successful", externalTaskId);
+                logger.info(ONAPLogConstants.Markers.EXIT, "Exiting");
+                mdcSetup.clearClientMDCs();
+            } else {
+                if (retryCount == null) {
+                    logger.error("The External Task Id: {}  Failed, Setting Retries to Default Start Value: {}",
+                            externalTaskId, getRetrySequence().length);
+                    externalTaskService.handleFailure(externalTask, UNABLE_TO_WRITE_ALL_INVENTORY_TO_A_AI,
+                            UNABLE_TO_WRITE_ALL_INVENTORY_TO_A_AI, getRetrySequence().length, 10000);
+                } else if (retryCount != null && retryCount - 1 == 0) {
+                    externalTaskService.handleBpmnError(externalTask, AAI_INVENTORY_FAILURE);
+                    mdcSetup.setResponseCode(ONAPLogConstants.ResponseStatus.ERROR.toString());
+                    logger.error("The External Task Id: {}  Failed, All Retries Exhausted", externalTaskId);
+                    logger.info(ONAPLogConstants.Markers.EXIT, "Exiting");
+                } else {
+                    logger.error("The External Task Id: {}  Failed, Decrementing Retries: {} , Retry Delay: ",
+                            externalTaskId, retryCount - 1, calculateRetryDelay(retryCount));
+                    externalTaskService.handleFailure(externalTask, UNABLE_TO_WRITE_ALL_INVENTORY_TO_A_AI,
+                            UNABLE_TO_WRITE_ALL_INVENTORY_TO_A_AI, retryCount - 1, calculateRetryDelay(retryCount));
+                }
+                logger.error("The External Task Id: {} Failed", externalTaskId);
+            }
+        } else {
+            logger.error("The External Task Id: {}  Failed, No Cloud Information Provided", externalTaskId);
+            externalTaskService.handleBpmnError(externalTask, AAI_INVENTORY_FAILURE);
+        }
+    }
+}
 
 
 package org.onap.so.adapters.tasks.inventory;
 
-import java.util.Optional;
-import java.util.stream.Stream;
-import org.onap.so.client.aai.AAIObjectType;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.commons.collections.CollectionUtils;
 import org.onap.so.client.aai.AAIResourcesClient;
-import org.onap.so.client.aai.entities.uri.AAIUriFactory;
-import org.onap.so.objects.audit.AAIObjectAudit;
-import org.onap.so.objects.audit.AAIObjectAuditList;
+import org.onap.so.cloud.CloudConfig;
+import org.onap.so.cloud.resource.beans.CloudInformation;
+import org.onap.so.db.catalog.beans.CloudIdentity;
+import org.onap.so.db.catalog.beans.CloudSite;
+import org.onap.so.heatbridge.HeatBridgeApi;
+import org.onap.so.heatbridge.HeatBridgeImpl;
+import org.onap.so.openstack.exceptions.MsoCloudSiteNotFound;
+import org.openstack4j.model.compute.Flavor;
+import org.openstack4j.model.compute.Image;
+import org.openstack4j.model.compute.Server;
+import org.openstack4j.model.heat.Resource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Component;
 
 @Component
 public class CreateAAIInventory {
 
+    private static final Logger logger = LoggerFactory.getLogger(CreateAAIInventory.class);
+
     private AAIResourcesClient aaiClient;
 
-    public void createInventory(AAIObjectAuditList auditList) throws InventoryException {
-        if (didAuditFailVserverLInterfaces(auditList)) {
-            throw new InventoryException("Audit failed for VServer or LInterface cannot write Sub-Interfaces");
-        }
-        auditList.getAuditList().parallelStream()
-                .filter(auditObject -> !auditObject.isDoesObjectExist()
-                        && AAIObjectType.SUB_L_INTERFACE.typeName().equals(auditObject.getAaiObjectType()))
-                .forEach(auditObject -> getAaiClient().createIfNotExists(AAIUriFactory.createResourceFromExistingURI(
-                        AAIObjectType.fromTypeName(auditObject.getAaiObjectType()), auditObject.getResourceURI()),
-                        Optional.of(auditObject.getAaiObject())));
-    }
+    @Autowired
+    protected CloudConfig cloudConfig;
+
+    @Autowired
+    protected Environment env;
+
+    public void heatbridge(CloudInformation cloudInformation) {
+        try {
+            CloudSite cloudSite = cloudConfig.getCloudSite(cloudInformation.getRegionId())
+                    .orElseThrow(() -> new MsoCloudSiteNotFound(cloudInformation.getRegionId()));
+            CloudIdentity cloudIdentity = cloudSite.getIdentityService();
+            String heatStackId = cloudInformation.getTemplateInstanceId().split("/")[1];
+
+            List<String> oobMgtNetNames = new ArrayList<>();
+
+            HeatBridgeApi heatBridgeClient =
+                    new HeatBridgeImpl(new AAIResourcesClient(), cloudIdentity, cloudInformation.getOwner(),
+                            cloudInformation.getRegionId(), cloudSite.getRegionId(), cloudInformation.getTenantId());
+
+            heatBridgeClient.authenticate();
 
+            List<Resource> stackResources =
+                    heatBridgeClient.queryNestedHeatStackResources(cloudInformation.getTemplateInstanceId());
 
-    /**
-     * @param auditHeatStackFailed
-     * @param auditList
-     * @return
-     */
-    protected boolean didAuditFailVserverLInterfaces(AAIObjectAuditList auditList) {
-        Stream<AAIObjectAudit> issue = auditList.getAuditList().stream()
-                .filter(auditObject -> auditObject.getAaiObjectType().equals(AAIObjectType.VSERVER.typeName())
-                        || auditObject.getAaiObjectType().equals(AAIObjectType.L_INTERFACE.typeName()));
+            List<Server> osServers = heatBridgeClient.getAllOpenstackServers(stackResources);
 
-        return issue.filter(auditObject -> !auditObject.isDoesObjectExist()).findFirst().map(v -> true).orElse(false);
+            heatBridgeClient.createPserversAndPinterfacesIfNotPresentInAai(stackResources);
+
+            List<Image> osImages = heatBridgeClient.extractOpenstackImagesFromServers(osServers);
+
+            List<Flavor> osFlavors = heatBridgeClient.extractOpenstackFlavorsFromServers(osServers);
+
+            logger.debug("Successfully queried heat stack{} for resources.", heatStackId);
+            // os images
+            if (osImages != null && !osImages.isEmpty()) {
+                heatBridgeClient.buildAddImagesToAaiAction(osImages);
+                logger.debug("Successfully built AAI actions to add images.");
+            } else {
+                logger.debug("No images to update to AAI.");
+            }
+            // flavors
+            if (osFlavors != null && !osFlavors.isEmpty()) {
+                heatBridgeClient.buildAddFlavorsToAaiAction(osFlavors);
+                logger.debug("Successfully built AAI actions to add flavors.");
+            } else {
+                logger.debug("No flavors to update to AAI.");
+            }
+
+            // compute resources
+            heatBridgeClient.buildAddVserversToAaiAction(cloudInformation.getVnfId(), cloudInformation.getVfModuleId(),
+                    osServers);
+            logger.debug("Successfully queried compute resources and built AAI vserver actions.");
+
+            // neutron resources
+            List<String> oobMgtNetIds = new ArrayList<>();
+
+            // if no network-id list is provided, however network-name list is
+            if (!CollectionUtils.isEmpty(oobMgtNetNames)) {
+                oobMgtNetIds = heatBridgeClient.extractNetworkIds(oobMgtNetNames);
+            }
+            heatBridgeClient.buildAddVserverLInterfacesToAaiAction(stackResources, oobMgtNetIds);
+            logger.debug(
+                    "Successfully queried neutron resources and built AAI actions to add l-interfaces to vservers.");
+
+            // Update AAI
+            logger.debug("Current Dry Run Value: {}", env.getProperty("heatBridgeDryrun", Boolean.class, true));
+            heatBridgeClient.submitToAai(env.getProperty("heatBridgeDryrun", Boolean.class, true));
+        } catch (Exception ex) {
+            logger.debug("Heatbrige failed for stackId: " + cloudInformation.getTemplateInstanceId(), ex);
+        }
     }
 
     protected AAIResourcesClient getAaiClient() {
 
 import org.camunda.bpm.client.task.ExternalTask;
 import org.camunda.bpm.client.task.ExternalTaskService;
 import org.onap.logging.ref.slf4j.ONAPLogConstants;
-import org.onap.so.client.graphinventory.GraphInventoryCommonObjectMapperProvider;
+import org.onap.so.cloud.resource.beans.CloudInformation;
 import org.onap.so.logging.tasks.AuditMDCSetup;
-import org.onap.so.objects.audit.AAIObjectAuditList;
 import org.onap.so.utils.ExternalTaskUtils;
 import org.onap.so.utils.RetrySequenceLevel;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+
 @Component
 public class CreateInventoryTask extends ExternalTaskUtils {
 
 
     public void executeExternalTask(ExternalTask externalTask, ExternalTaskService externalTaskService) {
         mdcSetup.setupMDC(externalTask);
-        boolean success = true;
         boolean inventoryException = false;
-        String auditInventoryString = externalTask.getVariable("auditInventoryResult");
-        AAIObjectAuditList auditInventory = null;
         String externalTaskId = externalTask.getId();
-        try {
-            GraphInventoryCommonObjectMapperProvider objectMapper = new GraphInventoryCommonObjectMapperProvider();
-            auditInventory = objectMapper.getMapper().readValue(auditInventoryString, AAIObjectAuditList.class);
-        } catch (Exception e) {
-            mdcSetup.setResponseCode(ONAPLogConstants.ResponseStatus.ERROR.toString());
-            logger.error("Error Parsing Audit Results", e);
-        }
-        mdcSetup.setElapsedTime();
-        if (auditInventory != null) {
+        CloudInformation cloudInformation = externalTask.getVariable("cloudInformation");
+        boolean success = true;
+        if (cloudInformation != null) {
             Integer retryCount = externalTask.getRetries();
             try {
-                logger.info("Executing External Task Create Inventory, Retry Number: {} \n {}", auditInventory,
+                logger.info("Executing External Task Create Inventory, Retry Number: {} \n {}", cloudInformation,
                         retryCount);
-                createInventory.createInventory(auditInventory);
-            } catch (InventoryException e) {
-                logger.error("Error during inventory of stack", e);
-                success = false;
-                inventoryException = true;
+                createInventory.heatbridge(cloudInformation);
             } catch (Exception e) {
                 logger.error("Error during inventory of stack", e);
                 success = false;
                 logger.debug("The External Task Id: {}  Successful", externalTaskId);
                 logger.info(ONAPLogConstants.Markers.EXIT, "Exiting");
                 mdcSetup.clearClientMDCs();
-            } else if (inventoryException) {
-                mdcSetup.setResponseCode(ONAPLogConstants.ResponseStatus.ERROR.toString());
-                logger.debug("The External Task Id: {}  Failed, Retry not needed", externalTaskId);
-                externalTaskService.handleBpmnError(externalTask, AAI_INVENTORY_FAILURE);
             } else {
                 if (retryCount == null) {
-                    logger.debug("The External Task Id: {}  Failed, Setting Retries to Default Start Value: {}",
+                    logger.error("The External Task Id: {}  Failed, Setting Retries to Default Start Value: {}",
                             externalTaskId, getRetrySequence().length);
                     externalTaskService.handleFailure(externalTask, UNABLE_TO_WRITE_ALL_INVENTORY_TO_A_AI,
                             UNABLE_TO_WRITE_ALL_INVENTORY_TO_A_AI, getRetrySequence().length, 10000);
                 } else if (retryCount != null && retryCount - 1 == 0) {
                     externalTaskService.handleBpmnError(externalTask, AAI_INVENTORY_FAILURE);
                     mdcSetup.setResponseCode(ONAPLogConstants.ResponseStatus.ERROR.toString());
-                    logger.debug("The External Task Id: {}  Failed, All Retries Exhausted", externalTaskId);
+                    logger.error("The External Task Id: {}  Failed, All Retries Exhausted", externalTaskId);
                     logger.info(ONAPLogConstants.Markers.EXIT, "Exiting");
                 } else {
-                    logger.debug("The External Task Id: {}  Failed, Decrementing Retries: {} , Retry Delay: ",
+                    logger.error("The External Task Id: {}  Failed, Decrementing Retries: {} , Retry Delay: ",
                             externalTaskId, retryCount - 1, calculateRetryDelay(retryCount));
                     externalTaskService.handleFailure(externalTask, UNABLE_TO_WRITE_ALL_INVENTORY_TO_A_AI,
                             UNABLE_TO_WRITE_ALL_INVENTORY_TO_A_AI, retryCount - 1, calculateRetryDelay(retryCount));
                 }
-                logger.debug("The External Task Id: {} Failed", externalTaskId);
+                logger.error("The External Task Id: {} Failed", externalTaskId);
             }
         } else {
-            logger.debug("The External Task Id: {}  Failed, No Audit Results Written", externalTaskId);
+            logger.error("The External Task Id: {}  Failed, No Cloud Information Provided", externalTaskId);
             externalTaskService.handleBpmnError(externalTask, AAI_INVENTORY_FAILURE);
         }
     }
 
 import java.util.Map;
 import java.util.Optional;
 import javax.xml.ws.Holder;
-import org.apache.commons.collections.CollectionUtils;
 import org.onap.logging.filter.base.ErrorCode;
 import org.onap.so.adapters.vnf.exceptions.VnfException;
 import org.onap.so.adapters.vnf.exceptions.VnfNotFound;
-import org.onap.so.client.aai.AAIResourcesClient;
 import org.onap.so.cloud.CloudConfig;
-import org.onap.so.db.catalog.beans.CloudIdentity;
 import org.onap.so.db.catalog.beans.CloudSite;
 import org.onap.so.db.catalog.beans.HeatEnvironment;
 import org.onap.so.db.catalog.beans.HeatFiles;
 import org.onap.so.db.catalog.data.repository.VnfResourceRepository;
 import org.onap.so.db.catalog.utils.MavenLikeVersioning;
 import org.onap.so.entity.MsoRequest;
-import org.onap.so.heatbridge.HeatBridgeApi;
-import org.onap.so.heatbridge.HeatBridgeException;
-import org.onap.so.heatbridge.HeatBridgeImpl;
 import org.onap.so.logger.LoggingAnchor;
 import org.onap.so.logger.MessageEnum;
 import org.onap.so.openstack.beans.HeatStatus;
 import org.onap.so.openstack.beans.StackInfo;
 import org.onap.so.openstack.beans.VnfRollback;
-import org.onap.so.openstack.exceptions.MsoCloudSiteNotFound;
 import org.onap.so.openstack.exceptions.MsoException;
 import org.onap.so.openstack.exceptions.MsoExceptionCategory;
 import org.onap.so.openstack.exceptions.MsoHeatNotFoundException;
 import org.onap.so.openstack.utils.MsoHeatEnvironmentEntry;
 import org.onap.so.openstack.utils.MsoHeatUtils;
 import org.onap.so.openstack.utils.MsoHeatUtilsWithUpdate;
-import org.openstack4j.model.compute.Flavor;
-import org.openstack4j.model.compute.Image;
-import org.openstack4j.model.compute.Server;
-import org.openstack4j.model.heat.Resource;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
         return new HashMap<>(stringInputs);
     }
 
-    private void heatbridge(StackInfo heatStack, String cloudOwner, String cloudSiteId, String tenantId,
-            String genericVnfName, String vfModuleId) {
-        try {
-            CloudSite cloudSite =
-                    cloudConfig.getCloudSite(cloudSiteId).orElseThrow(() -> new MsoCloudSiteNotFound(cloudSiteId));
-            CloudIdentity cloudIdentity = cloudSite.getIdentityService();
-            String heatStackId = heatStack.getCanonicalName().split("/")[1];
-
-            List<String> oobMgtNetNames = new ArrayList<>();
-
-            HeatBridgeApi heatBridgeClient = new HeatBridgeImpl(new AAIResourcesClient(), cloudIdentity, cloudOwner,
-                    cloudSiteId, cloudSite.getRegionId(), tenantId);
-
-            heatBridgeClient.authenticate();
-
-            List<Resource> stackResources = heatBridgeClient.queryNestedHeatStackResources(heatStackId);
-
-            List<Server> osServers = heatBridgeClient.getAllOpenstackServers(stackResources);
-
-            heatBridgeClient.createPserversAndPinterfacesIfNotPresentInAai(stackResources);
-
-            List<Image> osImages = heatBridgeClient.extractOpenstackImagesFromServers(osServers);
-
-            List<Flavor> osFlavors = heatBridgeClient.extractOpenstackFlavorsFromServers(osServers);
-
-            logger.debug("Successfully queried heat stack{} for resources.", heatStackId);
-            // os images
-            if (osImages != null && !osImages.isEmpty()) {
-                heatBridgeClient.buildAddImagesToAaiAction(osImages);
-                logger.debug("Successfully built AAI actions to add images.");
-            } else {
-                logger.debug("No images to update to AAI.");
-            }
-            // flavors
-            if (osFlavors != null && !osFlavors.isEmpty()) {
-                heatBridgeClient.buildAddFlavorsToAaiAction(osFlavors);
-                logger.debug("Successfully built AAI actions to add flavors.");
-            } else {
-                logger.debug("No flavors to update to AAI.");
-            }
-
-            // compute resources
-            heatBridgeClient.buildAddVserversToAaiAction(genericVnfName, vfModuleId, osServers);
-            logger.debug("Successfully queried compute resources and built AAI vserver actions.");
-
-            // neutron resources
-            List<String> oobMgtNetIds = new ArrayList<>();
-
-            // if no network-id list is provided, however network-name list is
-            if (!CollectionUtils.isEmpty(oobMgtNetNames)) {
-                oobMgtNetIds = heatBridgeClient.extractNetworkIds(oobMgtNetNames);
-            }
-            heatBridgeClient.buildAddVserverLInterfacesToAaiAction(stackResources, oobMgtNetIds);
-            logger.debug(
-                    "Successfully queried neutron resources and built AAI actions to add l-interfaces to vservers.");
-
-            // Update AAI
-            heatBridgeClient.submitToAai();
-        } catch (Exception ex) {
-            logger.debug("Heatbrige failed for stackId: " + heatStack.getCanonicalName(), ex);
-        }
-    }
-
     private String convertNode(final JsonNode node) {
         try {
             final Object obj = JSON_MAPPER.treeToValue(node, Object.class);
             outputs.value = copyStringOutputs(heatStack.getOutputs());
             rollback.value = vfRollback;
             logger.debug("VF Module {} successfully created", vfModuleName);
-            if (enableBridge != null && enableBridge) {
-                // call heatbridge
-                heatbridge(heatStack, cloudOwner, cloudSiteId, tenantId, genericVnfName, vfModuleId);
-            }
         } catch (Exception e) {
             logger.debug("unhandled exception in create VF", e);
             throw new VnfException("Exception during create VF " + e.getMessage());
             logger.error(error);
             throw new VnfException(me);
         }
-        // call heatbridge delete
-        try {
-            new HeatBridgeImpl().deleteVfModuleData(vnfId, vfModuleId);
-        } catch (HeatBridgeException e) {
-            logger.error("Heatbridge failed to delete AAI data for vf-module: " + vfModuleId, e);
-        }
     }
 
     public void updateVfModule(String cloudSiteId, String cloudOwner, String tenantId, String vnfType,
 
 
     /**
      * Execute AAI restful API to update the Openstack resources
-     *
+     * 
+     * @param dryrun - this will simply log the aai transaction to log if enabled and not write any data
      * @throws HeatBridgeException when failing to add openstack resource PoJos to AAI
      */
-    void submitToAai() throws HeatBridgeException;
+    void submitToAai(boolean dryrun) throws HeatBridgeException;
 
     /**
      * Delete heatbridge data for a given vf-module
 
 import org.onap.aai.domain.yang.SriovPfs;
 import org.onap.aai.domain.yang.SriovVf;
 import org.onap.aai.domain.yang.SriovVfs;
+import org.onap.aai.domain.yang.VfModule;
 import org.onap.aai.domain.yang.Vlan;
 import org.onap.aai.domain.yang.Vlans;
 import org.onap.aai.domain.yang.Vserver;
-import org.onap.aai.domain.yang.VfModule;
+import org.onap.logging.filter.base.ErrorCode;
 import org.onap.so.client.aai.AAIObjectType;
 import org.onap.so.client.aai.AAIResourcesClient;
 import org.onap.so.client.aai.AAISingleTransactionClient;
 import org.onap.so.client.graphinventory.entities.uri.Depth;
 import org.onap.so.client.graphinventory.exceptions.BulkProcessFailed;
 import org.onap.so.db.catalog.beans.CloudIdentity;
+import org.onap.so.db.catalog.beans.ServerType;
 import org.onap.so.heatbridge.constants.HeatBridgeConstants;
 import org.onap.so.heatbridge.factory.MsoCloudClientFactoryImpl;
 import org.onap.so.heatbridge.helpers.AaiHelper;
 import org.onap.so.heatbridge.openstack.api.OpenstackClient;
 import org.onap.so.heatbridge.openstack.factory.OpenstackClientFactoryImpl;
 import org.onap.so.heatbridge.utils.HeatBridgeUtils;
-import org.onap.logging.filter.base.ErrorCode;
 import org.onap.so.logger.LoggingAnchor;
 import org.onap.so.logger.MessageEnum;
 import org.openstack4j.model.compute.Server;
 
     @Override
     public OpenstackClient authenticate() throws HeatBridgeException {
+        String keystoneVersion = "";
+        if (ServerType.KEYSTONE.equals(cloudIdentity.getIdentityServerType()))
+            keystoneVersion = "v2.0";
+        else if (ServerType.KEYSTONE_V3.equals(cloudIdentity.getIdentityServerType())) {
+            keystoneVersion = "v3";
+        } else {
+            keystoneVersion = "UNKNOWN";
+        }
+        logger.trace("Keystone Version: {} ", keystoneVersion);
         this.osClient = new MsoCloudClientFactoryImpl(new OpenstackClientFactoryImpl()).getOpenstackClient(
                 cloudIdentity.getIdentityUrl(), cloudIdentity.getMsoId(), cloudIdentity.getMsoPass(), regionId,
-                tenantId);
-        logger.debug("Successfully authenticated with keystone for tenant: " + tenantId + " and region: " + regionId);
+                tenantId, keystoneVersion);
+        logger.trace("Successfully authenticated with keystone for tenant: {} and region: {}", tenantId, regionId);
         return osClient;
     }
 
     @Override
     public List<Server> getAllOpenstackServers(final List<Resource> stackResources) {
         Objects.requireNonNull(osClient, ERR_MSG_NULL_OS_CLIENT);
-
         // Filter Openstack Compute resources
         List<String> serverIds =
                 extractStackResourceIdsByResourceType(stackResources, HeatBridgeConstants.OS_SERVER_RESOURCE_TYPE);
             try {
                 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.FLAVOR, cloudOwner, cloudRegionId,
                         aaiFlavor.getFlavorId());
-                if (!resourcesClient.exists(uri)) {
-                    transaction.create(uri, aaiFlavor);
-                    logger.debug("Queuing AAI command to add flavor: " + aaiFlavor.getFlavorId());
-                } else {
-                    logger.debug("Nothing to add since flavor: " + aaiFlavor.getFlavorId() + "already exists in AAI.");
-                }
+                transaction.createIfNotExists(uri, Optional.of(aaiFlavor));
             } catch (WebApplicationException e) {
                 throw new HeatBridgeException(
                         "Failed to update flavor to AAI: " + aaiFlavor.getFlavorId() + ". Error" + " cause: " + e, e);
             lIf.setInterfaceId(port.getId());
             lIf.setInterfaceName(port.getName());
             lIf.setMacaddr(port.getMacAddress());
+            lIf.setNetworkName((String) port.getProfile().get("physical_network"));
+            lIf.setIsPortMirrored(false);
+            lIf.setIsIpUnnumbered(false);
+            lIf.setInMaint(false);
             if (oobMgtNetIds != null && oobMgtNetIds.contains(port.getNetworkId())) {
                 lIf.setInterfaceRole(OOB_MGT_NETWORK_IDENTIFIER);
             } else {
                 lIf.setInterfaceRole(port.getvNicType());
             }
-
             updateLInterfaceIps(port, lIf);
             updateLInterfaceVlan(port, lIf);
 
     private void updateLInterfaceVlan(final Port port, final LInterface lIf) {
         Vlan vlan = new Vlan();
         Network network = osClient.getNetworkById(port.getNetworkId());
-        lIf.setNetworkName(network.getName());
         if (network.getNetworkType().equals(NetworkType.VLAN)) {
-            vlan.setVlanInterface(network.getProviderSegID());
+            vlan.setVlanInterface(network.getName() + network.getProviderSegID());
+
+            vlan.setVlanIdOuter(Long.parseLong(network.getProviderSegID()));
+            vlan.setVlanIdInner(0L);
+            vlan.setInMaint(false);
+            vlan.setIsIpUnnumbered(false);
+            vlan.setIsPrivate(false);
             Vlans vlans = new Vlans();
             List<Vlan> vlanList = vlans.getVlan();
             vlanList.add(vlan);
             if (port.getVifDetails() != null) {
                 sriovVf.setVfVlanFilter((String) port.getVifDetails().get(HeatBridgeConstants.OS_VLAN_NETWORK_KEY));
             }
+            sriovVf.setVfVlanAntiSpoofCheck(false);
+            sriovVf.setVfMacAntiSpoofCheck(false);
             sriovVfList.add(sriovVf);
 
             lIf.setSriovVfs(sriovVfs);
     }
 
     @Override
-    public void submitToAai() throws HeatBridgeException {
+    public void submitToAai(boolean dryrun) throws HeatBridgeException {
         try {
-            transaction.execute();
+            transaction.execute(dryrun);
         } catch (BulkProcessFailed e) {
             String msg = "Failed to commit transaction";
             logger.debug(msg + " with error: " + e);
         try {
             Optional<VfModule> vfModule = resourcesClient.get(VfModule.class,
                     AAIUriFactory.createResourceUri(AAIObjectType.VF_MODULE, vnfId, vfModuleId).depth(Depth.ONE));
+            logger.debug("vfModule is present: {}", vfModule.isPresent());
             if (vfModule.isPresent()) {
 
-                AAIResultWrapper resultWrapper = new AAIResultWrapper(vfModule);
+                AAIResultWrapper resultWrapper = new AAIResultWrapper(vfModule.get());
                 Optional<Relationships> relationships = resultWrapper.getRelationships();
+                logger.debug("relationships is present: {}", relationships.isPresent());
                 if (relationships.isPresent()) {
                     List<AAIResourceUri> vserverUris = relationships.get().getRelatedUris(AAIObjectType.VSERVER);
+                    logger.debug("vserverList isEmpty: {}", vserverUris.isEmpty());
                     createTransactionToDeleteSriovPfFromPserver(vserverUris);
+
                     if (!vserverUris.isEmpty()) {
                         for (AAIResourceUri vserverUri : vserverUris) {
+                            logger.debug("Deleting Vservers: {}", vserverUri.toString());
                             resourcesClient.delete(vserverUri);
                         }
                     }
 
     public static final String AAI_SRIOV_PF = "sriov-pf";
     public static final String AAI_P_INTERFACE_NAME = "p-interface.interface-name";
     public static final String AAI_SRIOV_PF_PCI_ID = "sriov-pf.pf-pci-id";
+    public static final String AAI_VNFC = "vnfc";
+    public static final String AAI_VNFC_ID = "vnfc.vnfc-name";
 
     /**
      * Keys for internal usage
 
      */
 
 
-    OpenstackClient getOpenstackClient(String url, String msoId, String msoPass, String regionId, String tenantId)
-            throws HeatBridgeException;
+    OpenstackClient getOpenstackClient(String url, String msoId, String msoPass, String regionId, String tenantId,
+            String keystoneVersion) throws HeatBridgeException;
 }
 
  */
 package org.onap.so.heatbridge.factory;
 
-import java.net.MalformedURLException;
-import java.net.URL;
 import java.util.Objects;
 import javax.annotation.Nonnull;
 import org.onap.so.heatbridge.HeatBridgeException;
 import org.onap.so.heatbridge.openstack.api.OpenstackClientException;
 import org.onap.so.heatbridge.openstack.factory.OpenstackClientFactory;
 import org.onap.so.utils.CryptoUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 
 /**
  * This class implements {@link MsoCloudClientFactory} It loads the cloud configuration from SO and uses it to
  */
 public class MsoCloudClientFactoryImpl implements MsoCloudClientFactory {
 
+    private static final Logger logger = LoggerFactory.getLogger(MsoCloudClientFactoryImpl.class);
+
     private OpenstackClientFactory openstackClientFactory;
 
     public MsoCloudClientFactoryImpl(@Nonnull OpenstackClientFactory openstackClientFactory) {
 
     @Override
     public OpenstackClient getOpenstackClient(@Nonnull String url, @Nonnull String msoId, @Nonnull String msoPass,
-            @Nonnull String regionId, @Nonnull String tenantId) throws HeatBridgeException {
+            @Nonnull String regionId, @Nonnull String tenantId, @Nonnull String keystoneVersion)
+            throws HeatBridgeException {
         Objects.requireNonNull(url, "Null openstack url!");
         Objects.requireNonNull(msoId, "Null openstack user id!");
         Objects.requireNonNull(msoPass, "Null openstack password!");
         Objects.requireNonNull(regionId, "Null regionId ID!");
         Objects.requireNonNull(tenantId, "Null tenant ID!");
+        Objects.requireNonNull(tenantId, "Null keystone version");
         try {
             final OpenstackAccess osAccess = new OpenstackAccessBuilder().setBaseUrl(url) // keystone URL
                     .setUser(msoId) // keystone username
                     .build();
 
             // Identify the Keystone version
-            String version = new URL(url).getPath().replace("/", "");
-            if (version.equals(HeatBridgeConstants.OS_KEYSTONE_V2_KEY)) {
+            if (keystoneVersion.equals(HeatBridgeConstants.OS_KEYSTONE_V2_KEY)) {
                 return openstackClientFactory.createOpenstackV2Client(osAccess);
-            } else if (version.equals(HeatBridgeConstants.OS_KEYSTONE_V3_KEY)) {
+            } else if (keystoneVersion.equals(HeatBridgeConstants.OS_KEYSTONE_V3_KEY)) {
                 return openstackClientFactory.createOpenstackV3Client(osAccess);
             }
-            throw new OpenstackClientException("Unsupported keystone version!");
-        } catch (MalformedURLException e) {
-            throw new HeatBridgeException("Malformed Keystone Endpoint in SO configuration.", e);
+            throw new OpenstackClientException("Unsupported keystone version! " + keystoneVersion);
         } catch (OpenstackClientException osClientEx) {
-            throw new HeatBridgeException("Client error when authenticating with the Openstack V3.", osClientEx);
+            logger.error("Error creating OS Client", osClientEx);
+            throw new HeatBridgeException("Client error when authenticating with the Openstack", osClientEx);
         }
     }
 }
 
  */
 package org.onap.so.heatbridge.helpers;
 
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableMap;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import org.onap.aai.domain.yang.RelationshipList;
 import org.onap.aai.domain.yang.SriovVf;
 import org.onap.aai.domain.yang.Vserver;
+import org.onap.so.client.aai.AAIObjectType;
+import org.onap.so.client.aai.entities.uri.AAIResourceUri;
+import org.onap.so.client.aai.entities.uri.AAIUriFactory;
 import org.onap.so.heatbridge.constants.HeatBridgeConstants;
 import org.openstack4j.model.compute.Server;
 import org.openstack4j.model.network.Port;
+import com.google.common.base.Preconditions;
 
 /**
  * This class provides wrapper methods to manage creation of AAI objects and extracting objects from AAI and
         List<Relationship> relationships = relationshipList.getRelationship();
 
         // vserver to pserver relationship
-        Relationship pserverRelationship =
-                buildRelationship(HeatBridgeConstants.AAI_PSERVER, ImmutableMap.<String, String>builder()
-                        .put(HeatBridgeConstants.AAI_PSERVER_HOSTNAME, server.getHypervisorHostname()).build());
+        Relationship pserverRelationship = buildRelationship(
+                AAIUriFactory.createResourceUri(AAIObjectType.PSERVER, server.getHypervisorHostname()));
         relationships.add(pserverRelationship);
 
+        // vserver to generic-vnf relationship
+        Relationship genericVnfRelationship =
+                buildRelationship(AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, genericVnfId));
+        relationships.add(genericVnfRelationship);
+
+        // vserver to vnfc relationship
+        Relationship vnfcRelationship =
+                buildRelationship(AAIUriFactory.createResourceUri(AAIObjectType.VNFC, server.getName()));
+        relationships.add(vnfcRelationship);
+
+
         // vserver to vf-module relationship
-        Relationship vfModuleRelationship = buildRelationship(HeatBridgeConstants.AAI_VF_MODULE,
-                ImmutableMap.<String, String>builder().put(HeatBridgeConstants.AAI_GENERIC_VNF_ID, genericVnfId)
-                        .put(HeatBridgeConstants.AAI_VF_MODULE_ID, vfModuleId).build());
+        Relationship vfModuleRelationship =
+                buildRelationship(AAIUriFactory.createResourceUri(AAIObjectType.VF_MODULE, genericVnfId, vfModuleId));
         relationships.add(vfModuleRelationship);
 
         // vserver to image relationship
         if (server.getImage() != null) {
-            Relationship imageRel = buildRelationship(HeatBridgeConstants.AAI_IMAGE,
-                    ImmutableMap.<String, String>builder().put(HeatBridgeConstants.AAI_CLOUD_OWNER, cloudOwner)
-                            .put(HeatBridgeConstants.AAI_CLOUD_REGION_ID, cloudRegionId)
-                            .put(HeatBridgeConstants.AAI_IMAGE_ID, server.getImage().getId()).build());
+            Relationship imageRel = buildRelationship(AAIUriFactory.createResourceUri(AAIObjectType.IMAGE, cloudOwner,
+                    cloudRegionId, server.getImage().getId()));
             relationships.add(imageRel);
         }
 
         // vserver to flavor relationship
-        Relationship flavorRel = buildRelationship(HeatBridgeConstants.AAI_FLAVOR,
-                ImmutableMap.<String, String>builder().put(HeatBridgeConstants.AAI_CLOUD_OWNER, cloudOwner)
-                        .put(HeatBridgeConstants.AAI_CLOUD_REGION_ID, cloudRegionId)
-                        .put(HeatBridgeConstants.AAI_FLAVOR_ID, server.getFlavor().getId()).build());
+        Relationship flavorRel = buildRelationship(AAIUriFactory.createResourceUri(AAIObjectType.FLAVOR, cloudOwner,
+                cloudRegionId, server.getFlavor().getId()));
         relationships.add(flavorRel);
         return relationshipList;
     }
         List<Relationship> relationships = relationshipList.getRelationship();
 
         // sriov-vf to sriov-pf relationship
-        Relationship sriovPfRelationship = buildRelationship(HeatBridgeConstants.AAI_SRIOV_PF,
-                ImmutableMap.<String, String>builder().put(HeatBridgeConstants.AAI_PSERVER_HOSTNAME, pserverName)
-                        .put(HeatBridgeConstants.AAI_P_INTERFACE_NAME, pIfName)
-                        .put(HeatBridgeConstants.AAI_SRIOV_PF_PCI_ID, pfPciId).build());
+        Relationship sriovPfRelationship = buildRelationship(
+                AAIUriFactory.createResourceUri(AAIObjectType.SRIOV_PF, pserverName, pIfName, pfPciId));
         relationships.add(sriovPfRelationship);
 
         return relationshipList;
         aaiImage.setImageName(image.getName());
         aaiImage.setImageOsDistro(HeatBridgeConstants.OS_UNKNOWN_KEY);
         aaiImage.setImageOsVersion(HeatBridgeConstants.OS_UNKNOWN_KEY);
-        image.getLinks().stream().filter(link -> link.getRel().equals(HeatBridgeConstants.OS_RESOURCES_SELF_LINK_KEY))
-                .findFirst().ifPresent(link -> aaiImage.setImageSelflink(link.getHref()));
+
+        // application name/vendor/version needs to be set
+        if (image.getLinks() != null) {
+            image.getLinks().stream()
+                    .filter(link -> link.getRel().equals(HeatBridgeConstants.OS_RESOURCES_SELF_LINK_KEY)).findFirst()
+                    .ifPresent(link -> aaiImage.setImageSelflink(link.getHref()));
+        }
         return aaiImage;
     }
 
         Flavor aaiFlavor = new Flavor();
         aaiFlavor.setFlavorId(flavor.getId());
         aaiFlavor.setFlavorName(flavor.getName());
+        aaiFlavor.setFlavorVcpus(flavor.getVcpus());
+        aaiFlavor.setFlavorRam(flavor.getRam());
+        aaiFlavor.setFlavorDisk(flavor.getDisk());
+        aaiFlavor.setFlavorEphemeral(flavor.getEphemeral());
+        aaiFlavor.setFlavorDisabled(flavor.isDisabled());
+        aaiFlavor.setFlavorIsPublic(flavor.isPublic());
+        aaiFlavor.setFlavorSwap(Integer.toString(flavor.getSwap()));
         flavor.getLinks().stream().filter(link -> link.getRel().equals(HeatBridgeConstants.OS_RESOURCES_SELF_LINK_KEY))
                 .findFirst().ifPresent(link -> aaiFlavor.setFlavorSelflink(link.getHref()));
         return aaiFlavor;
      * @param relationshipKeyValues Key value pairs of relationship data
      * @return AAI Relationship object
      */
-    private Relationship buildRelationship(final String relatedTo, final Map<String, String> relationshipKeyValues) {
+    private Relationship buildRelationship(final AAIResourceUri relatedLink) {
         Relationship relationship = new Relationship();
-        relationship.setRelatedTo(relatedTo);
-        relationshipKeyValues.keySet().forEach(k -> {
-            RelationshipData relationshipData = new RelationshipData();
-            relationshipData.setRelationshipKey(k);
-            relationshipData.setRelationshipValue(relationshipKeyValues.get(k));
-            relationship.getRelationshipData().add(relationshipData);
-        });
+        relationship.setRelatedLink(relatedLink.build().toString());
         return relationship;
     }
 }
 
 
 package org.onap.so.adapters.tasks.inventory;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.times;
 import java.io.File;
 import java.io.IOException;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
 import org.camunda.bpm.client.task.ExternalTask;
-import org.hamcrest.Matchers;
 import org.junit.Before;
-import org.junit.Test;
-import org.mockito.ArgumentCaptor;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
-import org.mockito.Mockito;
 import org.mockito.MockitoAnnotations;
 import org.onap.so.adapters.tasks.inventory.CreateAAIInventory;
 import org.onap.so.audit.beans.AuditInventory;
-import org.onap.so.client.aai.AAIObjectType;
 import org.onap.so.client.aai.AAIResourcesClient;
-import org.onap.so.client.aai.entities.uri.AAIResourceUri;
-import org.onap.so.client.aai.entities.uri.AAIUriFactory;
 import org.onap.so.objects.audit.AAIObjectAuditList;
 import com.fasterxml.jackson.core.JsonParseException;
 import com.fasterxml.jackson.databind.JsonMappingException;
         doReturn(auditInventory).when(mockExternalTask).getVariable("auditInventory");
     }
 
-    @Test
-    public void determineAuditResult_Test() throws Exception {
-        boolean actual = createAAIInventory.didAuditFailVserverLInterfaces(auditListSuccess);
-        assertEquals(false, actual);
-    }
-
-    @Test
-    public void determineAuditResult_Failure_Test() throws Exception {
-        boolean actual = createAAIInventory.didAuditFailVserverLInterfaces(auditListFailure);
-        assertEquals(true, actual);
-    }
-
-    @Test
-    public void missing_Sub_Interfaces_Test() throws Exception {
-        AAIResourceUri aaiURI2 = AAIUriFactory.createResourceUri(AAIObjectType.SUB_L_INTERFACE, "cloudOwner",
-                "regionOne", "0422ffb57ba042c0800a29dc85ca70f8", "92272b67-d23f-42ca-87fa-7b06a9ec81f3",
-                "tsbc0005v_tsbc0005vm002_svc1_port_0", "tsbc0005v_tsbc0005vm002_subint_untrusted_svc1_81");
-        AAIResourceUri aaiURI1 = AAIUriFactory.createResourceUri(AAIObjectType.SUB_L_INTERFACE, "cloudOwner",
-                "regionOne", "0422ffb57ba042c0800a29dc85ca70f8", "92272b67-d23f-42ca-87fa-7b06a9ec81f3",
-                "tsbc0005v_tsbc0005vm002_svc2_port_0", "tsbc0005v_tsbc0005vm002_subint_untrusted_svc2_103");
-        ArgumentCaptor<Optional> captor = ArgumentCaptor.forClass(Optional.class);
-        ArgumentCaptor<AAIResourceUri> uriCaptor = ArgumentCaptor.forClass(AAIResourceUri.class);
-
-        createAAIInventory.setAaiClient(mockClient);
-        createAAIInventory.createInventory(missingSubInterfaces);
-        Mockito.verify(mockClient, times(2)).createIfNotExists(uriCaptor.capture(), captor.capture());
-
-        List<AAIResourceUri> capturedURI = uriCaptor.getAllValues();
-        assertTrue(capturedURI.stream().anyMatch(item -> aaiURI1.build().toString().equals(item.build().toString())));
-        assertTrue(capturedURI.stream().anyMatch(item -> aaiURI2.build().toString().equals(item.build().toString())));
-
-
-
-    }
 }
 
         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");
     }
 
         heatbridge.buildAddFlavorsToAaiAction(flavors);
 
         // Assert #1
-        verify(transaction, times(2)).create(any(AAIResourceUri.class), any(org.onap.aai.domain.yang.Flavor.class));
-
-        // Act #2
-        heatbridge.buildAddFlavorsToAaiAction(flavors);
-
-        // Assert #2
-        verify(transaction, times(4)).create(any(AAIResourceUri.class), any(org.onap.aai.domain.yang.Flavor.class));
+        verify(transaction, times(2)).createIfNotExists(any(AAIResourceUri.class), any(Optional.class));
     }
 
     @Ignore
 
 
     @Test
     public void getOpenstackClientWithVersion2() throws Exception {
-        testedObject.getOpenstackClient(URL_V2, MSO_ID, ENCRYPTED_PASSWORD, REGION_ID, TENANT_ID);
+        testedObject.getOpenstackClient(URL_V2, MSO_ID, ENCRYPTED_PASSWORD, REGION_ID, TENANT_ID, "v2.0");
         verify(openstackClientFactoryMock).createOpenstackV2Client(any(OpenstackAccess.class));
     }
 
     @Test
     public void getOpenstackClientWithVersion3() throws Exception {
-        testedObject.getOpenstackClient(URL_V3, MSO_ID, ENCRYPTED_PASSWORD, REGION_ID, TENANT_ID);
+        testedObject.getOpenstackClient(URL_V3, MSO_ID, ENCRYPTED_PASSWORD, REGION_ID, TENANT_ID, "v3");
         verify(openstackClientFactoryMock).createOpenstackV3Client(any(OpenstackAccess.class));
     }
 
     @Test(expected = HeatBridgeException.class)
     public void getOpenstackClient_unsupportedVersion() throws Exception {
-        testedObject.getOpenstackClient(URL_WITH_UNSUPPORTED_VERSION, MSO_ID, ENCRYPTED_PASSWORD, REGION_ID, TENANT_ID);
+        testedObject.getOpenstackClient(URL_WITH_UNSUPPORTED_VERSION, MSO_ID, ENCRYPTED_PASSWORD, REGION_ID, TENANT_ID,
+                "UNKNOWN");
     }
 
 }
 
 <?xml version="1.0" encoding="UTF-8"?>
-<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.10.0">
+<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="3.1.2">
   <bpmn:process id="ActivateVfModuleBB" name="ActivateVfModuleBB" isExecutable="true">
     <bpmn:startEvent id="ActivateVfModuleBB_Start">
       <bpmn:outgoing>SequenceFlow_0ieafii</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:serviceTask id="Audit_AAI_Inventory" name="Validate A&AI Inventory" camunda:type="external" camunda:topic="InventoryAddAudit">
       <bpmn:incoming>SequenceFlow_0xndboi</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_0ee42yq</bpmn:outgoing>
+      <bpmn:outgoing>SequenceFlow_0l8684g</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:sequenceFlow id="SequenceFlow_07ybdik" name="No" sourceRef="ExclusiveGateway_1v8bmbu" targetRef="ExclusiveGateway_0sqvzll" />
     <bpmn:sequenceFlow id="SequenceFlow_0ghzwlo" name="Yes" sourceRef="ExclusiveGateway_1v8bmbu" targetRef="Setup_AAI_Inventory_Audit">
-      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("auditInventoryNeeded") == true}]]></bpmn:conditionExpression>
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${execution.getVariable("auditInventoryNeeded") == true}</bpmn:conditionExpression>
     </bpmn:sequenceFlow>
-    <bpmn:sequenceFlow id="SequenceFlow_0ee42yq" sourceRef="Audit_AAI_Inventory" targetRef="ExclusiveGateway_1h8avxn" />
     <bpmn:serviceTask id="CheckAuditVariable" name="Check Audit Variable" camunda:expression="${AuditTasks.isAuditNeeded(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))}">
       <bpmn:incoming>SequenceFlow_0ieafii</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_1xqyur9</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:sequenceFlow id="SequenceFlow_1xqyur9" sourceRef="CheckAuditVariable" targetRef="ExclusiveGateway_1v8bmbu" />
-    <bpmn:sequenceFlow id="SequenceFlow_109oxx2" name="No" sourceRef="ExclusiveGateway_1h8avxn" targetRef="ExclusiveGateway_0y0ek7t">
-      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("auditIsSuccessful")== true }]]></bpmn:conditionExpression>
-    </bpmn:sequenceFlow>
-    <bpmn:sequenceFlow id="SequenceFlow_1bo83qk" name="Yes" sourceRef="ExclusiveGateway_1h8avxn" targetRef="Create_AAI_Inventory" />
-    <bpmn:sequenceFlow id="SequenceFlow_0arwo1o" sourceRef="Create_AAI_Inventory" targetRef="ExclusiveGateway_0y0ek7t" />
-    <bpmn:serviceTask id="Create_AAI_Inventory" name="Create A&AI Inventory" camunda:type="external" camunda:topic="InventoryCreate">
-      <bpmn:incoming>SequenceFlow_1bo83qk</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_0arwo1o</bpmn:outgoing>
-    </bpmn:serviceTask>
     <bpmn:sequenceFlow id="SequenceFlow_1b63lv4" sourceRef="ExclusiveGateway_0sqvzll" targetRef="ActivateVfModule" />
-    <bpmn:sequenceFlow id="SequenceFlow_18faffa" sourceRef="ExclusiveGateway_0y0ek7t" targetRef="ExclusiveGateway_0sqvzll" />
     <bpmn:subProcess id="SubProcess_0bpsptg" name="Audit Exception Sub Process" triggeredByEvent="true">
       <bpmn:startEvent id="catchInventoryException">
         <bpmn:outgoing>SequenceFlow_19gbhlj</bpmn:outgoing>
     </bpmn:inclusiveGateway>
     <bpmn:inclusiveGateway id="ExclusiveGateway_0sqvzll">
       <bpmn:incoming>SequenceFlow_07ybdik</bpmn:incoming>
-      <bpmn:incoming>SequenceFlow_18faffa</bpmn:incoming>
+      <bpmn:incoming>SequenceFlow_0l8684g</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_1b63lv4</bpmn:outgoing>
     </bpmn:inclusiveGateway>
-    <bpmn:inclusiveGateway id="ExclusiveGateway_1h8avxn" name="Audit Failed?" default="SequenceFlow_1bo83qk">
-      <bpmn:incoming>SequenceFlow_0ee42yq</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_109oxx2</bpmn:outgoing>
-      <bpmn:outgoing>SequenceFlow_1bo83qk</bpmn:outgoing>
-    </bpmn:inclusiveGateway>
-    <bpmn:inclusiveGateway id="ExclusiveGateway_0y0ek7t">
-      <bpmn:incoming>SequenceFlow_109oxx2</bpmn:incoming>
-      <bpmn:incoming>SequenceFlow_0arwo1o</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_18faffa</bpmn:outgoing>
-    </bpmn:inclusiveGateway>
+    <bpmn:sequenceFlow id="SequenceFlow_0l8684g" sourceRef="Audit_AAI_Inventory" targetRef="ExclusiveGateway_0sqvzll" />
   </bpmn:process>
   <bpmn:error id="Error_0q258vt" errorCode="7000" />
   <bpmn:error id="Error_0zgccif" name="org.onap.so.adapters.inventory.create.InventoryException" errorCode="org.onap.so.adapters.inventory.create.InventoryException" />
   <bpmndi:BPMNDiagram id="BPMNDiagram_1">
     <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="ActivateVfModuleBB">
       <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="ActivateVfModuleBB_Start">
-        <dc:Bounds x="85" y="234" width="36" height="36" />
+        <dc:Bounds x="156" y="180" width="36" height="36" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="58" y="270" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0ieafii_di" bpmnElement="SequenceFlow_0ieafii">
-        <di:waypoint xsi:type="dc:Point" x="121" y="252" />
-        <di:waypoint xsi:type="dc:Point" x="201" y="252" />
+        <di:waypoint x="192" y="198" />
+        <di:waypoint x="272" y="198" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="116" y="231" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="EndEvent_1v967li_di" bpmnElement="ActivateVfModuleBB_End">
-        <dc:Bounds x="1404" y="235" width="36" height="36" />
+        <dc:Bounds x="1475" y="181" width="36" height="36" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="1235" y="275" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ServiceTask_0hawa84_di" bpmnElement="ActivateVfModule">
-        <dc:Bounds x="958" y="212" width="100" height="80" />
+        <dc:Bounds x="1029" y="158" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ServiceTask_175e9ul_di" bpmnElement="UpdateVfModuleActiveStatus">
-        <dc:Bounds x="1214" y="212" width="100" height="80" />
+        <dc:Bounds x="1285" y="158" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0xsp0pv_di" bpmnElement="SequenceFlow_0xsp0pv">
-        <di:waypoint xsi:type="dc:Point" x="1314" y="252" />
-        <di:waypoint xsi:type="dc:Point" x="1404" y="253" />
+        <di:waypoint x="1385" y="198" />
+        <di:waypoint x="1475" y="199" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="1314" y="231.5" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="CallActivity_03jkesd_di" bpmnElement="CallActivity_sdncHandler">
-        <dc:Bounds x="1086" y="212" width="100" height="80" />
+        <dc:Bounds x="1157" y="158" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1a495wm_di" bpmnElement="SequenceFlow_1a495wm">
-        <di:waypoint xsi:type="dc:Point" x="1058" y="252" />
-        <di:waypoint xsi:type="dc:Point" x="1086" y="252" />
+        <di:waypoint x="1129" y="198" />
+        <di:waypoint x="1157" y="198" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="1027" y="231" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1j4x1ej_di" bpmnElement="SequenceFlow_1j4x1ej">
-        <di:waypoint xsi:type="dc:Point" x="1186" y="252" />
-        <di:waypoint xsi:type="dc:Point" x="1214" y="252" />
+        <di:waypoint x="1257" y="198" />
+        <di:waypoint x="1285" y="198" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="1155" y="231" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0xndboi_di" bpmnElement="SequenceFlow_0xndboi">
-        <di:waypoint xsi:type="dc:Point" x="491" y="175" />
-        <di:waypoint xsi:type="dc:Point" x="513" y="175" />
+        <di:waypoint x="589" y="121" />
+        <di:waypoint x="680" y="121" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="457" y="153.5" width="90" height="13" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ServiceTask_0krf1ur_di" bpmnElement="Setup_AAI_Inventory_Audit">
-        <dc:Bounds x="391" y="135" width="100" height="80" />
+        <dc:Bounds x="489" y="81" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ServiceTask_08rxjeb_di" bpmnElement="Audit_AAI_Inventory">
-        <dc:Bounds x="513" y="135" width="100" height="80" />
+        <dc:Bounds x="680" y="81" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_07ybdik_di" bpmnElement="SequenceFlow_07ybdik">
-        <di:waypoint xsi:type="dc:Point" x="355" y="277" />
-        <di:waypoint xsi:type="dc:Point" x="355" y="315" />
-        <di:waypoint xsi:type="dc:Point" x="881" y="315" />
-        <di:waypoint xsi:type="dc:Point" x="881" y="277" />
+        <di:waypoint x="426" y="223" />
+        <di:waypoint x="426" y="261" />
+        <di:waypoint x="952" y="261" />
+        <di:waypoint x="952" y="223" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="364" y="294" width="14" height="12" />
+          <dc:Bounds x="435" y="240" width="15" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0ghzwlo_di" bpmnElement="SequenceFlow_0ghzwlo">
-        <di:waypoint xsi:type="dc:Point" x="355" y="227" />
-        <di:waypoint xsi:type="dc:Point" x="355" y="175" />
-        <di:waypoint xsi:type="dc:Point" x="391" y="175" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="362" y="185" width="19" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_0ee42yq_di" bpmnElement="SequenceFlow_0ee42yq">
-        <di:waypoint xsi:type="dc:Point" x="613" y="175" />
-        <di:waypoint xsi:type="dc:Point" x="638" y="175" />
+        <di:waypoint x="426" y="173" />
+        <di:waypoint x="426" y="121" />
+        <di:waypoint x="489" y="121" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="580.5" y="153.5" width="90" height="13" />
+          <dc:Bounds x="434" y="131" width="18" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ServiceTask_1eg5ryx_di" bpmnElement="CheckAuditVariable">
-        <dc:Bounds x="201" y="212" width="100" height="80" />
+        <dc:Bounds x="272" y="158" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1xqyur9_di" bpmnElement="SequenceFlow_1xqyur9">
-        <di:waypoint xsi:type="dc:Point" x="301" y="252" />
-        <di:waypoint xsi:type="dc:Point" x="330" y="252" />
+        <di:waypoint x="372" y="198" />
+        <di:waypoint x="401" y="198" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="270.5" y="230.5" width="90" height="13" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_109oxx2_di" bpmnElement="SequenceFlow_109oxx2">
-        <di:waypoint xsi:type="dc:Point" x="663" y="200" />
-        <di:waypoint xsi:type="dc:Point" x="663" y="230" />
-        <di:waypoint xsi:type="dc:Point" x="834" y="230" />
-        <di:waypoint xsi:type="dc:Point" x="834" y="200" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="670" y="207" width="14" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1bo83qk_di" bpmnElement="SequenceFlow_1bo83qk">
-        <di:waypoint xsi:type="dc:Point" x="663" y="150" />
-        <di:waypoint xsi:type="dc:Point" x="663" y="101" />
-        <di:waypoint xsi:type="dc:Point" x="691" y="101" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="667" y="111" width="19" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_0arwo1o_di" bpmnElement="SequenceFlow_0arwo1o">
-        <di:waypoint xsi:type="dc:Point" x="791" y="101" />
-        <di:waypoint xsi:type="dc:Point" x="834" y="101" />
-        <di:waypoint xsi:type="dc:Point" x="834" y="150" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="767.5" y="79.5" width="90" height="13" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ServiceTask_1eb09gr_di" bpmnElement="Create_AAI_Inventory">
-        <dc:Bounds x="691" y="61" width="100" height="80" />
-      </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1b63lv4_di" bpmnElement="SequenceFlow_1b63lv4">
-        <di:waypoint xsi:type="dc:Point" x="906" y="252" />
-        <di:waypoint xsi:type="dc:Point" x="958" y="252" />
+        <di:waypoint x="977" y="198" />
+        <di:waypoint x="1029" y="198" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="887" y="231" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_18faffa_di" bpmnElement="SequenceFlow_18faffa">
-        <di:waypoint xsi:type="dc:Point" x="859" y="175" />
-        <di:waypoint xsi:type="dc:Point" x="881" y="175" />
-        <di:waypoint xsi:type="dc:Point" x="881" y="227" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="825" y="154" width="90" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="SubProcess_0mbkb7v_di" bpmnElement="SubProcess_0bpsptg" isExpanded="true">
-        <dc:Bounds x="293" y="449" width="350" height="200" />
+        <dc:Bounds x="364" y="395" width="350" height="200" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="StartEvent_12r96di_di" bpmnElement="catchInventoryException">
-        <dc:Bounds x="324" y="532" width="36" height="36" />
+        <dc:Bounds x="395" y="478" width="36" height="36" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="341.15269461077844" y="571.6127744510978" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="EndEvent_067jv1n_di" bpmnElement="EndEvent_067jv1n">
-        <dc:Bounds x="572.1526946107784" y="532" width="36" height="36" />
+        <dc:Bounds x="643" y="478" width="36" height="36" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="590.1526946107784" y="572" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_19gbhlj_di" bpmnElement="SequenceFlow_19gbhlj">
-        <di:waypoint xsi:type="dc:Point" x="360" y="550" />
-        <di:waypoint xsi:type="dc:Point" x="415" y="550" />
+        <di:waypoint x="431" y="496" />
+        <di:waypoint x="486" y="496" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="387.5" y="529" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0l4jzc5_di" bpmnElement="SequenceFlow_0l4jzc5">
-        <di:waypoint xsi:type="dc:Point" x="515" y="550" />
-        <di:waypoint xsi:type="dc:Point" x="572" y="550" />
+        <di:waypoint x="586" y="496" />
+        <di:waypoint x="643" y="496" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="543.5" y="529" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ServiceTask_08xffml_di" bpmnElement="processAuditException">
-        <dc:Bounds x="415" y="510" width="100" height="80" />
+        <dc:Bounds x="486" y="456" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="InclusiveGateway_03pi9y4_di" bpmnElement="ExclusiveGateway_1v8bmbu">
-        <dc:Bounds x="330" y="227" width="50" height="50" />
+        <dc:Bounds x="401" y="173" width="50" height="50" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="383" y="246" width="73" height="12" />
+          <dc:Bounds x="453" y="192" width="75" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="InclusiveGateway_16ap4e3_di" bpmnElement="ExclusiveGateway_0sqvzll">
-        <dc:Bounds x="856" y="227" width="50" height="50" />
+        <dc:Bounds x="927" y="173" width="50" height="50" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="836" y="281" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="InclusiveGateway_00n600s_di" bpmnElement="ExclusiveGateway_1h8avxn">
-        <dc:Bounds x="638" y="150" width="50" height="50" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="693" y="169" width="63" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="InclusiveGateway_0xx6c29_di" bpmnElement="ExclusiveGateway_0y0ek7t">
-        <dc:Bounds x="809" y="150" width="50" height="50" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="789" y="204" width="0" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0l8684g_di" bpmnElement="SequenceFlow_0l8684g">
+        <di:waypoint x="780" y="121" />
+        <di:waypoint x="952" y="121" />
+        <di:waypoint x="952" y="173" />
+      </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
 </bpmn:definitions>
 
 <?xml version="1.0" encoding="UTF-8"?>
-<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="3.7.0">
+<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="3.1.2">
   <bpmn:process id="CreateVfModuleBB" name="CreateVfModuleBB" isExecutable="true">
     <bpmn:startEvent id="CreateVfModuleBB_Start">
       <bpmn:outgoing>SequenceFlow_1xr6chl</bpmn:outgoing>
       <bpmn:outgoing>SequenceFlow_1s4rpyp</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:sequenceFlow id="SequenceFlow_16g4dz0" sourceRef="CreateVfModule" targetRef="VnfAdapter" />
-    <bpmn:sequenceFlow id="SequenceFlow_0ecr393" sourceRef="VnfAdapter" targetRef="CreateNetworkPolicies" />
+    <bpmn:sequenceFlow id="SequenceFlow_0ecr393" sourceRef="VnfAdapter" targetRef="ServiceTask_01zrt6x" />
     <bpmn:callActivity id="VnfAdapter" name="Vnf Adapter" calledElement="VnfAdapter">
       <bpmn:extensionElements>
         <camunda:in source="gBuildingBlockExecution" target="gBuildingBlockExecution" />
     <bpmn:sequenceFlow id="SequenceFlow_0rds4rj" sourceRef="UpdateVfModuleHeatStackId" targetRef="UpdateVfModuleStatus" />
     <bpmn:sequenceFlow id="SequenceFlow_1vbwdaw" sourceRef="UpdateVfModuleStatus" targetRef="CreateVfModuleBB_End" />
     <bpmn:serviceTask id="CreateNetworkPolicies" name="AAI Create (network policies)" camunda:expression="${AAICreateTasks.createNetworkPolicies(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))}">
-      <bpmn:incoming>SequenceFlow_0ecr393</bpmn:incoming>
+      <bpmn:incoming>SequenceFlow_1yn8o6d</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0xqhep5</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:sequenceFlow id="SequenceFlow_0xqhep5" sourceRef="CreateNetworkPolicies" targetRef="UpdateVnfIpv4OamAddress" />
       <bpmn:outgoing>SequenceFlow_15do1tu</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:sequenceFlow id="SequenceFlow_15do1tu" sourceRef="UpdateVfModuleContrailServiceInstanceFqdn" targetRef="UpdateVfModuleHeatStackId" />
+    <bpmn:serviceTask id="ServiceTask_01zrt6x" name="
Create
Cloud
Variable
" camunda:expression="${CreateVFModule.createInventoryVariable(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))}">
+      <bpmn:incoming>SequenceFlow_0ecr393</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_1io8r33</bpmn:outgoing>
+    </bpmn:serviceTask>
+    <bpmn:sequenceFlow id="SequenceFlow_1io8r33" sourceRef="ServiceTask_01zrt6x" targetRef="ServiceTask_00d84m7" />
+    <bpmn:serviceTask id="ServiceTask_00d84m7" name="
AAI
Create
(inventory)
" camunda:type="external" camunda:topic="InventoryCreate">
+      <bpmn:incoming>SequenceFlow_1io8r33</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_1yn8o6d</bpmn:outgoing>
+    </bpmn:serviceTask>
+    <bpmn:sequenceFlow id="SequenceFlow_1yn8o6d" sourceRef="ServiceTask_00d84m7" targetRef="CreateNetworkPolicies" />
   </bpmn:process>
   <bpmndi:BPMNDiagram id="BPMNDiagram_1">
     <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="CreateVfModuleBB">
       <bpmndi:BPMNShape id="StartEvent_0kxwniy_di" bpmnElement="CreateVfModuleBB_Start">
-        <dc:Bounds x="159" y="88" width="36" height="36" />
+        <dc:Bounds x="156" y="88" width="36" height="36" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="77" y="124" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ServiceTask_13t22km_di" bpmnElement="QueryVfModule">
-        <dc:Bounds x="516" y="66" width="100" height="80" />
+        <dc:Bounds x="513" y="66" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1xr6chl_di" bpmnElement="SequenceFlow_1xr6chl">
-        <di:waypoint x="195" y="106" />
-        <di:waypoint x="316" y="106" />
+        <di:waypoint x="192" y="106" />
+        <di:waypoint x="313" y="106" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="156" y="91" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="EndEvent_0qdq7wj_di" bpmnElement="CreateVfModuleBB_End">
-        <dc:Bounds x="1218" y="293" width="36" height="36" />
+        <dc:Bounds x="1215" y="293" width="36" height="36" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="1136" y="333" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ServiceTask_1dgenhy_di" bpmnElement="CreateVfModule">
-        <dc:Bounds x="712" y="66" width="100" height="80" />
+        <dc:Bounds x="709" y="66" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_15hn8si_di" bpmnElement="SequenceFlow_15hn8si">
-        <di:waypoint x="616" y="106" />
-        <di:waypoint x="712" y="106" />
+        <di:waypoint x="613" y="106" />
+        <di:waypoint x="709" y="106" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="519" y="91" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1s4rpyp_di" bpmnElement="SequenceFlow_1s4rpyp">
-        <di:waypoint x="416" y="106" />
-        <di:waypoint x="516" y="106" />
+        <di:waypoint x="413" y="106" />
+        <di:waypoint x="513" y="106" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="321" y="91" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ServiceTask_1frb5h2_di" bpmnElement="QueryVnf">
-        <dc:Bounds x="316" y="66" width="100" height="80" />
+        <dc:Bounds x="313" y="66" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_16g4dz0_di" bpmnElement="SequenceFlow_16g4dz0">
-        <di:waypoint x="812" y="106" />
-        <di:waypoint x="890" y="106" />
+        <di:waypoint x="809" y="106" />
+        <di:waypoint x="887" y="106" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="751" y="91" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0ecr393_di" bpmnElement="SequenceFlow_0ecr393">
-        <di:waypoint x="990" y="107" />
-        <di:waypoint x="1094" y="107" />
-        <di:waypoint x="1094" y="209" />
-        <di:waypoint x="173" y="209" />
-        <di:waypoint x="173" y="306" />
-        <di:waypoint x="242" y="306" />
+        <di:waypoint x="987" y="107" />
+        <di:waypoint x="1091" y="107" />
+        <di:waypoint x="1091" y="209" />
+        <di:waypoint x="680" y="209" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="534" y="194" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="CallActivity_1i1pfzb_di" bpmnElement="VnfAdapter">
-        <dc:Bounds x="890" y="66" width="100" height="80" />
+        <dc:Bounds x="887" y="66" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ServiceTask_0fpfn71_di" bpmnElement="UpdateVfModuleStatus">
-        <dc:Bounds x="1042" y="271" width="100" height="80" />
+        <dc:Bounds x="1039" y="271" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ServiceTask_04k1b85_di" bpmnElement="UpdateVfModuleHeatStackId">
-        <dc:Bounds x="877" y="271" width="100" height="80" />
+        <dc:Bounds x="874" y="271" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="SubProcess_1getwnf_di" bpmnElement="SubProcess_1getwnf" isExpanded="true">
-        <dc:Bounds x="236" y="439" width="231" height="135" />
+        <dc:Bounds x="233" y="439" width="231" height="135" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="StartEvent_1c8o652_di" bpmnElement="StartEvent_1c8o652">
-        <dc:Bounds x="275" y="497" width="36" height="36" />
+        <dc:Bounds x="272" y="497" width="36" height="36" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="148" y="533" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="EndEvent_1emam1w_di" bpmnElement="EndEvent_1emam1w">
-        <dc:Bounds x="412" y="497" width="36" height="36" />
+        <dc:Bounds x="409" y="497" width="36" height="36" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="285" y="533" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0gcots6_di" bpmnElement="SequenceFlow_0gcots6">
-        <di:waypoint x="311" y="515" />
-        <di:waypoint x="412" y="515" />
+        <di:waypoint x="308" y="515" />
+        <di:waypoint x="409" y="515" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="262" y="494" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0rds4rj_di" bpmnElement="SequenceFlow_0rds4rj">
-        <di:waypoint x="977" y="311" />
-        <di:waypoint x="1042" y="311" />
+        <di:waypoint x="974" y="311" />
+        <di:waypoint x="1039" y="311" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="910" y="296" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1vbwdaw_di" bpmnElement="SequenceFlow_1vbwdaw">
-        <di:waypoint x="1142" y="311" />
-        <di:waypoint x="1183" y="311" />
-        <di:waypoint x="1183" y="311" />
-        <di:waypoint x="1218" y="311" />
+        <di:waypoint x="1139" y="311" />
+        <di:waypoint x="1180" y="311" />
+        <di:waypoint x="1180" y="311" />
+        <di:waypoint x="1215" y="311" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="1098" y="311" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ServiceTask_1v8zx4s_di" bpmnElement="CreateNetworkPolicies">
-        <dc:Bounds x="242" y="271" width="100" height="80" />
+        <dc:Bounds x="239" y="271" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0xqhep5_di" bpmnElement="SequenceFlow_0xqhep5">
-        <di:waypoint x="342" y="311" />
-        <di:waypoint x="395" y="311" />
+        <di:waypoint x="339" y="311" />
+        <di:waypoint x="392" y="311" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="269" y="296" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ServiceTask_015ayw5_di" bpmnElement="UpdateVnfIpv4OamAddress">
-        <dc:Bounds x="395" y="271" width="100" height="80" />
+        <dc:Bounds x="392" y="271" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1yo6mvv_di" bpmnElement="SequenceFlow_1yo6mvv">
-        <di:waypoint x="495" y="311" />
-        <di:waypoint x="564" y="311" />
+        <di:waypoint x="492" y="311" />
+        <di:waypoint x="561" y="311" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="430" y="296" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ServiceTask_0mlfsc9_di" bpmnElement="UpdateVnfManagementV6Address">
-        <dc:Bounds x="564" y="271" width="100" height="80" />
+        <dc:Bounds x="561" y="271" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1i03uy2_di" bpmnElement="SequenceFlow_1i03uy2">
-        <di:waypoint x="664" y="311" />
-        <di:waypoint x="712" y="311" />
+        <di:waypoint x="661" y="311" />
+        <di:waypoint x="709" y="311" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="588" y="296" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ServiceTask_0wctnhw_di" bpmnElement="UpdateVfModuleContrailServiceInstanceFqdn">
-        <dc:Bounds x="712" y="271" width="100" height="80" />
+        <dc:Bounds x="709" y="271" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_15do1tu_di" bpmnElement="SequenceFlow_15do1tu">
-        <di:waypoint x="812" y="311" />
-        <di:waypoint x="877" y="311" />
+        <di:waypoint x="809" y="311" />
+        <di:waypoint x="874" y="311" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="745" y="286" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ServiceTask_01zrt6x_di" bpmnElement="ServiceTask_01zrt6x">
+        <dc:Bounds x="580" y="169" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_1io8r33_di" bpmnElement="SequenceFlow_1io8r33">
+        <di:waypoint x="580" y="209" />
+        <di:waypoint x="478" y="209" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ServiceTask_00d84m7_di" bpmnElement="ServiceTask_00d84m7">
+        <dc:Bounds x="378" y="169" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_1yn8o6d_di" bpmnElement="SequenceFlow_1yn8o6d">
+        <di:waypoint x="378" y="209" />
+        <di:waypoint x="170" y="209" />
+        <di:waypoint x="170" y="306" />
+        <di:waypoint x="239" y="306" />
+      </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
 </bpmn:definitions>
 
 <?xml version="1.0" encoding="UTF-8"?>
-<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.10.0">
+<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="3.1.2">
   <bpmn:process id="DeleteVfModuleBB" name="DeleteVfModuleBB" isExecutable="true">
     <bpmn:startEvent id="DeleteVfModuleBB_Start">
       <bpmn:outgoing>SequenceFlow_1oeootm</bpmn:outgoing>
     <bpmn:sequenceFlow id="SequenceFlow_09l7pcg" sourceRef="UpdateVfModuleDeleteStatus" targetRef="DeleteVfModuleBB_End" />
     <bpmn:sequenceFlow id="SequenceFlow_0xyu3pk" sourceRef="DeleteNetworkPolicies" targetRef="UpdateVnfIpv4OamAddress" />
     <bpmn:serviceTask id="DeleteNetworkPolicies" name="
AAI
Delete
(net policies)
" camunda:expression="${AAIDeleteTasks.deleteNetworkPolicies(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))}">
-      <bpmn:incoming>SequenceFlow_179btn2</bpmn:incoming>
+      <bpmn:incoming>SequenceFlow_0sy2nky</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0xyu3pk</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:serviceTask id="UpdateVnfManagementV6Address" name="
AAI 
Update
(vnf)
" camunda:expression="${AAIUpdateTasks.updateManagementV6AddressVnf(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))}">
       <bpmn:outgoing>SequenceFlow_0yuz21z</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:sequenceFlow id="SequenceFlow_032jv5j" name="Yes
" sourceRef="auditEnabledCheck" targetRef="Setup_Audit_Variable">
-      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("auditInventoryNeeded") == true}]]></bpmn:conditionExpression>
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${execution.getVariable("auditInventoryNeeded") == true}</bpmn:conditionExpression>
     </bpmn:sequenceFlow>
-    <bpmn:sequenceFlow id="SequenceFlow_14bu4ys" sourceRef="ExclusiveGateway_1yvh16a" targetRef="aaiThrow" />
+    <bpmn:sequenceFlow id="SequenceFlow_14bu4ys" sourceRef="ExclusiveGateway_1yvh16a" targetRef="ServiceTask_08ulmzc" />
     <bpmn:serviceTask id="Check_Audit" name="Check Audit Variable" camunda:expression="${AuditTasks.isDeleteAuditNeeded(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))}">
       <bpmn:incoming>SequenceFlow_1oeootm</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_10af0fk</bpmn:outgoing>
         <bpmn:escalationEventDefinition escalationRef="Escalation_130je8j" camunda:escalationCodeVariable="auditCode" />
       </bpmn:startEvent>
     </bpmn:subProcess>
-    <bpmn:sequenceFlow id="SequenceFlow_179btn2" sourceRef="aaiCatch" targetRef="DeleteNetworkPolicies" />
+    <bpmn:sequenceFlow id="SequenceFlow_179btn2" sourceRef="aaiCatch" targetRef="ServiceTask_0itw3by" />
     <bpmn:intermediateThrowEvent id="aaiThrow" name="Update AAI">
-      <bpmn:incoming>SequenceFlow_14bu4ys</bpmn:incoming>
+      <bpmn:incoming>SequenceFlow_1i9ft2r</bpmn:incoming>
       <bpmn:linkEventDefinition name="AAI" />
     </bpmn:intermediateThrowEvent>
     <bpmn:intermediateCatchEvent id="aaiCatch" name="Update AAI">
       <bpmn:linkEventDefinition name="AAI" />
     </bpmn:intermediateCatchEvent>
     <bpmn:sequenceFlow id="SequenceFlow_17cd9e2" name="Yes/No" sourceRef="auditSuccessfulCheck" targetRef="ExclusiveGateway_01wvywu">
-      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("auditIsSuccessful") == false || execution.getVariable("auditIsSuccessful") == true}]]></bpmn:conditionExpression>
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${execution.getVariable("auditIsSuccessful") == false || execution.getVariable("auditIsSuccessful") == true}</bpmn:conditionExpression>
     </bpmn:sequenceFlow>
     <bpmn:sequenceFlow id="SequenceFlow_1gdyk9j" name="No" sourceRef="auditSuccessfulCheck" targetRef="EndEvent_0b0ocu0">
-      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("auditIsSuccessful") == false}]]></bpmn:conditionExpression>
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${execution.getVariable("auditIsSuccessful") == false}</bpmn:conditionExpression>
     </bpmn:sequenceFlow>
     <bpmn:inclusiveGateway id="auditSuccessfulCheck" name="Audit
 Successful?">
       <bpmn:incoming>SequenceFlow_0hpj2mm</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_1gjwivp</bpmn:outgoing>
     </bpmn:exclusiveGateway>
     <bpmn:sequenceFlow id="SequenceFlow_0f5ljoh" name="Yes" sourceRef="ExclusiveGateway_13fhmpf" targetRef="Audit_Inventory">
-      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("auditInventoryNeeded") == true}]]></bpmn:conditionExpression>
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${execution.getVariable("auditInventoryNeeded") == true}</bpmn:conditionExpression>
     </bpmn:sequenceFlow>
     <bpmn:exclusiveGateway id="ExclusiveGateway_01wvywu">
       <bpmn:incoming>SequenceFlow_17cd9e2</bpmn:incoming>
     </bpmn:exclusiveGateway>
     <bpmn:sequenceFlow id="SequenceFlow_1gjwivp" name="No" sourceRef="ExclusiveGateway_13fhmpf" targetRef="ExclusiveGateway_01wvywu" />
     <bpmn:sequenceFlow id="SequenceFlow_13mlz57" sourceRef="ExclusiveGateway_01wvywu" targetRef="ExclusiveGateway_1yvh16a" />
+    <bpmn:serviceTask id="ServiceTask_0itw3by" name="
AAI
Delete
(inventory)
" camunda:type="external" camunda:topic="InventoryDelete">
+      <bpmn:incoming>SequenceFlow_179btn2</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_0sy2nky</bpmn:outgoing>
+    </bpmn:serviceTask>
+    <bpmn:sequenceFlow id="SequenceFlow_0sy2nky" sourceRef="ServiceTask_0itw3by" targetRef="DeleteNetworkPolicies" />
+    <bpmn:serviceTask id="ServiceTask_08ulmzc" name="
Create
Cloud
Variable
" camunda:expression="${DeleteVFModule.createInventoryVariable(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))}">
+      <bpmn:incoming>SequenceFlow_14bu4ys</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_1i9ft2r</bpmn:outgoing>
+    </bpmn:serviceTask>
+    <bpmn:sequenceFlow id="SequenceFlow_1i9ft2r" sourceRef="ServiceTask_08ulmzc" targetRef="aaiThrow" />
   </bpmn:process>
   <bpmn:error id="Error_0jjnve8" name="Error_3k24na6" errorCode="AAIInventoryFailure" />
   <bpmn:escalation id="Escalation_130je8j" name="audit" escalationCode="audit1" />
         <dc:Bounds x="888" y="312" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ServiceTask_0pbhsub_di" bpmnElement="UpdateVfModuleDeleteStatus">
-        <dc:Bounds x="907" y="468" width="100" height="80" />
+        <dc:Bounds x="1136" y="468" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_08tvhtf_di" bpmnElement="SequenceFlow_08tvhtf">
-        <di:waypoint xsi:type="dc:Point" x="988" y="352" />
-        <di:waypoint xsi:type="dc:Point" x="1020" y="352" />
+        <di:waypoint x="988" y="352" />
+        <di:waypoint x="1020" y="352" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="959" y="331" width="90" height="12" />
         </bpmndi:BPMNLabel>
         <dc:Bounds x="1020" y="312" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_02lpx87_di" bpmnElement="SequenceFlow_02lpx87">
-        <di:waypoint xsi:type="dc:Point" x="1120" y="352" />
-        <di:waypoint xsi:type="dc:Point" x="1203" y="352" />
-        <di:waypoint xsi:type="dc:Point" x="1203" y="309" />
+        <di:waypoint x="1120" y="352" />
+        <di:waypoint x="1203" y="352" />
+        <di:waypoint x="1203" y="309" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="1116.5" y="337" width="90" height="0" />
         </bpmndi:BPMNLabel>
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0h607z0_di" bpmnElement="SequenceFlow_0h607z0">
-        <di:waypoint xsi:type="dc:Point" x="369" y="958" />
-        <di:waypoint xsi:type="dc:Point" x="462" y="958" />
+        <di:waypoint x="369" y="958" />
+        <di:waypoint x="462" y="958" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="371" y="937" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ServiceTask_0vlgqod_di" bpmnElement="UpdateVfModuleHeatStackId">
-        <dc:Bounds x="779" y="468" width="100" height="80" />
+        <dc:Bounds x="969" y="468" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_01vfwtp_di" bpmnElement="SequenceFlow_01vfwtp">
-        <di:waypoint xsi:type="dc:Point" x="879" y="508" />
-        <di:waypoint xsi:type="dc:Point" x="907" y="508" />
+        <di:waypoint x="1069" y="508" />
+        <di:waypoint x="1136" y="508" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="848" y="493" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_09l7pcg_di" bpmnElement="SequenceFlow_09l7pcg">
-        <di:waypoint xsi:type="dc:Point" x="1007" y="508" />
-        <di:waypoint xsi:type="dc:Point" x="1268" y="508" />
+        <di:waypoint x="1236" y="508" />
+        <di:waypoint x="1268" y="508" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="1092.5" y="493" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0xyu3pk_di" bpmnElement="SequenceFlow_0xyu3pk">
-        <di:waypoint xsi:type="dc:Point" x="376" y="508" />
-        <di:waypoint xsi:type="dc:Point" x="404" y="508" />
+        <di:waypoint x="420" y="468" />
+        <di:waypoint x="420" y="448" />
+        <di:waypoint x="443" y="409" />
+        <di:waypoint x="497" y="468" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="345" y="493" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ServiceTask_0tty0ac_di" bpmnElement="DeleteNetworkPolicies">
-        <dc:Bounds x="276" y="468" width="100" height="80" />
+        <dc:Bounds x="370" y="468" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ServiceTask_0lrrd16_di" bpmnElement="UpdateVnfManagementV6Address">
-        <dc:Bounds x="531" y="468" width="100" height="80" />
+        <dc:Bounds x="642" y="468" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0jtem3b_di" bpmnElement="SequenceFlow_0jtem3b">
-        <di:waypoint xsi:type="dc:Point" x="504" y="508" />
-        <di:waypoint xsi:type="dc:Point" x="531" y="508" />
+        <di:waypoint x="533" y="468" />
+        <di:waypoint x="533" y="448" />
+        <di:waypoint x="619" y="387" />
+        <di:waypoint x="692" y="448" />
+        <di:waypoint x="692" y="468" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="473" y="493" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ServiceTask_0w9805b_di" bpmnElement="UpdateVnfIpv4OamAddress">
-        <dc:Bounds x="404" y="468" width="100" height="80" />
+        <dc:Bounds x="483" y="468" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0khqfnc_di" bpmnElement="SequenceFlow_0khqfnc">
-        <di:waypoint xsi:type="dc:Point" x="631" y="508" />
-        <di:waypoint xsi:type="dc:Point" x="654" y="508" />
+        <di:waypoint x="742" y="493" />
+        <di:waypoint x="891" y="448" />
+        <di:waypoint x="891" y="468" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="598" y="493" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0yuz21z_di" bpmnElement="SequenceFlow_0yuz21z">
-        <di:waypoint xsi:type="dc:Point" x="754" y="508" />
-        <di:waypoint xsi:type="dc:Point" x="779" y="508" />
+        <di:waypoint x="941" y="508" />
+        <di:waypoint x="969" y="508" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="722" y="493" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ServiceTask_0v8naz9_di" bpmnElement="UpdateVfModuleContrailServiceInstanceFqdn">
-        <dc:Bounds x="654" y="468" width="100" height="80" />
+        <dc:Bounds x="841" y="468" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_032jv5j_di" bpmnElement="SequenceFlow_032jv5j">
-        <di:waypoint xsi:type="dc:Point" x="397" y="259" />
-        <di:waypoint xsi:type="dc:Point" x="397" y="214" />
-        <di:waypoint xsi:type="dc:Point" x="444" y="214" />
+        <di:waypoint x="397" y="259" />
+        <di:waypoint x="397" y="214" />
+        <di:waypoint x="444" y="214" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="405.5348837209302" y="217.95121951219514" width="19" height="24" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_14bu4ys_di" bpmnElement="SequenceFlow_14bu4ys">
-        <di:waypoint xsi:type="dc:Point" x="1228" y="284" />
-        <di:waypoint xsi:type="dc:Point" x="1323" y="284" />
+        <di:waypoint x="1228" y="284" />
+        <di:waypoint x="1284" y="284" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="1230.5" y="262.5" width="90" height="13" />
         </bpmndi:BPMNLabel>
         <dc:Bounds x="353" y="703" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0xuodpy_di" bpmnElement="SequenceFlow_0xuodpy">
-        <di:waypoint xsi:type="dc:Point" x="298" y="743" />
-        <di:waypoint xsi:type="dc:Point" x="353" y="743" />
+        <di:waypoint x="298" y="743" />
+        <di:waypoint x="353" y="743" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="280.5" y="722" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1fhst92_di" bpmnElement="SequenceFlow_1fhst92">
-        <di:waypoint xsi:type="dc:Point" x="453" y="743" />
-        <di:waypoint xsi:type="dc:Point" x="510" y="743" />
+        <di:waypoint x="453" y="743" />
+        <di:waypoint x="510" y="743" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="393" y="722" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_179btn2_di" bpmnElement="SequenceFlow_179btn2">
-        <di:waypoint xsi:type="dc:Point" x="195" y="508" />
-        <di:waypoint xsi:type="dc:Point" x="276" y="508" />
+        <di:waypoint x="195" y="508" />
+        <di:waypoint x="225" y="508" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="191" y="487" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="IntermediateThrowEvent_1sftyjz_di" bpmnElement="aaiThrow">
-        <dc:Bounds x="1323" y="266" width="36" height="36" />
+        <dc:Bounds x="1481" y="266" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1315" y="305" width="55" height="12" />
+          <dc:Bounds x="1472" y="305" width="57" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="IntermediateCatchEvent_13y483m_di" bpmnElement="aaiCatch">
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_17cd9e2_di" bpmnElement="SequenceFlow_17cd9e2">
-        <di:waypoint xsi:type="dc:Point" x="1108" y="157" />
-        <di:waypoint xsi:type="dc:Point" x="1156" y="157" />
-        <di:waypoint xsi:type="dc:Point" x="1156" y="189" />
+        <di:waypoint x="1108" y="157" />
+        <di:waypoint x="1156" y="157" />
+        <di:waypoint x="1156" y="189" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="1111.0434782608695" y="137" width="36" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1gdyk9j_di" bpmnElement="SequenceFlow_1gdyk9j">
-        <di:waypoint xsi:type="dc:Point" x="1083" y="132" />
-        <di:waypoint xsi:type="dc:Point" x="1083" y="109" />
-        <di:waypoint xsi:type="dc:Point" x="1083" y="109" />
-        <di:waypoint xsi:type="dc:Point" x="1083" y="84" />
+        <di:waypoint x="1083" y="132" />
+        <di:waypoint x="1083" y="109" />
+        <di:waypoint x="1083" y="109" />
+        <di:waypoint x="1083" y="84" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="1083" y="110.74468085106383" width="14" height="12" />
         </bpmndi:BPMNLabel>
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1bt1p2u_di" bpmnElement="SequenceFlow_1bt1p2u">
-        <di:waypoint xsi:type="dc:Point" x="397" y="309" />
-        <di:waypoint xsi:type="dc:Point" x="397" y="352" />
-        <di:waypoint xsi:type="dc:Point" x="722" y="352" />
-        <di:waypoint xsi:type="dc:Point" x="722" y="309" />
+        <di:waypoint x="397" y="309" />
+        <di:waypoint x="397" y="352" />
+        <di:waypoint x="722" y="352" />
+        <di:waypoint x="722" y="309" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="407" y="326" width="14" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1oeootm_di" bpmnElement="SequenceFlow_1oeootm">
-        <di:waypoint xsi:type="dc:Point" x="195" y="284" />
-        <di:waypoint xsi:type="dc:Point" x="244" y="284" />
+        <di:waypoint x="195" y="284" />
+        <di:waypoint x="244" y="284" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="219.5" y="263" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_10af0fk_di" bpmnElement="SequenceFlow_10af0fk">
-        <di:waypoint xsi:type="dc:Point" x="344" y="284" />
-        <di:waypoint xsi:type="dc:Point" x="372" y="284" />
+        <di:waypoint x="344" y="284" />
+        <di:waypoint x="372" y="284" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="358" y="263" width="0" height="12" />
         </bpmndi:BPMNLabel>
         <dc:Bounds x="571" y="174" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1iulltd_di" bpmnElement="SequenceFlow_1iulltd">
-        <di:waypoint xsi:type="dc:Point" x="544" y="214" />
-        <di:waypoint xsi:type="dc:Point" x="571" y="214" />
+        <di:waypoint x="544" y="214" />
+        <di:waypoint x="571" y="214" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="557.5" y="193" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0dzf7hz_di" bpmnElement="SequenceFlow_0dzf7hz">
-        <di:waypoint xsi:type="dc:Point" x="671" y="214" />
-        <di:waypoint xsi:type="dc:Point" x="722" y="214" />
-        <di:waypoint xsi:type="dc:Point" x="722" y="259" />
+        <di:waypoint x="671" y="214" />
+        <di:waypoint x="722" y="214" />
+        <di:waypoint x="722" y="259" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="651.5" y="193" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1bq9g02_di" bpmnElement="SequenceFlow_1bq9g02">
-        <di:waypoint xsi:type="dc:Point" x="747" y="284" />
-        <di:waypoint xsi:type="dc:Point" x="796" y="284" />
+        <di:waypoint x="747" y="284" />
+        <di:waypoint x="796" y="284" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="726.5" y="263" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0mtzl4z_di" bpmnElement="SequenceFlow_0mtzl4z">
-        <di:waypoint xsi:type="dc:Point" x="821" y="259" />
-        <di:waypoint xsi:type="dc:Point" x="821" y="214" />
-        <di:waypoint xsi:type="dc:Point" x="846" y="214" />
+        <di:waypoint x="821" y="259" />
+        <di:waypoint x="821" y="214" />
+        <di:waypoint x="846" y="214" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="791" y="231" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_028rmiu_di" bpmnElement="SequenceFlow_028rmiu">
-        <di:waypoint xsi:type="dc:Point" x="821" y="309" />
-        <di:waypoint xsi:type="dc:Point" x="821" y="352" />
-        <di:waypoint xsi:type="dc:Point" x="888" y="352" />
+        <di:waypoint x="821" y="309" />
+        <di:waypoint x="821" y="352" />
+        <di:waypoint x="888" y="352" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="791" y="324.5" width="90" height="12" />
         </bpmndi:BPMNLabel>
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0hpj2mm_di" bpmnElement="SequenceFlow_0hpj2mm">
-        <di:waypoint xsi:type="dc:Point" x="1030" y="157" />
-        <di:waypoint xsi:type="dc:Point" x="1058" y="157" />
+        <di:waypoint x="1030" y="157" />
+        <di:waypoint x="1058" y="157" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="999" y="136" width="90" height="12" />
         </bpmndi:BPMNLabel>
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0f5ljoh_di" bpmnElement="SequenceFlow_0f5ljoh">
-        <di:waypoint xsi:type="dc:Point" x="871" y="189" />
-        <di:waypoint xsi:type="dc:Point" x="871" y="157" />
-        <di:waypoint xsi:type="dc:Point" x="930" y="157" />
+        <di:waypoint x="871" y="189" />
+        <di:waypoint x="871" y="157" />
+        <di:waypoint x="930" y="157" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="877.601615925754" y="162.89580806038546" width="19" height="12" />
         </bpmndi:BPMNLabel>
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1gjwivp_di" bpmnElement="SequenceFlow_1gjwivp">
-        <di:waypoint xsi:type="dc:Point" x="871" y="239" />
-        <di:waypoint xsi:type="dc:Point" x="871" y="266" />
-        <di:waypoint xsi:type="dc:Point" x="1156" y="266" />
-        <di:waypoint xsi:type="dc:Point" x="1156" y="239" />
+        <di:waypoint x="871" y="239" />
+        <di:waypoint x="871" y="266" />
+        <di:waypoint x="1156" y="266" />
+        <di:waypoint x="1156" y="239" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="879" y="244" width="14" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_13mlz57_di" bpmnElement="SequenceFlow_13mlz57">
-        <di:waypoint xsi:type="dc:Point" x="1181" y="214" />
-        <di:waypoint xsi:type="dc:Point" x="1203" y="214" />
-        <di:waypoint xsi:type="dc:Point" x="1203" y="259" />
+        <di:waypoint x="1181" y="214" />
+        <di:waypoint x="1203" y="214" />
+        <di:waypoint x="1203" y="259" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="1147" y="193" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ServiceTask_0itw3by_di" bpmnElement="ServiceTask_0itw3by">
+        <dc:Bounds x="225" y="468" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0sy2nky_di" bpmnElement="SequenceFlow_0sy2nky">
+        <di:waypoint x="325" y="508" />
+        <di:waypoint x="370" y="508" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ServiceTask_08ulmzc_di" bpmnElement="ServiceTask_08ulmzc">
+        <dc:Bounds x="1284" y="244" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_1i9ft2r_di" bpmnElement="SequenceFlow_1i9ft2r">
+        <di:waypoint x="1384" y="276" />
+        <di:waypoint x="1433" y="276" />
+        <di:waypoint x="1433" y="284" />
+        <di:waypoint x="1481" y="284" />
+      </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
 </bpmn:definitions>
 
+++ /dev/null
-/*-
- * ============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.bpmn.infrastructure.bpmn.subprocess;
-
-import static org.camunda.bpm.engine.test.assertions.ProcessEngineTests.assertThat;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.doThrow;
-import org.camunda.bpm.engine.delegate.BpmnError;
-import org.camunda.bpm.engine.runtime.ProcessInstance;
-import org.junit.Test;
-import org.onap.so.bpmn.BaseBPMNTest;
-import org.onap.so.bpmn.common.BuildingBlockExecution;
-
-public class CreateVfModuleBBTest extends BaseBPMNTest {
-    @Test
-    public void sunnyDayCreateVfModule_Test() throws InterruptedException {
-        mockSubprocess("VnfAdapter", "Mocked VnfAdapter", "GenericStub");
-        ProcessInstance pi = runtimeService.startProcessInstanceByKey("CreateVfModuleBB", variables);
-        assertThat(pi).isNotNull();
-        assertThat(pi).isStarted().hasPassedInOrder("CreateVfModuleBB_Start", "QueryVnf", "QueryVfModule",
-                "CreateVfModule", "VnfAdapter", "CreateNetworkPolicies", "UpdateVnfIpv4OamAddress",
-                "UpdateVnfManagementV6Address", "UpdateVfModuleContrailServiceInstanceFqdn",
-                "UpdateVfModuleHeatStackId", "UpdateVfModuleStatus", "CreateVfModuleBB_End");
-        assertThat(pi).isEnded();
-    }
-
-    @Test
-    public void rainyDayCreateVfModuleSDNCQueryVnfError_Test() throws Exception {
-        doThrow(new BpmnError("7000", "TESTING ERRORS")).when(sdncQueryTasks)
-                .queryVnf(any(BuildingBlockExecution.class));
-        ProcessInstance pi = runtimeService.startProcessInstanceByKey("CreateVfModuleBB", variables);
-        assertThat(pi).isNotNull();
-        assertThat(pi).isStarted().hasPassedInOrder("CreateVfModuleBB_Start", "QueryVnf").hasNotPassed("QueryVfModule",
-                "CreateVfModule", "VnfAdapter", "CreateNetworkPolicies", "UpdateVnfIpv4OamAddress",
-                "UpdateVnfManagementV6Address", "UpdateVfModuleContrailServiceInstanceFqdn",
-                "UpdateVfModuleHeatStackId", "UpdateVfModuleStatus", "CreateVfModuleBB_End");
-        assertThat(pi).isEnded();
-    }
-
-    @Test
-    public void rainyDayCreateVfModuleSDNCQueryVnfModuleError_Test() throws Exception {
-        doThrow(new BpmnError("7000", "TESTING ERRORS")).when(sdncQueryTasks)
-                .queryVfModule(any(BuildingBlockExecution.class));
-        ProcessInstance pi = runtimeService.startProcessInstanceByKey("CreateVfModuleBB", variables);
-        assertThat(pi).isNotNull();
-        assertThat(pi).isStarted().hasPassedInOrder("CreateVfModuleBB_Start", "QueryVnf", "QueryVfModule").hasNotPassed(
-                "CreateVfModule", "VnfAdapter", "CreateNetworkPolicies", "UpdateVnfIpv4OamAddress",
-                "UpdateVnfManagementV6Address", "UpdateVfModuleContrailServiceInstanceFqdn",
-                "UpdateVfModuleHeatStackId", "UpdateVfModuleStatus", "CreateVfModuleBB_End");
-        assertThat(pi).isEnded();
-    }
-
-    @Test
-    public void rainyDayCreateVfModuleVnfAdapterCreateError_Test() throws Exception {
-        doThrow(new BpmnError("7000", "TESTING ERRORS")).when(vnfAdapterCreateTasks)
-                .createVfModule(any(BuildingBlockExecution.class));
-        ProcessInstance pi = runtimeService.startProcessInstanceByKey("CreateVfModuleBB", variables);
-        assertThat(pi).isNotNull();
-        assertThat(pi).isStarted()
-                .hasPassedInOrder("CreateVfModuleBB_Start", "QueryVnf", "QueryVfModule", "CreateVfModule")
-                .hasNotPassed("VnfAdapter", "CreateNetworkPolicies", "UpdateVnfIpv4OamAddress",
-                        "UpdateVnfManagementV6Address", "UpdateVfModuleContrailServiceInstanceFqdn",
-                        "UpdateVfModuleHeatStackId", "UpdateVfModuleStatus", "CreateVfModuleBB_End");
-        assertThat(pi).isEnded();
-    }
-
-    @Test
-    public void rainyDayCreateVfModuleUpdateVfModuleHeatStackIdError_Test() throws Exception {
-        mockSubprocess("VnfAdapter", "Mocked VnfAdapter", "GenericStub");
-
-        doThrow(new BpmnError("7000", "TESTING ERRORS")).when(aaiUpdateTasks)
-                .updateHeatStackIdVfModule(any(BuildingBlockExecution.class));
-        ProcessInstance pi = runtimeService.startProcessInstanceByKey("CreateVfModuleBB", variables);
-        assertThat(pi).isNotNull();
-        assertThat(pi).isStarted()
-                .hasPassedInOrder("CreateVfModuleBB_Start", "QueryVnf", "QueryVfModule", "CreateVfModule", "VnfAdapter",
-                        "CreateNetworkPolicies", "UpdateVnfIpv4OamAddress", "UpdateVnfManagementV6Address",
-                        "UpdateVfModuleContrailServiceInstanceFqdn", "UpdateVfModuleHeatStackId")
-                .hasNotPassed("UpdateVfModuleStatus", "CreateVfModuleBB_End");
-        assertThat(pi).isEnded();
-
-    }
-
-    @Test
-    public void rainyDayCreateVfModuleUpdateVfModuleStatusError_Test() throws Exception {
-        mockSubprocess("VnfAdapter", "Mocked VnfAdapter", "GenericStub");
-        doThrow(new BpmnError("7000", "TESTING ERRORS")).when(aaiUpdateTasks)
-                .updateOrchestrationStatusCreatedVfModule(any(BuildingBlockExecution.class));
-        ProcessInstance pi = runtimeService.startProcessInstanceByKey("CreateVfModuleBB", variables);
-        assertThat(pi).isNotNull();
-        assertThat(pi).isStarted()
-                .hasPassedInOrder("CreateVfModuleBB_Start", "QueryVnf", "QueryVfModule", "CreateVfModule", "VnfAdapter",
-                        "CreateNetworkPolicies", "UpdateVnfIpv4OamAddress", "UpdateVnfManagementV6Address",
-                        "UpdateVfModuleContrailServiceInstanceFqdn", "UpdateVfModuleHeatStackId",
-                        "UpdateVfModuleStatus")
-                .hasNotPassed("CreateVfModuleBB_End");
-        assertThat(pi).isEnded();
-    }
-}
 
+++ /dev/null
-/*-
- * ============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.bpmn.infrastructure.bpmn.subprocess;
-
-import static org.camunda.bpm.engine.test.assertions.ProcessEngineTests.assertThat;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.doThrow;
-import java.io.IOException;
-import java.util.List;
-import org.camunda.bpm.engine.delegate.BpmnError;
-import org.camunda.bpm.engine.externaltask.LockedExternalTask;
-import org.camunda.bpm.engine.runtime.ProcessInstance;
-import org.junit.Before;
-import org.junit.Test;
-import org.onap.so.bpmn.BaseBPMNTest;
-import org.onap.so.bpmn.common.BuildingBlockExecution;
-
-public class DeleteVfModuleBBTest extends BaseBPMNTest {
-
-    @Before
-    public void before() {
-        variables.put("auditInventoryNeeded", true);
-        variables.put("auditIsSuccessful", true);
-    }
-
-    @Test
-    public void sunnyDay() throws InterruptedException, IOException {
-        mockSubprocess("SDNCHandler", "My Mock Process Name", "GenericStub");
-        mockSubprocess("VnfAdapter", "Mocked VnfAdapter", "GenericStub");
-        ProcessInstance pi = runtimeService.startProcessInstanceByKey("DeleteVfModuleBB", variables);
-        List<LockedExternalTask> tasks = externalTaskService.fetchAndLock(100, "externalWorkerId")
-                .topic("InventoryDeleteAudit", 60L * 1000L).topic("InventoryQueryAudit", 60L * 1000L).execute();
-        while (!tasks.isEmpty()) {
-            for (LockedExternalTask task : tasks) {
-                externalTaskService.complete(task.getId(), "externalWorkerId");
-            }
-            tasks = externalTaskService.fetchAndLock(100, "externalWorkerId").topic("InventoryDeleteAudit", 60L * 1000L)
-                    .topic("InventoryQueryAudit", 60L * 1000L).execute();
-        }
-        assertThat(pi).isNotNull();
-        assertThat(pi).isStarted().hasPassed("DeleteVfModuleBB_Start", "Check_Audit", "auditEnabledCheck",
-                "Setup_Audit_Variable", "Setup_Audit_Variable", "aicQueryStack", "ExclusiveGateway_1t9q2jl",
-                "ExclusiveGateway_1naduhl", "ExclusiveGateway_13fhmpf", "DeleteVfModuleVnfAdapter", "VnfAdapter",
-                "Audit_Inventory", "ExclusiveGateway_1yvh16a", "auditSuccessfulCheck", "ExclusiveGateway_01wvywu",
-                "ExclusiveGateway_1yvh16a", "DeleteNetworkPolicies", "UpdateVnfIpv4OamAddress",
-                "UpdateVnfManagementV6Address", "UpdateVfModuleContrailServiceInstanceFqdn",
-                "UpdateVfModuleHeatStackId", "UpdateVfModuleDeleteStatus", "DeleteVfModuleBB_End");
-        assertThat(pi).isEnded();
-    }
-
-    @Test
-    public void rainyDay() throws Exception {
-        doThrow(BpmnError.class).when(vnfAdapterDeleteTasks).deleteVfModule(any(BuildingBlockExecution.class));
-        ProcessInstance pi = runtimeService.startProcessInstanceByKey("DeleteVfModuleBB", variables);
-        List<LockedExternalTask> tasks = externalTaskService.fetchAndLock(100, "externalWorkerId")
-                .topic("InventoryDeleteAudit", 60L * 1000L).topic("InventoryQueryAudit", 60L * 1000L).execute();
-        while (!tasks.isEmpty()) {
-            for (LockedExternalTask task : tasks) {
-                externalTaskService.complete(task.getId(), "externalWorkerId");
-            }
-            tasks = externalTaskService.fetchAndLock(100, "externalWorkerId").topic("InventoryDeleteAudit", 60L * 1000L)
-                    .topic("InventoryQueryAudit", 60L * 1000L).execute();
-        }
-        assertThat(pi).isNotNull();
-        assertThat(pi).isStarted()
-                .hasPassed("DeleteVfModuleBB_Start", "Check_Audit", "auditEnabledCheck", "Setup_Audit_Variable",
-                        "Setup_Audit_Variable", "aicQueryStack", "ExclusiveGateway_1t9q2jl", "ExclusiveGateway_1naduhl",
-                        "ExclusiveGateway_13fhmpf")
-                .hasNotPassed("VnfAdapter", "DeleteNetworkPolicies", "UpdateVnfIpv4OamAddress",
-                        "UpdateVnfManagementV6Address", "UpdateVfModuleContrailServiceInstanceFqdn",
-                        "UpdateVfModuleHeatStackId", "UpdateVfModuleDeleteStatus", "DeleteVfModuleBB_End");
-        assertThat(pi).isEnded();
-    }
-}
 
--- /dev/null
+package org.onap.so.bpmn.infrastructure.vfmodule;
+
+import java.util.Optional;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule;
+import org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock;
+import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
+import org.onap.so.bpmn.servicedecomposition.tasks.ExtractPojosForBB;
+import org.onap.so.client.aai.AAIObjectPlurals;
+import org.onap.so.client.aai.AAIObjectType;
+import org.onap.so.client.aai.AAIResourcesClient;
+import org.onap.so.client.aai.entities.AAIResultWrapper;
+import org.onap.so.client.aai.entities.Relationships;
+import org.onap.so.client.aai.entities.uri.AAIPluralResourceUri;
+import org.onap.so.client.aai.entities.uri.AAIResourceUri;
+import org.onap.so.client.aai.entities.uri.AAIUriFactory;
+import org.onap.so.client.exception.ExceptionBuilder;
+import org.onap.so.cloud.resource.beans.CloudInformation;
+import org.onap.so.cloud.resource.beans.NodeType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component
+public class CreateVFModule {
+
+    private static final Logger logger = LoggerFactory.getLogger(CreateVFModule.class);
+
+    @Autowired
+    protected ExceptionBuilder exceptionUtil;
+
+    @Autowired
+    protected ExtractPojosForBB extractPojosForBB;
+
+    public void createInventoryVariable(BuildingBlockExecution execution) {
+        try {
+            GeneralBuildingBlock gBBInput = execution.getGeneralBuildingBlock();
+            VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID);
+            GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID);
+            CloudInformation cloudInformation = new CloudInformation();
+            cloudInformation.setOwner(gBBInput.getCloudRegion().getCloudOwner());
+            cloudInformation.setRegionId(gBBInput.getCloudRegion().getLcpCloudRegionId());
+            cloudInformation.setTenantId(gBBInput.getTenant().getTenantId());
+            cloudInformation.setTenantName(gBBInput.getTenant().getTenantName());
+            cloudInformation.setTenantContext(gBBInput.getTenant().getTenantContext());
+            cloudInformation.setTemplateInstanceId(execution.getVariable("heatStackId"));
+            cloudInformation.setNodeType(getNodeType(gBBInput.getCloudRegion()));
+            cloudInformation.setVnfName(vnf.getVnfName());
+            cloudInformation.setVnfId(vnf.getVnfId());
+            cloudInformation.setVfModuleId(vfModule.getVfModuleId());
+            execution.setVariable("cloudInformation", cloudInformation);
+        } catch (Exception e) {
+            logger.error("Error building CloudInformation Object for NC Inventory", e);
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, e);
+        }
+    }
+
+    protected NodeType getNodeType(CloudRegion cloudRegion) {
+        AAIResourceUri cloudRegionUri = AAIUriFactory.createResourceUri(AAIObjectType.CLOUD_REGION,
+                cloudRegion.getCloudOwner(), cloudRegion.getLcpCloudRegionId());
+        AAIResourcesClient client = getAAIClient();
+        Optional<Relationships> relationships = client.get(cloudRegionUri).getRelationships();
+        if (relationships.isPresent()) {
+            AAIPluralResourceUri networkTechsGreenfieldUri = AAIUriFactory
+                    .createResourceUri(AAIObjectType.CLOUD_REGION, cloudRegion.getCloudOwner(),
+                            cloudRegion.getLcpCloudRegionId())
+                    .relatedTo(AAIObjectPlurals.NETWORK_TECHNOLOGY)
+                    .queryParam("network-technology-name", NodeType.GREENFIELD.getNetworkTechnologyName());
+
+            AAIResultWrapper networkTechsGreenfield = client.get(networkTechsGreenfieldUri);
+            if (networkTechsGreenfield != null && !networkTechsGreenfield.isEmpty()) {
+                return NodeType.GREENFIELD;
+            }
+        }
+        return NodeType.BROWNFIELD;
+    }
+
+    protected AAIResourcesClient getAAIClient() {
+        return new AAIResourcesClient();
+    }
+
+}
 
--- /dev/null
+package org.onap.so.bpmn.infrastructure.vfmodule;
+
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule;
+import org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock;
+import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
+import org.onap.so.bpmn.servicedecomposition.tasks.ExtractPojosForBB;
+import org.onap.so.client.exception.ExceptionBuilder;
+import org.onap.so.cloud.resource.beans.CloudInformation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class DeleteVFModule {
+
+    private static final Logger logger = LoggerFactory.getLogger(DeleteVFModule.class);
+
+    @Autowired
+    private ExceptionBuilder exceptionUtil;
+
+    @Autowired
+    private ExtractPojosForBB extractPojosForBB;
+
+    public void createInventoryVariable(BuildingBlockExecution execution) {
+        try {
+            VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID);
+            GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID);
+            GeneralBuildingBlock gBBInput = execution.getGeneralBuildingBlock();
+            CloudInformation cloudInformation = new CloudInformation();
+            cloudInformation.setOwner(gBBInput.getCloudRegion().getCloudOwner());
+            cloudInformation.setRegionId(gBBInput.getCloudRegion().getLcpCloudRegionId());
+            cloudInformation.setTenantId(gBBInput.getTenant().getTenantId());
+            cloudInformation.setTenantName(gBBInput.getTenant().getTenantName());
+            cloudInformation.setTenantContext(gBBInput.getTenant().getTenantContext());
+            cloudInformation.setTemplateInstanceId(vfModule.getHeatStackId());
+            cloudInformation.setVnfName(vnf.getVnfName());
+            cloudInformation.setVnfId(vnf.getVnfId());
+            cloudInformation.setVfModuleId(vfModule.getVfModuleId());
+
+            execution.setVariable("cloudInformation", cloudInformation);
+        } catch (Exception e) {
+            logger.error("Error building CloudInformation Object for NC Inventory", e);
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, e);
+        }
+    }
+
+
+}
 
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
 import org.onap.so.bpmn.common.InjectionHelper;
 import org.onap.so.bpmn.common.data.TestDataSetup;
 import org.onap.so.bpmn.infrastructure.flowspecific.tasks.AssignNetworkBBUtils;
 import org.onap.so.bpmn.servicedecomposition.tasks.BBInputSetupUtils;
 import org.onap.so.bpmn.servicedecomposition.tasks.ExtractPojosForBB;
 import org.onap.so.client.aai.AAIResourcesClient;
+import org.onap.so.client.aai.entities.AAIResultWrapper;
+import org.onap.so.client.aai.entities.Relationships;
 import org.onap.so.client.aai.mapper.AAIObjectMapper;
 import org.onap.so.client.adapter.network.mapper.NetworkAdapterObjectMapper;
 import org.onap.so.client.appc.ApplicationControllerAction;
 
--- /dev/null
+package org.onap.so.bpmn.infrastructure.vfmodule;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.verify;
+import java.util.Optional;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.onap.so.bpmn.BaseTaskTest;
+import org.onap.so.bpmn.common.BuildingBlockExecution;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.Tenant;
+import org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock;
+import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
+import org.onap.so.bpmn.servicedecomposition.tasks.ExtractPojosForBB;
+import org.onap.so.client.aai.AAIResourcesClient;
+import org.onap.so.client.aai.entities.AAIResultWrapper;
+import org.onap.so.client.aai.entities.Relationships;
+import org.onap.so.client.aai.entities.uri.AAIPluralResourceUri;
+import org.onap.so.client.aai.entities.uri.AAIResourceUri;
+import org.onap.so.client.exception.BBObjectNotFoundException;
+import org.onap.so.cloud.resource.beans.CloudInformation;
+import org.onap.so.cloud.resource.beans.NodeType;
+
+
+
+public class CreateVFModuleTest extends BaseTaskTest {
+
+    @Spy
+    @InjectMocks
+    public CreateVFModule createVFModule;
+
+    @Mock
+    protected AAIResourcesClient aaiResourcesClient;
+
+    @Mock
+    protected AAIResultWrapper aaiIResultWrapper;
+
+    @Mock
+    protected Relationships relationships;
+
+    @Mock
+    protected BuildingBlockExecution execution;
+
+
+    public GeneralBuildingBlock gbb;
+    public CloudRegion cloudRegion;
+    private GenericVnf genericVnf;
+    private VfModule vfModule;
+    private ServiceInstance service;
+
+    @Before
+    public void before() {
+        cloudRegion = new CloudRegion();
+        cloudRegion.setCloudOwner("CloudOwner");
+        cloudRegion.setLcpCloudRegionId("testRegion");
+        Tenant tenant = new Tenant();
+        tenant.setTenantId("tenant-001");
+        tenant.setTenantName("test-tenant");
+        tenant.setTenantContext("testContext");
+        service = setServiceInstance();
+        genericVnf = setGenericVnf();
+        vfModule = setVfModule();
+        gbb = new GeneralBuildingBlock();
+        gbb.setCloudRegion(cloudRegion);
+        gbb.setTenant(tenant);
+    }
+
+    @Test
+    public void createInventoryVariableTest() throws BBObjectNotFoundException {
+        doReturn(gbb).when(execution).getGeneralBuildingBlock();
+        doReturn(genericVnf).when(extractPojosForBB).extractByKey(execution, ResourceKey.GENERIC_VNF_ID);
+        doReturn(vfModule).when(extractPojosForBB).extractByKey(execution, ResourceKey.VF_MODULE_ID);
+        doReturn("heat-stack-id").when(execution).getVariable("heatStackId");
+        doReturn(NodeType.GREENFIELD).when(createVFModule).getNodeType(any(CloudRegion.class));
+        createVFModule.createInventoryVariable(execution);
+        verify(execution).setVariable(eq("cloudInformation"), any(CloudInformation.class));
+    }
+
+    @Test
+    public void getNodeTypeBrownfieldTest() {
+        doReturn(aaiResourcesClient).when(createVFModule).getAAIClient();
+        doReturn(aaiIResultWrapper).when(aaiResourcesClient).get(any(AAIResourceUri.class));
+        doReturn(Optional.empty()).when(aaiIResultWrapper).getRelationships();
+
+        assertEquals(NodeType.BROWNFIELD, createVFModule.getNodeType(cloudRegion));
+    }
+
+    @Test
+    public void getNodeTypeGreenfieldTest() {
+        doReturn(aaiResourcesClient).when(createVFModule).getAAIClient();
+        doReturn(aaiIResultWrapper).when(aaiResourcesClient).get(any(AAIResourceUri.class));
+        doReturn(aaiIResultWrapper).when(aaiResourcesClient).get(any(AAIPluralResourceUri.class));
+        doReturn(Optional.of(relationships)).when(aaiIResultWrapper).getRelationships();
+
+        assertEquals(NodeType.GREENFIELD, createVFModule.getNodeType(cloudRegion));
+    }
+}
 
 import org.onap.so.client.graphinventory.GraphInventoryPatchConverter;
 import org.onap.so.client.graphinventory.GraphInventoryTransactionClient;
 import org.onap.so.client.graphinventory.exceptions.BulkProcessFailed;
+import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.base.Joiner;
 
         }
     }
 
+    @Override
+    public void execute(boolean dryRun) throws BulkProcessFailed {
+        final ObjectMapper mapper = new ObjectMapper();
+        if (dryRun) {
+            try {
+                if (logger.isDebugEnabled()) {
+                    logger.debug("Would execute: {}", mapper.writeValueAsString(this.request));
+                }
+            } catch (JsonProcessingException e) {
+                logger.debug("Could not format request to JSON", e);
+            }
+        } else {
+            this.execute();
+        }
+    }
+
     protected Optional<String> locateErrorMessages(SingleTransactionResponse response) {
         final List<String> errorMessages = new ArrayList<>();
         final ObjectMapper mapper = new ObjectMapper();
         }
     }
 
-
     protected SingleTransactionRequest getRequest() {
         return this.request;
     }
 
 import org.onap.so.client.graphinventory.GraphInventoryTransactionClient;
 import org.onap.so.client.graphinventory.exceptions.BulkProcessFailed;
 import org.onap.so.jsonpath.JsonPathUtil;
+import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.base.Joiner;
         }
     }
 
+    @Override
+    public void execute(boolean dryRun) throws BulkProcessFailed {
+        final ObjectMapper mapper = new ObjectMapper();
+        if (dryRun) {
+            try {
+                if (logger.isDebugEnabled()) {
+                    logger.debug("Would execute: {}", mapper.writeValueAsString(this.transactions));
+                }
+            } catch (JsonProcessingException e) {
+                logger.debug("Could not format request to JSON", e);
+            }
+        } else {
+            this.execute();
+        }
+    }
+
     protected Optional<String> locateErrorMessages(String response) {
         final List<String> errorMessages = new ArrayList<>();
         final List<String> results = JsonPathUtil.getInstance().locateResultList(response, "$..body");
 
      */
     public abstract void execute() throws BulkProcessFailed;
 
+
+    /**
+     * Executes all created transactions in A&AI, with optional dry run flag
+     * 
+     * @throws BulkProcessFailed
+     */
+    public abstract void execute(boolean dryrun) throws BulkProcessFailed;
+
     private Relationship buildRelationship(SingleUri uri) {
         return buildRelationship(uri, Optional.empty());
     }
 
--- /dev/null
+package org.onap.so.cloud.resource.beans;
+
+import java.io.Serializable;
+
+public class CloudInformation implements Serializable {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 4316532011566979075L;
+    private String owner;
+    private String regionId;
+    private String tenantId;
+    private String tenantName;
+    private String tenantContext;
+    private String templateInstanceId;
+    private String vnfName;
+    private String vnfId;
+    private String vfModuleId;
+    private NodeType nodeType;
+
+    public String getTenantContext() {
+        return tenantContext;
+    }
+
+    public void setTenantContext(String tenantContext) {
+        this.tenantContext = tenantContext;
+    }
+
+    public String getTenantId() {
+        return tenantId;
+    }
+
+    public void setTenantId(String tenantId) {
+        this.tenantId = tenantId;
+    }
+
+    public String getTenantName() {
+        return tenantName;
+    }
+
+    public void setTenantName(String tenantName) {
+        this.tenantName = tenantName;
+    }
+
+    public String getOwner() {
+        return owner;
+    }
+
+    public void setOwner(String owner) {
+        this.owner = owner;
+    }
+
+    public String getRegionId() {
+        return regionId;
+    }
+
+    public void setRegionId(String regionId) {
+        this.regionId = regionId;
+    }
+
+    public String getTemplateInstanceId() {
+        return templateInstanceId;
+    }
+
+    public void setTemplateInstanceId(String templateInstanceId) {
+        this.templateInstanceId = templateInstanceId;
+    }
+
+    public NodeType getNodeType() {
+        return nodeType;
+    }
+
+    public void setNodeType(NodeType nodeType) {
+        this.nodeType = nodeType;
+    }
+
+    public String getVnfName() {
+        return vnfName;
+    }
+
+    public void setVnfName(String vnfName) {
+        this.vnfName = vnfName;
+    }
+
+    public String getVfModuleId() {
+        return vfModuleId;
+    }
+
+    public void setVfModuleId(String vfModuleId) {
+        this.vfModuleId = vfModuleId;
+    }
+
+    public String getVnfId() {
+        return vnfId;
+    }
+
+    public void setVnfId(String vnfId) {
+        this.vnfId = vnfId;
+    }
+}
 
--- /dev/null
+package org.onap.so.cloud.resource.beans;
+
+public enum NodeType {
+    BROWNFIELD("BROWNFIELD", "OVS", "bond1"), GREENFIELD("GREENFIELD", "OVS-DPDK", "bond0");
+
+    private final String nodeType;
+    private final String networkTech;
+    private final String interfaceName;
+
+    private NodeType(String s, String n, String h) {
+        this.nodeType = s;
+        this.networkTech = n;
+        this.interfaceName = h;
+    }
+
+    public String getNetworkTechnologyName() {
+        return networkTech;
+    }
+
+    public String getInterfaceName() {
+        return interfaceName;
+    }
+
+    @Override
+    public String toString() {
+        return this.nodeType;
+    }
+}
 
        <logger name="com.woorea.openstack.connector" level="${LOG_LEVEL:-DEBUG}" />
        
        <!-- AAF Logs go here-->
-       <logger name="org.apache.catalina.core.ContainerBase" level="INFO" additivity="false">
+       <logger name="org.apache.catalina.core.ContainerBase" level="WARN" additivity="false">
                <appender-ref ref="asyncCadi" />
        </logger>
 
 
             AAIResourcesClient aaiResourceClient = new AAIResourcesClient();
 
             if (context.getVariable("requestAction").equals("CreateVfModuleInstance")
-                    && context.getVariable("serviceAction").equals("activate")) {
+                    && context.getVariable("serviceAction").equals("assign")) {
 
                 AAIResourceUri vnfcURI = AAIUriFactory.createResourceUri(AAIObjectType.VNFC, "zauk51bfrwl09oam001");
                 Vnfc vnfc = new Vnfc();
 
 import com.consol.citrus.simulator.scenario.ScenarioDesigner;
 
 @Scenario("Openstack-CreateStack")
-@RequestMapping(value = "/sim/mockPublicUrl/stacks", method = RequestMethod.POST)
+@RequestMapping(value = "/sim/v1/tenantOne/stacks", method = RequestMethod.POST)
 public class CreateStack extends AbstractSimulatorScenario {
 
     @Override
 
 package org.onap.so.simulator.scenarios.openstack;
 
+import org.onap.so.simulator.actions.aai.DeleteVServers;
 import org.springframework.core.io.ClassPathResource;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.onap.so.simulator.actions.aai.DeleteVServers;
 import com.consol.citrus.endpoint.resolver.DynamicEndpointUriResolver;
 import com.consol.citrus.simulator.scenario.AbstractSimulatorScenario;
 import com.consol.citrus.simulator.scenario.Scenario;
 import com.consol.citrus.simulator.scenario.ScenarioDesigner;
 
 @Scenario("Openstack-ModuleCreateDelete")
-@RequestMapping(value = "/sim/mockPublicUrl/stacks/dummy_id/stackId")
+@RequestMapping(value = "/sim/v1/tenantOne/stacks/dummy_id/stackId")
 public class ModuleCreateDelete extends AbstractSimulatorScenario {
 
 
 
 import com.consol.citrus.simulator.scenario.ScenarioDesigner;
 
 @Scenario("Openstack-NetworkCreateDeleteCloud")
-@RequestMapping(value = "/sim/mockPublicUrl/stacks/network_dummy_id/stackId")
+@RequestMapping(value = "/sim/v1/tenantOne/stacks/network_dummy_id/stackId")
 public class NetworkCreateDeleteCloud extends AbstractSimulatorScenario {
 
 
 
 import com.consol.citrus.simulator.scenario.ScenarioDesigner;
 
 @Scenario("Openstack-QueryBaseStackByName")
-@RequestMapping(value = "/sim/mockPublicUrl/stacks/base_module_id/*", method = RequestMethod.GET)
+@RequestMapping(value = "/sim/v1/tenantOne/stacks/base_module_id/*", method = RequestMethod.GET)
 public class QueryBaseStack extends AbstractSimulatorScenario {
 
     @Override
 
 import com.consol.citrus.simulator.scenario.ScenarioDesigner;
 
 @Scenario("Query-Failure-ID-Name-Resources")
-@RequestMapping(value = "/sim/mockPublicUrl/stacks/failure_id/resources", method = RequestMethod.GET)
+@RequestMapping(value = "/sim/v1/tenantOne/stacks/failure_id/resources", method = RequestMethod.GET)
 public class QueryResourcesByStackNameFailureId extends AbstractSimulatorScenario {
 
     @Override
 
 import com.consol.citrus.simulator.scenario.ScenarioDesigner;
 
 @Scenario("Query-Replace-ID-Name-Resources")
-@RequestMapping(value = "/sim/mockPublicUrl/stacks/replace_module/resources", method = RequestMethod.GET)
+@RequestMapping(value = "/sim/v1/tenantOne/stacks/replace_module/resources", method = RequestMethod.GET)
 public class QueryResourcesByStackNameModuleReplace extends AbstractSimulatorScenario {
 
     @Override
 
 import com.consol.citrus.simulator.scenario.ScenarioDesigner;
 
 @Scenario("Query-Replace-Volume-ID-Name-Resources")
-@RequestMapping(value = "/sim/mockPublicUrl/stacks/replace_module_volume_id/resources", method = RequestMethod.GET)
+@RequestMapping(value = "/sim/v1/tenantOne/stacks/replace_module_volume_id/resources", method = RequestMethod.GET)
 public class QueryResourcesByStackNameModuleReplaceVolume extends AbstractSimulatorScenario {
 
     @Override
 
 package org.onap.so.simulator.scenarios.openstack;
 
-import org.springframework.core.io.ClassPathResource;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import com.consol.citrus.simulator.scenario.ScenarioDesigner;
 
 @Scenario("Openstack-QueryStackByName")
-@RequestMapping(value = "/sim/mockPublicUrl/stacks/*", method = RequestMethod.GET)
+@RequestMapping(value = "/sim/v1/tenantOne/stacks/*", method = RequestMethod.GET)
 public class QueryStack extends AbstractSimulatorScenario {
 
     @Override
 
 package org.onap.so.simulator.scenarios.openstack;
 
+import org.onap.so.simulator.actions.aai.DeleteVServers;
 import org.springframework.core.io.ClassPathResource;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.onap.so.simulator.actions.aai.DeleteVServers;
 import com.consol.citrus.endpoint.resolver.DynamicEndpointUriResolver;
 import com.consol.citrus.simulator.scenario.AbstractSimulatorScenario;
 import com.consol.citrus.simulator.scenario.Scenario;
 import com.consol.citrus.simulator.scenario.ScenarioDesigner;
 
 @Scenario("Double-Failure-Stack-Endpoint")
-@RequestMapping(value = "/sim/mockPublicUrl/stacks/double_failure_id/stackId")
+@RequestMapping(value = "/sim/v1/tenantOne/stacks/double_failure_id/stackId")
 public class QueryStackByIdDoubleFailure extends AbstractSimulatorScenario {
 
 
 
 package org.onap.so.simulator.scenarios.openstack;
 
+import org.onap.so.simulator.actions.aai.DeleteVServers;
 import org.springframework.core.io.ClassPathResource;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.RequestMapping;
 import com.consol.citrus.simulator.scenario.ScenarioDesigner;
 
 @Scenario("Failure-Stack-Endpoint")
-@RequestMapping(value = "/sim/mockPublicUrl/stacks/failure_id/stackId")
+@RequestMapping(value = "/sim/v1/tenantOne/stacks/failure_id/stackId")
 public class QueryStackByIdFailure extends AbstractSimulatorScenario {
 
 
 
 import com.consol.citrus.simulator.scenario.ScenarioDesigner;
 
 @Scenario("Openstack-QueryStackByID-NetworkMacro1")
-@RequestMapping(value = "/sim/mockPublicUrl/stacks/macro_network1/*", method = RequestMethod.GET)
+@RequestMapping(value = "/sim/v1/tenantOne/stacks/macro_network1/*", method = RequestMethod.GET)
 public class QueryStackByIdNetworkMacro1 extends AbstractSimulatorScenario {
 
 
 
 import com.consol.citrus.simulator.scenario.ScenarioDesigner;
 
 @Scenario("Openstack-QueryStackByID-NetworkMacro2")
-@RequestMapping(value = "/sim/mockPublicUrl/stacks/macro_network1/*", method = RequestMethod.GET)
+@RequestMapping(value = "/sim/v1/tenantOne/stacks/macro_network1/*", method = RequestMethod.GET)
 public class QueryStackByIdNetworkMacro2 extends AbstractSimulatorScenario {
 
 
 
 package org.onap.so.simulator.scenarios.openstack;
 
+import org.onap.so.simulator.actions.aai.DeleteVServers;
 import org.springframework.core.io.ClassPathResource;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.RequestMapping;
-import org.onap.so.simulator.actions.aai.DeleteVServers;
 import com.consol.citrus.endpoint.resolver.DynamicEndpointUriResolver;
 import com.consol.citrus.simulator.scenario.AbstractSimulatorScenario;
 import com.consol.citrus.simulator.scenario.Scenario;
 import com.consol.citrus.simulator.scenario.ScenarioDesigner;
 
 @Scenario("Openstack-Replace-VF-Module-Get")
-@RequestMapping(value = "/sim/mockPublicUrl/stacks/replace_module/*")
+@RequestMapping(value = "/sim/v1/tenantOne/stacks/replace_module/*")
 public class QueryStackByIdReplaceModule extends AbstractSimulatorScenario {
 
 
 
 package org.onap.so.simulator.scenarios.openstack;
 
+import org.onap.so.simulator.actions.aai.DeleteVServers;
 import org.springframework.core.io.ClassPathResource;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.RequestMapping;
-import org.onap.so.simulator.actions.aai.DeleteVServers;
 import com.consol.citrus.endpoint.resolver.DynamicEndpointUriResolver;
 import com.consol.citrus.simulator.scenario.AbstractSimulatorScenario;
 import com.consol.citrus.simulator.scenario.Scenario;
 import com.consol.citrus.simulator.scenario.ScenarioDesigner;
 
 @Scenario("Openstack-Replace-VF-Module-Volume-Get")
-@RequestMapping(value = "/sim/mockPublicUrl/stacks/replace_module_volume_id/*")
+@RequestMapping(value = "/sim/v1/tenantOne/stacks/replace_module_volume_id/*")
 public class QueryStackByIdReplaceModuleVolume extends AbstractSimulatorScenario {
 
 
 
 import org.springframework.core.io.ClassPathResource;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
 import com.consol.citrus.endpoint.resolver.DynamicEndpointUriResolver;
 import com.consol.citrus.simulator.scenario.AbstractSimulatorScenario;
 import com.consol.citrus.simulator.scenario.Scenario;
 import com.consol.citrus.simulator.scenario.ScenarioDesigner;
 
 @Scenario("Openstack-VolumeGroup-Interactions")
-@RequestMapping(value = "/sim/mockPublicUrl/stacks/VolumeGroup/*")
+@RequestMapping(value = "/sim/v1/tenantOne/stacks/VolumeGroup/*")
 public class QueryStackByIdVolumeGroup extends AbstractSimulatorScenario {
 
 
 
 import com.consol.citrus.simulator.scenario.ScenarioDesigner;
 
 @Scenario("Openstack-Query-Stack-Resources-Macro1")
-@RequestMapping(value = "/sim/mockPublicUrl/stacks/macro_module_1/resources", method = RequestMethod.GET)
+@RequestMapping(value = "/sim/v1/tenantOne/stacks/macro_module_1/resources", method = RequestMethod.GET)
 public class QueryResourcesByStackNameMacro1 extends AbstractSimulatorScenario {
 
 
 
 import com.consol.citrus.simulator.scenario.ScenarioDesigner;
 
 @Scenario("Openstack-Query-Stack-Resources-Macro2")
-@RequestMapping(value = "/sim/mockPublicUrl/stacks/macro_module_2/resources", method = RequestMethod.GET)
+@RequestMapping(value = "/sim/v1/tenantOne/stacks/macro_module_2/resources", method = RequestMethod.GET)
 public class QueryResourcesByStackNameMacro2 extends AbstractSimulatorScenario {
 
 
 
 import com.consol.citrus.simulator.scenario.ScenarioDesigner;
 
 @Scenario("Openstack-Query-Stack-Resources-Macro3")
-@RequestMapping(value = "/sim/mockPublicUrl/stacks/macro_module_3/resources", method = RequestMethod.GET)
+@RequestMapping(value = "/sim/v1/tenantOne/stacks/macro_module_3/resources", method = RequestMethod.GET)
 public class QueryResourcesByStackNameMacro3 extends AbstractSimulatorScenario {
 
 
 
  *
  */
 @Scenario("Openstack-QueryStackByID-Macro1")
-@RequestMapping(value = "/sim/mockPublicUrl/stacks/macro_module_1/*", method = RequestMethod.GET)
+@RequestMapping(value = "/sim/v1/tenantOne/stacks/macro_module_1/*", method = RequestMethod.GET)
 public class QueryStackByIdMacro1 extends AbstractSimulatorScenario {
 
 
 
  *
  */
 @Scenario("Openstack-QueryStackByID-Macro2")
-@RequestMapping(value = "/sim/mockPublicUrl/stacks/macro_module_2/*", method = RequestMethod.GET)
+@RequestMapping(value = "/sim/v1/tenantOne/stacks/macro_module_2/*", method = RequestMethod.GET)
 public class QueryStackByIdMacro2 extends AbstractSimulatorScenario {
 
 
 
  *
  */
 @Scenario("Openstack-QueryStackByID-Macro3")
-@RequestMapping(value = "/sim/mockPublicUrl/stacks/macro_module_3/*", method = RequestMethod.GET)
+@RequestMapping(value = "/sim/v1/tenantOne/stacks/macro_module_3/*", method = RequestMethod.GET)
 public class QueryStackByIdMacro3 extends AbstractSimulatorScenario {
 
 
 
 import com.consol.citrus.simulator.scenario.ScenarioDesigner;
 
 @Scenario("Nova-Keypair-Delete")
-@RequestMapping(value = "/sim/mockPublicUrl/os-keypairs/*", method = RequestMethod.DELETE)
+@RequestMapping(value = "/sim/v1/tenantOne/os-keypairs/*", method = RequestMethod.DELETE)
 public class NovaKeyPairDelete extends AbstractSimulatorScenario {
 
     @Override
 
 import com.consol.citrus.simulator.scenario.ScenarioDesigner;
 
 @Scenario("QueryNeutronNetworkSSCHAPort0")
-@RequestMapping(value = "/sim/mockPublicUrl/v2.0/ports/00bb8407-650e-48b5-b919-33b88d6f8fe3",
-        method = RequestMethod.GET)
+@RequestMapping(value = "/sim/v1/tenantOne/v2.0/ports/00bb8407-650e-48b5-b919-33b88d6f8fe3", method = RequestMethod.GET)
 public class QueryNeutronNetworkSSCHAPort0 extends AbstractSimulatorScenario {
 
 
 
 import com.consol.citrus.simulator.scenario.ScenarioDesigner;
 
 @Scenario("QueryNeutronNetworkSSCManagementPort0")
-@RequestMapping(value = "/sim/mockPublicUrl/v2.0/ports/8d93f63e-e972-48c7-ad98-b2122da47315",
-        method = RequestMethod.GET)
+@RequestMapping(value = "/sim/v1/tenantOne/v2.0/ports/8d93f63e-e972-48c7-ad98-b2122da47315", method = RequestMethod.GET)
 public class QueryNeutronNetworkSSCManagementPort0 extends AbstractSimulatorScenario {
 
 
 
 import com.consol.citrus.simulator.scenario.ScenarioDesigner;
 
 @Scenario("QueryNeutronNetworkSSCManagementPort1")
-@RequestMapping(value = "/sim/mockPublicUrl/v2.0/ports/07f5b14c-147a-4d14-8c94-a9e94dbc097b",
-        method = RequestMethod.GET)
+@RequestMapping(value = "/sim/v1/tenantOne/v2.0/ports/07f5b14c-147a-4d14-8c94-a9e94dbc097b", method = RequestMethod.GET)
 public class QueryNeutronNetworkSSCManagementPort1 extends AbstractSimulatorScenario {
 
 
 
 import com.consol.citrus.simulator.scenario.ScenarioDesigner;
 
 @Scenario("QueryNeutronNetworkSSCRole1Port0")
-@RequestMapping(value = "/sim/mockPublicUrl/v2.0/ports/0594a2f2-7ea4-42eb-abc2-48ea49677fca",
-        method = RequestMethod.GET)
+@RequestMapping(value = "/sim/v1/tenantOne/v2.0/ports/0594a2f2-7ea4-42eb-abc2-48ea49677fca", method = RequestMethod.GET)
 public class QueryNeutronNetworkSSCRole1Port0 extends AbstractSimulatorScenario {
 
 
 
 import com.consol.citrus.simulator.scenario.ScenarioDesigner;
 
 @Scenario("QueryNeutronNetworkSSCservice1Port0")
-@RequestMapping(value = "/sim/mockPublicUrl/v2.0/ports/27391d94-33af-474a-927d-d409249e8fd3",
-        method = RequestMethod.GET)
+@RequestMapping(value = "/sim/v1/tenantOne/v2.0/ports/27391d94-33af-474a-927d-d409249e8fd3", method = RequestMethod.GET)
 public class QueryNeutronNetworkSSCService1Port0 extends AbstractSimulatorScenario {
 
 
 
 import com.consol.citrus.simulator.scenario.ScenarioDesigner;
 
 @Scenario("QueryNeutronNetworkSSCTrusted")
-@RequestMapping(value = "/sim/mockPublicUrl/v2.0/ports/d2f51f82-0ec2-4581-bd1a-d2a82073e52b",
-        method = RequestMethod.GET)
+@RequestMapping(value = "/sim/v1/tenantOne/v2.0/ports/d2f51f82-0ec2-4581-bd1a-d2a82073e52b", method = RequestMethod.GET)
 public class QueryNeutronNetworkSSCTrusted extends AbstractSimulatorScenario {
 
 
 
 
 @Scenario("Query-Resource-Details-Role1-Sub0")
 @RequestMapping(
-        value = "/sim/mockPublicUrl/stacks/tsbc0005vm002ssc001-ssc_1_subint_role1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources",
+        value = "/sim/v1/tenantOne/stacks/tsbc0005vm002ssc001-ssc_1_subint_role1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources",
         method = RequestMethod.GET)
 public class QueryResourceDetailsRole1Sub1 extends AbstractSimulatorScenario {
 
 
 
 @Scenario("Query-Resource-Details-service1-Sub0")
 @RequestMapping(
-        value = "/sim/mockPublicUrl/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-1-fmn5laetg5cs/0d9cd813-2ae1-46c0-9ebb-48081f6cffbb/resources",
+        value = "/sim/v1/tenantOne/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-1-fmn5laetg5cs/0d9cd813-2ae1-46c0-9ebb-48081f6cffbb/resources",
         method = RequestMethod.GET)
 public class QueryResourceDetailsService1Sub0 extends AbstractSimulatorScenario {
 
 
 
 @Scenario("Query-Resource-Details-service1-Sub1")
 @RequestMapping(
-        value = "/sim/mockPublicUrl/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-0-yghihziaf36m/b7019dd0-2ee9-4447-bdef-ac25676b205a/resources",
+        value = "/sim/v1/tenantOne/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-0-yghihziaf36m/b7019dd0-2ee9-4447-bdef-ac25676b205a/resources",
         method = RequestMethod.GET)
 public class QueryResourceDetailsService1Sub1 extends AbstractSimulatorScenario {
 
 
 
 @Scenario("Query-Resource-Details-service1-Sub2")
 @RequestMapping(
-        value = "/sim/mockPublicUrl/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-2-y3ndsavmsymv/bd0fc728-cbde-4301-a581-db56f494675c/resources",
+        value = "/sim/v1/tenantOne/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-2-y3ndsavmsymv/bd0fc728-cbde-4301-a581-db56f494675c/resources",
         method = RequestMethod.GET)
 public class QueryResourceDetailsService1Sub2 extends AbstractSimulatorScenario {
 
 
 import com.consol.citrus.simulator.scenario.ScenarioDesigner;
 
 @Scenario("Openstack-Query-Base-Stack-Resources")
-@RequestMapping(value = "/sim/mockPublicUrl/stacks/base_module_id/resources", method = RequestMethod.GET)
+@RequestMapping(value = "/sim/v1/tenantOne/stacks/base_module_id/resources", method = RequestMethod.GET)
 public class QueryResourcesByBaseStackName extends AbstractSimulatorScenario {
 
 
 
 import com.consol.citrus.simulator.scenario.ScenarioDesigner;
 
 @Scenario("Openstack-Query-Stack-Resources")
-@RequestMapping(value = "/sim/mockPublicUrl/stacks/dummy_id/resources", method = RequestMethod.GET)
+@RequestMapping(value = "/sim/v1/tenantOne/stacks/dummy_id/resources", method = RequestMethod.GET)
 public class QueryResourcesByStackName extends AbstractSimulatorScenario {
 
 
 
 
 @Scenario("QueryRole1StackResources-tsbc0005vm002ssc001")
 @RequestMapping(
-        value = "/sim/mockPublicUrl/stacks/tsbc0005vm002ssc001-ssc_1_subint_role1_port_0_subinterfaces-hlzdigtimzst/447a9b41-714e-434b-b1d0-6cce8d9f0f0c/resources",
+        value = "/sim/v1/tenantOne/stacks/tsbc0005vm002ssc001-ssc_1_subint_role1_port_0_subinterfaces-hlzdigtimzst/447a9b41-714e-434b-b1d0-6cce8d9f0f0c/resources",
         method = RequestMethod.GET)
 public class QueryRole1StackResources extends AbstractSimulatorScenario {
 
 
 
 @Scenario("QueryService1StackResources-tsbc0005vm002ssc001")
 @RequestMapping(
-        value = "/sim/mockPublicUrl/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz/31d0647a-6043-49a4-81b6-ccab29380672/resources",
+        value = "/sim/v1/tenantOne/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz/31d0647a-6043-49a4-81b6-ccab29380672/resources",
         method = RequestMethod.GET)
 public class QueryService1StackResources extends AbstractSimulatorScenario {
 
 
 
 @Scenario("Query-Stack-Details-Role1-Sub0")
 @RequestMapping(
-        value = "/sim/mockPublicUrl/stacks/tsbc0005vm002ssc001-ssc_1_subint_role1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81",
+        value = "/v1/tenantOne/stacks/tsbc0005vm002ssc001-ssc_1_subint_role1_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81",
         method = RequestMethod.GET)
 public class QueryStackDetailsRole1Sub0 extends AbstractSimulatorScenario {
 
 
 
 @Scenario("Query-Stack-Details-service1-Sub0")
 @RequestMapping(
-        value = "/sim/mockPublicUrl/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-0-yghihziaf36m/b7019dd0-2ee9-4447-bdef-ac25676b205a",
+        value = "/sim/v1/tenantOne/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-0-yghihziaf36m/b7019dd0-2ee9-4447-bdef-ac25676b205a",
         method = RequestMethod.GET)
 public class QueryStackDetailsService1Sub0 extends AbstractSimulatorScenario {
 
 
 
 @Scenario("Query-Stack-Details-service1-Sub1")
 @RequestMapping(
-        value = "/sim/mockPublicUrl/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-1-fmn5laetg5cs/0d9cd813-2ae1-46c0-9ebb-48081f6cffbb",
+        value = "/sim/v1/tenantOne/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-1-fmn5laetg5cs/0d9cd813-2ae1-46c0-9ebb-48081f6cffbb",
         method = RequestMethod.GET)
 public class QueryStackDetailsService1Sub1 extends AbstractSimulatorScenario {
 
 
 
 @Scenario("Query-Stack-Details-service1-Sub2")
 @RequestMapping(
-        value = "/sim/mockPublicUrl/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-2-y3ndsavmsymv/bd0fc728-cbde-4301-a581-db56f494675c",
+        value = "/sim/v1/tenantOne/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-2-y3ndsavmsymv/bd0fc728-cbde-4301-a581-db56f494675c",
         method = RequestMethod.GET)
 public class QueryStackDetailsService1Sub2 extends AbstractSimulatorScenario {
 
 
--- /dev/null
+{
+  "flavor" : {
+    "links" : [ {
+      "rel" : "self",
+      "href" : "http://some.test.host.com:8774/v2/f340218174564e59898c2e38c67d80b0/flavors/053ea2e2-533f-46c3-a902-1bc76e93e5c1"
+    }, {
+      "rel" : "bookmark",
+      "href" : "http://some.test.host.com:8774/f340218174564e59898c2e38c67d80b0/flavors/053ea2e2-533f-46c3-a902-1bc76e93e5c1"
+    } ],
+    "public" : true,
+    "id" : "053ea2e2-533f-46c3-a902-1bc76e93e5c1",
+    "name" : "gv.c8r16d60e200",
+    "vcpus" : 8,
+    "ram" : 16384,
+    "disk" : 60,
+    "OS-FLV-EXT-DATA:ephemeral" : 200,
+    "swap" : "",
+    "rxtx_factor" : 1.0,
+    "OS-FLV-DISABLED:disabled" : false,
+    "os-flavor-access:is_public" : true
+  }
+}
 
--- /dev/null
+{
+    "name" : "BVOIP_JUNIPER-SPACE_19.4R1.4.qcow2",
+    "size" : 5863833600,
+    "status" : "active",
+    "properties" : { },
+    "deleted" : false,
+    "public" : false,
+    "protected" : true,
+    "id" : "9fb132a5-599c-4de8-a8fc-16964692b381",
+    "disk_format" : "qcow2",
+    "container_format" : "bare",
+    "checksum" : "073f0a9e5780dce6ddb2b385f518d634",
+    "created_at" : "2020-02-06T13:28:26Z",
+    "updated_at" : "2020-02-06T14:35:27Z",
+    "is_public" : false,
+    "min_ram" : 0,
+    "min_disk" : 0,
+    "owner" : "ed4e552bc2e24f1e82d0359ba66c735e",
+    "visibility" : "private",
+    "file" : "/v2/images/9fb132a5-599c-4de8-a8fc-16964692b381/file",
+    "schema" : "/v2/schemas/image",
+    "self" : "/v2/images/9fb132a5-599c-4de8-a8fc-16964692b381",
+    "post_processing_networking" : "None",
+    "post_processing_tools" : "None",
+    "application_name" : "JUNIPER-SPACE",
+    "application_type" : "JUNIPER-SPACE",
+    "application_version" : "19.4R1.4",
+    "application_vendor" : "Juniper",
+    "description" : "Source = BVOIP_JUNIPER-SPACE_19.4R1.4.qcow2",
+    "tags" : [ ]
+  }
\ No newline at end of file