Merge "add in volume group model info lookup"
[so.git] / bpmn / MSOCommonBPMN / src / main / java / org / onap / so / bpmn / servicedecomposition / tasks / BBInputSetup.java
index 67fb6a6..4be2f03 100644 (file)
@@ -49,6 +49,7 @@ import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceSubscription;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup;
+import org.onap.so.bpmn.servicedecomposition.entities.ConfigurationResourceKeys;
 import org.onap.so.bpmn.servicedecomposition.entities.ExecuteBuildingBlock;
 import org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock;
 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
@@ -71,6 +72,7 @@ import org.onap.so.db.catalog.beans.OrchestrationStatus;
 import org.onap.so.db.catalog.beans.Service;
 import org.onap.so.db.catalog.beans.VfModuleCustomization;
 import org.onap.so.db.catalog.beans.VnfResourceCustomization;
+import org.onap.so.db.catalog.beans.VnfVfmoduleCvnfcConfigurationCustomization;
 import org.onap.so.db.catalog.beans.VnfcInstanceGroupCustomization;
 import org.onap.so.db.request.beans.InfraActiveRequests;
 import org.onap.so.logger.MsoLogger;
@@ -88,6 +90,7 @@ import org.onap.so.serviceinstancebeans.Vnfs;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializationFeature;
 
