Add or Delete a PNF to an Active Service
[so.git] / mso-api-handlers / mso-api-handler-infra / src / main / java / org / onap / so / apihandlerinfra / ServiceInstances.java
index da101a2..353daf8 100644 (file)
@@ -10,9 +10,9 @@
  * 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.
 package org.onap.so.apihandlerinfra;
 
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
 import java.util.Optional;
+import java.util.stream.Collectors;
 import javax.transaction.Transactional;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
@@ -43,53 +41,37 @@ import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import org.apache.commons.lang.StringUtils;
 import org.apache.http.HttpStatus;
+import org.onap.logging.filter.base.ErrorCode;
 import org.onap.so.apihandler.common.CommonConstants;
 import org.onap.so.apihandler.common.ErrorNumbers;
 import org.onap.so.apihandler.common.RequestClientParameter;
 import org.onap.so.apihandlerinfra.exceptions.ApiException;
-import org.onap.so.apihandlerinfra.exceptions.RecipeNotFoundException;
 import org.onap.so.apihandlerinfra.exceptions.RequestDbFailureException;
 import org.onap.so.apihandlerinfra.exceptions.ValidateException;
+import org.onap.so.apihandlerinfra.infra.rest.BpmnRequestBuilder;
+import org.onap.so.apihandlerinfra.infra.rest.exception.CloudConfigurationNotFoundException;
 import org.onap.so.apihandlerinfra.infra.rest.handler.AbstractRestHandler;
 import org.onap.so.apihandlerinfra.infra.rest.validators.RequestValidatorListenerRunner;
 import org.onap.so.apihandlerinfra.logging.ErrorLoggerInfo;
 import org.onap.so.constants.Status;
-import org.onap.so.db.catalog.beans.NetworkResource;
-import org.onap.so.db.catalog.beans.NetworkResourceCustomization;
-import org.onap.so.db.catalog.beans.Recipe;
-import org.onap.so.db.catalog.beans.ServiceRecipe;
-import org.onap.so.db.catalog.beans.VfModule;
-import org.onap.so.db.catalog.beans.VfModuleCustomization;
-import org.onap.so.db.catalog.beans.VnfRecipe;
-import org.onap.so.db.catalog.beans.VnfResource;
-import org.onap.so.db.catalog.beans.VnfResourceCustomization;
 import org.onap.so.db.catalog.client.CatalogDbClient;
 import org.onap.so.db.request.beans.InfraActiveRequests;
 import org.onap.so.db.request.client.RequestsDbClient;
 import org.onap.so.exceptions.ValidationException;
-import org.onap.so.logger.ErrorCode;
 import org.onap.so.logger.MessageEnum;
 import org.onap.so.serviceinstancebeans.CloudConfiguration;
 import org.onap.so.serviceinstancebeans.ModelInfo;
 import org.onap.so.serviceinstancebeans.ModelType;
-import org.onap.so.serviceinstancebeans.Networks;
-import org.onap.so.serviceinstancebeans.RelatedInstance;
-import org.onap.so.serviceinstancebeans.RelatedInstanceList;
 import org.onap.so.serviceinstancebeans.RequestDetails;
-import org.onap.so.serviceinstancebeans.RequestParameters;
 import org.onap.so.serviceinstancebeans.RequestReferences;
-import org.onap.so.serviceinstancebeans.Service;
 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
 import org.onap.so.serviceinstancebeans.ServiceInstancesResponse;
-import org.onap.so.serviceinstancebeans.VfModules;
-import org.onap.so.serviceinstancebeans.Vnfs;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Component;
 import org.springframework.web.client.RestTemplate;
-import com.fasterxml.jackson.databind.ObjectMapper;
 import io.swagger.v3.oas.annotations.OpenAPIDefinition;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.info.Info;
