diff options
Diffstat (limited to 'bpmn/MSOCommonBPMN/src/main/java')
15 files changed, 312 insertions, 52 deletions
diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/listener/flowmanipulator/FlowManipulatorListenerRunner.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/listener/flowmanipulator/FlowManipulatorListenerRunner.java index 054cc378ef..c6d92cc9ab 100644 --- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/listener/flowmanipulator/FlowManipulatorListenerRunner.java +++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/listener/flowmanipulator/FlowManipulatorListenerRunner.java @@ -60,6 +60,9 @@ public class FlowManipulatorListenerRunner extends ListenerRunner { int sequenceBeforeFlowManipulator; do { sequenceBeforeFlowManipulator = execution.getVariable(BBConstants.G_CURRENT_SEQUENCE); + if (sequenceBeforeFlowManipulator >= flowsToExecute.size()) { + break; + } ExecuteBuildingBlock currentBB = flowsToExecute.get(execution.getCurrentSequence()); List<PreFlowManipulator> filtered = filterListeners(flowManipulators, (item -> item.shouldRunFor(currentBB.getBuildingBlock().getBpmnFlowName(), diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/entities/ResourceKey.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/entities/ResourceKey.java index 30a6e1fe35..641cd35027 100644 --- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/entities/ResourceKey.java +++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/entities/ResourceKey.java @@ -34,5 +34,7 @@ public enum ResourceKey { VPN_ID, VPN_BONDING_LINK_ID, INSTANCE_GROUP_ID, - PNF + PNF, + VNF_INSTANCE_NAME, + VF_MODULE_INSTANCE_NAME } diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/entities/WorkflowResourceIds.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/entities/WorkflowResourceIds.java index 508709e12c..5df7c60f74 100644 --- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/entities/WorkflowResourceIds.java +++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/entities/WorkflowResourceIds.java @@ -40,6 +40,8 @@ public class WorkflowResourceIds implements Serializable { private String networkCollectionId; private String configurationId; private String instanceGroupId; + private String vnfInstanceName; + private String vfModuleInstanceName; public WorkflowResourceIds() { @@ -139,4 +141,20 @@ public class WorkflowResourceIds implements Serializable { public void setInstanceGroupId(String instanceGroupId) { this.instanceGroupId = instanceGroupId; } + + public String getVnfInstanceName() { + return vnfInstanceName; + } + + public void setVnfInstanceName(String vnfInstanceName) { + this.vnfInstanceName = vnfInstanceName; + } + + public String getVfModuleInstanceName() { + return vfModuleInstanceName; + } + + public void setVfModuleInstanceName(String vfModuleInstanceName) { + this.vfModuleInstanceName = vfModuleInstanceName; + } } diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/modelinfo/ModelInfoServiceInstance.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/modelinfo/ModelInfoServiceInstance.java index b554d7a9ba..4ad7fbdbd3 100644 --- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/modelinfo/ModelInfoServiceInstance.java +++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/modelinfo/ModelInfoServiceInstance.java @@ -45,6 +45,14 @@ public class ModelInfoServiceInstance extends ModelInfoMetadata implements Seria private String namingPolicy; @JsonProperty("onap-generated-naming") private Boolean onapGeneratedNaming; + @JsonProperty("cds-blueprint-name") + private String blueprintName; + @JsonProperty("cds-blueprint-version") + private String blueprintVersion; + @JsonProperty("controller-actor") + private String controllerActor; + @JsonProperty("skip-post-instantiation-configuration") + private Boolean skipPostInstConf = Boolean.TRUE; public String getDescription() { @@ -119,4 +127,36 @@ public class ModelInfoServiceInstance extends ModelInfoMetadata implements Seria public void setOnapGeneratedNaming(Boolean onapGeneratedNaming) { this.onapGeneratedNaming = onapGeneratedNaming; } + + public String getBlueprintName() { + return blueprintName; + } + + public void setBlueprintName(String blueprintName) { + this.blueprintName = blueprintName; + } + + public String getBlueprintVersion() { + return blueprintVersion; + } + + public void setBlueprintVersion(String blueprintVersion) { + this.blueprintVersion = blueprintVersion; + } + + public String getControllerActor() { + return controllerActor; + } + + public void setControllerActor(String controllerActor) { + this.controllerActor = controllerActor; + } + + public Boolean getSkipPostInstConf() { + return skipPostInstConf; + } + + public void setSkipPostInstConf(Boolean skipPostInstConf) { + this.skipPostInstConf = skipPostInstConf; + } } diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetup.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetup.java index 83d1f5249f..d39da5ee37 100644 --- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetup.java +++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetup.java @@ -31,6 +31,7 @@ import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.UUID; +import org.apache.commons.lang3.StringUtils; import org.camunda.bpm.engine.delegate.DelegateExecution; import org.camunda.bpm.engine.delegate.JavaDelegate; import org.javatuples.Pair; @@ -74,6 +75,7 @@ import org.onap.so.bpmn.servicedecomposition.entities.WorkflowResourceIds; 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; +import org.onap.so.bpmn.servicedecomposition.tasks.exceptions.ResourceNotFoundException; import org.onap.so.bpmn.servicedecomposition.tasks.exceptions.ServiceModelNotFoundException; import org.onap.so.client.exception.ExceptionBuilder; import org.onap.so.db.catalog.beans.CollectionNetworkResourceCustomization; @@ -258,6 +260,8 @@ public class BBInputSetup implements JavaDelegate { lookupKeyMap.put(ResourceKey.VOLUME_GROUP_ID, workflowResourceIds.getVolumeGroupId()); lookupKeyMap.put(ResourceKey.CONFIGURATION_ID, workflowResourceIds.getConfigurationId()); 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()); } protected GeneralBuildingBlock getGBBALaCarteNonService(ExecuteBuildingBlock executeBB, @@ -1245,7 +1249,8 @@ public class BBInputSetup implements JavaDelegate { || requestAction.equalsIgnoreCase("activateInstance") || requestAction.equalsIgnoreCase("activateFabricConfiguration") || requestAction.equalsIgnoreCase("recreateInstance") - || requestAction.equalsIgnoreCase("replaceInstance")) { + || requestAction.equalsIgnoreCase("replaceInstance") + || requestAction.equalsIgnoreCase("upgradeInstance")) { return getGBBMacroExistingService(executeBB, lookupKeyMap, bbName, requestAction, requestDetails.getCloudConfiguration()); } @@ -1425,7 +1430,13 @@ public class BBInputSetup implements JavaDelegate { if (serviceInstanceId != null) { aaiServiceInstance = bbInputSetupUtils.getAAIServiceInstanceById(serviceInstanceId); if (aaiServiceInstance != null) { - service = bbInputSetupUtils.getCatalogServiceByModelUUID(aaiServiceInstance.getModelVersionId()); + String modelVersionId = aaiServiceInstance.getModelVersionId(); + if ("upgradeInstance".equalsIgnoreCase(requestAction)) { + modelVersionId = requestDetails.getModelInfo().getModelVersionId(); + } + + service = bbInputSetupUtils.getCatalogServiceByModelUUID(modelVersionId); + if (service == null) { String message = String.format( "Related service instance model not found in MSO CatalogDB: model-version-id=%s", @@ -1581,7 +1592,13 @@ public class BBInputSetup implements JavaDelegate { .setBbName(bbName).setServiceInstance(serviceInstance).setLookupKeyMap(lookupKeyMap).build(); if (bbName.contains(VNF) || (bbName.contains(CONTROLLER) && (VNF).equalsIgnoreCase(executeBB.getBuildingBlock().getBpmnScope()))) { - vnfs = findVnfsByKey(key, resources, vnfs); + String vnfInstanceName = lookupKeyMap.get(ResourceKey.VNF_INSTANCE_NAME); + if (StringUtils.isNotBlank(vnfInstanceName)) { + vnfs = findVnfsByInstanceName(vnfInstanceName, resources); + } else { + vnfs = findVnfsByKey(key, resources); + } + 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 @@ -1611,15 +1628,15 @@ public class BBInputSetup implements JavaDelegate { .ifPresent(pnfs -> BBInputSetupPnf.populatePnfToServiceInstance(pnfs, pnfId, serviceInstance)); } else if (bbName.contains(VF_MODULE) || bbName.contains(VOLUME_GROUP) || (bbName.contains(CONTROLLER) && (VF_MODULE).equalsIgnoreCase(executeBB.getBuildingBlock().getBpmnScope()))) { - Pair<Vnfs, VfModules> vnfsAndVfModules = getVfModulesAndItsVnfsByKey(key, resources); - if (vnfsAndVfModules != null) { - vfModules = vnfsAndVfModules.getValue1(); - vnfs = vnfsAndVfModules.getValue0(); + String vfModuleInstanceName = lookupKeyMap.get(ResourceKey.VF_MODULE_INSTANCE_NAME); + if (StringUtils.isNotBlank(vfModuleInstanceName)) { + vfModules = getVfModulesByInstanceName(vfModuleInstanceName, resources); + } else { + vfModules = getVfModulesByKey(key, resources); } + lookupKeyMap.put(ResourceKey.GENERIC_VNF_ID, getVnfId(executeBB, lookupKeyMap)); - if (vnfs == null) { - throw new Exception("Could not find Vnf to orchestrate VfModule"); - } + parameter.setModelInfo(vfModules.getModelInfo()); if (bbName.contains(VOLUME_GROUP)) { parameter.setResourceId(lookupKeyMap.get(ResourceKey.VOLUME_GROUP_ID)); @@ -1682,25 +1699,45 @@ public class BBInputSetup implements JavaDelegate { return null; } - protected Pair<Vnfs, VfModules> getVfModulesAndItsVnfsByKey(String key, Resources resources) { + protected VfModules getVfModulesByInstanceName(String vfModuleInstanceName, Resources resources) { + for (Vnfs vnfs : resources.getVnfs()) { + for (VfModules vfModules : vnfs.getVfModules()) { + if (vfModules.getInstanceName().equals(vfModuleInstanceName)) { + return vfModules; + } + } + } + throw new ResourceNotFoundException( + "Could not find vf-module with instanceName: " + vfModuleInstanceName + " in userparams"); + } + + protected VfModules getVfModulesByKey(String key, Resources resources) { for (Vnfs vnfs : resources.getVnfs()) { for (VfModules vfModules : vnfs.getVfModules()) { if (vfModules.getModelInfo().getModelCustomizationId().equalsIgnoreCase(key)) { - return new Pair<Vnfs, VfModules>(vnfs, vfModules); + return vfModules; } } } - return null; + throw new ResourceNotFoundException("Could not find vf-module with key: " + key + " in userparams"); } - protected Vnfs findVnfsByKey(String key, Resources resources, Vnfs vnfs) { + protected Vnfs findVnfsByInstanceName(String instanceName, Resources resources) { + for (Vnfs tempVnfs : resources.getVnfs()) { + if (tempVnfs.getInstanceName().equals(instanceName)) { + return tempVnfs; + } + } + throw new ResourceNotFoundException("Could not find vnf with instanceName: " + instanceName + " in userparams"); + } + + protected Vnfs findVnfsByKey(String key, Resources resources) { for (Vnfs tempVnfs : resources.getVnfs()) { if (tempVnfs.getModelInfo().getModelCustomizationId().equalsIgnoreCase(key)) { - vnfs = tempVnfs; - break; + return tempVnfs; } } - return vnfs; + throw new ResourceNotFoundException("Could not find vnf with key: " + key + " in userparams"); } protected CloudRegion getCloudRegionFromMacroRequest(CloudConfiguration cloudConfiguration, Resources resources) { diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/exceptions/ResourceNotFoundException.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/exceptions/ResourceNotFoundException.java new file mode 100644 index 0000000000..d8eed9610a --- /dev/null +++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/exceptions/ResourceNotFoundException.java @@ -0,0 +1,14 @@ +package org.onap.so.bpmn.servicedecomposition.tasks.exceptions; + +public class ResourceNotFoundException extends RuntimeException { + + static final long serialVersionUID = -2741357347054072719L; + + public ResourceNotFoundException() { + super(); + } + + public ResourceNotFoundException(String message) { + super(message); + } +} diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ConfigureInstanceParamsForPnf.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ConfigureInstanceParamsForPnf.java index 0d79dbb375..f393d2a49d 100644 --- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ConfigureInstanceParamsForPnf.java +++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ConfigureInstanceParamsForPnf.java @@ -20,6 +20,7 @@ package org.onap.so.client.cds; +import static org.onap.so.client.cds.ConfigureInstanceParamsUtil.applyParamsToObject; import com.google.gson.JsonObject; import org.onap.so.client.exception.PayloadGenerationException; import org.onap.so.serviceinstancebeans.Service; @@ -51,13 +52,17 @@ public class ConfigureInstanceParamsForPnf { public void populateInstanceParams(JsonObject jsonObject, List<Map<String, Object>> userParamsFromRequest, String modelCustomizationUuid) throws PayloadGenerationException { try { - Service service = extractServiceFromUserParameters.getServiceFromRequestUserParams(userParamsFromRequest); - List<Map<String, String>> instanceParamsList = getInstanceParamForPnf(service, modelCustomizationUuid); + Optional<Service> service = + extractServiceFromUserParameters.getServiceFromRequestUserParams(userParamsFromRequest); - instanceParamsList.stream().flatMap(instanceParamsMap -> instanceParamsMap.entrySet().stream()) - .forEachOrdered(entry -> jsonObject.addProperty(entry.getKey(), entry.getValue())); + if (service.isPresent()) { + List<Map<String, String>> instanceParamsList = + getInstanceParamForPnf(service.get(), modelCustomizationUuid); + + applyParamsToObject(instanceParamsList, jsonObject); + } } catch (Exception exception) { - throw new PayloadGenerationException("Couldn't able to resolve instance parameters", exception); + throw new PayloadGenerationException("Failed to resolve instance parameters", exception); } } diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ConfigureInstanceParamsForService.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ConfigureInstanceParamsForService.java new file mode 100644 index 0000000000..e8c88e00d7 --- /dev/null +++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ConfigureInstanceParamsForService.java @@ -0,0 +1,57 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2021 Bell Canada + * ================================================================================ + * 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.client.cds; + +import static org.onap.so.client.cds.ConfigureInstanceParamsUtil.applyParamsToObject; +import com.google.gson.JsonObject; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import org.onap.so.client.exception.PayloadGenerationException; +import org.onap.so.serviceinstancebeans.Service; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class ConfigureInstanceParamsForService { + + @Autowired + private ExtractServiceFromUserParameters extractServiceFromUserParameters; + + /** + * Read instance parameters for Service and put into JsonObject. + * + * @param jsonObject - JsonObject which will hold the payload to send to CDS. + * @param userParamsFromRequest - User parameters. + * @throws PayloadGenerationException if it doesn't able to populate instance parameters from SO payload. + */ + public void populateInstanceParams(JsonObject jsonObject, List<Map<String, Object>> userParamsFromRequest) + throws PayloadGenerationException { + try { + Optional<Service> service = + extractServiceFromUserParameters.getServiceFromRequestUserParams(userParamsFromRequest); + + service.map(Service::getInstanceParams).ifPresent(p -> applyParamsToObject(p, jsonObject)); + } catch (Exception e) { + throw new PayloadGenerationException("Failed to resolve instance parameters", e); + } + } +} diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ConfigureInstanceParamsForVfModule.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ConfigureInstanceParamsForVfModule.java index 6f850fa898..b1e632a701 100644 --- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ConfigureInstanceParamsForVfModule.java +++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ConfigureInstanceParamsForVfModule.java @@ -20,8 +20,10 @@ package org.onap.so.client.cds; +import static org.onap.so.client.cds.ConfigureInstanceParamsUtil.applyParamsToObject; import com.google.gson.JsonObject; -import org.onap.so.client.cds.ExtractServiceFromUserParameters; +import java.util.Optional; +import org.apache.commons.lang3.StringUtils; import org.onap.so.client.exception.PayloadGenerationException; import org.onap.so.serviceinstancebeans.Service; import org.onap.so.serviceinstancebeans.VfModules; @@ -47,20 +49,36 @@ public class ConfigureInstanceParamsForVfModule { * @throws PayloadGenerationException- If it doesn't able to populate instance parameters from SO payload. */ public void populateInstanceParams(JsonObject jsonObject, List<Map<String, Object>> userParamsFromRequest, - String vnfCustomizationUuid, String vfModuleCustomizationUuid) throws PayloadGenerationException { + String vnfCustomizationUuid, String vfModuleCustomizationUuid, String vfModuleInstanceName) + throws PayloadGenerationException { try { - Service service = extractServiceFromUserParameters.getServiceFromRequestUserParams(userParamsFromRequest); + Optional<Service> service = + extractServiceFromUserParameters.getServiceFromRequestUserParams(userParamsFromRequest); - List<Map<String, String>> instanceParamsList = - getInstanceParams(service, vnfCustomizationUuid, vfModuleCustomizationUuid); + if (service.isPresent()) { + List<Map<String, String>> instanceParamsList; + if (StringUtils.isNotBlank(vfModuleInstanceName)) { + instanceParamsList = getInstanceParamsByInstanceNames(service.get(), vfModuleInstanceName); + } else { + instanceParamsList = + getInstanceParams(service.get(), vnfCustomizationUuid, vfModuleCustomizationUuid); + } - instanceParamsList.stream().flatMap(instanceParamsMap -> instanceParamsMap.entrySet().stream()) - .forEachOrdered(entry -> jsonObject.addProperty(entry.getKey(), entry.getValue())); + applyParamsToObject(instanceParamsList, jsonObject); + } } catch (Exception e) { - throw new PayloadGenerationException("Couldn't able to resolve instance parameters", e); + throw new PayloadGenerationException("Failed to resolve instance parameters", e); } } + private List<Map<String, String>> getInstanceParamsByInstanceNames(Service service, String vfModuleInstanceName) + throws PayloadGenerationException { + return service.getResources().getVnfs().stream().map(Vnfs::getVfModules).flatMap(List::stream) + .filter(vfm -> vfModuleInstanceName.equals(vfm.getInstanceName())).findFirst() + .map(VfModules::getInstanceParams).orElseThrow(() -> new PayloadGenerationException( + "Could not find vfModule with instanceName: " + vfModuleInstanceName)); + } + private List<Map<String, String>> getInstanceParams(Service service, String vnfCustomizationUuid, String vfModuleCustomizationUuid) throws PayloadGenerationException { diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ConfigureInstanceParamsForVnf.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ConfigureInstanceParamsForVnf.java index 22c9a7bee4..5d8388b6e0 100644 --- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ConfigureInstanceParamsForVnf.java +++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ConfigureInstanceParamsForVnf.java @@ -20,6 +20,8 @@ package org.onap.so.client.cds; +import static org.onap.so.client.cds.ConfigureInstanceParamsUtil.applyParamsToObject; +import org.apache.commons.lang3.StringUtils; import com.google.gson.JsonObject; import org.onap.so.client.exception.PayloadGenerationException; import org.onap.so.serviceinstancebeans.Service; @@ -45,18 +47,32 @@ public class ConfigureInstanceParamsForVnf { * @throws PayloadGenerationException if it doesn't able to populate instance parameters from SO payload. */ public void populateInstanceParams(JsonObject jsonObject, List<Map<String, Object>> userParamsFromRequest, - String modelCustomizationUuid) throws PayloadGenerationException { + String modelCustomizationUuid, String vnfInstanceName) throws PayloadGenerationException { try { - Service service = extractServiceFromUserParameters.getServiceFromRequestUserParams(userParamsFromRequest); - List<Map<String, String>> instanceParamsList = getInstanceParamForVnf(service, modelCustomizationUuid); + Optional<Service> service = + extractServiceFromUserParameters.getServiceFromRequestUserParams(userParamsFromRequest); - instanceParamsList.stream().flatMap(instanceParamsMap -> instanceParamsMap.entrySet().stream()) - .forEachOrdered(entry -> jsonObject.addProperty(entry.getKey(), entry.getValue())); + if (service.isPresent()) { + List<Map<String, String>> instanceParamsList; + if (StringUtils.isNotBlank(vnfInstanceName)) { + instanceParamsList = getInstanceParamByVnfInstanceName(service.get(), vnfInstanceName); + } else { + instanceParamsList = getInstanceParamForVnf(service.get(), modelCustomizationUuid); + } + applyParamsToObject(instanceParamsList, jsonObject); + } } catch (Exception e) { - throw new PayloadGenerationException("Couldn't able to resolve instance parameters", e); + throw new PayloadGenerationException("Failed to resolve instance parameters", e); } } + private List<Map<String, String>> getInstanceParamByVnfInstanceName(Service service, String instanceName) + throws PayloadGenerationException { + return service.getResources().getVnfs().stream().filter(vnf -> instanceName.equals(vnf.getInstanceName())) + .findFirst().map(Vnfs::getInstanceParams).orElseThrow( + () -> new PayloadGenerationException("Could not find vnf with instanceName: " + instanceName)); + } + private List<Map<String, String>> getInstanceParamForVnf(Service service, String genericVnfModelCustomizationUuid) throws PayloadGenerationException { Optional<Vnfs> foundedVnf = service.getResources().getVnfs().stream() diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ConfigureInstanceParamsUtil.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ConfigureInstanceParamsUtil.java new file mode 100644 index 0000000000..117fd74498 --- /dev/null +++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ConfigureInstanceParamsUtil.java @@ -0,0 +1,34 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2021 Bell Canada + * ================================================================================ + * 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.client.cds; + +import com.google.gson.JsonObject; +import java.util.List; +import java.util.Map; + +public final class ConfigureInstanceParamsUtil { + + public static void applyParamsToObject(List<Map<String, String>> instanceParamsList, JsonObject jsonObject) { + instanceParamsList.stream().flatMap(instanceParamsMap -> instanceParamsMap.entrySet().stream()) + .forEachOrdered(entry -> jsonObject.addProperty(entry.getKey(), entry.getValue())); + } + +} diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ExtractServiceFromUserParameters.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ExtractServiceFromUserParameters.java index 43fabd3253..53e1da410e 100644 --- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ExtractServiceFromUserParameters.java +++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ExtractServiceFromUserParameters.java @@ -20,6 +20,7 @@ package org.onap.so.client.cds; import com.fasterxml.jackson.databind.ObjectMapper; +import java.util.Optional; import org.onap.so.client.exception.PayloadGenerationException; import org.onap.so.serviceinstancebeans.Service; import org.springframework.beans.factory.annotation.Autowired; @@ -35,10 +36,13 @@ public class ExtractServiceFromUserParameters { @Autowired private ObjectMapper objectMapper; - public Service getServiceFromRequestUserParams(List<Map<String, Object>> userParams) throws Exception { - Map<String, Object> serviceMap = userParams.stream().filter(key -> key.containsKey(SERVICE_KEY)).findFirst() - .orElseThrow(() -> new Exception("Can not find service in userParams section in generalBuildingBlock")); - return getServiceObjectFromServiceMap(serviceMap); + public Optional<Service> getServiceFromRequestUserParams(List<Map<String, Object>> userParams) throws Exception { + Optional<Map<String, Object>> serviceMap = + userParams.stream().filter(key -> key.containsKey(SERVICE_KEY)).findFirst(); + if (serviceMap.isPresent()) { + return Optional.of(getServiceObjectFromServiceMap(serviceMap.get())); + } + return Optional.empty(); } private Service getServiceObjectFromServiceMap(Map<String, Object> serviceMap) throws PayloadGenerationException { diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ServiceCDSRequestProvider.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ServiceCDSRequestProvider.java index 12c841a2c6..ce784dd5d6 100644 --- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ServiceCDSRequestProvider.java +++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ServiceCDSRequestProvider.java @@ -21,8 +21,11 @@ package org.onap.so.client.cds; import com.google.gson.JsonObject; +import java.util.List; +import java.util.Map; import org.onap.so.bpmn.common.BuildingBlockExecution; import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance; +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.PayloadGenerationException; @@ -38,21 +41,22 @@ import static org.onap.so.client.cds.PayloadConstants.SEPARATOR; @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) public class ServiceCDSRequestProvider implements CDSRequestProvider { - private static final String EMPTY_STRING = ""; private String resolutionKey; private BuildingBlockExecution execution; + private String bluePrintName; + private String bluePrintVersion; @Autowired - private ExtractPojosForBB extractPojosForBB; + private ConfigureInstanceParamsForService configureInstanceParamsForService; @Override public String getBlueprintName() { - return EMPTY_STRING; + return bluePrintName; } @Override public String getBlueprintVersion() { - return EMPTY_STRING; + return bluePrintVersion; } @Override @@ -65,17 +69,21 @@ public class ServiceCDSRequestProvider implements CDSRequestProvider { JsonObject cdsPropertyObject = new JsonObject(); JsonObject serviceObject = new JsonObject(); try { - ServiceInstance serviceInstance = - extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID); - + ServiceInstance serviceInstance = execution.getGeneralBuildingBlock().getServiceInstance(); + bluePrintName = serviceInstance.getModelInfoServiceInstance().getBlueprintName(); + bluePrintVersion = serviceInstance.getModelInfoServiceInstance().getBlueprintVersion(); resolutionKey = serviceInstance.getServiceInstanceName(); - // TODO Need to figure out how to populate blueprint name and version for service. - serviceObject.addProperty("service-instance-id", serviceInstance.getServiceInstanceId()); serviceObject.addProperty("service-model-uuid", serviceInstance.getModelInfoServiceInstance().getModelUuid()); + final GeneralBuildingBlock buildingBlock = execution.getGeneralBuildingBlock(); + List<Map<String, Object>> userParamsFromRequest = + buildingBlock.getRequestContext().getRequestParameters().getUserParams(); + if (userParamsFromRequest != null && userParamsFromRequest.size() != 0) { + configureInstanceParamsForService.populateInstanceParams(serviceObject, userParamsFromRequest); + } } catch (Exception e) { throw new PayloadGenerationException("Failed to buildPropertyObjectForService", e); } diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/VfModuleCDSRequestProvider.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/VfModuleCDSRequestProvider.java index 478b65c349..06ab84a114 100644 --- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/VfModuleCDSRequestProvider.java +++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/VfModuleCDSRequestProvider.java @@ -104,9 +104,11 @@ public class VfModuleCDSRequestProvider implements CDSRequestProvider { final GeneralBuildingBlock buildingBlock = execution.getGeneralBuildingBlock(); List<Map<String, Object>> userParamsFromRequest = buildingBlock.getRequestContext().getRequestParameters().getUserParams(); + String vfModuleInstanceName = + execution.getLookupMap().getOrDefault(ResourceKey.VF_MODULE_INSTANCE_NAME, ""); if (userParamsFromRequest != null && userParamsFromRequest.size() != 0) { configureInstanceParamsForVfModule.populateInstanceParams(vfModuleObject, userParamsFromRequest, - modelCustomizationUuidForVnf, modelCustomizationUuidForVfModule); + modelCustomizationUuidForVnf, modelCustomizationUuidForVfModule, vfModuleInstanceName); } } catch (Exception e) { throw new PayloadGenerationException("Failed to buildPropertyObject for VF-Module", e); diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/VnfCDSRequestProvider.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/VnfCDSRequestProvider.java index 6251eb6fad..5f63732458 100644 --- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/VnfCDSRequestProvider.java +++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/VnfCDSRequestProvider.java @@ -23,6 +23,7 @@ package org.onap.so.client.cds; import com.google.gson.JsonObject; +import org.apache.commons.lang3.StringUtils; import org.onap.so.bpmn.common.BuildingBlockExecution; import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf; import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance; @@ -93,9 +94,10 @@ public class VnfCDSRequestProvider implements CDSRequestProvider { final GeneralBuildingBlock buildingBlock = execution.getGeneralBuildingBlock(); List<Map<String, Object>> userParamsFromRequest = buildingBlock.getRequestContext().getRequestParameters().getUserParams(); + String vnfInstanceName = execution.getLookupMap().getOrDefault(ResourceKey.VNF_INSTANCE_NAME, ""); if (userParamsFromRequest != null && userParamsFromRequest.size() != 0) { configureInstanceParamsForVnf.populateInstanceParams(vnfObject, userParamsFromRequest, - modelCustomizationUuid); + modelCustomizationUuid, vnfInstanceName); } } catch (Exception e) { throw new PayloadGenerationException("Failed to buildPropertyObjectForVnf", e); |