Code changes in BPMN infra for RAN Slice Use case
[so.git] / bpmn / MSOCommonBPMN / src / main / java / org / onap / so / bpmn / servicedecomposition / tasks / BBInputSetup.java
index d39da5e..b38bd25 100644 (file)
@@ -8,6 +8,8 @@
  * ================================================================================
  * Modifications Copyright (c) 2020 Nokia
  * ================================================================================
+ * Modifications Copyright (c) 2023 Nordix Foundation
+ * ================================================================================
  * 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
@@ -24,6 +26,7 @@
 
 package org.onap.so.bpmn.servicedecomposition.tasks;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -72,6 +75,7 @@ import org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock;
 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
 import org.onap.so.bpmn.servicedecomposition.entities.ServiceModel;
 import org.onap.so.bpmn.servicedecomposition.entities.WorkflowResourceIds;
+import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoServiceInstance;
 import org.onap.so.bpmn.servicedecomposition.generalobjects.OrchestrationContext;
 import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext;
 import org.onap.so.bpmn.servicedecomposition.tasks.exceptions.NoServiceInstanceFoundException;
@@ -86,6 +90,7 @@ import org.onap.so.db.catalog.beans.CvnfcConfigurationCustomization;
 import org.onap.so.db.catalog.beans.NetworkCollectionResourceCustomization;
 import org.onap.so.db.catalog.beans.NetworkResourceCustomization;
 import org.onap.so.db.catalog.beans.OrchestrationStatus;
+import org.onap.so.db.catalog.beans.PnfResourceCustomization;
 import org.onap.so.db.catalog.beans.Service;
 import org.onap.so.db.catalog.beans.ServiceProxyResourceCustomization;
 import org.onap.so.db.catalog.beans.VfModuleCustomization;