@@ -99,7 +102,6 @@ public class BBInputSetup implements JavaDelegate {
        private static final String LOOKUP_KEY_MAP_VAR_NAME = "lookupKeyMap";
        private static final String GBB_INPUT_VAR_NAME = "gBBInput";
        private static final String EXECUTE_BB_VAR_NAME = "buildingBlock";
-       private static final String CLOUD_OWNER = "att-aic";
        private static final String VOLUME_GROUP = "VolumeGroup";
        private static final String VF_MODULE = "VfModule";
        private static final String NETWORK = "Network";
@@ -111,6 +113,9 @@ public class BBInputSetup implements JavaDelegate {
 
        @Autowired
        private BBInputSetupMapperLayer mapperLayer;
+       
+       @Autowired
+       private CloudInfoFromAAI cloudInfoFromAAI;
 
        @Autowired
        private ExceptionBuilder exceptionUtil;
@@ -120,6 +125,10 @@ public class BBInputSetup implements JavaDelegate {
        public BBInputSetupUtils getBbInputSetupUtils() {
                return bbInputSetupUtils;
        }
+       
+       public void setCloudInfoFromAAI(CloudInfoFromAAI cloudInfoFromAAI) {
+               this.cloudInfoFromAAI = cloudInfoFromAAI;
+       }
 
        public void setBbInputSetupUtils(BBInputSetupUtils bbInputSetupUtils) {
                this.bbInputSetupUtils = bbInputSetupUtils;
@@ -141,8 +150,8 @@ public class BBInputSetup implements JavaDelegate {
                        String resourceId = executeBB.getResourceId();
                        String requestAction = executeBB.getRequestAction();
                        String vnfType = executeBB.getVnfType();
-                       boolean aLaCarte = executeBB.isaLaCarte();
-                       boolean homing = executeBB.isHoming();
+                       boolean aLaCarte = Boolean.TRUE.equals(executeBB.isaLaCarte());
+                       boolean homing = Boolean.TRUE.equals(executeBB.isHoming());
                        Map<ResourceKey, String> lookupKeyMap = new HashMap<>();
                        outputBB = this.getGBB(executeBB, lookupKeyMap, requestAction, aLaCarte, resourceId, vnfType);
                        ObjectMapper mapper = new ObjectMapper();
@@ -188,14 +197,19 @@ public class BBInputSetup implements JavaDelegate {
                if(requestDetails == null) {
                        requestDetails = bbInputSetupUtils.getRequestDetails(requestId);
                }
-               ModelType modelType = requestDetails.getModelInfo().getModelType();
-               if (aLaCarte && modelType.equals(ModelType.service)) {
-                       return this.getGBBALaCarteService(executeBB, requestDetails, lookupKeyMap, requestAction, resourceId);
-               } else if (aLaCarte && !modelType.equals(ModelType.service)) {
-                       return this.getGBBALaCarteNonService(executeBB, requestDetails, lookupKeyMap, requestAction, resourceId,
-                                       vnfType);
-               } else {
-                       return this.getGBBMacro(executeBB, requestDetails, lookupKeyMap, requestAction, resourceId, vnfType);
+               if (requestDetails.getModelInfo() == null) {
+                       return this.getGBBCM(executeBB, requestDetails, lookupKeyMap, requestAction, resourceId);
+               }
+               else {
+                       ModelType modelType = requestDetails.getModelInfo().getModelType();
+                       if (aLaCarte && modelType.equals(ModelType.service)) {
+                               return this.getGBBALaCarteService(executeBB, requestDetails, lookupKeyMap, requestAction, resourceId);
+                       } else if (aLaCarte && !modelType.equals(ModelType.service)) {
+                               return this.getGBBALaCarteNonService(executeBB, requestDetails, lookupKeyMap, requestAction, resourceId,
+                                               vnfType);
+                       } else {
+                               return this.getGBBMacro(executeBB, requestDetails, lookupKeyMap, requestAction, resourceId, vnfType);
+                       }
                }
        }
 
@@ -234,6 +248,25 @@ public class BBInputSetup implements JavaDelegate {
                        throw new Exception("Could not find relevant information for related Service Instance");
                }
        }
+       
+       protected GeneralBuildingBlock getGBBCM(ExecuteBuildingBlock executeBB,
+                       RequestDetails requestDetails, Map<ResourceKey, String> lookupKeyMap, String requestAction,
+                       String resourceId) throws Exception {           
+               ServiceInstance serviceInstance = new ServiceInstance();
+               String serviceInstanceId = lookupKeyMap.get(ResourceKey.SERVICE_INSTANCE_ID);
+               serviceInstance.setServiceInstanceId(serviceInstanceId);
+               
+               List<GenericVnf> genericVnfs = serviceInstance.getVnfs();
+               
+               String vnfId = lookupKeyMap.get(ResourceKey.GENERIC_VNF_ID);
+               org.onap.aai.domain.yang.GenericVnf aaiGenericVnf = bbInputSetupUtils.getAAIGenericVnf(vnfId);
+               
+               GenericVnf genericVnf = this.mapperLayer.mapAAIGenericVnfIntoGenericVnf(aaiGenericVnf);
+               genericVnfs.add(genericVnf);            
+               
+               return this.populateGBBWithSIAndAdditionalInfo(requestDetails, serviceInstance, executeBB, requestAction, new Customer());
+               
+       }
 
        protected void populateObjectsOnAssignAndCreateFlows(RequestDetails requestDetails, Service service, String bbName,
                        ServiceInstance serviceInstance, Map<ResourceKey, String> lookupKeyMap, String resourceId, String vnfType)
@@ -267,32 +300,24 @@ public class BBInputSetup implements JavaDelegate {
        }
 
        protected void populateConfiguration(ModelInfo modelInfo, Service service, String bbName,
-                       ServiceInstance serviceInstance, Map<ResourceKey, String> lookupKeyMap, String resourceId, String instanceName) {
-               boolean foundByName = false;
-               boolean foundById = false;
-               for (Configuration configuration : serviceInstance.getConfigurations()) {
+                       ServiceInstance serviceInstance, Map<ResourceKey, String> lookupKeyMap, String resourceId, String instanceName, ConfigurationResourceKeys configurationResourceKeys) {
+               Configuration configuration = null;
+               for (Configuration configurationTemp : serviceInstance.getConfigurations()) {
                        if (lookupKeyMap.get(ResourceKey.CONFIGURATION_ID) != null
-                                       && configuration.getConfigurationId().equalsIgnoreCase(lookupKeyMap.get(ResourceKey.CONFIGURATION_ID))) {
-                               foundById = true;
-                               org.onap.aai.domain.yang.Configuration aaiConfiguration = bbInputSetupUtils.getAAIConfiguration(configuration.getConfigurationId());
-                               if(aaiConfiguration!=null){
-                                       modelInfo.setModelCustomizationUuid(aaiConfiguration.getModelCustomizationId());
-                               }
-                               this.mapCatalogConfiguration(configuration, modelInfo, service);
-                       } else if (instanceName != null && configuration.getConfigurationName().equalsIgnoreCase(instanceName)) {
-                               foundByName = true;
-                               lookupKeyMap.put(ResourceKey.CONFIGURATION_ID, configuration.getConfigurationId());
+                                       && configurationTemp.getConfigurationId().equalsIgnoreCase(lookupKeyMap.get(ResourceKey.CONFIGURATION_ID))) {
+                               configuration = configurationTemp;
                                org.onap.aai.domain.yang.Configuration aaiConfiguration = bbInputSetupUtils.getAAIConfiguration(configuration.getConfigurationId());
                                if(aaiConfiguration!=null){
                                        modelInfo.setModelCustomizationUuid(aaiConfiguration.getModelCustomizationId());
                                }
-                               this.mapCatalogConfiguration(configuration, modelInfo, service);
                        }
                }
-               if (!foundByName && !foundById && bbName.equalsIgnoreCase(AssignFlows.FABRIC_CONFIGURATION.toString())) {
-                       Configuration configuration = this.createConfiguration(lookupKeyMap, instanceName, resourceId);
+               if (configuration == null && bbName.equalsIgnoreCase(AssignFlows.FABRIC_CONFIGURATION.toString())) {
+                       configuration = this.createConfiguration(lookupKeyMap, instanceName, resourceId);
                        serviceInstance.getConfigurations().add(configuration);
-                       this.mapCatalogConfiguration(configuration, modelInfo, service);
+               }
+               if(configuration != null) {
+                       this.mapCatalogConfiguration(configuration, modelInfo, service, configurationResourceKeys);
                }
        }
 
@@ -306,13 +331,32 @@ public class BBInputSetup implements JavaDelegate {
                return configuration;
        }
 
-       protected void mapCatalogConfiguration(Configuration configuration, ModelInfo modelInfo, Service service) {
+       protected void mapCatalogConfiguration(Configuration configuration, ModelInfo modelInfo, Service service, ConfigurationResourceKeys configurationResourceKeys) {
                ConfigurationResourceCustomization configurationResourceCustomization = findConfigurationResourceCustomization(modelInfo, service);
-               if (configurationResourceCustomization != null) {
-                       configuration.setModelInfoConfiguration(this.mapperLayer.mapCatalogConfigurationToConfiguration(configurationResourceCustomization));
+               VnfVfmoduleCvnfcConfigurationCustomization vnfVfmoduleCvnfcConfigurationCustomization = 
+                               findVnfVfmoduleCvnfcConfigurationCustomization(configurationResourceKeys.getVfModuleCustomizationUUID(),
+                                               configurationResourceKeys.getVnfResourceCustomizationUUID(), configurationResourceKeys.getCvnfcCustomizationUUID(), configurationResourceCustomization);
+               if (configurationResourceCustomization != null && vnfVfmoduleCvnfcConfigurationCustomization != null) {
+                       configuration.setModelInfoConfiguration(this.mapperLayer.mapCatalogConfigurationToConfiguration(configurationResourceCustomization
+                                       , vnfVfmoduleCvnfcConfigurationCustomization));
                }
        }
 
+       protected VnfVfmoduleCvnfcConfigurationCustomization findVnfVfmoduleCvnfcConfigurationCustomization(String vfModuleCustomizationUUID, 
+                       String vnfResourceCustomizationUUID, String cvnfcCustomizationUUID, ConfigurationResourceCustomization configurationResourceCustomization) {
+
+               if(configurationResourceCustomization.getConfigurationResource() != null)
+                       for(VnfVfmoduleCvnfcConfigurationCustomization vnfVfmoduleCvnfcConfigurationCustomization : 
+                               configurationResourceCustomization.getConfigurationResource().getVnfVfmoduleCvnfcConfigurationCustomization()) {
+                               if(vnfVfmoduleCvnfcConfigurationCustomization.getVfModuleCustomization().getModelCustomizationUUID().equalsIgnoreCase(vfModuleCustomizationUUID)
+                                               && vnfVfmoduleCvnfcConfigurationCustomization.getVnfResourceCustomization().getModelCustomizationUUID().equalsIgnoreCase(vnfResourceCustomizationUUID)
+                                               && vnfVfmoduleCvnfcConfigurationCustomization.getCvnfcCustomization().getModelCustomizationUUID().equalsIgnoreCase(cvnfcCustomizationUUID)) {
+                                       return vnfVfmoduleCvnfcConfigurationCustomization;
+                               }
+                       }
+               return null;
+       }
+
        protected ConfigurationResourceCustomization findConfigurationResourceCustomization(ModelInfo modelInfo, Service service) {
                for (ConfigurationResourceCustomization resourceCust : service.getConfigurationCustomizations()) {
                        if (resourceCust.getModelCustomizationUUID().equalsIgnoreCase(modelInfo.getModelCustomizationUuid())) {
@@ -346,16 +390,10 @@ public class BBInputSetup implements JavaDelegate {
                                ModelInfo vnfModelInfo = new ModelInfo();
                                vnfModelInfo.setModelCustomizationUuid(vnfModelCustomizationUUID);
                                this.mapCatalogVnf(tempVnf, vnfModelInfo, service);
-                               if (lookupKeyMap.get(ResourceKey.VOLUME_GROUP_ID) == null) {
-                                       for(VolumeGroup volumeGroup : tempVnf.getVolumeGroups()) {
-                                               String volumeGroupCustId = 
-                                                               this.bbInputSetupUtils.getAAIVolumeGroup(CLOUD_OWNER, 
-                                                                               cloudConfiguration.getLcpCloudRegionId(), volumeGroup.getVolumeGroupId()).getModelCustomizationId();
-                                               if(modelInfo.getModelCustomizationId().equalsIgnoreCase(volumeGroupCustId)) {
-                                                       lookupKeyMap.put(ResourceKey.VOLUME_GROUP_ID, volumeGroup.getVolumeGroupId());
-                                                       break;
-                                               }
-                                       }
+                               Optional<String> volumeGroupIdOp = getVolumeGroupIdRelatedToVfModule(tempVnf, modelInfo, cloudConfiguration.getCloudOwner(), 
+                                               cloudConfiguration.getLcpCloudRegionId(), lookupKeyMap);
+                               if(volumeGroupIdOp.isPresent()) {
+                                       lookupKeyMap.put(ResourceKey.VOLUME_GROUP_ID, volumeGroupIdOp.get());
                                }
                                break;
                        }
@@ -384,6 +422,21 @@ public class BBInputSetup implements JavaDelegate {
                        throw new Exception("Could not find relevant information for related VNF");
                }
        }
+       
+       protected Optional<String> getVolumeGroupIdRelatedToVfModule(GenericVnf vnf, ModelInfo modelInfo, 
+                       String cloudOwner, String cloudRegionId, Map<ResourceKey, String> lookupKeyMap) {
+               if (lookupKeyMap.get(ResourceKey.VOLUME_GROUP_ID) == null) {
+                       for(VolumeGroup volumeGroup : vnf.getVolumeGroups()) {
+                               String volumeGroupCustId = 
+                                               bbInputSetupUtils.getAAIVolumeGroup(cloudOwner, 
+                                                               cloudRegionId, volumeGroup.getVolumeGroupId()).getModelCustomizationId();
+                               if(modelInfo.getModelCustomizationId().equalsIgnoreCase(volumeGroupCustId)) {
+                                       return Optional.of(volumeGroup.getVolumeGroupId());
+                               }
+                       }
+               }
+               return Optional.empty();
+       }
 
        protected void mapCatalogVfModule(VfModule vfModule, ModelInfo modelInfo, Service service,
                        String vnfModelCustomizationUUID) {
@@ -537,7 +590,7 @@ public class BBInputSetup implements JavaDelegate {
                if (relatedInstanceList != null) {
                        for (RelatedInstanceList relatedInstList : relatedInstanceList) {
                                RelatedInstance relatedInstance = relatedInstList.getRelatedInstance();
-                               if (relatedInstance.getModelInfo().getModelType().equals(ModelType.networkCollection)) {
+                               if (relatedInstance.getModelInfo().getModelType().equals(ModelType.networkInstanceGroup)) {
                                        instanceGroupModelInfo = relatedInstance.getModelInfo();
                                        instanceGroupId = relatedInstance.getInstanceId();
                                }
@@ -573,8 +626,9 @@ public class BBInputSetup implements JavaDelegate {
                                .getVnfcInstanceGroupCustomizations();
                for (VnfcInstanceGroupCustomization vnfcInstanceGroupCust : vnfcInstanceGroups) {
                        InstanceGroup instanceGroup = this.createInstanceGroup();
-                               instanceGroup.setModelInfoInstanceGroup(this.mapperLayer
-                                               .mapCatalogInstanceGroupToInstanceGroup(null, vnfcInstanceGroupCust.getInstanceGroup()));
+                       org.onap.so.db.catalog.beans.InstanceGroup catalogInstanceGroup = bbInputSetupUtils.getCatalogInstanceGroup(vnfcInstanceGroupCust.getModelUUID());
+                       instanceGroup.setModelInfoInstanceGroup(this.mapperLayer
+                                       .mapCatalogInstanceGroupToInstanceGroup(null, catalogInstanceGroup));
                        instanceGroup.getModelInfoInstanceGroup().setFunction(vnfcInstanceGroupCust.getFunction());
                        instanceGroup.setDescription(vnfcInstanceGroupCust.getDescription());
                        genericVnf.getInstanceGroups().add(instanceGroup);
@@ -707,7 +761,7 @@ public class BBInputSetup implements JavaDelegate {
                                }
                        }
                        ServiceInstance serviceInstance = this.getALaCarteServiceInstance(service, requestDetails, customer,
-                                       project, owningEntity, lookupKeyMap, resourceId, executeBB.isaLaCarte(),
+                                       project, owningEntity, lookupKeyMap, resourceId, Boolean.TRUE.equals(executeBB.isaLaCarte()),
                                        executeBB.getBuildingBlock().getBpmnFlowName());
                        return this.populateGBBWithSIAndAdditionalInfo(requestDetails, serviceInstance, executeBB, requestAction, customer);
                } else {
@@ -766,9 +820,8 @@ public class BBInputSetup implements JavaDelegate {
                requestContext.setAction(requestAction);
                requestContext.setMsoRequestId(executeBB.getRequestId());
                org.onap.aai.domain.yang.CloudRegion aaiCloudRegion = bbInputSetupUtils
-                               .getCloudRegion(requestDetails.getCloudConfiguration(), CLOUD_OWNER);
-               CloudRegion cloudRegion = mapperLayer.mapCloudRegion(requestDetails.getCloudConfiguration(), aaiCloudRegion,
-                               CLOUD_OWNER);
+                               .getCloudRegion(requestDetails.getCloudConfiguration());
+               CloudRegion cloudRegion = mapperLayer.mapCloudRegion(requestDetails.getCloudConfiguration(), aaiCloudRegion);
                outputBB.setOrchContext(orchContext);
                outputBB.setRequestContext(requestContext);
                outputBB.setCloudRegion(cloudRegion);
@@ -779,7 +832,9 @@ public class BBInputSetup implements JavaDelegate {
                        customer = mapCustomer(globalCustomerId, subscriptionServiceType);
                }
                outputBB.setServiceInstance(serviceInstance);
-               customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
+               if (customer.getServiceSubscription() != null) {
+                       customer.getServiceSubscription().getServiceInstances().add(serviceInstance);
+               }
                outputBB.setCustomer(customer);
                return outputBB;
        }
@@ -879,7 +934,7 @@ public class BBInputSetup implements JavaDelegate {
                if (bbName.contains(NETWORK) && !bbName.contains(NETWORK_COLLECTION)) {
                        String networkId = lookupKeyMap.get(ResourceKey.NETWORK_ID);
                        ModelInfo networkModelInfo = new ModelInfo();
-                       if(!executeBB.getBuildingBlock().getIsVirtualLink()) {
+                       if((!Boolean.TRUE.equals(executeBB.getBuildingBlock().getIsVirtualLink()))) {
                                NetworkResourceCustomization networkCust = getNetworkCustomizationByKey(key, service);
                                if (networkCust != null) {
                                        networkModelInfo.setModelCustomizationUuid(networkCust.getModelCustomizationUUID());
@@ -890,18 +945,19 @@ public class BBInputSetup implements JavaDelegate {
                                }
                        } else {
                                msoLogger.debug("Orchestrating on Collection Network Resource Customization");
-                               serviceInstance.getNetworks().add(getVirtualLinkL3Network(lookupKeyMap, bbName, key, networkId));
+                               CollectionNetworkResourceCustomization collectionNetworkResourceCust = bbInputSetupUtils.getCatalogCollectionNetworkResourceCustByID(key);
+                               L3Network l3Network = getVirtualLinkL3Network(lookupKeyMap, bbName, key, networkId, collectionNetworkResourceCust, serviceInstance);
+                               NetworkResourceCustomization networkResourceCustomization = 
+                                               mapperLayer.mapCollectionNetworkResourceCustToNetworkResourceCust(collectionNetworkResourceCust);
+                               if(l3Network != null) {
+                                       l3Network.setModelInfoNetwork(mapperLayer.mapCatalogNetworkToNetwork(networkResourceCustomization));
+                               }
                        }
                } else if(bbName.contains("Configuration")) {
                        String configurationId = lookupKeyMap.get(ResourceKey.CONFIGURATION_ID);
                        ModelInfo configurationModelInfo = new ModelInfo();
                        configurationModelInfo.setModelCustomizationUuid(key);
-                       ConfigurationResourceCustomization configurationCust = findConfigurationResourceCustomization(configurationModelInfo, service);
-                       if(configurationCust != null) {
-                               this.populateConfiguration(configurationModelInfo, service, bbName, serviceInstance, lookupKeyMap, configurationId, null);
-                       } else {
-                               msoLogger.debug("Could not find a configuration customization with key: " + key);
-                       }
+                       this.populateConfiguration(configurationModelInfo, service, bbName, serviceInstance, lookupKeyMap, configurationId, null, executeBB.getConfigurationResourceKeys());
                }
                if (executeBB.getWorkflowResourceIds() != null) {
                        this.populateNetworkCollectionAndInstanceGroupAssign(service, bbName, serviceInstance,
@@ -911,15 +967,20 @@ public class BBInputSetup implements JavaDelegate {
        }
 
        protected L3Network getVirtualLinkL3Network(Map<ResourceKey, String> lookupKeyMap, String bbName, String key,
-                       String networkId) {
-               CollectionNetworkResourceCustomization collectionNetworkResourceCust = bbInputSetupUtils.getCatalogCollectionNetworkResourceCustByID(key);
-               if(collectionNetworkResourceCust != null && (bbName.equalsIgnoreCase(AssignFlows.NETWORK_A_LA_CARTE.toString()) 
+                       String networkId, CollectionNetworkResourceCustomization collectionNetworkResourceCust, ServiceInstance serviceInstance) {
+               if(collectionNetworkResourceCust != null) {
+                       if((bbName.equalsIgnoreCase(AssignFlows.NETWORK_A_LA_CARTE.toString())
                                || bbName.equalsIgnoreCase(AssignFlows.NETWORK_MACRO.toString()))) {
-                       NetworkResourceCustomization networkResourceCustomization = 
-                                       mapperLayer.mapCollectionNetworkResourceCustToNetworkResourceCust(collectionNetworkResourceCust);
-                       L3Network l3Network = createNetwork(lookupKeyMap, null, networkId, null);
-                       l3Network.setModelInfoNetwork(mapperLayer.mapCatalogNetworkToNetwork(networkResourceCustomization));
-                       return l3Network;
+                               L3Network network = createNetwork(lookupKeyMap, null, networkId, null);                         
+                               serviceInstance.getNetworks().add(network);
+                               return network;
+                       } else {
+                               for (L3Network network : serviceInstance.getNetworks()) {
+                                       if (network.getNetworkId().equalsIgnoreCase(networkId)) {
+                                               return network;
+                                       }
+                               }
+                       }
                }
                return null;
        }
@@ -937,12 +998,18 @@ public class BBInputSetup implements JavaDelegate {
                        Map<ResourceKey, String> lookupKeyMap, String bbName, GeneralBuildingBlock gBB, Service service,
                        String requestAction, CloudConfiguration cloudConfiguration) throws Exception {
                ServiceInstance serviceInstance = gBB.getServiceInstance();
+               CloudRegion cloudRegion = null;
+               if(cloudConfiguration == null) {
+                       Optional<CloudRegion> cloudRegionOp = cloudInfoFromAAI.getCloudInfoFromAAI(serviceInstance);
+                       if(cloudRegionOp.isPresent()) {
+                               cloudRegion = cloudRegionOp.get();
+                       }
+               }
                if (cloudConfiguration != null && requestAction.equalsIgnoreCase("deleteInstance")) {
-                       org.onap.aai.domain.yang.CloudRegion aaiCloudRegion = bbInputSetupUtils.getCloudRegion(cloudConfiguration,
-                                       CLOUD_OWNER);
-                       CloudRegion cloudRegion = mapperLayer.mapCloudRegion(cloudConfiguration, aaiCloudRegion, CLOUD_OWNER);
-                       gBB.setCloudRegion(cloudRegion);
+                       org.onap.aai.domain.yang.CloudRegion aaiCloudRegion = bbInputSetupUtils.getCloudRegion(cloudConfiguration);
+                       cloudRegion = mapperLayer.mapCloudRegion(cloudConfiguration, aaiCloudRegion);
                }
+               gBB.setCloudRegion(cloudRegion);
                if (bbName.contains(VNF)) {
                        for (GenericVnf genericVnf : serviceInstance.getVnfs()) {
                                if (lookupKeyMap.get(ResourceKey.GENERIC_VNF_ID) != null
@@ -971,6 +1038,13 @@ public class BBInputSetup implements JavaDelegate {
                                                ModelInfo vfModuleModelInfo = new ModelInfo();
                                                vfModuleModelInfo.setModelCustomizationId(vfModuleCustomizationUUID);
                                                this.mapCatalogVfModule(vfModule, vfModuleModelInfo, service, vnfModelCustomizationUUID);
+                                               if(cloudRegion != null) {
+                                                       Optional<String> volumeGroupIdOp = getVolumeGroupIdRelatedToVfModule(vnf, vfModuleModelInfo, cloudRegion.getCloudOwner(), 
+                                                                       cloudRegion.getLcpCloudRegionId(), lookupKeyMap);
+                                                       if(volumeGroupIdOp.isPresent()) {
+                                                               lookupKeyMap.put(ResourceKey.VOLUME_GROUP_ID, volumeGroupIdOp.get());
+                                                       }
+                                               }
                                                break;
                                        }
                                }
@@ -986,9 +1060,9 @@ public class BBInputSetup implements JavaDelegate {
                                                vnfModelInfo.setModelCustomizationUuid(vnfModelCustomizationUUID);
                                                this.mapCatalogVnf(vnf, vnfModelInfo, service);
                                                lookupKeyMap.put(ResourceKey.GENERIC_VNF_ID, vnf.getVnfId());
-                                               if (cloudConfiguration != null) {
-                                                       String volumeGroupCustomizationUUID = this.bbInputSetupUtils.getAAIVolumeGroup(CLOUD_OWNER,
-                                                                       cloudConfiguration.getLcpCloudRegionId(), volumeGroup.getVolumeGroupId())
+                                               if (cloudRegion != null) {
+                                                       String volumeGroupCustomizationUUID = this.bbInputSetupUtils.getAAIVolumeGroup(cloudRegion.getCloudOwner(),
+                                                                       cloudRegion.getLcpCloudRegionId(), volumeGroup.getVolumeGroupId())
                                                                        .getModelCustomizationId();
                                                        ModelInfo volumeGroupModelInfo = new ModelInfo();
                                                        volumeGroupModelInfo.setModelCustomizationId(volumeGroupCustomizationUUID);
@@ -1019,7 +1093,7 @@ public class BBInputSetup implements JavaDelegate {
                                                        .getModelCustomizationId();
                                        ModelInfo modelInfo = new ModelInfo();
                                        modelInfo.setModelCustomizationUuid(configurationCustUUID);
-                                       this.mapCatalogConfiguration(configuration, modelInfo, service);
+                                       this.mapCatalogConfiguration(configuration, modelInfo, service, executeBB.getConfigurationResourceKeys());
                                        break;
                                }
                        }
@@ -1073,6 +1147,7 @@ public class BBInputSetup implements JavaDelegate {
                                String vfModuleId = lookupKeyMap.get(ResourceKey.VF_MODULE_ID);
                                CloudConfiguration cloudConfig = new CloudConfiguration();
                                cloudConfig.setLcpCloudRegionId(cloudRegion.getLcpCloudRegionId());
+                               cloudConfig.setCloudOwner(cloudRegion.getCloudOwner());
                                this.populateVfModule(modelInfo, service, bbName, serviceInstance, lookupKeyMap, vfModuleId, null,
                                                vfModules.getInstanceName(), vfModules.getInstanceParams(), cloudConfig);
                        }
@@ -1087,7 +1162,7 @@ public class BBInputSetup implements JavaDelegate {
                        configurationModelInfo.setModelCustomizationUuid(key);
                        ConfigurationResourceCustomization configurationCust = findConfigurationResourceCustomization(configurationModelInfo, service);
                        if(configurationCust != null) {
-                               this.populateConfiguration(configurationModelInfo, service, bbName, serviceInstance, lookupKeyMap, configurationId, null);
+                               this.populateConfiguration(configurationModelInfo, service, bbName, serviceInstance, lookupKeyMap, configurationId, null, executeBB.getConfigurationResourceKeys());
                        } else {
                                msoLogger.debug("Could not find a configuration customization with key: " + key);
                        }
@@ -1150,9 +1225,8 @@ public class BBInputSetup implements JavaDelegate {
                }
                }
                if(cloudConfiguration != null) {
-                       org.onap.aai.domain.yang.CloudRegion aaiCloudRegion = bbInputSetupUtils.getCloudRegion(cloudConfiguration,
-                                       CLOUD_OWNER);
-                       return mapperLayer.mapCloudRegion(cloudConfiguration, aaiCloudRegion, CLOUD_OWNER);
+                       org.onap.aai.domain.yang.CloudRegion aaiCloudRegion = bbInputSetupUtils.getCloudRegion(cloudConfiguration);
+                       return mapperLayer.mapCloudRegion(cloudConfiguration, aaiCloudRegion);
                } else {
                        msoLogger.debug("Could not find any cloud configuration for this request.");
                        return null;