@@ -105,8 +87,6 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse;
 public class ServiceInstances extends AbstractRestHandler {
 
     private static Logger logger = LoggerFactory.getLogger(MsoRequest.class);
-    private static String NAME = "name";
-    private static String VALUE = "value";
     private static String uriPrefix = "/serviceInstantiation/";
     private static final String SAVE_TO_DB = "save instance to db";
 
@@ -131,6 +111,9 @@ public class ServiceInstances extends AbstractRestHandler {
     @Autowired
     private RequestValidatorListenerRunner requestValidatorListenerRunner;
 
+    @Autowired
+    private BpmnRequestBuilder bpmnRequestBuilder;
+
     @POST
     @Path("/{version:[vV][5-7]}/serviceInstances")
     @Consumes(MediaType.APPLICATION_JSON)
@@ -395,6 +378,24 @@ public class ServiceInstances extends AbstractRestHandler {
         }
     }
 
+    @POST
+    @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/upgrade")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    @Operation(description = "Upgrade a Service Instance to newer model", responses = @ApiResponse(
+            content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
+    @Transactional
+    public Response upgradeServiceInstance(String request, @PathParam("version") String version,
+            @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
+            throws ApiException {
+        String requestId = requestHandlerUtils.getRequestId(requestContext);
+        HashMap<String, String> instanceIdMap = new HashMap<>();
+        instanceIdMap.put("serviceInstanceId", serviceInstanceId);
+
+        return serviceInstances(request, Action.upgradeInstance, instanceIdMap, version, requestId,
+                requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
+    }
+
     @POST
     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/replace")
     @Consumes(MediaType.APPLICATION_JSON)
@@ -413,6 +414,42 @@ public class ServiceInstances extends AbstractRestHandler {
                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
     }
 
+    @POST
+    @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/healthcheck")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    @Operation(description = "HealthCheck for provided VNF instance", responses = @ApiResponse(
+            content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
+    @Transactional
+    public Response cnfHealthCheck(String request, @PathParam("version") String version,
+            @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
+            @Context ContainerRequestContext requestContext) throws ApiException {
+        String requestId = requestHandlerUtils.getRequestId(requestContext);
+        HashMap<String, String> instanceIdMap = new HashMap<>();
+        instanceIdMap.put("serviceInstanceId", serviceInstanceId);
+        instanceIdMap.put("vnfInstanceId", vnfInstanceId);
+        return serviceInstances(request, Action.healthCheck, instanceIdMap, version, requestId,
+                requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
+    }
+
+    @POST
+    @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/upgradeCnf")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    @Operation(description = "Upgrade CNF instance", responses = @ApiResponse(
+            content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
+    @Transactional
+    public Response cnfUpgrade(String request, @PathParam("version") String version,
+            @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
+            @Context ContainerRequestContext requestContext) throws ApiException {
+        String requestId = requestHandlerUtils.getRequestId(requestContext);
+        HashMap<String, String> instanceIdMap = new HashMap<>();
+        instanceIdMap.put("serviceInstanceId", serviceInstanceId);
+        instanceIdMap.put("vnfInstanceId", vnfInstanceId);
+        return serviceInstances(request, Action.upgradeCnf, instanceIdMap, version, requestId,
+                requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
+    }
+
     @PUT
     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}")
     @Consumes(MediaType.APPLICATION_JSON)
@@ -682,6 +719,53 @@ public class ServiceInstances extends AbstractRestHandler {
                 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
     }
 
+
+    @POST
+    @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/pnfs")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    @Operation(description = "Create VNF on a specified version and serviceInstance", responses = @ApiResponse(
+            content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
+    @Transactional
+    public Response createPnfInstance(String request, @PathParam("version") String version,
+            @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
+            throws ApiException {
+        String requestId = requestHandlerUtils.getRequestId(requestContext);
+        HashMap<String, String> instanceIdMap = new HashMap<>();
+        instanceIdMap.put("serviceInstanceId", serviceInstanceId);
+        try {
+            return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
+                    requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
+        } catch (Exception e) {
+            logger.error("Error in pnf", e);
+            throw e;
+        }
+    }
+
+
+    @DELETE
+    @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/pnfs/{pnfInstanceId}")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    @Operation(description = "Create PNF on a specified version and serviceInstance", responses = @ApiResponse(
+            content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
+    @Transactional
+    public Response deletePnfInstance(String request, @PathParam("version") String version,
+            @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("pnfInstanceId") String pnfInstanceId,
+            @Context ContainerRequestContext requestContext) throws ApiException {
+        String requestId = requestHandlerUtils.getRequestId(requestContext);
+        HashMap<String, String> instanceIdMap = new HashMap<>();
+        instanceIdMap.put("serviceInstanceId", serviceInstanceId);
+        instanceIdMap.put("pnfInstanceId", pnfInstanceId);
+        try {
+            return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
+                    requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
+        } catch (Exception e) {
+            logger.error("Error in pnf", e);
+            throw e;
+        }
+    }
+
     @POST
     @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks")
     @Consumes(MediaType.APPLICATION_JSON)
@@ -841,28 +925,45 @@ public class ServiceInstances extends AbstractRestHandler {
 
         sir = requestHandlerUtils.convertJsonToServiceInstanceRequest(requestJSON, action, requestId, requestUri);
         action = handleReplaceInstance(action, sir);
-        requestValidatorListenerRunner.runValidations(requestUri, instanceIdMap, sir, queryParams);
 
         String requestScope = requestHandlerUtils.deriveRequestScope(action, sir, requestUri);
+        try {
+            requestValidatorListenerRunner.runValidations(requestUri, instanceIdMap, sir, queryParams, action);
+        } catch (ApiException e) {
+            msoRequest.createErrorRequestRecord(Status.FAILED, requestId, e.getMessage(), action, requestScope,
+                    requestJSON, requestHandlerUtils
+                            .getServiceInstanceIdForValidationError(sir, instanceIdMap, requestScope).orElse(null),
+                    sir);
+            throw e;
+        }
+
         InfraActiveRequests currentActiveReq =
                 msoRequest.createRequestObject(sir, action, requestId, Status.IN_PROGRESS, requestJSON, requestScope);
         if (sir.getRequestDetails().getRequestParameters() != null) {
             aLaCarte = sir.getRequestDetails().getRequestParameters().getALaCarte();
         }
+
         requestHandlerUtils.parseRequest(sir, instanceIdMap, action, version, requestJSON, aLaCarte, requestId,
                 currentActiveReq);
+        if ((action == Action.replaceInstance || action == Action.replaceInstanceRetainAssignments)
+                && (requestScope.equals(ModelType.vnf.toString()) || requestScope.equals(ModelType.vfModule.toString()))
+                && sir.getRequestDetails().getCloudConfiguration() == null) {
+            CloudConfiguration cloudConfiguration =
+                    getCloudConfigurationOnReplace(requestScope, instanceIdMap, currentActiveReq);
+            sir.getRequestDetails().setCloudConfiguration(cloudConfiguration);
+            setCloudConfigurationCurrentActiveRequest(cloudConfiguration, currentActiveReq);
+        }
         requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
 
-        int requestVersion = Integer.parseInt(version.substring(1));
         String instanceName = null;
         if (sir.getRequestDetails().getRequestInfo() != null) {
             instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();
         }
         boolean alaCarteFlag = msoRequest.getAlacarteFlag(sir);
-        String vnfType = msoRequest.getVnfType(sir, requestScope, action, requestVersion);
+        String vnfType = msoRequest.getVnfType(sir, requestScope);
         String networkType = msoRequest.getNetworkType(sir, requestScope);
         String sdcServiceModelVersion = msoRequest.getSDCServiceModelVersion(sir);
-        String vfModuleType = msoRequest.getVfModuleType(sir, requestScope, action, requestVersion);
+        String vfModuleType = msoRequest.getVfModuleType(sir, requestScope);
 
         if (requestScope.equalsIgnoreCase(ModelType.vnf.name()) && vnfType != null) {
             currentActiveReq.setVnfType(vnfType);
@@ -870,19 +971,9 @@ public class ServiceInstances extends AbstractRestHandler {
             currentActiveReq.setNetworkType(networkType);
         }
 
-        InfraActiveRequests dup = null;
-        boolean inProgress = false;
-
-        dup = requestHandlerUtils.duplicateCheck(action, instanceIdMap, instanceName, requestScope, currentActiveReq);
-
-        if (dup != null) {
-            inProgress = requestHandlerUtils.camundaHistoryCheck(dup, currentActiveReq);
-        }
+        requestHandlerUtils.checkForDuplicateRequests(action, instanceIdMap, requestScope, currentActiveReq,
+                instanceName);
 
-        if (dup != null && inProgress) {
-            requestHandlerUtils.buildErrorOnDuplicateRecord(currentActiveReq, action, instanceIdMap, instanceName,
-                    requestScope, dup);
-        }
         ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
 
         RequestReferences referencesResponse = new RequestReferences();
@@ -891,7 +982,7 @@ public class ServiceInstances extends AbstractRestHandler {
 
         serviceResponse.setRequestReferences(referencesResponse);
         RecipeLookupResult recipeLookupResult =
-                getServiceInstanceOrchestrationURI(sir, action, alaCarteFlag, currentActiveReq);
+                requestHandlerUtils.getServiceInstanceOrchestrationURI(sir, action, alaCarteFlag, currentActiveReq);
         String serviceInstanceType = requestHandlerUtils.getServiceType(requestScope, sir, alaCarteFlag);
 
         ModelInfo modelInfo = sir.getRequestDetails().getModelInfo();
@@ -944,14 +1035,16 @@ public class ServiceInstances extends AbstractRestHandler {
                     ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e).errorInfo(errorLoggerInfo).build();
         }
 
-        if (!requestScope.equalsIgnoreCase(ModelType.service.name()) && action != Action.recreateInstance) {
+        if (!requestScope.equalsIgnoreCase(ModelType.service.name()) && action != Action.recreateInstance
+                && !requestScope.equalsIgnoreCase(ModelType.vnf.name())
+                && !requestScope.equalsIgnoreCase(ModelType.pnf.name())) {
             aLaCarte = true;
         } else if (aLaCarte == null) {
             aLaCarte = false;
         }
 
 
-        RequestClientParameter requestClientParameter = null;
+        RequestClientParameter requestClientParameter;
         try {
             requestClientParameter = new RequestClientParameter.Builder().setRequestId(requestId)
                     .setBaseVfModule(isBaseVfModule).setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
@@ -1030,18 +1123,7 @@ public class ServiceInstances extends AbstractRestHandler {
             throw validateException;
         }
 
-        InfraActiveRequests dup =
-                requestHandlerUtils.duplicateCheck(action, instanceIdMap, null, requestScope, currentActiveReq);
-        boolean inProgress = false;
-
-        if (dup != null) {
-            inProgress = requestHandlerUtils.camundaHistoryCheck(dup, currentActiveReq);
-        }
-
-        if (dup != null && inProgress) {
-            requestHandlerUtils.buildErrorOnDuplicateRecord(currentActiveReq, action, instanceIdMap, null, requestScope,
-                    dup);
-        }
+        requestHandlerUtils.checkForDuplicateRequests(action, instanceIdMap, requestScope, currentActiveReq, null);
 
         ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
 
@@ -1081,586 +1163,11 @@ public class ServiceInstances extends AbstractRestHandler {
                 .orElse("");
     }
 
-    protected RecipeLookupResult getServiceInstanceOrchestrationURI(ServiceInstancesRequest sir, Actions action,
-            boolean alaCarteFlag, InfraActiveRequests currentActiveReq) throws ApiException {
-        RecipeLookupResult recipeLookupResult = null;
-        // if the aLaCarte flag is set to TRUE, the API-H should choose the VID_DEFAULT
-        // recipe for the requested action
-        ModelInfo modelInfo = sir.getRequestDetails().getModelInfo();
-        // Query MSO Catalog DB
-
-        if (action == Action.applyUpdatedConfig || action == Action.inPlaceSoftwareUpdate) {
-            recipeLookupResult = getDefaultVnfUri(sir, action);
-        } else if (action == Action.addMembers || action == Action.removeMembers) {
-            recipeLookupResult = new RecipeLookupResult("/mso/async/services/WorkflowActionBB", 180);
-        } else if (modelInfo.getModelType().equals(ModelType.service)) {
-            try {
-                recipeLookupResult = getServiceURI(sir, action, alaCarteFlag);
-            } catch (IOException e) {
-                ErrorLoggerInfo errorLoggerInfo =
-                        new ErrorLoggerInfo.Builder(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, ErrorCode.SchemaError)
-                                .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
-
-                ValidateException validateException =
-                        new ValidateException.Builder(e.getMessage(), HttpStatus.SC_BAD_REQUEST,
-                                ErrorNumbers.SVC_BAD_PARAMETER).cause(e).errorInfo(errorLoggerInfo).build();
-
-                requestHandlerUtils.updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
-
-                throw validateException;
-            }
-        } else if (modelInfo.getModelType().equals(ModelType.vfModule)
-                || modelInfo.getModelType().equals(ModelType.volumeGroup)
-                || modelInfo.getModelType().equals(ModelType.vnf)) {
-            try {
-                recipeLookupResult = getVnfOrVfModuleUri(sir, action);
-            } catch (ValidationException e) {
-                ErrorLoggerInfo errorLoggerInfo =
-                        new ErrorLoggerInfo.Builder(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, ErrorCode.SchemaError)
-                                .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
-
-                ValidateException validateException =
-                        new ValidateException.Builder(e.getMessage(), HttpStatus.SC_BAD_REQUEST,
-                                ErrorNumbers.SVC_BAD_PARAMETER).cause(e).errorInfo(errorLoggerInfo).build();
-
-                requestHandlerUtils.updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
-
-                throw validateException;
-            }
-        } else if (modelInfo.getModelType().equals(ModelType.network)) {
-            try {
-                recipeLookupResult = getNetworkUri(sir, action);
-            } catch (ValidationException e) {
-
-                ErrorLoggerInfo errorLoggerInfo =
-                        new ErrorLoggerInfo.Builder(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, ErrorCode.SchemaError)
-                                .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
-
-                ValidateException validateException =
-                        new ValidateException.Builder(e.getMessage(), HttpStatus.SC_BAD_REQUEST,
-                                ErrorNumbers.SVC_BAD_PARAMETER).cause(e).errorInfo(errorLoggerInfo).build();
-                requestHandlerUtils.updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
-
-                throw validateException;
-            }
-        } else if (modelInfo.getModelType().equals(ModelType.instanceGroup)) {
-            recipeLookupResult = new RecipeLookupResult("/mso/async/services/WorkflowActionBB", 180);
-        }
-
-        if (recipeLookupResult == null) {
-            ErrorLoggerInfo errorLoggerInfo =
-                    new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError)
-                            .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
-
-            RecipeNotFoundException recipeNotFoundExceptionException =
-                    new RecipeNotFoundException.Builder("Recipe could not be retrieved from catalog DB.",
-                            HttpStatus.SC_NOT_FOUND, ErrorNumbers.SVC_GENERAL_SERVICE_ERROR).errorInfo(errorLoggerInfo)
-                                    .build();
-
-            requestHandlerUtils.updateStatus(currentActiveReq, Status.FAILED,
-                    recipeNotFoundExceptionException.getMessage());
-            throw recipeNotFoundExceptionException;
-        }
-        return recipeLookupResult;
-    }
-
-    protected RecipeLookupResult getServiceURI(ServiceInstancesRequest servInstReq, Actions action,
-            boolean alaCarteFlag) throws IOException {
-        // SERVICE REQUEST
-        // Construct the default service name
-        // TODO need to make this a configurable property
-        String defaultServiceModelName = requestHandlerUtils.getDefaultModel(servInstReq);
-        RequestDetails requestDetails = servInstReq.getRequestDetails();
-        ModelInfo modelInfo = requestDetails.getModelInfo();
-        org.onap.so.db.catalog.beans.Service serviceRecord;
-        List<org.onap.so.db.catalog.beans.Service> serviceRecordList;
-        ServiceRecipe recipe = null;
-
-        if (alaCarteFlag) {
-            serviceRecord = catalogDbClient.getFirstByModelNameOrderByModelVersionDesc(defaultServiceModelName);
-            if (serviceRecord != null) {
-                recipe = catalogDbClient.getFirstByServiceModelUUIDAndAction(serviceRecord.getModelUUID(),
-                        action.toString());
-            }
-        } else {
-            serviceRecord = catalogDbClient.getServiceByID(modelInfo.getModelVersionId());
-            recipe = catalogDbClient.getFirstByServiceModelUUIDAndAction(modelInfo.getModelVersionId(),
-                    action.toString());
-            if (recipe == null) {
-                serviceRecordList = catalogDbClient
-                        .getServiceByModelInvariantUUIDOrderByModelVersionDesc(modelInfo.getModelInvariantId());
-                if (!serviceRecordList.isEmpty()) {
-                    for (org.onap.so.db.catalog.beans.Service record : serviceRecordList) {
-                        recipe = catalogDbClient.getFirstByServiceModelUUIDAndAction(record.getModelUUID(),
-                                action.toString());
-                        if (recipe != null) {
-                            break;
-                        }
-                    }
-                }
-            }
-        }
-
-        // if an aLaCarte flag was sent in the request, throw an error if the recipe was
-        // not found
-        RequestParameters reqParam = requestDetails.getRequestParameters();
-        if (reqParam != null && alaCarteFlag && recipe == null) {
-            return null;
-        } else if (!alaCarteFlag && recipe != null && Action.createInstance.equals(action)) {
-            mapToLegacyRequest(requestDetails);
-        } else if (recipe == null) { // aLaCarte wasn't sent, so we'll try the default
-            serviceRecord = catalogDbClient.getFirstByModelNameOrderByModelVersionDesc(defaultServiceModelName);
-            recipe = catalogDbClient.getFirstByServiceModelUUIDAndAction(serviceRecord.getModelUUID(),
-                    action.toString());
-        }
-        if (modelInfo.getModelVersionId() == null) {
-            modelInfo.setModelVersionId(serviceRecord.getModelUUID());
-        }
-        if (recipe == null) {
-            return null;
-        }
-        return new RecipeLookupResult(recipe.getOrchestrationUri(), recipe.getRecipeTimeout());
-    }
-
-    protected void mapToLegacyRequest(RequestDetails requestDetails) throws IOException {
-        RequestParameters reqParam;
-        if (requestDetails.getRequestParameters() == null) {
-            reqParam = new RequestParameters();
-        } else {
-            reqParam = requestDetails.getRequestParameters();
-        }
-        if (requestDetails.getCloudConfiguration() == null) {
-            CloudConfiguration cloudConfig = configureCloudConfig(reqParam);
-            if (cloudConfig != null) {
-                requestDetails.setCloudConfiguration(cloudConfig);
-            }
-        }
-
-        List<Map<String, Object>> userParams = configureUserParams(reqParam);
-        if (!userParams.isEmpty()) {
-            if (reqParam == null) {
-                requestDetails.setRequestParameters(new RequestParameters());
-            }
-            requestDetails.getRequestParameters().setUserParams(userParams);
-        }
-    }
-
-    protected CloudConfiguration configureCloudConfig(RequestParameters reqParams) throws IOException {
-
-        for (Map<String, Object> params : reqParams.getUserParams()) {
-            if (params.containsKey("service")) {
-                Service service = serviceMapper(params);
-
-                Optional<CloudConfiguration> targetConfiguration = addCloudConfig(service.getCloudConfiguration());
-
-                if (targetConfiguration.isPresent()) {
-                    return targetConfiguration.get();
-                } else {
-                    for (Networks network : service.getResources().getNetworks()) {
-                        targetConfiguration = addCloudConfig(network.getCloudConfiguration());
-                        if (targetConfiguration.isPresent()) {
-                            return targetConfiguration.get();
-                        }
-                    }
-
-                    for (Vnfs vnf : service.getResources().getVnfs()) {
-                        targetConfiguration = addCloudConfig(vnf.getCloudConfiguration());
-
-                        if (targetConfiguration.isPresent()) {
-                            return targetConfiguration.get();
-                        }
-
-                        for (VfModules vfModule : vnf.getVfModules()) {
-                            targetConfiguration = addCloudConfig(vfModule.getCloudConfiguration());
-
-                            if (targetConfiguration.isPresent()) {
-                                return targetConfiguration.get();
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-        return null;
-    }
-
-    private Optional<CloudConfiguration> addCloudConfig(CloudConfiguration sourceCloudConfiguration) {
-        CloudConfiguration targetConfiguration = new CloudConfiguration();
-        if (sourceCloudConfiguration != null) {
-            targetConfiguration.setAicNodeClli(sourceCloudConfiguration.getAicNodeClli());
-            targetConfiguration.setTenantId(sourceCloudConfiguration.getTenantId());
-            targetConfiguration.setLcpCloudRegionId(sourceCloudConfiguration.getLcpCloudRegionId());
-            targetConfiguration.setCloudOwner(sourceCloudConfiguration.getCloudOwner());
-            return Optional.of(targetConfiguration);
-        }
-        return Optional.empty();
-    }
-
-    protected List<Map<String, Object>> configureUserParams(RequestParameters reqParams) throws IOException {
-        logger.debug("Configuring UserParams for Macro Request");
-        Map<String, Object> userParams = new HashMap<>();
-
-        for (Map<String, Object> params : reqParams.getUserParams()) {
-            if (params.containsKey("service")) {
-                Service service = serviceMapper(params);
-
-                addUserParams(userParams, service.getInstanceParams());
-
-                for (Networks network : service.getResources().getNetworks()) {
-                    addUserParams(userParams, network.getInstanceParams());
-                }
-
-                for (Vnfs vnf : service.getResources().getVnfs()) {
-                    addUserParams(userParams, vnf.getInstanceParams());
-
-                    for (VfModules vfModule : vnf.getVfModules()) {
-                        addUserParams(userParams, vfModule.getInstanceParams());
-                    }
-                }
-            }
-        }
-
-        return mapFlatMapToNameValue(userParams);
-    }
-
-    private Service serviceMapper(Map<String, Object> params) throws IOException {
-        ObjectMapper obj = new ObjectMapper();
-        String input = obj.writeValueAsString(params.get("service"));
-        return obj.readValue(input, Service.class);
-    }
-
-    private void addUserParams(Map<String, Object> targetUserParams, List<Map<String, String>> sourceUserParams) {
-        for (Map<String, String> map : sourceUserParams) {
-            for (Map.Entry<String, String> entry : map.entrySet()) {
-                targetUserParams.put(entry.getKey(), entry.getValue());
-            }
-        }
-    }
-
-    protected List<Map<String, Object>> mapFlatMapToNameValue(Map<String, Object> flatMap) {
-        List<Map<String, Object>> targetUserParams = new ArrayList<>();
-
-        for (Map.Entry<String, Object> map : flatMap.entrySet()) {
-            Map<String, Object> targetMap = new HashMap<>();
-            targetMap.put(NAME, map.getKey());
-            targetMap.put(VALUE, map.getValue());
-            targetUserParams.add(targetMap);
-        }
-        return targetUserParams;
-    }
-
-    private RecipeLookupResult getVnfOrVfModuleUri(ServiceInstancesRequest servInstReq, Actions action)
-            throws ValidationException {
-
-        ModelInfo modelInfo = servInstReq.getRequestDetails().getModelInfo();
-        String vnfComponentType = modelInfo.getModelType().name();
-
-        RelatedInstanceList[] instanceList = null;
-        if (servInstReq.getRequestDetails() != null) {
-            instanceList = servInstReq.getRequestDetails().getRelatedInstanceList();
-        }
-
-        Recipe recipe;
-        String defaultSource = requestHandlerUtils.getDefaultModel(servInstReq);
-        String modelCustomizationId = modelInfo.getModelCustomizationId();
-        String modelCustomizationName = modelInfo.getModelCustomizationName();
-        String relatedInstanceModelVersionId = null;
-        String relatedInstanceModelInvariantId = null;
-        String relatedInstanceVersion = null;
-        String relatedInstanceModelCustomizationName = null;
-
-        if (instanceList != null) {
-
-            for (RelatedInstanceList relatedInstanceList : instanceList) {
-
-                RelatedInstance relatedInstance = relatedInstanceList.getRelatedInstance();
-                ModelInfo relatedInstanceModelInfo = relatedInstance.getModelInfo();
-                if (relatedInstanceModelInfo.getModelType().equals(ModelType.service)) {
-                    relatedInstanceModelVersionId = relatedInstanceModelInfo.getModelVersionId();
-                    relatedInstanceVersion = relatedInstanceModelInfo.getModelVersion();
-                }
-
-                if (relatedInstanceModelInfo.getModelType().equals(ModelType.vnf)) {
-                    relatedInstanceModelVersionId = relatedInstanceModelInfo.getModelVersionId();
-                    relatedInstanceModelInvariantId = relatedInstanceModelInfo.getModelInvariantId();
-                    relatedInstanceVersion = relatedInstanceModelInfo.getModelVersion();
-                    relatedInstanceModelCustomizationName = relatedInstanceModelInfo.getModelCustomizationName();
-                }
-            }
-
-            if (modelInfo.getModelType().equals(ModelType.vnf)) {
-                // a. For a vnf request (only create, no update currently):
-                // i. (v3-v4) If modelInfo.modelCustomizationId is provided, use it to validate
-                // catalog DB has record in
-                // vnf_resource_customization.model_customization_uuid.
-                // ii. (v2-v4) If modelInfo.modelCustomizationId is NOT provided (because it is
-                // a pre-1702 ASDC model or
-                // pre-v3), then modelInfo.modelCustomizationName must have
-                // been provided (else create request should be rejected). APIH should use the
-                // relatedInstance.modelInfo[service].modelVersionId** +
-                // modelInfo[vnf].modelCustomizationName
-                // to â€œjoinâ€�? service_to_resource_customizations with
-                // vnf_resource_customization to confirm a
-                // vnf_resource_customization.model_customization_uuid record exists.
-                // **If relatedInstance.modelInfo[service].modelVersionId was not provided, use
-                // relatedInstance.modelInfo[service].modelInvariantId + modelVersion instead to
-                // lookup modelVersionId
-                // (MODEL_UUID) in SERVICE table.
-                // iii. Regardless of how the value was provided/obtained above, APIH must
-                // always populate
-                // vnfModelCustomizationId in bpmnRequest. It would be assumed it was MSO
-                // generated
-                // during 1707 data migration if VID did not provide it originally on request.
-                // iv. Note: continue to construct the â€œvnf-typeâ€�? value and pass to BPMN
-                // (must still be populated
-                // in A&AI).
-                // 1. If modelCustomizationName is NOT provided on a vnf/vfModule request, use
-                // modelCustomizationId to
-                // look it up in our catalog to construct vnf-type value to pass to BPMN.
-
-                VnfResource vnfResource = null;
-                VnfResourceCustomization vrc = null;
-                // Validation for vnfResource
-
-                if (modelCustomizationId != null) {
-                    vrc = catalogDbClient.getVnfResourceCustomizationByModelCustomizationUUID(modelCustomizationId);
-                    if (vrc != null) {
-                        vnfResource = vrc.getVnfResources();
-                    }
-                } else {
-                    org.onap.so.db.catalog.beans.Service service =
-                            catalogDbClient.getServiceByID(relatedInstanceModelVersionId);
-                    if (service == null) {
-                        service = catalogDbClient.getServiceByModelVersionAndModelInvariantUUID(relatedInstanceVersion,
-                                relatedInstanceModelInvariantId);
-                    }
-
-                    if (service == null) {
-                        throw new ValidationException("service in relatedInstance");
-                    }
-                    for (VnfResourceCustomization vnfResourceCustom : service.getVnfCustomizations()) {
-                        if (vnfResourceCustom.getModelInstanceName().equals(modelCustomizationName)) {
-                            vrc = vnfResourceCustom;
-                        }
-                    }
-
-                    if (vrc != null) {
-                        vnfResource = vrc.getVnfResources();
-                        modelInfo.setModelCustomizationId(vrc.getModelCustomizationUUID());
-                        modelInfo.setModelCustomizationUuid(vrc.getModelCustomizationUUID());
-                    }
-                }
-
-                if (vnfResource == null) {
-                    throw new ValidationException("vnfResource");
-                } else {
-                    if (modelInfo.getModelVersionId() == null) {
-                        modelInfo.setModelVersionId(vnfResource.getModelUUID());
-                    }
-                }
-
-                VnfRecipe vnfRecipe = null;
-
-                if (vrc != null) {
-                    String nfRole = vrc.getNfRole();
-                    if (nfRole != null) {
-                        vnfRecipe =
-                                catalogDbClient.getFirstVnfRecipeByNfRoleAndAction(vrc.getNfRole(), action.toString());
-                    }
-                }
-
-                if (vnfRecipe == null) {
-                    vnfRecipe = catalogDbClient.getFirstVnfRecipeByNfRoleAndAction(defaultSource, action.toString());
-                }
-
-                if (vnfRecipe == null) {
-                    return null;
-                }
-
-                return new RecipeLookupResult(vnfRecipe.getOrchestrationUri(), vnfRecipe.getRecipeTimeout());
-            } else {
-                /*
-                 * (v5-v7) If modelInfo.modelCustomizationId is NOT provided (because it is a pre-1702 ASDC model or
-                 * pre-v3), then modelInfo.modelCustomizationName must have // been provided (else create request should
-                 * be rejected). APIH should use the relatedInstance.modelInfo[vnf].modelVersionId +
-                 * modelInfo[vnf].modelCustomizationName // to join vnf_to_resource_customizations with
-                 * vf_resource_customization to confirm a vf_resource_customization.model_customization_uuid record
-                 * exists. // Once the vnfs model_customization_uuid has been obtained, use it to find all vfModule
-                 * customizations for that vnf customization in the vnf_res_custom_to_vf_module_custom join table. //
-                 * For each vf_module_cust_model_customization_uuid value returned, use that UUID to query
-                 * vf_module_customization table along with modelInfo[vfModule|volumeGroup].modelVersionId to // confirm
-                 * record matches request data (and to identify the modelCustomizationId associated with the vfModule in
-                 * the request). This means taking each record found // in vf_module_customization and looking up in
-                 * vf_module (using vf_module_customization’s FK into vf_module) to find a match on
-                 * MODEL_INVARIANT_UUID (modelInvariantId) // and MODEL_VERSION (modelVersion).
-                 */
-                VfModuleCustomization vfmc = null;
-                VnfResource vnfr;
-                VnfResourceCustomization vnfrc;
-                VfModule vfModule = null;
-
-                if (modelInfo.getModelCustomizationId() != null) {
-                    vfmc = catalogDbClient
-                            .getVfModuleCustomizationByModelCuztomizationUUID(modelInfo.getModelCustomizationId());
-                } else {
-                    vnfr = catalogDbClient.getVnfResourceByModelUUID(relatedInstanceModelVersionId);
-                    if (vnfr == null) {
-                        vnfr = catalogDbClient.getFirstVnfResourceByModelInvariantUUIDAndModelVersion(
-                                relatedInstanceModelInvariantId, relatedInstanceVersion);
-                    }
-                    vnfrc = catalogDbClient.getFirstVnfResourceCustomizationByModelInstanceNameAndVnfResources(
-                            relatedInstanceModelCustomizationName, vnfr);
-
-                    List<VfModuleCustomization> list = vnfrc.getVfModuleCustomizations();
-
-                    String vfModuleModelUUID = modelInfo.getModelVersionId();
-                    for (VfModuleCustomization vf : list) {
-                        VfModuleCustomization vfmCustom;
-                        if (vfModuleModelUUID != null) {
-                            vfmCustom = catalogDbClient
-                                    .getVfModuleCustomizationByModelCustomizationUUIDAndVfModuleModelUUID(
-                                            vf.getModelCustomizationUUID(), vfModuleModelUUID);
-                            if (vfmCustom != null) {
-                                vfModule = vfmCustom.getVfModule();
-                            }
-                        } else {
-                            vfmCustom = catalogDbClient
-                                    .getVfModuleCustomizationByModelCuztomizationUUID(vf.getModelCustomizationUUID());
-                            if (vfmCustom != null) {
-                                vfModule = vfmCustom.getVfModule();
-                            } else {
-                                vfModule = catalogDbClient.getVfModuleByModelInvariantUUIDAndModelVersion(
-                                        relatedInstanceModelInvariantId, relatedInstanceVersion);
-                            }
-                        }
-
-                        if (vfModule != null) {
-                            modelInfo.setModelCustomizationId(vf.getModelCustomizationUUID());
-                            modelInfo.setModelCustomizationUuid(vf.getModelCustomizationUUID());
-                            break;
-                        }
-                    }
-                }
-
-                if (vfmc == null && vfModule == null) {
-                    throw new ValidationException("vfModuleCustomization");
-                } else if (vfModule == null && vfmc != null) {
-                    vfModule = vfmc.getVfModule(); // can't be null as vfModuleModelUUID is not-null property in
-                    // VfModuleCustomization table
-                }
-
-                if (modelInfo.getModelVersionId() == null) {
-                    modelInfo.setModelVersionId(vfModule.getModelUUID());
-                }
-
-                recipe = catalogDbClient.getFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction(
-                        vfModule.getModelUUID(), vnfComponentType, action.toString());
-                if (recipe == null) {
-                    List<VfModule> vfModuleRecords = catalogDbClient
-                            .getVfModuleByModelInvariantUUIDOrderByModelVersionDesc(vfModule.getModelInvariantUUID());
-                    if (!vfModuleRecords.isEmpty()) {
-                        for (VfModule record : vfModuleRecords) {
-                            recipe = catalogDbClient
-                                    .getFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction(
-                                            record.getModelUUID(), vnfComponentType, action.toString());
-                            if (recipe != null) {
-                                break;
-                            }
-                        }
-                    }
-                }
-                if (recipe == null) {
-                    recipe = catalogDbClient.getFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction(
-                            defaultSource, vnfComponentType, action.toString());
-                    if (recipe == null) {
-                        recipe = catalogDbClient.getFirstVnfComponentsRecipeByVnfComponentTypeAndAction(
-                                vnfComponentType, action.toString());
-                    }
-
-                    if (recipe == null) {
-                        return null;
-                    }
-                }
-            }
-        } else {
-
-            if (modelInfo.getModelType().equals(ModelType.vnf)) {
-                recipe = catalogDbClient.getFirstVnfRecipeByNfRoleAndAction(defaultSource, action.toString());
-                if (recipe == null) {
-                    return null;
-                }
-            } else {
-                recipe = catalogDbClient.getFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction(
-                        defaultSource, vnfComponentType, action.toString());
-
-                if (recipe == null) {
-                    return null;
-                }
-            }
-        }
-
-        return new RecipeLookupResult(recipe.getOrchestrationUri(), recipe.getRecipeTimeout());
-    }
-
-    private RecipeLookupResult getDefaultVnfUri(ServiceInstancesRequest sir, Actions action) {
-
-        String defaultSource = requestHandlerUtils.getDefaultModel(sir);
-
-        VnfRecipe vnfRecipe = catalogDbClient.getFirstVnfRecipeByNfRoleAndAction(defaultSource, action.toString());
-
-        if (vnfRecipe == null) {
-            return null;
-        }
-
-        return new RecipeLookupResult(vnfRecipe.getOrchestrationUri(), vnfRecipe.getRecipeTimeout());
-    }
-
-    private RecipeLookupResult getNetworkUri(ServiceInstancesRequest sir, Actions action) throws ValidationException {
-
-        String defaultNetworkType = requestHandlerUtils.getDefaultModel(sir);
-
-        ModelInfo modelInfo = sir.getRequestDetails().getModelInfo();
-        String modelName = modelInfo.getModelName();
-        Recipe recipe = null;
-
-        if (modelInfo.getModelCustomizationId() != null) {
-            NetworkResourceCustomization networkResourceCustomization = catalogDbClient
-                    .getNetworkResourceCustomizationByModelCustomizationUUID(modelInfo.getModelCustomizationId());
-            if (networkResourceCustomization != null) {
-                NetworkResource networkResource = networkResourceCustomization.getNetworkResource();
-                if (networkResource != null) {
-                    if (modelInfo.getModelVersionId() == null) {
-                        modelInfo.setModelVersionId(networkResource.getModelUUID());
-                    }
-                    recipe = catalogDbClient.getFirstNetworkRecipeByModelNameAndAction(networkResource.getModelName(),
-                            action.toString());
-                } else {
-                    throw new ValidationException("no catalog entry found");
-                }
-            } else if (action != Action.deleteInstance) {
-                throw new ValidationException("modelCustomizationId for networkResourceCustomization lookup", true);
-            }
-        } else {
-            // ok for version < 3 and action delete
-            if (modelName != null) {
-                recipe = catalogDbClient.getFirstNetworkRecipeByModelNameAndAction(modelName, action.toString());
-            }
-        }
-
-        if (recipe == null) {
-            recipe = catalogDbClient.getFirstNetworkRecipeByModelNameAndAction(defaultNetworkType, action.toString());
-        }
-
-        return recipe != null ? new RecipeLookupResult(recipe.getOrchestrationUri(), recipe.getRecipeTimeout()) : null;
-    }
-
     private Response configurationRecipeLookup(String requestJSON, Action action, HashMap<String, String> instanceIdMap,
             String version, String requestId, String requestUri) throws ApiException {
         String serviceInstanceId;
         Boolean aLaCarte = null;
         String apiVersion = version.substring(1);
-        boolean inProgress = false;
         ServiceInstancesRequest sir;
 
         sir = requestHandlerUtils.convertJsonToServiceInstanceRequest(requestJSON, action, requestId, requestUri);
@@ -1670,23 +1177,14 @@ public class ServiceInstances extends AbstractRestHandler {
         if (sir.getRequestDetails().getRequestParameters() != null) {
             aLaCarte = sir.getRequestDetails().getRequestParameters().getALaCarte();
         }
+
         requestHandlerUtils.parseRequest(sir, instanceIdMap, action, version, requestJSON, aLaCarte, requestId,
                 currentActiveReq);
         requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
         String instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();
 
-        InfraActiveRequests dup = null;
-
-        dup = requestHandlerUtils.duplicateCheck(action, instanceIdMap, instanceName, requestScope, currentActiveReq);
-
-        if (dup != null) {
-            inProgress = requestHandlerUtils.camundaHistoryCheck(dup, currentActiveReq);
-        }
-
-        if (instanceIdMap != null && dup != null && inProgress) {
-            requestHandlerUtils.buildErrorOnDuplicateRecord(currentActiveReq, action, instanceIdMap, instanceName,
-                    requestScope, dup);
-        }
+        requestHandlerUtils.checkForDuplicateRequests(action, instanceIdMap, requestScope, currentActiveReq,
+                instanceName);
 
         ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
         RequestReferences referencesResponse = new RequestReferences();
@@ -1763,4 +1261,35 @@ public class ServiceInstances extends AbstractRestHandler {
                 requestScope);
     }
 
+    protected CloudConfiguration getCloudConfigurationOnReplace(String requestScope,
+            HashMap<String, String> instanceIdMap, InfraActiveRequests currentActiveReq) throws ApiException {
+        logger.debug("Replace request is missing cloudConfiguration, autofilling from create.");
+        CloudConfiguration cloudConfiguration = null;
+        if (requestScope.equals(ModelType.vfModule.toString())) {
+            cloudConfiguration = bpmnRequestBuilder.getCloudConfigurationVfModuleReplace(
+                    instanceIdMap.get("vnfInstanceId"), instanceIdMap.get("vfModuleInstanceId"));
+        } else {
+            cloudConfiguration = bpmnRequestBuilder.mapCloudConfigurationVnf(instanceIdMap.get("vnfInstanceId"));
+        }
+
+        if (cloudConfiguration == null) {
+            String errorMessage = "CloudConfiguration not found during autofill for replace request.";
+            logger.error(errorMessage);
+            updateStatus(currentActiveReq, Status.FAILED, errorMessage);
+            throw new CloudConfigurationNotFoundException(
+                    "CloudConfiguration not found during autofill for replace request.");
+        }
+        return cloudConfiguration;
+    }
+
+    protected void setCloudConfigurationCurrentActiveRequest(CloudConfiguration cloudConfiguration,
+            InfraActiveRequests currentActiveRequest) {
+        if (cloudConfiguration.getLcpCloudRegionId() != null) {
+            currentActiveRequest.setCloudRegion(cloudConfiguration.getLcpCloudRegionId());
+        }
+
+        if (cloudConfiguration.getTenantId() != null) {
+            currentActiveRequest.setTenantId(cloudConfiguration.getTenantId());
+        }
+    }
 }