@@ -185,6 +190,13 @@ public class BBInputSetup implements JavaDelegate {
             boolean homing = Boolean.TRUE.equals(executeBB.isHoming());
             Map<ResourceKey, String> lookupKeyMap = new HashMap<>();
             outputBB = this.getGBB(executeBB, lookupKeyMap, requestAction, aLaCarte, resourceId, vnfType);
+            logger.debug("setting Homing");
+            if (executeBB.getBuildingBlock().getBpmnFlowName().contains("AssignRANNssiBB")) {
+                execution.setVariable("homing", true);
+            } else {
+                execution.setVariable("homing", false);
+            }
+
             ObjectMapper mapper = new ObjectMapper();
             mapper.enable(SerializationFeature.INDENT_OUTPUT);
             logger.debug("GeneralBB: " + mapper.writeValueAsString(outputBB));
@@ -236,6 +248,11 @@ public class BBInputSetup implements JavaDelegate {
             requestDetails = bbInputSetupUtils.getRequestDetails(requestId);
         }
         if (requestDetails.getModelInfo() == null) {
+            if (requestAction.contains("RanSlice")) {
+                logger.debug(">>> RequestAction: {}", executeBB.getRequestAction());
+
+                return this.getGBBRanSlicing(executeBB, requestDetails, lookupKeyMap, requestAction, resourceId);
+            }
             return this.getGBBCM(executeBB, requestDetails, lookupKeyMap, requestAction, resourceId);
         } else {
             ModelType modelType = requestDetails.getModelInfo().getModelType();
@@ -262,6 +279,9 @@ public class BBInputSetup implements JavaDelegate {
         lookupKeyMap.put(ResourceKey.INSTANCE_GROUP_ID, workflowResourceIds.getInstanceGroupId());
         lookupKeyMap.put(ResourceKey.VNF_INSTANCE_NAME, workflowResourceIds.getVnfInstanceName());
         lookupKeyMap.put(ResourceKey.VF_MODULE_INSTANCE_NAME, workflowResourceIds.getVfModuleInstanceName());
+        lookupKeyMap.put(ResourceKey.CHILD_SERVICE_INSTANCE_ID, workflowResourceIds.getChildServiceInstanceId());
+        lookupKeyMap.put(ResourceKey.CHILD_SERVICE_INSTANCE_NAME, workflowResourceIds.getChildServiceInstanceName());
+        lookupKeyMap.put(ResourceKey.PNF_INSTANCE_NAME, workflowResourceIds.getPnfInstanceName());
     }
 
     protected GeneralBuildingBlock getGBBALaCarteNonService(ExecuteBuildingBlock executeBB,
@@ -340,7 +360,7 @@ public class BBInputSetup implements JavaDelegate {
         List<GenericVnf> genericVnfs = serviceInstance.getVnfs();
 
         String vnfId = lookupKeyMap.get(ResourceKey.GENERIC_VNF_ID);
-        if (vnfId != null) {
+        if (vnfId != null && !vnfId.isEmpty()) {
             org.onap.aai.domain.yang.GenericVnf aaiGenericVnf = bbInputSetupUtils.getAAIGenericVnf(vnfId);
             GenericVnf genericVnf = this.mapperLayer.mapAAIGenericVnfIntoGenericVnf(aaiGenericVnf);
             genericVnfs.add(genericVnf);
@@ -387,6 +407,67 @@ public class BBInputSetup implements JavaDelegate {
         return this.populateGBBWithSIAndAdditionalInfo(parameter);
     }
 
+    protected GeneralBuildingBlock getGBBRanSlicing(ExecuteBuildingBlock executeBB, RequestDetails requestDetails,
+            Map<ResourceKey, String> lookupKeyMap, String requestAction, String resourceId) throws Exception {
+        org.onap.aai.domain.yang.ServiceInstance serviceInstanceAAI = null;
+        String serviceInstanceId = lookupKeyMap.get(ResourceKey.SERVICE_INSTANCE_ID);
+
+        executeBB.setHoming(true);
+        Customer customer = new Customer();
+
+        String subscriberId = executeBB.getRequestDetails().getSubscriberInfo().getGlobalSubscriberId();
+        customer.setGlobalCustomerId(subscriberId);
+
+        String subscriberName = executeBB.getRequestDetails().getSubscriberInfo().getSubscriberName();
+        customer.setSubscriberName(subscriberName);
+
+        String subscriptionType = executeBB.getRequestDetails().getRequestParameters().getSubscriptionServiceType();
+
+        ServiceSubscription serviceSubscription = new ServiceSubscription();
+        serviceSubscription.setServiceType(subscriptionType);
+
+        customer.setServiceSubscription(serviceSubscription);
+
+        String bbName = executeBB.getBuildingBlock().getBpmnFlowName();
+
+        serviceInstanceAAI = getServiceInstanceAAI(requestDetails, customer, serviceInstanceId, false, bbName);
+
+        ServiceInstance serviceInstance = new ServiceInstance();
+        serviceInstance.setServiceInstanceId(serviceInstanceId);
+        logger.debug(">>>>> serviceInstanceAAI: {}", serviceInstanceAAI);
+        if (serviceInstanceAAI != null) {
+            String modelVersionId = serviceInstanceAAI.getModelVersionId();
+
+            Service service = bbInputSetupUtils.getCatalogServiceByModelUUID(modelVersionId);
+
+            // Check if there is any existing method for mapping
+            String modelInvariantId = serviceInstanceAAI.getModelInvariantId();
+            String modelVersion = service.getModelVersion();
+            String serviceType = service.getServiceType();
+            String serviceRole = service.getServiceRole();
+            String controllerActor = service.getControllerActor();
+            String blueprintName = service.getBlueprintName();
+            String blueprintVersion = service.getBlueprintVersion();
+
+            ModelInfoServiceInstance modelInfoServiceInstance = new ModelInfoServiceInstance();
+            modelInfoServiceInstance.setServiceType(serviceType);
+            modelInfoServiceInstance.setServiceRole(serviceRole);
+            modelInfoServiceInstance.setControllerActor(controllerActor);
+            modelInfoServiceInstance.setBlueprintName(blueprintName);
+            modelInfoServiceInstance.setBlueprintVersion(blueprintVersion);
+            modelInfoServiceInstance.setModelInvariantUuid(modelInvariantId);
+            modelInfoServiceInstance.setModelUuid(modelVersionId);
+            modelInfoServiceInstance.setModelVersion(modelVersion);
+
+            serviceInstance.setModelInfoServiceInstance(modelInfoServiceInstance);
+        }
+        BBInputSetupParameter parameter = new BBInputSetupParameter.Builder().setRequestDetails(requestDetails)
+                .setServiceInstance(serviceInstance).setExecuteBB(executeBB).setRequestAction(requestAction)
+                .setCustomer(customer).build();
+        return this.populateGBBWithSIAndAdditionalInfo(parameter);
+
+    }
+
     protected void populateObjectsOnAssignAndCreateFlows(BBInputSetupParameter parameter) throws Exception {
         parameter.setModelInfo(parameter.getRequestDetails().getModelInfo());
         parameter.setInstanceName(parameter.getRequestDetails().getRequestInfo().getInstanceName());
@@ -405,7 +486,7 @@ public class BBInputSetup implements JavaDelegate {
         if (modelType.equals(ModelType.network)) {
             parameter.getLookupKeyMap().put(ResourceKey.NETWORK_ID, parameter.getResourceId());
             this.populateL3Network(parameter);
-        } else if (modelType.equals(ModelType.vnf)) {
+        } else if (modelType.equals(ModelType.vnf) || modelType.equals(ModelType.cnf)) {
             parameter.getLookupKeyMap().put(ResourceKey.GENERIC_VNF_ID, parameter.getResourceId());
             this.populateGenericVnf(parameter);
         } else if (modelType.equals(ModelType.volumeGroup) || (modelType.equals(ModelType.vfModule)
@@ -892,7 +973,8 @@ public class BBInputSetup implements JavaDelegate {
                 break;
             }
         }
-        if (vnf == null && parameter.getBbName().equalsIgnoreCase(AssignFlows.VNF.toString())) {
+        if ((vnf == null && parameter.getBbName().equalsIgnoreCase(AssignFlows.VNF.toString()))
+                || (parameter.getRequestDetails() != null && this.isCnf(parameter.getRequestDetails()))) {
             vnf = createGenericVnf(parameter.getLookupKeyMap(), parameter.getInstanceName(), parameter.getPlatform(),
                     parameter.getLineOfBusiness(), parameter.getResourceId(), generatedVnfType,
                     parameter.getInstanceParams(), parameter.getProductFamilyId(), parameter.getApplicationId());
@@ -909,6 +991,15 @@ public class BBInputSetup implements JavaDelegate {
         }
     }
 
+    private boolean isCnf(final RequestDetails requestDetails) {
+        logger.debug("Executing isCNF to check the model type is CNF");
+        if (requestDetails.getModelInfo() != null) {
+            return ModelType.cnf.equals(requestDetails.getModelInfo().getModelType());
+        }
+        logger.debug("Not a CNF model type:{}", requestDetails);
+        return false;
+    }
+
     protected boolean instanceGroupInList(GenericVnf vnf, String instanceGroupId) {
         for (InstanceGroup instanceGroup : vnf.getInstanceGroups()) {
             if (instanceGroup.getId() != null && instanceGroup.getId().equalsIgnoreCase(instanceGroupId)) {
@@ -979,6 +1070,13 @@ public class BBInputSetup implements JavaDelegate {
         }
     }
 
+    protected void mapCatalogPnf(Pnf pnf, ModelInfo modelInfo, Service service) {
+        PnfResourceCustomization pnfResourceCustomization = getPnfResourceCustomizationFromService(modelInfo, service);
+        if (pnfResourceCustomization != null) {
+            pnf.setModelInfoPnf(this.mapperLayer.mapCatalogPnfToPnf(pnfResourceCustomization));
+        }
+    }
+
     protected VnfResourceCustomization getVnfResourceCustomizationFromService(ModelInfo modelInfo, Service service) {
         VnfResourceCustomization vnfResourceCustomization = null;
         for (VnfResourceCustomization resourceCust : service.getVnfCustomizations()) {
@@ -990,6 +1088,17 @@ public class BBInputSetup implements JavaDelegate {
         return vnfResourceCustomization;
     }
 
+    protected PnfResourceCustomization getPnfResourceCustomizationFromService(ModelInfo modelInfo, Service service) {
+        PnfResourceCustomization pnfResourceCustomization = null;
+        for (PnfResourceCustomization resourceCust : service.getPnfCustomizations()) {
+            if (resourceCust.getModelCustomizationUUID().equalsIgnoreCase(modelInfo.getModelCustomizationUuid())) {
+                pnfResourceCustomization = resourceCust;
+                break;
+            }
+        }
+        return pnfResourceCustomization;
+    }
+
     protected void populateL3Network(BBInputSetupParameter parameter) {
         L3Network network = null;
         for (L3Network networkTemp : parameter.getServiceInstance().getNetworks()) {
@@ -1068,6 +1177,14 @@ public class BBInputSetup implements JavaDelegate {
                     }
                 }
             }
+            if (ModelType.pnf == requestDetails.getModelInfo().getModelType()) {
+                for (RelatedInstanceList relatedInstanceList : requestDetails.getRelatedInstanceList()) {
+                    if (ModelType.service == relatedInstanceList.getRelatedInstance().getModelInfo().getModelType()) {
+                        modelVersionId = relatedInstanceList.getRelatedInstance().getModelInfo().getModelVersionId();
+                        break;
+                    }
+                }
+            }
 
             Service service = bbInputSetupUtils.getCatalogServiceByModelUUID(modelVersionId);
             if (service == null) {
@@ -1250,7 +1367,8 @@ public class BBInputSetup implements JavaDelegate {
                 || requestAction.equalsIgnoreCase("activateFabricConfiguration")
                 || requestAction.equalsIgnoreCase("recreateInstance")
                 || requestAction.equalsIgnoreCase("replaceInstance")
-                || requestAction.equalsIgnoreCase("upgradeInstance")) {
+                || requestAction.equalsIgnoreCase("upgradeInstance") || requestAction.equalsIgnoreCase("healthCheck")
+                || requestAction.equalsIgnoreCase("upgradeCnf")) {
             return getGBBMacroExistingService(executeBB, lookupKeyMap, bbName, requestAction,
                     requestDetails.getCloudConfiguration());
         }
@@ -1467,6 +1585,38 @@ public class BBInputSetup implements JavaDelegate {
             cloudRegion = mapperLayer.mapCloudRegion(cloudConfiguration, aaiCloudRegion);
         }
         gBB.setCloudRegion(cloudRegion);
+
+        /*
+         * Below check is for CNF-Upgrade only. Reads new version VNF/VF-Module details from UserParams and delegates to
+         * BBs. Reads data from RequestDetails.
+         */
+        String upgradeCnfModelCustomizationUUID = "";
+        String upgradeCnfVfModuleModelCustomizationUUID = "";
+        String upgradeCnfModelVersionId = "";
+        String upgradeCnfVfModuleModelVersionId = "";
+        if (requestDetails.getRelatedInstanceList() != null && requestAction.equalsIgnoreCase("upgradeCnf")) {
+            if (requestDetails.getRequestParameters().getUserParams() != null) {
+                List<RequestParameters> requestParams = new ArrayList<>();
+                requestParams.add(requestDetails.getRequestParameters());
+                for (RequestParameters reqParam : requestParams) {
+                    for (Map<String, Object> params : reqParam.getUserParams()) {
+                        if (params.containsKey("service")) {
+                            org.onap.so.serviceinstancebeans.Service services = serviceMapper(params);
+                            List<Vnfs> vnfs = services.getResources().getVnfs();
+                            for (Vnfs vnfobj : vnfs) {
+                                for (VfModules vfMod : vnfobj.getVfModules()) {
+                                    upgradeCnfModelCustomizationUUID = vnfobj.getModelInfo().getModelCustomizationId();
+                                    upgradeCnfModelVersionId = vnfobj.getModelInfo().getModelVersionId();
+                                    upgradeCnfVfModuleModelCustomizationUUID =
+                                            vfMod.getModelInfo().getModelCustomizationId();
+                                    upgradeCnfVfModuleModelVersionId = vfMod.getModelInfo().getModelVersionId();
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
         if (bbName.contains(VNF) || (bbName.contains(CONTROLLER)
                 && (VNF).equalsIgnoreCase(executeBB.getBuildingBlock().getBpmnScope()))) {
             for (GenericVnf genericVnf : serviceInstance.getVnfs()) {
@@ -1474,12 +1624,19 @@ public class BBInputSetup implements JavaDelegate {
                         && genericVnf.getVnfId().equalsIgnoreCase(lookupKeyMap.get(ResourceKey.GENERIC_VNF_ID))) {
                     org.onap.aai.domain.yang.GenericVnf vnf = bbInputSetupUtils.getAAIGenericVnf(genericVnf.getVnfId());
                     ModelInfo modelInfo = new ModelInfo();
-                    if (vnf != null) {
+                    if ("upgradeCnf".equalsIgnoreCase(requestAction) && upgradeCnfModelCustomizationUUID != null
+                            && !(bbName.contains("Deactivate"))) {
+                        modelInfo.setModelCustomizationUuid(upgradeCnfModelCustomizationUUID);
+                        modelInfo.setModelVersionId(upgradeCnfModelVersionId);
+                        this.mapCatalogVnf(genericVnf, modelInfo, service);
+                    } else if (vnf != null) {
                         modelInfo.setModelCustomizationUuid(vnf.getModelCustomizationId());
+                        this.mapCatalogVnf(genericVnf, modelInfo, service);
                     }
-                    this.mapCatalogVnf(genericVnf, modelInfo, service);
+
                 }
             }
+
         } else if (bbName.contains(VF_MODULE) || (bbName.contains(CONTROLLER)
                 && (VF_MODULE).equalsIgnoreCase(executeBB.getBuildingBlock().getBpmnScope()))) {
             for (GenericVnf vnf : serviceInstance.getVnfs()) {
@@ -1489,14 +1646,29 @@ public class BBInputSetup implements JavaDelegate {
                         String vnfModelCustomizationUUID =
                                 this.bbInputSetupUtils.getAAIGenericVnf(vnf.getVnfId()).getModelCustomizationId();
                         ModelInfo vnfModelInfo = new ModelInfo();
-                        vnfModelInfo.setModelCustomizationUuid(vnfModelCustomizationUUID);
-                        this.mapCatalogVnf(vnf, vnfModelInfo, service);
+                        if ("upgradeCnf".equalsIgnoreCase(requestAction) && upgradeCnfModelCustomizationUUID != null
+                                && !(bbName.contains("Deactivate"))) {
+                            vnfModelInfo.setModelCustomizationUuid(upgradeCnfModelCustomizationUUID);
+                            vnfModelInfo.setModelVersionId(upgradeCnfModelVersionId);
+                            this.mapCatalogVnf(vnf, vnfModelInfo, service);
+                        } else {
+                            vnfModelInfo.setModelCustomizationUuid(vnfModelCustomizationUUID);
+                            this.mapCatalogVnf(vnf, vnfModelInfo, service);
+                        }
                         lookupKeyMap.put(ResourceKey.GENERIC_VNF_ID, vnf.getVnfId());
                         String vfModuleCustomizationUUID = this.bbInputSetupUtils
                                 .getAAIVfModule(vnf.getVnfId(), vfModule.getVfModuleId()).getModelCustomizationId();
                         ModelInfo vfModuleModelInfo = new ModelInfo();
-                        vfModuleModelInfo.setModelCustomizationId(vfModuleCustomizationUUID);
-                        this.mapCatalogVfModule(vfModule, vfModuleModelInfo, service, vnfModelCustomizationUUID);
+                        if ("upgradeCnf".equalsIgnoreCase(requestAction) && upgradeCnfModelCustomizationUUID != null
+                                && !(bbName.contains("Deactivate"))) {
+                            vfModuleModelInfo.setModelCustomizationUuid(upgradeCnfVfModuleModelCustomizationUUID);
+                            vfModuleModelInfo.setModelVersionId(upgradeCnfVfModuleModelVersionId);
+                            this.mapCatalogVfModule(vfModule, vfModuleModelInfo, service,
+                                    upgradeCnfModelCustomizationUUID);
+                        } else {
+                            vfModuleModelInfo.setModelCustomizationId(vfModuleCustomizationUUID);
+                            this.mapCatalogVfModule(vfModule, vfModuleModelInfo, service, vnfModelCustomizationUUID);
+                        }
                         if (cloudRegion != null) {
                             Optional<String> volumeGroupIdOp = getVolumeGroupIdRelatedToVfModule(vnf, vfModuleModelInfo,
                                     cloudRegion.getCloudOwner(), cloudRegion.getLcpCloudRegionId(), lookupKeyMap);
@@ -1564,6 +1736,9 @@ public class BBInputSetup implements JavaDelegate {
                     break;
                 }
             }
+        } else if (bbName.equals("HealthCheckBB")
+                && (VNF).equalsIgnoreCase(executeBB.getBuildingBlock().getBpmnScope())) {
+            this.setisHelmforHealthCheckBB(service, serviceInstance, gBB);
         }
         if (executeBB.getWorkflowResourceIds() != null) {
             parameter.setResourceId(executeBB.getWorkflowResourceIds().getNetworkCollectionId());
@@ -1584,9 +1759,10 @@ public class BBInputSetup implements JavaDelegate {
         Vnfs vnfs = null;
         VfModules vfModules = null;
         Networks networks = null;
+
         CloudConfiguration cloudConfiguration = requestDetails.getCloudConfiguration();
-        CloudRegion cloudRegion = getCloudRegionFromMacroRequest(cloudConfiguration, resources);
-        gBB.setCloudRegion(cloudRegion);
+        CloudRegion cloudRegion = setCloudConfiguration(gBB, cloudConfiguration);
+
         BBInputSetupParameter parameter =
                 new BBInputSetupParameter.Builder().setRequestId(executeBB.getRequestId()).setService(service)
                         .setBbName(bbName).setServiceInstance(serviceInstance).setLookupKeyMap(lookupKeyMap).build();
@@ -1599,6 +1775,11 @@ public class BBInputSetup implements JavaDelegate {
                 vnfs = findVnfsByKey(key, resources);
             }
 
+            // Vnf level cloud configuration takes precedence over service level cloud configuration.
+            if (vnfs.getCloudConfiguration() != null) {
+                setCloudConfiguration(gBB, vnfs.getCloudConfiguration());
+            }
+
             String vnfId = lookupKeyMap.get(ResourceKey.GENERIC_VNF_ID);
             // This stores the vnf id in request db to be retrieved later when
             // working on a vf module or volume group
@@ -1623,9 +1804,25 @@ public class BBInputSetup implements JavaDelegate {
         } else if (bbName.contains(PNF) || (bbName.contains(CONTROLLER)
                 && (PNF).equalsIgnoreCase(executeBB.getBuildingBlock().getBpmnScope()))) {
             String pnfId = lookupKeyMap.get(ResourceKey.PNF);
-            resources.getPnfs().stream()
-                    .filter(pnfs -> Objects.equals(key, pnfs.getModelInfo().getModelCustomizationId())).findFirst()
-                    .ifPresent(pnfs -> BBInputSetupPnf.populatePnfToServiceInstance(pnfs, pnfId, serviceInstance));
+            String pnfInstanceName = lookupKeyMap.get(ResourceKey.PNF_INSTANCE_NAME);
+            if (StringUtils.isNotBlank(pnfInstanceName)) {
+                resources.getPnfs().stream().filter(pnfs -> Objects.equals(pnfInstanceName, pnfs.getInstanceName()))
+                        .findFirst()
+                        .ifPresent(pnfs -> BBInputSetupPnf.populatePnfToServiceInstance(pnfs, pnfId, serviceInstance));
+            } else {
+                resources.getPnfs().stream()
+                        .filter(pnfs -> Objects.equals(key, pnfs.getModelInfo().getModelCustomizationId())).findFirst()
+                        .ifPresent(pnfs -> BBInputSetupPnf.populatePnfToServiceInstance(pnfs, pnfId, serviceInstance));
+            }
+
+            serviceInstance.getPnfs().stream().filter(pnf -> pnfInstanceName.equalsIgnoreCase(pnf.getPnfName()))
+                    .findFirst().ifPresent(pnf -> {
+                        ModelInfo pnfModelInfo = new ModelInfo();
+                        pnfModelInfo.setModelCustomizationUuid(pnf.getModelInfoPnf().getModelCustomizationUuid());
+                        pnfModelInfo.setModelCustomizationId(pnf.getModelInfoPnf().getModelCustomizationUuid());
+                        mapCatalogPnf(pnf, pnfModelInfo, service);
+                    });
+
         } else if (bbName.contains(VF_MODULE) || bbName.contains(VOLUME_GROUP) || (bbName.contains(CONTROLLER)
                 && (VF_MODULE).equalsIgnoreCase(executeBB.getBuildingBlock().getBpmnScope()))) {
             String vfModuleInstanceName = lookupKeyMap.get(ResourceKey.VF_MODULE_INSTANCE_NAME);
@@ -1635,6 +1832,21 @@ public class BBInputSetup implements JavaDelegate {
                 vfModules = getVfModulesByKey(key, resources);
             }
 
+            String vfModulesName = vfModules.getInstanceName();
+            String vfModulesModelCustId = vfModules.getModelInfo().getModelCustomizationId();
+            // Get the Vnf associated with vfModule
+            Optional<org.onap.so.serviceinstancebeans.Vnfs> parentVnf = resources.getVnfs().stream()
+                    .filter(aVnf -> aVnf.getCloudConfiguration() != null)
+                    .filter(aVnf -> aVnf.getVfModules().stream()
+                            .anyMatch(aVfModules -> aVfModules.getInstanceName().equals(vfModulesName) && aVfModules
+                                    .getModelInfo().getModelCustomizationId().equals(vfModulesModelCustId)))
+                    .findAny();
+
+            // Get the cloud configuration from this Vnf
+            if (parentVnf.isPresent()) {
+                cloudRegion = setCloudConfiguration(gBB, parentVnf.get().getCloudConfiguration());
+            }
+
             lookupKeyMap.put(ResourceKey.GENERIC_VNF_ID, getVnfId(executeBB, lookupKeyMap));
 
             parameter.setModelInfo(vfModules.getModelInfo());
@@ -1665,6 +1877,16 @@ public class BBInputSetup implements JavaDelegate {
             networks = findNetworksByKey(key, resources);
             String networkId = lookupKeyMap.get(ResourceKey.NETWORK_ID);
             if (networks != null) {
+                // If service level cloud configuration is not provided then get it from networks.
+                if (cloudConfiguration == null) {
+                    Optional<org.onap.so.serviceinstancebeans.Networks> netWithCloudConfig = resources.getNetworks()
+                            .stream().filter(aNetwork -> aNetwork.getCloudConfiguration() != null).findAny();
+                    if (netWithCloudConfig.isPresent()) {
+                        setCloudConfiguration(gBB, netWithCloudConfig.get().getCloudConfiguration());
+                    } else {
+                        logger.debug("Could not find any cloud configuration for this request.");
+                    }
+                }
                 parameter.setInstanceName(networks.getInstanceName());
                 parameter.setModelInfo(networks.getModelInfo());
                 parameter.setInstanceParams(networks.getInstanceParams());
@@ -1690,6 +1912,24 @@ public class BBInputSetup implements JavaDelegate {
         return gBB;
     }
 
+    /**
+     * setCloudConfiguration - set cloud info on a building block.
+     *
+     * @param gBB
+     * @param cloudConfiguration
+     * @return CloudRegion
+     * @throws Exception
+     */
+    private CloudRegion setCloudConfiguration(GeneralBuildingBlock gBB, CloudConfiguration cloudConfiguration)
+            throws Exception {
+        org.onap.aai.domain.yang.CloudRegion aaiCloudRegion = bbInputSetupUtils.getCloudRegion(cloudConfiguration);
+        Tenant tenant = getTenant(cloudConfiguration, aaiCloudRegion);
+        gBB.setTenant(tenant);
+        CloudRegion cloudRegion = mapperLayer.mapCloudRegion(cloudConfiguration, aaiCloudRegion);
+        gBB.setCloudRegion(cloudRegion);
+        return cloudRegion;
+    }
+
     protected Networks findNetworksByKey(String key, Resources resources) {
         for (Networks networks : resources.getNetworks()) {
             if (networks.getModelInfo().getModelCustomizationId().equalsIgnoreCase(key)) {
@@ -1740,39 +1980,6 @@ public class BBInputSetup implements JavaDelegate {
         throw new ResourceNotFoundException("Could not find vnf with key: " + key + " in userparams");
     }
 
-    protected CloudRegion getCloudRegionFromMacroRequest(CloudConfiguration cloudConfiguration, Resources resources) {
-        if (cloudConfiguration == null) {
-            for (Vnfs vnfs : resources.getVnfs()) {
-                if (cloudConfiguration == null) {
-                    cloudConfiguration = vnfs.getCloudConfiguration();
-                } else {
-                    break;
-                }
-                for (VfModules vfModules : vnfs.getVfModules()) {
-                    if (cloudConfiguration == null) {
-                        cloudConfiguration = vfModules.getCloudConfiguration();
-                    } else {
-                        break;
-                    }
-                }
-            }
-            for (Networks networks : resources.getNetworks()) {
-                if (cloudConfiguration == null) {
-                    cloudConfiguration = networks.getCloudConfiguration();
-                } else {
-                    break;
-                }
-            }
-        }
-        if (cloudConfiguration != null) {
-            org.onap.aai.domain.yang.CloudRegion aaiCloudRegion = bbInputSetupUtils.getCloudRegion(cloudConfiguration);
-            return mapperLayer.mapCloudRegion(cloudConfiguration, aaiCloudRegion);
-        } else {
-            logger.debug("Could not find any cloud configuration for this request.");
-            return null;
-        }
-    }
-
     protected String getVnfId(ExecuteBuildingBlock executeBB, Map<ResourceKey, String> lookupKeyMap) {
         String vnfId = lookupKeyMap.get(ResourceKey.GENERIC_VNF_ID);
         if (vnfId == null) {
@@ -2112,6 +2319,34 @@ public class BBInputSetup implements JavaDelegate {
         return collection;
     }
 
+    private org.onap.so.serviceinstancebeans.Service serviceMapper(Map<String, Object> params) throws IOException {
+        ObjectMapper obj = new ObjectMapper();
+        String input = obj.writeValueAsString(params.get("service"));
+        return obj.readValue(input, org.onap.so.serviceinstancebeans.Service.class);
+    }
+
+    private void setisHelmforHealthCheckBB(Service service, ServiceInstance serviceInstance, GeneralBuildingBlock gBB) {
+        for (GenericVnf vnf : serviceInstance.getVnfs()) {
+            for (VfModule vfModule : vnf.getVfModules()) {
+                String vnfModelCustomizationUUID =
+                        this.bbInputSetupUtils.getAAIGenericVnf(vnf.getVnfId()).getModelCustomizationId();
+                ModelInfo vnfModelInfo = new ModelInfo();
+                vnfModelInfo.setModelCustomizationUuid(vnfModelCustomizationUUID);
+                this.mapCatalogVnf(vnf, vnfModelInfo, service);
+                String vfModuleCustomizationUUID = this.bbInputSetupUtils
+                        .getAAIVfModule(vnf.getVnfId(), vfModule.getVfModuleId()).getModelCustomizationId();
+                ModelInfo vfModuleModelInfo = new ModelInfo();
+                vfModuleModelInfo.setModelCustomizationId(vfModuleCustomizationUUID);
+                this.mapCatalogVfModule(vfModule, vfModuleModelInfo, service, vnfModelCustomizationUUID);
+                if (vfModule.getModelInfoVfModule() != null && vfModule.getModelInfoVfModule().getModelName() != null
+                        && vfModule.getModelInfoVfModule().getModelName().contains("helm")) {
+                    gBB.getRequestContext().setIsHelm(true);
+                    break;
+                }
+            }
+        }
+    }
+
     protected void mapL3Networks(List<AAIResourceUri> list, List<L3Network> l3Networks) {
         for (AAIResourceUri aaiResourceUri : list) {
             l3Networks.add(this.mapL3Network(aaiResourceUri));