Merge "Use cloud configuration from Vnf"
authorSeshu Kumar M <seshu.kumar.m@huawei.com>
Wed, 9 Mar 2022 05:11:50 +0000 (05:11 +0000)
committerGerrit Code Review <gerrit@onap.org>
Wed, 9 Mar 2022 05:11:50 +0000 (05:11 +0000)
1  2 
bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetup.java

@@@ -1250,7 -1250,7 +1250,7 @@@ public class BBInputSetup implements Ja
                  || requestAction.equalsIgnoreCase("activateFabricConfiguration")
                  || requestAction.equalsIgnoreCase("recreateInstance")
                  || requestAction.equalsIgnoreCase("replaceInstance")
 -                || requestAction.equalsIgnoreCase("upgradeInstance")) {
 +                || requestAction.equalsIgnoreCase("upgradeInstance") || requestAction.equalsIgnoreCase("healthCheck")) {
              return getGBBMacroExistingService(executeBB, lookupKeyMap, bbName, requestAction,
                      requestDetails.getCloudConfiguration());
          }
                      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());
          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();
                  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
                  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());
              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());
          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)) {
          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) {
          return collection;
      }
  
 +    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));