2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
7 * ================================================================================
8 * Modifications Copyright (c) 2019 Samsung
9 * ================================================================================
10 * Licensed under the Apache License, Version 2.0 (the "License");
11 * you may not use this file except in compliance with the License.
12 * You may obtain a copy of the License at
14 * http://www.apache.org/licenses/LICENSE-2.0
16 * Unless required by applicable law or agreed to in writing, software
17 * distributed under the License is distributed on an "AS IS" BASIS,
18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19 * See the License for the specific language governing permissions and
20 * limitations under the License.
21 * ============LICENSE_END=========================================================
24 package org.onap.so.apihandlerinfra;
26 import java.io.IOException;
27 import java.util.HashMap;
28 import java.util.Optional;
29 import javax.transaction.Transactional;
30 import javax.ws.rs.Consumes;
31 import javax.ws.rs.DELETE;
32 import javax.ws.rs.POST;
33 import javax.ws.rs.PUT;
34 import javax.ws.rs.Path;
35 import javax.ws.rs.PathParam;
36 import javax.ws.rs.Produces;
37 import javax.ws.rs.container.ContainerRequestContext;
38 import javax.ws.rs.core.Context;
39 import javax.ws.rs.core.MediaType;
40 import javax.ws.rs.core.Response;
41 import org.apache.commons.lang.StringUtils;
42 import org.apache.http.HttpStatus;
43 import org.onap.logging.filter.base.ErrorCode;
44 import org.onap.so.apihandler.common.CommonConstants;
45 import org.onap.so.apihandler.common.ErrorNumbers;
46 import org.onap.so.apihandler.common.RequestClientParameter;
47 import org.onap.so.apihandlerinfra.exceptions.ApiException;
48 import org.onap.so.apihandlerinfra.exceptions.RequestDbFailureException;
49 import org.onap.so.apihandlerinfra.exceptions.ValidateException;
50 import org.onap.so.apihandlerinfra.infra.rest.BpmnRequestBuilder;
51 import org.onap.so.apihandlerinfra.infra.rest.exception.CloudConfigurationNotFoundException;
52 import org.onap.so.apihandlerinfra.infra.rest.handler.AbstractRestHandler;
53 import org.onap.so.apihandlerinfra.infra.rest.validators.RequestValidatorListenerRunner;
54 import org.onap.so.apihandlerinfra.logging.ErrorLoggerInfo;
55 import org.onap.so.constants.Status;
56 import org.onap.so.db.catalog.client.CatalogDbClient;
57 import org.onap.so.db.request.beans.InfraActiveRequests;
58 import org.onap.so.db.request.client.RequestsDbClient;
59 import org.onap.so.exceptions.ValidationException;
60 import org.onap.so.logger.MessageEnum;
61 import org.onap.so.serviceinstancebeans.CloudConfiguration;
62 import org.onap.so.serviceinstancebeans.ModelInfo;
63 import org.onap.so.serviceinstancebeans.ModelType;
64 import org.onap.so.serviceinstancebeans.RequestDetails;
65 import org.onap.so.serviceinstancebeans.RequestReferences;
66 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
67 import org.onap.so.serviceinstancebeans.ServiceInstancesResponse;
68 import org.slf4j.Logger;
69 import org.slf4j.LoggerFactory;
70 import org.springframework.beans.factory.annotation.Autowired;
71 import org.springframework.core.env.Environment;
72 import org.springframework.stereotype.Component;
73 import org.springframework.web.client.RestTemplate;
74 import io.swagger.v3.oas.annotations.OpenAPIDefinition;
75 import io.swagger.v3.oas.annotations.Operation;
76 import io.swagger.v3.oas.annotations.info.Info;
77 import io.swagger.v3.oas.annotations.media.ArraySchema;
78 import io.swagger.v3.oas.annotations.media.Content;
79 import io.swagger.v3.oas.annotations.media.Schema;
80 import io.swagger.v3.oas.annotations.responses.ApiResponse;
83 @Path("/onap/so/infra/serviceInstantiation")
84 @OpenAPIDefinition(info = @Info(title = "/onap/so/infra/serviceInstantiation",
85 description = "Infrastructure API Requests for Service Instances"))
86 public class ServiceInstances extends AbstractRestHandler {
88 private static Logger logger = LoggerFactory.getLogger(MsoRequest.class);
89 private static String uriPrefix = "/serviceInstantiation/";
90 private static final String SAVE_TO_DB = "save instance to db";
93 private Environment env;
96 private RestTemplate restTemplate;
99 private CatalogDbClient catalogDbClient;
102 private RequestsDbClient infraActiveRequestsClient;
105 private MsoRequest msoRequest;
108 private RequestHandlerUtils requestHandlerUtils;
111 private RequestValidatorListenerRunner requestValidatorListenerRunner;
114 private BpmnRequestBuilder bpmnRequestBuilder;
117 @Path("/{version:[vV][5-7]}/serviceInstances")
118 @Consumes(MediaType.APPLICATION_JSON)
119 @Produces(MediaType.APPLICATION_JSON)
120 @Operation(description = "Create a Service Instance on a version provided", responses = @ApiResponse(
121 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
123 public Response createServiceInstance(String request, @PathParam("version") String version,
124 @Context ContainerRequestContext requestContext) throws ApiException {
125 String requestId = requestHandlerUtils.getRequestId(requestContext);
126 return serviceInstances(request, Action.createInstance, null, version, requestId,
127 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
131 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/activate")
132 @Consumes(MediaType.APPLICATION_JSON)
133 @Produces(MediaType.APPLICATION_JSON)
134 @Operation(description = "Activate provided Service Instance", responses = @ApiResponse(
135 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
137 public Response activateServiceInstance(String request, @PathParam("version") String version,
138 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
139 throws ApiException {
140 String requestId = requestHandlerUtils.getRequestId(requestContext);
141 HashMap<String, String> instanceIdMap = new HashMap<>();
142 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
143 return serviceInstances(request, Action.activateInstance, instanceIdMap, version, requestId,
144 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
148 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/deactivate")
149 @Consumes(MediaType.APPLICATION_JSON)
150 @Produces(MediaType.APPLICATION_JSON)
151 @Operation(description = "Deactivate provided Service Instance", responses = @ApiResponse(
152 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
154 public Response deactivateServiceInstance(String request, @PathParam("version") String version,
155 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
156 throws ApiException {
157 String requestId = requestHandlerUtils.getRequestId(requestContext);
158 HashMap<String, String> instanceIdMap = new HashMap<>();
159 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
160 return serviceInstances(request, Action.deactivateInstance, instanceIdMap, version, requestId,
161 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
165 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}")
166 @Consumes(MediaType.APPLICATION_JSON)
167 @Produces(MediaType.APPLICATION_JSON)
168 @Operation(description = "Delete provided Service Instance", responses = @ApiResponse(
169 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
171 public Response deleteServiceInstance(String request, @PathParam("version") String version,
172 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
173 throws ApiException {
174 String requestId = requestHandlerUtils.getRequestId(requestContext);
175 HashMap<String, String> instanceIdMap = new HashMap<>();
176 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
177 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
178 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
182 @Path("/{version:[vV][7]}/serviceInstances/assign")
183 @Consumes(MediaType.APPLICATION_JSON)
184 @Produces(MediaType.APPLICATION_JSON)
185 @Operation(description = "Assign Service Instance", responses = @ApiResponse(
186 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
188 public Response assignServiceInstance(String request, @PathParam("version") String version,
189 @Context ContainerRequestContext requestContext) throws ApiException {
190 String requestId = requestHandlerUtils.getRequestId(requestContext);
191 return serviceInstances(request, Action.assignInstance, null, version, requestId,
192 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
196 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/unassign")
197 @Consumes(MediaType.APPLICATION_JSON)
198 @Produces(MediaType.APPLICATION_JSON)
199 @Operation(description = "Unassign Service Instance", responses = @ApiResponse(
200 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
202 public Response unassignServiceInstance(String request, @PathParam("version") String version,
203 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
204 throws ApiException {
205 String requestId = requestHandlerUtils.getRequestId(requestContext);
206 HashMap<String, String> instanceIdMap = new HashMap<>();
207 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
208 return serviceInstances(request, Action.unassignInstance, instanceIdMap, version, requestId,
209 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
213 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations")
214 @Consumes(MediaType.APPLICATION_JSON)
215 @Produces(MediaType.APPLICATION_JSON)
216 @Operation(description = "Create Port Mirroring Configuration", responses = @ApiResponse(
217 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
219 public Response createPortConfiguration(String request, @PathParam("version") String version,
220 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
221 throws ApiException {
222 String requestId = requestHandlerUtils.getRequestId(requestContext);
223 HashMap<String, String> instanceIdMap = new HashMap<>();
224 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
225 return configurationRecipeLookup(request, Action.createInstance, instanceIdMap, version, requestId,
226 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
230 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}")
231 @Consumes(MediaType.APPLICATION_JSON)
232 @Produces(MediaType.APPLICATION_JSON)
233 @Operation(description = "Delete provided Port", responses = @ApiResponse(
234 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
236 public Response deletePortConfiguration(String request, @PathParam("version") String version,
237 @PathParam("serviceInstanceId") String serviceInstanceId,
238 @PathParam("configurationInstanceId") String configurationInstanceId,
239 @Context ContainerRequestContext requestContext) throws ApiException {
240 String requestId = requestHandlerUtils.getRequestId(requestContext);
241 HashMap<String, String> instanceIdMap = new HashMap<>();
242 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
243 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
244 return configurationRecipeLookup(request, Action.deleteInstance, instanceIdMap, version, requestId,
245 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
249 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/enablePort")
250 @Consumes(MediaType.APPLICATION_JSON)
251 @Produces(MediaType.APPLICATION_JSON)
252 @Operation(description = "Enable Port Mirroring", responses = @ApiResponse(
253 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
255 public Response enablePort(String request, @PathParam("version") String version,
256 @PathParam("serviceInstanceId") String serviceInstanceId,
257 @PathParam("configurationInstanceId") String configurationInstanceId,
258 @Context ContainerRequestContext requestContext) throws ApiException {
259 String requestId = requestHandlerUtils.getRequestId(requestContext);
260 HashMap<String, String> instanceIdMap = new HashMap<>();
261 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
262 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
263 return configurationRecipeLookup(request, Action.enablePort, instanceIdMap, version, requestId,
264 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
268 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/disablePort")
269 @Consumes(MediaType.APPLICATION_JSON)
270 @Produces(MediaType.APPLICATION_JSON)
271 @Operation(description = "Disable Port Mirroring", responses = @ApiResponse(
272 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
274 public Response disablePort(String request, @PathParam("version") String version,
275 @PathParam("serviceInstanceId") String serviceInstanceId,
276 @PathParam("configurationInstanceId") String configurationInstanceId,
277 @Context ContainerRequestContext requestContext) throws ApiException {
278 String requestId = requestHandlerUtils.getRequestId(requestContext);
279 HashMap<String, String> instanceIdMap = new HashMap<>();
280 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
281 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
282 return configurationRecipeLookup(request, Action.disablePort, instanceIdMap, version, requestId,
283 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
287 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/activate")
288 @Consumes(MediaType.APPLICATION_JSON)
289 @Produces(MediaType.APPLICATION_JSON)
290 @Operation(description = "Activate Port Mirroring", responses = @ApiResponse(
291 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
293 public Response activatePort(String request, @PathParam("version") String version,
294 @PathParam("serviceInstanceId") String serviceInstanceId,
295 @PathParam("configurationInstanceId") String configurationInstanceId,
296 @Context ContainerRequestContext requestContext) throws ApiException {
297 String requestId = requestHandlerUtils.getRequestId(requestContext);
298 HashMap<String, String> instanceIdMap = new HashMap<>();
299 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
300 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
301 return configurationRecipeLookup(request, Action.activateInstance, instanceIdMap, version, requestId,
302 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
306 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/deactivate")
307 @Consumes(MediaType.APPLICATION_JSON)
308 @Produces(MediaType.APPLICATION_JSON)
309 @Operation(description = "Deactivate Port Mirroring", responses = @ApiResponse(
310 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
312 public Response deactivatePort(String request, @PathParam("version") String version,
313 @PathParam("serviceInstanceId") String serviceInstanceId,
314 @PathParam("configurationInstanceId") String configurationInstanceId,
315 @Context ContainerRequestContext requestContext) throws ApiException {
316 String requestId = requestHandlerUtils.getRequestId(requestContext);
317 HashMap<String, String> instanceIdMap = new HashMap<>();
318 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
319 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
320 return configurationRecipeLookup(request, Action.deactivateInstance, instanceIdMap, version, requestId,
321 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
325 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/addRelationships")
326 @Consumes(MediaType.APPLICATION_JSON)
327 @Produces(MediaType.APPLICATION_JSON)
328 @Operation(description = "Add Relationships to a Service Instance", responses = @ApiResponse(
329 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
331 public Response addRelationships(String request, @PathParam("version") String version,
332 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
333 throws ApiException {
334 String requestId = requestHandlerUtils.getRequestId(requestContext);
335 HashMap<String, String> instanceIdMap = new HashMap<>();
336 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
337 return configurationRecipeLookup(request, Action.addRelationships, instanceIdMap, version, requestId,
338 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
342 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/removeRelationships")
343 @Consumes(MediaType.APPLICATION_JSON)
344 @Produces(MediaType.APPLICATION_JSON)
345 @Operation(description = "Remove Relationships from Service Instance", responses = @ApiResponse(
346 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
348 public Response removeRelationships(String request, @PathParam("version") String version,
349 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
350 throws ApiException {
351 String requestId = requestHandlerUtils.getRequestId(requestContext);
352 HashMap<String, String> instanceIdMap = new HashMap<>();
353 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
354 return configurationRecipeLookup(request, Action.removeRelationships, instanceIdMap, version, requestId,
355 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
359 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs")
360 @Consumes(MediaType.APPLICATION_JSON)
361 @Produces(MediaType.APPLICATION_JSON)
362 @Operation(description = "Create VNF on a specified version and serviceInstance", responses = @ApiResponse(
363 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
365 public Response createVnfInstance(String request, @PathParam("version") String version,
366 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
367 throws ApiException {
368 String requestId = requestHandlerUtils.getRequestId(requestContext);
369 HashMap<String, String> instanceIdMap = new HashMap<>();
370 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
372 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
373 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
374 } catch (Exception e) {
375 logger.error("Error in vnf", e);
381 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/replace")
382 @Consumes(MediaType.APPLICATION_JSON)
383 @Produces(MediaType.APPLICATION_JSON)
384 @Operation(description = "Replace provided VNF instance", responses = @ApiResponse(
385 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
387 public Response replaceVnfInstance(String request, @PathParam("version") String version,
388 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
389 @Context ContainerRequestContext requestContext) throws ApiException {
390 String requestId = requestHandlerUtils.getRequestId(requestContext);
391 HashMap<String, String> instanceIdMap = new HashMap<>();
392 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
393 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
394 return serviceInstances(request, Action.replaceInstance, instanceIdMap, version, requestId,
395 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
399 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}")
400 @Consumes(MediaType.APPLICATION_JSON)
401 @Produces(MediaType.APPLICATION_JSON)
402 @Operation(description = "Update VNF on a specified version, serviceInstance and vnfInstance",
403 responses = @ApiResponse(
404 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
406 public Response updateVnfInstance(String request, @PathParam("version") String version,
407 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
408 @Context ContainerRequestContext requestContext) throws ApiException {
409 String requestId = requestHandlerUtils.getRequestId(requestContext);
410 HashMap<String, String> instanceIdMap = new HashMap<>();
411 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
412 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
413 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
414 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
418 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/applyUpdatedConfig")
419 @Consumes(MediaType.APPLICATION_JSON)
420 @Produces(MediaType.APPLICATION_JSON)
421 @Operation(description = "Apply updated configuration", responses = @ApiResponse(
422 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
423 public Response applyUpdatedConfig(String request, @PathParam("version") String version,
424 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
425 @Context ContainerRequestContext requestContext) throws ApiException {
426 String requestId = requestHandlerUtils.getRequestId(requestContext);
427 HashMap<String, String> instanceIdMap = new HashMap<>();
428 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
429 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
430 return serviceInstances(request, Action.applyUpdatedConfig, instanceIdMap, version, requestId,
431 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
435 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/recreate")
436 @Consumes(MediaType.APPLICATION_JSON)
437 @Produces(MediaType.APPLICATION_JSON)
438 @Operation(description = "Recreate VNF Instance", responses = @ApiResponse(
439 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
440 public Response recreateVnfInstance(String request, @PathParam("version") String version,
441 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
442 @Context ContainerRequestContext requestContext) throws ApiException {
443 String requestId = requestHandlerUtils.getRequestId(requestContext);
444 HashMap<String, String> instanceIdMap = new HashMap<>();
445 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
446 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
447 return serviceInstances(request, Action.recreateInstance, instanceIdMap, version, requestId,
448 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
452 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}")
453 @Consumes(MediaType.APPLICATION_JSON)
454 @Produces(MediaType.APPLICATION_JSON)
455 @Operation(description = "Delete provided VNF instance", responses = @ApiResponse(
456 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
458 public Response deleteVnfInstance(String request, @PathParam("version") String version,
459 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
460 @Context ContainerRequestContext requestContext) throws ApiException {
461 String requestId = requestHandlerUtils.getRequestId(requestContext);
462 HashMap<String, String> instanceIdMap = new HashMap<>();
463 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
464 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
465 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
466 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
470 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules")
471 @Consumes(MediaType.APPLICATION_JSON)
472 @Produces(MediaType.APPLICATION_JSON)
473 @Operation(description = "Create VfModule on a specified version, serviceInstance and vnfInstance",
474 responses = @ApiResponse(
475 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
477 public Response createVfModuleInstance(String request, @PathParam("version") String version,
478 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
479 @Context ContainerRequestContext requestContext) throws ApiException {
480 String requestId = requestHandlerUtils.getRequestId(requestContext);
481 HashMap<String, String> instanceIdMap = new HashMap<>();
482 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
483 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
484 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
485 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
489 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/replace")
490 @Consumes(MediaType.APPLICATION_JSON)
491 @Produces(MediaType.APPLICATION_JSON)
492 @Operation(description = "Create VfModule on a specified version, serviceInstance and vnfInstance",
493 responses = @ApiResponse(
494 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
496 public Response replaceVfModuleInstance(String request, @PathParam("version") String version,
497 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
498 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
499 throws ApiException {
500 String requestId = requestHandlerUtils.getRequestId(requestContext);
501 HashMap<String, String> instanceIdMap = new HashMap<>();
502 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
503 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
504 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
505 return serviceInstances(request, Action.replaceInstance, instanceIdMap, version, requestId,
506 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
510 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}")
511 @Consumes(MediaType.APPLICATION_JSON)
512 @Produces(MediaType.APPLICATION_JSON)
513 @Operation(description = "Update VfModule on a specified version, serviceInstance, vnfInstance and vfModule",
514 responses = @ApiResponse(
515 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
517 public Response updateVfModuleInstance(String request, @PathParam("version") String version,
518 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
519 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
520 throws ApiException {
521 String requestId = requestHandlerUtils.getRequestId(requestContext);
522 HashMap<String, String> instanceIdMap = new HashMap<>();
523 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
524 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
525 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
526 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
527 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
531 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/inPlaceSoftwareUpdate")
532 @Consumes(MediaType.APPLICATION_JSON)
533 @Produces(MediaType.APPLICATION_JSON)
534 @Operation(description = "Perform VNF software update", responses = @ApiResponse(
535 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
537 public Response inPlaceSoftwareUpdate(String request, @PathParam("version") String version,
538 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
539 @Context ContainerRequestContext requestContext) throws ApiException {
540 String requestId = requestHandlerUtils.getRequestId(requestContext);
541 HashMap<String, String> instanceIdMap = new HashMap<>();
542 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
543 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
544 return serviceInstances(request, Action.inPlaceSoftwareUpdate, instanceIdMap, version, requestId,
545 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
549 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}")
550 @Consumes(MediaType.APPLICATION_JSON)
551 @Produces(MediaType.APPLICATION_JSON)
552 @Operation(description = "Delete provided VfModule instance", responses = @ApiResponse(
553 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
555 public Response deleteVfModuleInstance(String request, @PathParam("version") String version,
556 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
557 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
558 throws ApiException {
559 String requestId = requestHandlerUtils.getRequestId(requestContext);
560 HashMap<String, String> instanceIdMap = new HashMap<>();
561 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
562 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
563 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
564 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
565 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
569 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/deactivateAndCloudDelete")
570 @Consumes(MediaType.APPLICATION_JSON)
571 @Produces(MediaType.APPLICATION_JSON)
572 @Operation(description = "Deactivate and Cloud Delete VfModule instance", responses = @ApiResponse(
573 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
575 public Response deactivateAndCloudDeleteVfModuleInstance(String request, @PathParam("version") String version,
576 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
577 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
578 throws ApiException {
579 String requestId = requestHandlerUtils.getRequestId(requestContext);
580 HashMap<String, String> instanceIdMap = new HashMap<>();
581 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
582 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
583 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
584 Response response = serviceInstances(request, Action.deactivateAndCloudDelete, instanceIdMap, version,
585 requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
590 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/scaleOut")
591 @Consumes(MediaType.APPLICATION_JSON)
592 @Produces(MediaType.APPLICATION_JSON)
593 @Operation(description = "VF Auto Scale Out", responses = @ApiResponse(
594 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
596 public Response scaleOutVfModule(String request, @PathParam("version") String version,
597 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
598 @Context ContainerRequestContext requestContext) throws ApiException {
599 String requestId = requestHandlerUtils.getRequestId(requestContext);
600 HashMap<String, String> instanceIdMap = new HashMap<>();
601 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
602 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
603 return serviceInstances(request, Action.scaleOut, instanceIdMap, version, requestId,
604 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
608 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups")
609 @Consumes(MediaType.APPLICATION_JSON)
610 @Produces(MediaType.APPLICATION_JSON)
611 @Operation(description = "Create VolumeGroup on a specified version, serviceInstance, vnfInstance",
612 responses = @ApiResponse(
613 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
615 public Response createVolumeGroupInstance(String request, @PathParam("version") String version,
616 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
617 @Context ContainerRequestContext requestContext) throws ApiException {
618 String requestId = requestHandlerUtils.getRequestId(requestContext);
619 HashMap<String, String> instanceIdMap = new HashMap<>();
620 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
621 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
622 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
623 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
627 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}")
628 @Consumes(MediaType.APPLICATION_JSON)
629 @Produces(MediaType.APPLICATION_JSON)
630 @Operation(description = "Update VolumeGroup on a specified version, serviceInstance, vnfInstance and volumeGroup",
631 responses = @ApiResponse(
632 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
634 public Response updateVolumeGroupInstance(String request, @PathParam("version") String version,
635 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
636 @PathParam("volumeGroupInstanceId") String volumeGroupInstanceId,
637 @Context ContainerRequestContext requestContext) throws ApiException {
638 String requestId = requestHandlerUtils.getRequestId(requestContext);
639 HashMap<String, String> instanceIdMap = new HashMap<>();
640 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
641 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
642 instanceIdMap.put("volumeGroupInstanceId", volumeGroupInstanceId);
643 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
644 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
648 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}")
649 @Consumes(MediaType.APPLICATION_JSON)
650 @Produces(MediaType.APPLICATION_JSON)
651 @Operation(description = "Delete provided VolumeGroup instance", responses = @ApiResponse(
652 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
654 public Response deleteVolumeGroupInstance(String request, @PathParam("version") String version,
655 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
656 @PathParam("volumeGroupInstanceId") String volumeGroupInstanceId,
657 @Context ContainerRequestContext requestContext) throws ApiException {
658 String requestId = requestHandlerUtils.getRequestId(requestContext);
659 HashMap<String, String> instanceIdMap = new HashMap<>();
660 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
661 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
662 instanceIdMap.put("volumeGroupInstanceId", volumeGroupInstanceId);
663 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
664 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
668 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks")
669 @Consumes(MediaType.APPLICATION_JSON)
670 @Produces(MediaType.APPLICATION_JSON)
671 @Operation(description = "Create NetworkInstance on a specified version and serviceInstance ",
672 responses = @ApiResponse(
673 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
675 public Response createNetworkInstance(String request, @PathParam("version") String version,
676 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
677 throws ApiException {
678 String requestId = requestHandlerUtils.getRequestId(requestContext);
679 HashMap<String, String> instanceIdMap = new HashMap<>();
680 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
681 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
682 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
686 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks/{networkInstanceId}")
687 @Consumes(MediaType.APPLICATION_JSON)
688 @Produces(MediaType.APPLICATION_JSON)
689 @Operation(description = "Update VolumeGroup on a specified version, serviceInstance, networkInstance",
690 responses = @ApiResponse(
691 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
693 public Response updateNetworkInstance(String request, @PathParam("version") String version,
694 @PathParam("serviceInstanceId") String serviceInstanceId,
695 @PathParam("networkInstanceId") String networkInstanceId, @Context ContainerRequestContext requestContext)
696 throws ApiException {
697 String requestId = requestHandlerUtils.getRequestId(requestContext);
698 HashMap<String, String> instanceIdMap = new HashMap<>();
699 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
700 instanceIdMap.put("networkInstanceId", networkInstanceId);
701 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
702 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
706 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks/{networkInstanceId}")
707 @Consumes(MediaType.APPLICATION_JSON)
708 @Produces(MediaType.APPLICATION_JSON)
709 @Operation(description = "Delete provided Network instance", responses = @ApiResponse(
710 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
712 public Response deleteNetworkInstance(String request, @PathParam("version") String version,
713 @PathParam("serviceInstanceId") String serviceInstanceId,
714 @PathParam("networkInstanceId") String networkInstanceId, @Context ContainerRequestContext requestContext)
715 throws ApiException {
716 String requestId = requestHandlerUtils.getRequestId(requestContext);
717 HashMap<String, String> instanceIdMap = new HashMap<>();
718 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
719 instanceIdMap.put("networkInstanceId", networkInstanceId);
720 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
721 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
725 @Path("/{version:[vV][7]}/instanceGroups")
726 @Consumes(MediaType.APPLICATION_JSON)
727 @Produces(MediaType.APPLICATION_JSON)
728 @Operation(description = "Create instanceGroups", responses = @ApiResponse(
729 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
731 public Response createInstanceGroups(String request, @PathParam("version") String version,
732 @Context ContainerRequestContext requestContext) throws ApiException {
733 String requestId = requestHandlerUtils.getRequestId(requestContext);
734 return serviceInstances(request, Action.createInstance, null, version, requestId,
735 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
739 @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}")
740 @Consumes(MediaType.APPLICATION_JSON)
741 @Produces(MediaType.APPLICATION_JSON)
742 @Operation(description = "Delete instanceGroup", responses = @ApiResponse(
743 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
745 public Response deleteInstanceGroups(@PathParam("version") String version,
746 @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext)
747 throws ApiException {
748 String requestId = requestHandlerUtils.getRequestId(requestContext);
749 HashMap<String, String> instanceIdMap = new HashMap<>();
750 instanceIdMap.put(CommonConstants.INSTANCE_GROUP_INSTANCE_ID, instanceGroupId);
751 return deleteInstanceGroups(Action.deleteInstance, instanceIdMap, version, requestId,
752 requestHandlerUtils.getRequestUri(requestContext, uriPrefix), requestContext);
756 @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}/addMembers")
757 @Consumes(MediaType.APPLICATION_JSON)
758 @Produces(MediaType.APPLICATION_JSON)
759 @Operation(description = "Add instanceGroup members", responses = @ApiResponse(
760 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
762 public Response addInstanceGroupMembers(String request, @PathParam("version") String version,
763 @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext)
764 throws ApiException {
765 String requestId = requestHandlerUtils.getRequestId(requestContext);
766 HashMap<String, String> instanceIdMap = new HashMap<>();
767 instanceIdMap.put(CommonConstants.INSTANCE_GROUP_INSTANCE_ID, instanceGroupId);
768 return serviceInstances(request, Action.addMembers, instanceIdMap, version, requestId,
769 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
773 @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}/removeMembers")
774 @Consumes(MediaType.APPLICATION_JSON)
775 @Produces(MediaType.APPLICATION_JSON)
776 @Operation(description = "Remove instanceGroup members", responses = @ApiResponse(
777 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
779 public Response removeInstanceGroupMembers(String request, @PathParam("version") String version,
780 @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext)
781 throws ApiException {
782 String requestId = requestHandlerUtils.getRequestId(requestContext);
783 HashMap<String, String> instanceIdMap = new HashMap<>();
784 instanceIdMap.put(CommonConstants.INSTANCE_GROUP_INSTANCE_ID, instanceGroupId);
785 return serviceInstances(request, Action.removeMembers, instanceIdMap, version, requestId,
786 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
790 * This method is used for POST a request to the BPEL client (BPMN).
792 * Convert the requestJson to ServiceInstanceRequest(sir), create the msoRequest object, check whether this request
793 * is already being processed in requestdb for duplicate check.
795 * Based on the alacarte flag, sir and msoRequest will do the recipe lookup from the service and servicerecipe table
796 * of catalogdb, and get the OrchestrationURI.
798 * If the present request is not the duplicate request then this request will be saved in the requestdb. and will
799 * POST a request to the BPMN engine at the OrchestrationURI fetched.
801 * @param requestJSON Json fetched as body in the API call
802 * @param action Type of action to be performed
803 * @param instanceIdMap Map of instance ids of service/vnf/vf/configuration etc..
804 * @param version Supported version of API
805 * @param requestId Unique id for the request
807 * @return response object
808 * @throws ApiException
810 public Response serviceInstances(String requestJSON, Actions action, HashMap<String, String> instanceIdMap,
811 String version, String requestId, String requestUri) throws ApiException {
812 return serviceInstances(requestJSON, action, instanceIdMap, version, requestId, requestUri, null);
816 public Response serviceInstances(String requestJSON, Actions action, HashMap<String, String> instanceIdMap,
817 String version, String requestId, String requestUri, HashMap<String, String> queryParams)
818 throws ApiException {
819 String serviceInstanceId;
820 Boolean aLaCarte = null;
821 ServiceInstancesRequest sir;
822 String apiVersion = version.substring(1);
824 sir = requestHandlerUtils.convertJsonToServiceInstanceRequest(requestJSON, action, requestId, requestUri);
825 action = handleReplaceInstance(action, sir);
827 String requestScope = requestHandlerUtils.deriveRequestScope(action, sir, requestUri);
829 requestValidatorListenerRunner.runValidations(requestUri, instanceIdMap, sir, queryParams, action);
830 } catch (ApiException e) {
831 msoRequest.createErrorRequestRecord(Status.FAILED, requestId, e.getMessage(), action, requestScope,
832 requestJSON, sir.getServiceInstanceId());
836 InfraActiveRequests currentActiveReq =
837 msoRequest.createRequestObject(sir, action, requestId, Status.IN_PROGRESS, requestJSON, requestScope);
838 if (sir.getRequestDetails().getRequestParameters() != null) {
839 aLaCarte = sir.getRequestDetails().getRequestParameters().getALaCarte();
842 requestHandlerUtils.parseRequest(sir, instanceIdMap, action, version, requestJSON, aLaCarte, requestId,
844 if ((action == Action.replaceInstance || action == Action.replaceInstanceRetainAssignments)
845 && (requestScope.equals(ModelType.vnf.toString()) || requestScope.equals(ModelType.vfModule.toString()))
846 && sir.getRequestDetails().getCloudConfiguration() == null) {
847 CloudConfiguration cloudConfiguration =
848 getCloudConfigurationOnReplace(requestScope, instanceIdMap, currentActiveReq);
849 sir.getRequestDetails().setCloudConfiguration(cloudConfiguration);
850 setCloudConfigurationCurrentActiveRequest(cloudConfiguration, currentActiveReq);
852 requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
854 String instanceName = null;
855 if (sir.getRequestDetails().getRequestInfo() != null) {
856 instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();
858 boolean alaCarteFlag = msoRequest.getAlacarteFlag(sir);
859 String vnfType = msoRequest.getVnfType(sir, requestScope);
860 String networkType = msoRequest.getNetworkType(sir, requestScope);
861 String sdcServiceModelVersion = msoRequest.getSDCServiceModelVersion(sir);
862 String vfModuleType = msoRequest.getVfModuleType(sir, requestScope);
864 if (requestScope.equalsIgnoreCase(ModelType.vnf.name()) && vnfType != null) {
865 currentActiveReq.setVnfType(vnfType);
866 } else if (requestScope.equalsIgnoreCase(ModelType.network.name()) && networkType != null) {
867 currentActiveReq.setNetworkType(networkType);
870 requestHandlerUtils.checkForDuplicateRequests(action, instanceIdMap, requestScope, currentActiveReq,
873 ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
875 RequestReferences referencesResponse = new RequestReferences();
877 referencesResponse.setRequestId(requestId);
879 serviceResponse.setRequestReferences(referencesResponse);
880 RecipeLookupResult recipeLookupResult =
881 requestHandlerUtils.getServiceInstanceOrchestrationURI(sir, action, alaCarteFlag, currentActiveReq);
882 String serviceInstanceType = requestHandlerUtils.getServiceType(requestScope, sir, alaCarteFlag);
884 ModelInfo modelInfo = sir.getRequestDetails().getModelInfo();
885 ModelType modelType = requestHandlerUtils.getModelType(action, modelInfo);
887 Boolean isBaseVfModule = false;
889 if (modelType.equals(ModelType.vfModule)) {
890 isBaseVfModule = requestHandlerUtils.getIsBaseVfModule(modelInfo, action, vnfType, sdcServiceModelVersion,
894 serviceInstanceId = requestHandlerUtils.setServiceInstanceId(requestScope, sir);
896 String vfModuleId = "";
897 String volumeGroupId = "";
898 String networkId = "";
899 String pnfCorrelationId = "";
900 String instanceGroupId = null;
902 if (sir.getVnfInstanceId() != null) {
903 vnfId = sir.getVnfInstanceId();
906 if (sir.getVfModuleInstanceId() != null) {
907 vfModuleId = sir.getVfModuleInstanceId();
910 if (sir.getVolumeGroupInstanceId() != null) {
911 volumeGroupId = sir.getVolumeGroupInstanceId();
914 if (sir.getNetworkInstanceId() != null) {
915 networkId = sir.getNetworkInstanceId();
917 if (sir.getInstanceGroupId() != null) {
918 instanceGroupId = sir.getInstanceGroupId();
921 pnfCorrelationId = getPnfCorrelationId(sir);
924 infraActiveRequestsClient.save(currentActiveReq);
925 } catch (Exception e) {
926 logger.error("Exception occurred", e);
927 ErrorLoggerInfo errorLoggerInfo =
928 new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError)
929 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
930 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR,
931 ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e).errorInfo(errorLoggerInfo).build();
934 if (!requestScope.equalsIgnoreCase(ModelType.service.name()) && action != Action.recreateInstance
935 && !(requestScope.equalsIgnoreCase(ModelType.vnf.name())
936 && (action == Action.replaceInstance || action == Action.replaceInstanceRetainAssignments))) {
938 } else if (aLaCarte == null) {
943 RequestClientParameter requestClientParameter;
945 requestClientParameter = new RequestClientParameter.Builder().setRequestId(requestId)
946 .setBaseVfModule(isBaseVfModule).setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
947 .setRequestAction(action.toString()).setServiceInstanceId(serviceInstanceId)
948 .setPnfCorrelationId(pnfCorrelationId).setVnfId(vnfId).setVfModuleId(vfModuleId)
949 .setVolumeGroupId(volumeGroupId).setNetworkId(networkId).setServiceType(serviceInstanceType)
950 .setVnfType(vnfType).setVfModuleType(vfModuleType).setNetworkType(networkType)
951 .setRequestDetails(requestHandlerUtils.mapJSONtoMSOStyle(requestJSON, sir, aLaCarte, action))
952 .setApiVersion(apiVersion).setALaCarte(aLaCarte).setRequestUri(requestUri)
953 .setInstanceGroupId(instanceGroupId).build();
954 } catch (IOException e) {
955 logger.error("Exception occurred", e);
956 ErrorLoggerInfo errorLoggerInfo =
957 new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, ErrorCode.SchemaError)
958 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
959 throw new ValidateException.Builder("Unable to generate RequestClientParamter object" + e.getMessage(),
960 HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER).errorInfo(errorLoggerInfo)
963 return requestHandlerUtils.postBPELRequest(currentActiveReq, requestClientParameter,
964 recipeLookupResult.getOrchestrationURI(), requestScope);
972 protected Actions handleReplaceInstance(Actions action, ServiceInstancesRequest sir) {
973 if (action != null && action.equals(Action.replaceInstance)
974 && sir.getRequestDetails().getRequestParameters().getRetainAssignments() != null
975 && sir.getRequestDetails().getRequestParameters().getRetainAssignments()) {
976 action = Action.replaceInstanceRetainAssignments;
982 * This method deletes the Instance Groups.
984 * This method will check whether the request is not duplicate in requestdb. if its not then will save as a new
985 * request. And will send a POST request to BEPL client to delete the Insatnce Groups.
988 * @param instanceIdMap
992 * @param requestContext
994 * @throws ApiException
996 public Response deleteInstanceGroups(Actions action, HashMap<String, String> instanceIdMap, String version,
997 String requestId, String requestUri, ContainerRequestContext requestContext) throws ApiException {
998 String instanceGroupId = instanceIdMap.get(CommonConstants.INSTANCE_GROUP_INSTANCE_ID);
999 Boolean aLaCarte = true;
1000 String apiVersion = version.substring(1);
1001 ServiceInstancesRequest sir = new ServiceInstancesRequest();
1002 sir.setInstanceGroupId(instanceGroupId);
1004 String requestScope = ModelType.instanceGroup.toString();
1005 InfraActiveRequests currentActiveReq =
1006 msoRequest.createRequestObject(sir, action, requestId, Status.IN_PROGRESS, null, requestScope);
1007 requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
1009 requestHandlerUtils.validateHeaders(requestContext);
1010 } catch (ValidationException e) {
1011 logger.error("Exception occurred", e);
1012 ErrorLoggerInfo errorLoggerInfo =
1013 new ErrorLoggerInfo.Builder(MessageEnum.APIH_VALIDATION_ERROR, ErrorCode.SchemaError)
1014 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1015 ValidateException validateException =
1016 new ValidateException.Builder(e.getMessage(), HttpStatus.SC_BAD_REQUEST,
1017 ErrorNumbers.SVC_BAD_PARAMETER).cause(e).errorInfo(errorLoggerInfo).build();
1018 requestHandlerUtils.updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1019 throw validateException;
1022 requestHandlerUtils.checkForDuplicateRequests(action, instanceIdMap, requestScope, currentActiveReq, null);
1024 ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
1026 RequestReferences referencesResponse = new RequestReferences();
1028 referencesResponse.setRequestId(requestId);
1030 serviceResponse.setRequestReferences(referencesResponse);
1031 Boolean isBaseVfModule = false;
1033 RecipeLookupResult recipeLookupResult = new RecipeLookupResult("/mso/async/services/WorkflowActionBB", 180);
1036 infraActiveRequestsClient.save(currentActiveReq);
1037 } catch (Exception e) {
1038 logger.error("Exception occurred", e);
1039 ErrorLoggerInfo errorLoggerInfo =
1040 new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError)
1041 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1042 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR,
1043 ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e).errorInfo(errorLoggerInfo).build();
1046 RequestClientParameter requestClientParameter = new RequestClientParameter.Builder().setRequestId(requestId)
1047 .setBaseVfModule(isBaseVfModule).setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
1048 .setRequestAction(action.toString()).setApiVersion(apiVersion).setALaCarte(aLaCarte)
1049 .setRequestUri(requestUri).setInstanceGroupId(instanceGroupId).build();
1052 return requestHandlerUtils.postBPELRequest(currentActiveReq, requestClientParameter,
1053 recipeLookupResult.getOrchestrationURI(), requestScope);
1056 protected String getPnfCorrelationId(ServiceInstancesRequest sir) {
1057 return Optional.of(sir).map(ServiceInstancesRequest::getRequestDetails)
1058 .map(RequestDetails::getRequestParameters).map(parameters -> parameters.getUserParamValue("pnfId"))
1062 private Response configurationRecipeLookup(String requestJSON, Action action, HashMap<String, String> instanceIdMap,
1063 String version, String requestId, String requestUri) throws ApiException {
1064 String serviceInstanceId;
1065 Boolean aLaCarte = null;
1066 String apiVersion = version.substring(1);
1067 ServiceInstancesRequest sir;
1069 sir = requestHandlerUtils.convertJsonToServiceInstanceRequest(requestJSON, action, requestId, requestUri);
1070 String requestScope = requestHandlerUtils.deriveRequestScope(action, sir, requestUri);
1071 InfraActiveRequests currentActiveReq =
1072 msoRequest.createRequestObject(sir, action, requestId, Status.IN_PROGRESS, requestJSON, requestScope);
1073 if (sir.getRequestDetails().getRequestParameters() != null) {
1074 aLaCarte = sir.getRequestDetails().getRequestParameters().getALaCarte();
1077 requestHandlerUtils.parseRequest(sir, instanceIdMap, action, version, requestJSON, aLaCarte, requestId,
1079 requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
1080 String instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();
1082 requestHandlerUtils.checkForDuplicateRequests(action, instanceIdMap, requestScope, currentActiveReq,
1085 ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
1086 RequestReferences referencesResponse = new RequestReferences();
1087 referencesResponse.setRequestId(requestId);
1088 serviceResponse.setRequestReferences(referencesResponse);
1090 String orchestrationUri = env.getProperty(CommonConstants.ALACARTE_ORCHESTRATION);
1091 String timeOut = env.getProperty(CommonConstants.ALACARTE_RECIPE_TIMEOUT);
1093 if (StringUtils.isBlank(orchestrationUri) || StringUtils.isBlank(timeOut)) {
1094 String error = StringUtils.isBlank(orchestrationUri) ? "ALaCarte Orchestration URI not found in properties"
1095 : "ALaCarte Recipe Timeout not found in properties";
1097 ErrorLoggerInfo errorLoggerInfo =
1098 new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, ErrorCode.DataError)
1099 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1101 ValidateException validateException = new ValidateException.Builder(error, HttpStatus.SC_NOT_FOUND,
1102 ErrorNumbers.SVC_GENERAL_SERVICE_ERROR).errorInfo(errorLoggerInfo).build();
1104 requestHandlerUtils.updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1106 throw validateException;
1110 serviceInstanceId = "";
1111 String configurationId = "";
1112 String pnfCorrelationId = "";
1114 if (sir.getServiceInstanceId() != null) {
1115 serviceInstanceId = sir.getServiceInstanceId();
1118 if (sir.getConfigurationId() != null) {
1119 configurationId = sir.getConfigurationId();
1122 pnfCorrelationId = getPnfCorrelationId(sir);
1125 infraActiveRequestsClient.save(currentActiveReq);
1126 } catch (Exception e) {
1127 ErrorLoggerInfo errorLoggerInfo =
1128 new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError)
1129 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1130 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR,
1131 ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e).errorInfo(errorLoggerInfo).build();
1134 if (!requestScope.equalsIgnoreCase(ModelType.service.name())) {
1136 } else if (aLaCarte == null) {
1139 RequestClientParameter requestClientParameter = null;
1141 requestClientParameter = new RequestClientParameter.Builder().setRequestId(requestId).setBaseVfModule(false)
1142 .setRecipeTimeout(Integer.parseInt(timeOut)).setRequestAction(action.toString())
1143 .setServiceInstanceId(serviceInstanceId).setPnfCorrelationId(pnfCorrelationId)
1144 .setConfigurationId(configurationId)
1145 .setRequestDetails(requestHandlerUtils.mapJSONtoMSOStyle(requestJSON, sir, aLaCarte, action))
1146 .setApiVersion(apiVersion).setALaCarte(aLaCarte).setRequestUri(requestUri).build();
1147 } catch (IOException e) {
1148 ErrorLoggerInfo errorLoggerInfo =
1149 new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, ErrorCode.SchemaError)
1150 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1151 throw new ValidateException.Builder("Unable to generate RequestClientParamter object" + e.getMessage(),
1152 HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER).errorInfo(errorLoggerInfo)
1156 return requestHandlerUtils.postBPELRequest(currentActiveReq, requestClientParameter, orchestrationUri,
1160 protected CloudConfiguration getCloudConfigurationOnReplace(String requestScope,
1161 HashMap<String, String> instanceIdMap, InfraActiveRequests currentActiveReq) throws ApiException {
1162 logger.debug("Replace request is missing cloudConfiguration, autofilling from create.");
1163 CloudConfiguration cloudConfiguration = null;
1164 if (requestScope.equals(ModelType.vfModule.toString())) {
1165 cloudConfiguration = bpmnRequestBuilder.getCloudConfigurationVfModuleReplace(
1166 instanceIdMap.get("vnfInstanceId"), instanceIdMap.get("vfModuleInstanceId"));
1168 cloudConfiguration = bpmnRequestBuilder.mapCloudConfigurationVnf(instanceIdMap.get("vnfInstanceId"));
1171 if (cloudConfiguration == null) {
1172 String errorMessage = "CloudConfiguration not found during autofill for replace request.";
1173 logger.error(errorMessage);
1174 updateStatus(currentActiveReq, Status.FAILED, errorMessage);
1175 throw new CloudConfigurationNotFoundException(
1176 "CloudConfiguration not found during autofill for replace request.");
1178 return cloudConfiguration;
1181 protected void setCloudConfigurationCurrentActiveRequest(CloudConfiguration cloudConfiguration,
1182 InfraActiveRequests currentActiveRequest) {
1183 if (cloudConfiguration.getLcpCloudRegionId() != null) {
1184 currentActiveRequest.setCloudRegion(cloudConfiguration.getLcpCloudRegionId());
1187 if (cloudConfiguration.getTenantId() != null) {
1188 currentActiveRequest.setTenantId(cloudConfiguration.getTenantId());