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.so.apihandler.common.CommonConstants;
44 import org.onap.so.apihandler.common.ErrorNumbers;
45 import org.onap.so.apihandler.common.RequestClientParameter;
46 import org.onap.so.apihandlerinfra.exceptions.ApiException;
47 import org.onap.so.apihandlerinfra.exceptions.RequestDbFailureException;
48 import org.onap.so.apihandlerinfra.exceptions.ValidateException;
49 import org.onap.so.apihandlerinfra.infra.rest.handler.AbstractRestHandler;
50 import org.onap.so.apihandlerinfra.infra.rest.validators.RequestValidatorListenerRunner;
51 import org.onap.so.apihandlerinfra.logging.ErrorLoggerInfo;
52 import org.onap.so.constants.Status;
53 import org.onap.so.db.catalog.client.CatalogDbClient;
54 import org.onap.so.db.request.beans.InfraActiveRequests;
55 import org.onap.so.db.request.client.RequestsDbClient;
56 import org.onap.so.exceptions.ValidationException;
57 import org.onap.so.logger.ErrorCode;
58 import org.onap.so.logger.MessageEnum;
59 import org.onap.so.serviceinstancebeans.ModelInfo;
60 import org.onap.so.serviceinstancebeans.ModelType;
61 import org.onap.so.serviceinstancebeans.RequestDetails;
62 import org.onap.so.serviceinstancebeans.RequestReferences;
63 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
64 import org.onap.so.serviceinstancebeans.ServiceInstancesResponse;
65 import org.slf4j.Logger;
66 import org.slf4j.LoggerFactory;
67 import org.springframework.beans.factory.annotation.Autowired;
68 import org.springframework.core.env.Environment;
69 import org.springframework.stereotype.Component;
70 import org.springframework.web.client.RestTemplate;
71 import io.swagger.v3.oas.annotations.OpenAPIDefinition;
72 import io.swagger.v3.oas.annotations.Operation;
73 import io.swagger.v3.oas.annotations.info.Info;
74 import io.swagger.v3.oas.annotations.media.ArraySchema;
75 import io.swagger.v3.oas.annotations.media.Content;
76 import io.swagger.v3.oas.annotations.media.Schema;
77 import io.swagger.v3.oas.annotations.responses.ApiResponse;
80 @Path("/onap/so/infra/serviceInstantiation")
81 @OpenAPIDefinition(info = @Info(title = "/onap/so/infra/serviceInstantiation",
82 description = "Infrastructure API Requests for Service Instances"))
83 public class ServiceInstances extends AbstractRestHandler {
85 private static Logger logger = LoggerFactory.getLogger(MsoRequest.class);
86 private static String uriPrefix = "/serviceInstantiation/";
87 private static final String SAVE_TO_DB = "save instance to db";
90 private Environment env;
93 private RestTemplate restTemplate;
96 private CatalogDbClient catalogDbClient;
99 private RequestsDbClient infraActiveRequestsClient;
102 private MsoRequest msoRequest;
105 private RequestHandlerUtils requestHandlerUtils;
108 private RequestValidatorListenerRunner requestValidatorListenerRunner;
111 @Path("/{version:[vV][5-7]}/serviceInstances")
112 @Consumes(MediaType.APPLICATION_JSON)
113 @Produces(MediaType.APPLICATION_JSON)
114 @Operation(description = "Create a Service Instance on a version provided", responses = @ApiResponse(
115 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
117 public Response createServiceInstance(String request, @PathParam("version") String version,
118 @Context ContainerRequestContext requestContext) throws ApiException {
119 String requestId = requestHandlerUtils.getRequestId(requestContext);
120 return serviceInstances(request, Action.createInstance, null, version, requestId,
121 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
125 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/activate")
126 @Consumes(MediaType.APPLICATION_JSON)
127 @Produces(MediaType.APPLICATION_JSON)
128 @Operation(description = "Activate provided Service Instance", responses = @ApiResponse(
129 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
131 public Response activateServiceInstance(String request, @PathParam("version") String version,
132 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
133 throws ApiException {
134 String requestId = requestHandlerUtils.getRequestId(requestContext);
135 HashMap<String, String> instanceIdMap = new HashMap<>();
136 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
137 return serviceInstances(request, Action.activateInstance, instanceIdMap, version, requestId,
138 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
142 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/deactivate")
143 @Consumes(MediaType.APPLICATION_JSON)
144 @Produces(MediaType.APPLICATION_JSON)
145 @Operation(description = "Deactivate provided Service Instance", responses = @ApiResponse(
146 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
148 public Response deactivateServiceInstance(String request, @PathParam("version") String version,
149 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
150 throws ApiException {
151 String requestId = requestHandlerUtils.getRequestId(requestContext);
152 HashMap<String, String> instanceIdMap = new HashMap<>();
153 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
154 return serviceInstances(request, Action.deactivateInstance, instanceIdMap, version, requestId,
155 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
159 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}")
160 @Consumes(MediaType.APPLICATION_JSON)
161 @Produces(MediaType.APPLICATION_JSON)
162 @Operation(description = "Delete provided Service Instance", responses = @ApiResponse(
163 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
165 public Response deleteServiceInstance(String request, @PathParam("version") String version,
166 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
167 throws ApiException {
168 String requestId = requestHandlerUtils.getRequestId(requestContext);
169 HashMap<String, String> instanceIdMap = new HashMap<>();
170 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
171 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
172 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
176 @Path("/{version:[vV][7]}/serviceInstances/assign")
177 @Consumes(MediaType.APPLICATION_JSON)
178 @Produces(MediaType.APPLICATION_JSON)
179 @Operation(description = "Assign Service Instance", responses = @ApiResponse(
180 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
182 public Response assignServiceInstance(String request, @PathParam("version") String version,
183 @Context ContainerRequestContext requestContext) throws ApiException {
184 String requestId = requestHandlerUtils.getRequestId(requestContext);
185 return serviceInstances(request, Action.assignInstance, null, version, requestId,
186 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
190 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/unassign")
191 @Consumes(MediaType.APPLICATION_JSON)
192 @Produces(MediaType.APPLICATION_JSON)
193 @Operation(description = "Unassign Service Instance", responses = @ApiResponse(
194 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
196 public Response unassignServiceInstance(String request, @PathParam("version") String version,
197 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
198 throws ApiException {
199 String requestId = requestHandlerUtils.getRequestId(requestContext);
200 HashMap<String, String> instanceIdMap = new HashMap<>();
201 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
202 return serviceInstances(request, Action.unassignInstance, instanceIdMap, version, requestId,
203 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
207 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations")
208 @Consumes(MediaType.APPLICATION_JSON)
209 @Produces(MediaType.APPLICATION_JSON)
210 @Operation(description = "Create Port Mirroring Configuration", responses = @ApiResponse(
211 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
213 public Response createPortConfiguration(String request, @PathParam("version") String version,
214 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
215 throws ApiException {
216 String requestId = requestHandlerUtils.getRequestId(requestContext);
217 HashMap<String, String> instanceIdMap = new HashMap<>();
218 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
219 return configurationRecipeLookup(request, Action.createInstance, instanceIdMap, version, requestId,
220 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
224 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}")
225 @Consumes(MediaType.APPLICATION_JSON)
226 @Produces(MediaType.APPLICATION_JSON)
227 @Operation(description = "Delete provided Port", responses = @ApiResponse(
228 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
230 public Response deletePortConfiguration(String request, @PathParam("version") String version,
231 @PathParam("serviceInstanceId") String serviceInstanceId,
232 @PathParam("configurationInstanceId") String configurationInstanceId,
233 @Context ContainerRequestContext requestContext) throws ApiException {
234 String requestId = requestHandlerUtils.getRequestId(requestContext);
235 HashMap<String, String> instanceIdMap = new HashMap<>();
236 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
237 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
238 return configurationRecipeLookup(request, Action.deleteInstance, instanceIdMap, version, requestId,
239 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
243 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/enablePort")
244 @Consumes(MediaType.APPLICATION_JSON)
245 @Produces(MediaType.APPLICATION_JSON)
246 @Operation(description = "Enable Port Mirroring", responses = @ApiResponse(
247 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
249 public Response enablePort(String request, @PathParam("version") String version,
250 @PathParam("serviceInstanceId") String serviceInstanceId,
251 @PathParam("configurationInstanceId") String configurationInstanceId,
252 @Context ContainerRequestContext requestContext) throws ApiException {
253 String requestId = requestHandlerUtils.getRequestId(requestContext);
254 HashMap<String, String> instanceIdMap = new HashMap<>();
255 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
256 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
257 return configurationRecipeLookup(request, Action.enablePort, instanceIdMap, version, requestId,
258 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
262 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/disablePort")
263 @Consumes(MediaType.APPLICATION_JSON)
264 @Produces(MediaType.APPLICATION_JSON)
265 @Operation(description = "Disable Port Mirroring", responses = @ApiResponse(
266 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
268 public Response disablePort(String request, @PathParam("version") String version,
269 @PathParam("serviceInstanceId") String serviceInstanceId,
270 @PathParam("configurationInstanceId") String configurationInstanceId,
271 @Context ContainerRequestContext requestContext) throws ApiException {
272 String requestId = requestHandlerUtils.getRequestId(requestContext);
273 HashMap<String, String> instanceIdMap = new HashMap<>();
274 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
275 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
276 return configurationRecipeLookup(request, Action.disablePort, instanceIdMap, version, requestId,
277 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
281 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/activate")
282 @Consumes(MediaType.APPLICATION_JSON)
283 @Produces(MediaType.APPLICATION_JSON)
284 @Operation(description = "Activate Port Mirroring", responses = @ApiResponse(
285 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
287 public Response activatePort(String request, @PathParam("version") String version,
288 @PathParam("serviceInstanceId") String serviceInstanceId,
289 @PathParam("configurationInstanceId") String configurationInstanceId,
290 @Context ContainerRequestContext requestContext) throws ApiException {
291 String requestId = requestHandlerUtils.getRequestId(requestContext);
292 HashMap<String, String> instanceIdMap = new HashMap<>();
293 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
294 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
295 return configurationRecipeLookup(request, Action.activateInstance, instanceIdMap, version, requestId,
296 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
300 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/deactivate")
301 @Consumes(MediaType.APPLICATION_JSON)
302 @Produces(MediaType.APPLICATION_JSON)
303 @Operation(description = "Deactivate Port Mirroring", responses = @ApiResponse(
304 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
306 public Response deactivatePort(String request, @PathParam("version") String version,
307 @PathParam("serviceInstanceId") String serviceInstanceId,
308 @PathParam("configurationInstanceId") String configurationInstanceId,
309 @Context ContainerRequestContext requestContext) throws ApiException {
310 String requestId = requestHandlerUtils.getRequestId(requestContext);
311 HashMap<String, String> instanceIdMap = new HashMap<>();
312 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
313 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
314 return configurationRecipeLookup(request, Action.deactivateInstance, instanceIdMap, version, requestId,
315 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
319 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/addRelationships")
320 @Consumes(MediaType.APPLICATION_JSON)
321 @Produces(MediaType.APPLICATION_JSON)
322 @Operation(description = "Add Relationships to a Service Instance", responses = @ApiResponse(
323 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
325 public Response addRelationships(String request, @PathParam("version") String version,
326 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
327 throws ApiException {
328 String requestId = requestHandlerUtils.getRequestId(requestContext);
329 HashMap<String, String> instanceIdMap = new HashMap<>();
330 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
331 return configurationRecipeLookup(request, Action.addRelationships, instanceIdMap, version, requestId,
332 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
336 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/removeRelationships")
337 @Consumes(MediaType.APPLICATION_JSON)
338 @Produces(MediaType.APPLICATION_JSON)
339 @Operation(description = "Remove Relationships from Service Instance", responses = @ApiResponse(
340 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
342 public Response removeRelationships(String request, @PathParam("version") String version,
343 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
344 throws ApiException {
345 String requestId = requestHandlerUtils.getRequestId(requestContext);
346 HashMap<String, String> instanceIdMap = new HashMap<>();
347 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
348 return configurationRecipeLookup(request, Action.removeRelationships, instanceIdMap, version, requestId,
349 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
353 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs")
354 @Consumes(MediaType.APPLICATION_JSON)
355 @Produces(MediaType.APPLICATION_JSON)
356 @Operation(description = "Create VNF on a specified version and serviceInstance", responses = @ApiResponse(
357 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
359 public Response createVnfInstance(String request, @PathParam("version") String version,
360 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
361 throws ApiException {
362 String requestId = requestHandlerUtils.getRequestId(requestContext);
363 HashMap<String, String> instanceIdMap = new HashMap<>();
364 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
366 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
367 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
368 } catch (Exception e) {
369 logger.error("Error in vnf", e);
375 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/replace")
376 @Consumes(MediaType.APPLICATION_JSON)
377 @Produces(MediaType.APPLICATION_JSON)
378 @Operation(description = "Replace provided VNF instance", responses = @ApiResponse(
379 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
381 public Response replaceVnfInstance(String request, @PathParam("version") String version,
382 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
383 @Context ContainerRequestContext requestContext) throws ApiException {
384 String requestId = requestHandlerUtils.getRequestId(requestContext);
385 HashMap<String, String> instanceIdMap = new HashMap<>();
386 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
387 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
388 return serviceInstances(request, Action.replaceInstance, instanceIdMap, version, requestId,
389 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
393 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}")
394 @Consumes(MediaType.APPLICATION_JSON)
395 @Produces(MediaType.APPLICATION_JSON)
396 @Operation(description = "Update VNF on a specified version, serviceInstance and vnfInstance",
397 responses = @ApiResponse(
398 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
400 public Response updateVnfInstance(String request, @PathParam("version") String version,
401 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
402 @Context ContainerRequestContext requestContext) throws ApiException {
403 String requestId = requestHandlerUtils.getRequestId(requestContext);
404 HashMap<String, String> instanceIdMap = new HashMap<>();
405 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
406 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
407 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
408 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
412 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/applyUpdatedConfig")
413 @Consumes(MediaType.APPLICATION_JSON)
414 @Produces(MediaType.APPLICATION_JSON)
415 @Operation(description = "Apply updated configuration", responses = @ApiResponse(
416 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
417 public Response applyUpdatedConfig(String request, @PathParam("version") String version,
418 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
419 @Context ContainerRequestContext requestContext) throws ApiException {
420 String requestId = requestHandlerUtils.getRequestId(requestContext);
421 HashMap<String, String> instanceIdMap = new HashMap<>();
422 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
423 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
424 return serviceInstances(request, Action.applyUpdatedConfig, instanceIdMap, version, requestId,
425 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
429 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/recreate")
430 @Consumes(MediaType.APPLICATION_JSON)
431 @Produces(MediaType.APPLICATION_JSON)
432 @Operation(description = "Recreate VNF Instance", responses = @ApiResponse(
433 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
434 public Response recreateVnfInstance(String request, @PathParam("version") String version,
435 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
436 @Context ContainerRequestContext requestContext) throws ApiException {
437 String requestId = requestHandlerUtils.getRequestId(requestContext);
438 HashMap<String, String> instanceIdMap = new HashMap<>();
439 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
440 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
441 return serviceInstances(request, Action.recreateInstance, instanceIdMap, version, requestId,
442 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
446 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}")
447 @Consumes(MediaType.APPLICATION_JSON)
448 @Produces(MediaType.APPLICATION_JSON)
449 @Operation(description = "Delete provided VNF instance", responses = @ApiResponse(
450 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
452 public Response deleteVnfInstance(String request, @PathParam("version") String version,
453 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
454 @Context ContainerRequestContext requestContext) throws ApiException {
455 String requestId = requestHandlerUtils.getRequestId(requestContext);
456 HashMap<String, String> instanceIdMap = new HashMap<>();
457 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
458 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
459 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
460 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
464 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules")
465 @Consumes(MediaType.APPLICATION_JSON)
466 @Produces(MediaType.APPLICATION_JSON)
467 @Operation(description = "Create VfModule on a specified version, serviceInstance and vnfInstance",
468 responses = @ApiResponse(
469 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
471 public Response createVfModuleInstance(String request, @PathParam("version") String version,
472 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
473 @Context ContainerRequestContext requestContext) throws ApiException {
474 String requestId = requestHandlerUtils.getRequestId(requestContext);
475 HashMap<String, String> instanceIdMap = new HashMap<>();
476 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
477 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
478 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
479 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
483 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/replace")
484 @Consumes(MediaType.APPLICATION_JSON)
485 @Produces(MediaType.APPLICATION_JSON)
486 @Operation(description = "Create VfModule on a specified version, serviceInstance and vnfInstance",
487 responses = @ApiResponse(
488 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
490 public Response replaceVfModuleInstance(String request, @PathParam("version") String version,
491 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
492 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
493 throws ApiException {
494 String requestId = requestHandlerUtils.getRequestId(requestContext);
495 HashMap<String, String> instanceIdMap = new HashMap<>();
496 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
497 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
498 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
499 return serviceInstances(request, Action.replaceInstance, instanceIdMap, version, requestId,
500 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
504 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}")
505 @Consumes(MediaType.APPLICATION_JSON)
506 @Produces(MediaType.APPLICATION_JSON)
507 @Operation(description = "Update VfModule on a specified version, serviceInstance, vnfInstance and vfModule",
508 responses = @ApiResponse(
509 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
511 public Response updateVfModuleInstance(String request, @PathParam("version") String version,
512 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
513 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
514 throws ApiException {
515 String requestId = requestHandlerUtils.getRequestId(requestContext);
516 HashMap<String, String> instanceIdMap = new HashMap<>();
517 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
518 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
519 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
520 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
521 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
525 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/inPlaceSoftwareUpdate")
526 @Consumes(MediaType.APPLICATION_JSON)
527 @Produces(MediaType.APPLICATION_JSON)
528 @Operation(description = "Perform VNF software update", responses = @ApiResponse(
529 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
531 public Response inPlaceSoftwareUpdate(String request, @PathParam("version") String version,
532 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
533 @Context ContainerRequestContext requestContext) throws ApiException {
534 String requestId = requestHandlerUtils.getRequestId(requestContext);
535 HashMap<String, String> instanceIdMap = new HashMap<>();
536 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
537 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
538 return serviceInstances(request, Action.inPlaceSoftwareUpdate, instanceIdMap, version, requestId,
539 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
543 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}")
544 @Consumes(MediaType.APPLICATION_JSON)
545 @Produces(MediaType.APPLICATION_JSON)
546 @Operation(description = "Delete provided VfModule instance", responses = @ApiResponse(
547 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
549 public Response deleteVfModuleInstance(String request, @PathParam("version") String version,
550 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
551 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
552 throws ApiException {
553 String requestId = requestHandlerUtils.getRequestId(requestContext);
554 HashMap<String, String> instanceIdMap = new HashMap<>();
555 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
556 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
557 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
558 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
559 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
563 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/deactivateAndCloudDelete")
564 @Consumes(MediaType.APPLICATION_JSON)
565 @Produces(MediaType.APPLICATION_JSON)
566 @Operation(description = "Deactivate and Cloud Delete VfModule instance", responses = @ApiResponse(
567 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
569 public Response deactivateAndCloudDeleteVfModuleInstance(String request, @PathParam("version") String version,
570 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
571 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
572 throws ApiException {
573 String requestId = requestHandlerUtils.getRequestId(requestContext);
574 HashMap<String, String> instanceIdMap = new HashMap<>();
575 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
576 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
577 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
578 Response response = serviceInstances(request, Action.deactivateAndCloudDelete, instanceIdMap, version,
579 requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
584 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/scaleOut")
585 @Consumes(MediaType.APPLICATION_JSON)
586 @Produces(MediaType.APPLICATION_JSON)
587 @Operation(description = "VF Auto Scale Out", responses = @ApiResponse(
588 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
590 public Response scaleOutVfModule(String request, @PathParam("version") String version,
591 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
592 @Context ContainerRequestContext requestContext) throws ApiException {
593 String requestId = requestHandlerUtils.getRequestId(requestContext);
594 HashMap<String, String> instanceIdMap = new HashMap<>();
595 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
596 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
597 return serviceInstances(request, Action.scaleOut, instanceIdMap, version, requestId,
598 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
602 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups")
603 @Consumes(MediaType.APPLICATION_JSON)
604 @Produces(MediaType.APPLICATION_JSON)
605 @Operation(description = "Create VolumeGroup on a specified version, serviceInstance, vnfInstance",
606 responses = @ApiResponse(
607 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
609 public Response createVolumeGroupInstance(String request, @PathParam("version") String version,
610 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
611 @Context ContainerRequestContext requestContext) throws ApiException {
612 String requestId = requestHandlerUtils.getRequestId(requestContext);
613 HashMap<String, String> instanceIdMap = new HashMap<>();
614 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
615 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
616 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
617 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
621 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}")
622 @Consumes(MediaType.APPLICATION_JSON)
623 @Produces(MediaType.APPLICATION_JSON)
624 @Operation(description = "Update VolumeGroup on a specified version, serviceInstance, vnfInstance and volumeGroup",
625 responses = @ApiResponse(
626 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
628 public Response updateVolumeGroupInstance(String request, @PathParam("version") String version,
629 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
630 @PathParam("volumeGroupInstanceId") String volumeGroupInstanceId,
631 @Context ContainerRequestContext requestContext) throws ApiException {
632 String requestId = requestHandlerUtils.getRequestId(requestContext);
633 HashMap<String, String> instanceIdMap = new HashMap<>();
634 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
635 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
636 instanceIdMap.put("volumeGroupInstanceId", volumeGroupInstanceId);
637 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
638 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
642 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}")
643 @Consumes(MediaType.APPLICATION_JSON)
644 @Produces(MediaType.APPLICATION_JSON)
645 @Operation(description = "Delete provided VolumeGroup instance", responses = @ApiResponse(
646 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
648 public Response deleteVolumeGroupInstance(String request, @PathParam("version") String version,
649 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
650 @PathParam("volumeGroupInstanceId") String volumeGroupInstanceId,
651 @Context ContainerRequestContext requestContext) throws ApiException {
652 String requestId = requestHandlerUtils.getRequestId(requestContext);
653 HashMap<String, String> instanceIdMap = new HashMap<>();
654 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
655 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
656 instanceIdMap.put("volumeGroupInstanceId", volumeGroupInstanceId);
657 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
658 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
662 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks")
663 @Consumes(MediaType.APPLICATION_JSON)
664 @Produces(MediaType.APPLICATION_JSON)
665 @Operation(description = "Create NetworkInstance on a specified version and serviceInstance ",
666 responses = @ApiResponse(
667 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
669 public Response createNetworkInstance(String request, @PathParam("version") String version,
670 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
671 throws ApiException {
672 String requestId = requestHandlerUtils.getRequestId(requestContext);
673 HashMap<String, String> instanceIdMap = new HashMap<>();
674 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
675 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
676 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
680 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks/{networkInstanceId}")
681 @Consumes(MediaType.APPLICATION_JSON)
682 @Produces(MediaType.APPLICATION_JSON)
683 @Operation(description = "Update VolumeGroup on a specified version, serviceInstance, networkInstance",
684 responses = @ApiResponse(
685 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
687 public Response updateNetworkInstance(String request, @PathParam("version") String version,
688 @PathParam("serviceInstanceId") String serviceInstanceId,
689 @PathParam("networkInstanceId") String networkInstanceId, @Context ContainerRequestContext requestContext)
690 throws ApiException {
691 String requestId = requestHandlerUtils.getRequestId(requestContext);
692 HashMap<String, String> instanceIdMap = new HashMap<>();
693 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
694 instanceIdMap.put("networkInstanceId", networkInstanceId);
695 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
696 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
700 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks/{networkInstanceId}")
701 @Consumes(MediaType.APPLICATION_JSON)
702 @Produces(MediaType.APPLICATION_JSON)
703 @Operation(description = "Delete provided Network instance", responses = @ApiResponse(
704 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
706 public Response deleteNetworkInstance(String request, @PathParam("version") String version,
707 @PathParam("serviceInstanceId") String serviceInstanceId,
708 @PathParam("networkInstanceId") String networkInstanceId, @Context ContainerRequestContext requestContext)
709 throws ApiException {
710 String requestId = requestHandlerUtils.getRequestId(requestContext);
711 HashMap<String, String> instanceIdMap = new HashMap<>();
712 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
713 instanceIdMap.put("networkInstanceId", networkInstanceId);
714 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
715 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
719 @Path("/{version:[vV][7]}/instanceGroups")
720 @Consumes(MediaType.APPLICATION_JSON)
721 @Produces(MediaType.APPLICATION_JSON)
722 @Operation(description = "Create instanceGroups", responses = @ApiResponse(
723 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
725 public Response createInstanceGroups(String request, @PathParam("version") String version,
726 @Context ContainerRequestContext requestContext) throws ApiException {
727 String requestId = requestHandlerUtils.getRequestId(requestContext);
728 return serviceInstances(request, Action.createInstance, null, version, requestId,
729 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
733 @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}")
734 @Consumes(MediaType.APPLICATION_JSON)
735 @Produces(MediaType.APPLICATION_JSON)
736 @Operation(description = "Delete instanceGroup", responses = @ApiResponse(
737 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
739 public Response deleteInstanceGroups(@PathParam("version") String version,
740 @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext)
741 throws ApiException {
742 String requestId = requestHandlerUtils.getRequestId(requestContext);
743 HashMap<String, String> instanceIdMap = new HashMap<>();
744 instanceIdMap.put(CommonConstants.INSTANCE_GROUP_INSTANCE_ID, instanceGroupId);
745 return deleteInstanceGroups(Action.deleteInstance, instanceIdMap, version, requestId,
746 requestHandlerUtils.getRequestUri(requestContext, uriPrefix), requestContext);
750 @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}/addMembers")
751 @Consumes(MediaType.APPLICATION_JSON)
752 @Produces(MediaType.APPLICATION_JSON)
753 @Operation(description = "Add instanceGroup members", responses = @ApiResponse(
754 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
756 public Response addInstanceGroupMembers(String request, @PathParam("version") String version,
757 @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext)
758 throws ApiException {
759 String requestId = requestHandlerUtils.getRequestId(requestContext);
760 HashMap<String, String> instanceIdMap = new HashMap<>();
761 instanceIdMap.put(CommonConstants.INSTANCE_GROUP_INSTANCE_ID, instanceGroupId);
762 return serviceInstances(request, Action.addMembers, instanceIdMap, version, requestId,
763 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
767 @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}/removeMembers")
768 @Consumes(MediaType.APPLICATION_JSON)
769 @Produces(MediaType.APPLICATION_JSON)
770 @Operation(description = "Remove instanceGroup members", responses = @ApiResponse(
771 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
773 public Response removeInstanceGroupMembers(String request, @PathParam("version") String version,
774 @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext)
775 throws ApiException {
776 String requestId = requestHandlerUtils.getRequestId(requestContext);
777 HashMap<String, String> instanceIdMap = new HashMap<>();
778 instanceIdMap.put(CommonConstants.INSTANCE_GROUP_INSTANCE_ID, instanceGroupId);
779 return serviceInstances(request, Action.removeMembers, instanceIdMap, version, requestId,
780 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
784 * This method is used for POST a request to the BPEL client (BPMN).
786 * Convert the requestJson to ServiceInstanceRequest(sir), create the msoRequest object, check whether this request
787 * is already being processed in requestdb for duplicate check.
789 * Based on the alacarte flag, sir and msoRequest will do the recipe lookup from the service and servicerecipe table
790 * of catalogdb, and get the OrchestrationURI.
792 * If the present request is not the duplicate request then this request will be saved in the requestdb. and will
793 * POST a request to the BPMN engine at the OrchestrationURI fetched.
795 * @param requestJSON Json fetched as body in the API call
796 * @param action Type of action to be performed
797 * @param instanceIdMap Map of instance ids of service/vnf/vf/configuration etc..
798 * @param version Supported version of API
799 * @param requestId Unique id for the request
801 * @return response object
802 * @throws ApiException
804 public Response serviceInstances(String requestJSON, Actions action, HashMap<String, String> instanceIdMap,
805 String version, String requestId, String requestUri) throws ApiException {
806 return serviceInstances(requestJSON, action, instanceIdMap, version, requestId, requestUri, null);
810 public Response serviceInstances(String requestJSON, Actions action, HashMap<String, String> instanceIdMap,
811 String version, String requestId, String requestUri, HashMap<String, String> queryParams)
812 throws ApiException {
813 String serviceInstanceId;
814 Boolean aLaCarte = null;
815 ServiceInstancesRequest sir;
816 String apiVersion = version.substring(1);
818 sir = requestHandlerUtils.convertJsonToServiceInstanceRequest(requestJSON, action, requestId, requestUri);
819 action = handleReplaceInstance(action, sir);
820 requestValidatorListenerRunner.runValidations(requestUri, instanceIdMap, sir, queryParams);
822 String requestScope = requestHandlerUtils.deriveRequestScope(action, sir, requestUri);
823 InfraActiveRequests currentActiveReq =
824 msoRequest.createRequestObject(sir, action, requestId, Status.IN_PROGRESS, requestJSON, requestScope);
825 if (sir.getRequestDetails().getRequestParameters() != null) {
826 aLaCarte = sir.getRequestDetails().getRequestParameters().getALaCarte();
828 requestHandlerUtils.parseRequest(sir, instanceIdMap, action, version, requestJSON, aLaCarte, requestId,
830 requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
832 int requestVersion = Integer.parseInt(version.substring(1));
833 String instanceName = null;
834 if (sir.getRequestDetails().getRequestInfo() != null) {
835 instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();
837 boolean alaCarteFlag = msoRequest.getAlacarteFlag(sir);
838 String vnfType = msoRequest.getVnfType(sir, requestScope, action, requestVersion);
839 String networkType = msoRequest.getNetworkType(sir, requestScope);
840 String sdcServiceModelVersion = msoRequest.getSDCServiceModelVersion(sir);
841 String vfModuleType = msoRequest.getVfModuleType(sir, requestScope, action, requestVersion);
843 if (requestScope.equalsIgnoreCase(ModelType.vnf.name()) && vnfType != null) {
844 currentActiveReq.setVnfType(vnfType);
845 } else if (requestScope.equalsIgnoreCase(ModelType.network.name()) && networkType != null) {
846 currentActiveReq.setNetworkType(networkType);
849 InfraActiveRequests dup = null;
850 boolean inProgress = false;
852 dup = requestHandlerUtils.duplicateCheck(action, instanceIdMap, instanceName, requestScope, currentActiveReq);
855 inProgress = requestHandlerUtils.camundaHistoryCheck(dup, currentActiveReq);
858 if (dup != null && inProgress) {
859 requestHandlerUtils.buildErrorOnDuplicateRecord(currentActiveReq, action, instanceIdMap, instanceName,
862 ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
864 RequestReferences referencesResponse = new RequestReferences();
866 referencesResponse.setRequestId(requestId);
868 serviceResponse.setRequestReferences(referencesResponse);
869 RecipeLookupResult recipeLookupResult =
870 requestHandlerUtils.getServiceInstanceOrchestrationURI(sir, action, alaCarteFlag, currentActiveReq);
871 String serviceInstanceType = requestHandlerUtils.getServiceType(requestScope, sir, alaCarteFlag);
873 ModelInfo modelInfo = sir.getRequestDetails().getModelInfo();
874 ModelType modelType = requestHandlerUtils.getModelType(action, modelInfo);
876 Boolean isBaseVfModule = false;
878 if (modelType.equals(ModelType.vfModule)) {
879 isBaseVfModule = requestHandlerUtils.getIsBaseVfModule(modelInfo, action, vnfType, sdcServiceModelVersion,
883 serviceInstanceId = requestHandlerUtils.setServiceInstanceId(requestScope, sir);
885 String vfModuleId = "";
886 String volumeGroupId = "";
887 String networkId = "";
888 String pnfCorrelationId = "";
889 String instanceGroupId = null;
891 if (sir.getVnfInstanceId() != null) {
892 vnfId = sir.getVnfInstanceId();
895 if (sir.getVfModuleInstanceId() != null) {
896 vfModuleId = sir.getVfModuleInstanceId();
899 if (sir.getVolumeGroupInstanceId() != null) {
900 volumeGroupId = sir.getVolumeGroupInstanceId();
903 if (sir.getNetworkInstanceId() != null) {
904 networkId = sir.getNetworkInstanceId();
906 if (sir.getInstanceGroupId() != null) {
907 instanceGroupId = sir.getInstanceGroupId();
910 pnfCorrelationId = getPnfCorrelationId(sir);
913 infraActiveRequestsClient.save(currentActiveReq);
914 } catch (Exception e) {
915 logger.error("Exception occurred", e);
916 ErrorLoggerInfo errorLoggerInfo =
917 new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError)
918 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
919 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR,
920 ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e).errorInfo(errorLoggerInfo).build();
923 if (!requestScope.equalsIgnoreCase(ModelType.service.name()) && action != Action.recreateInstance) {
925 } else if (aLaCarte == null) {
930 RequestClientParameter requestClientParameter = null;
932 requestClientParameter = new RequestClientParameter.Builder().setRequestId(requestId)
933 .setBaseVfModule(isBaseVfModule).setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
934 .setRequestAction(action.toString()).setServiceInstanceId(serviceInstanceId)
935 .setPnfCorrelationId(pnfCorrelationId).setVnfId(vnfId).setVfModuleId(vfModuleId)
936 .setVolumeGroupId(volumeGroupId).setNetworkId(networkId).setServiceType(serviceInstanceType)
937 .setVnfType(vnfType).setVfModuleType(vfModuleType).setNetworkType(networkType)
938 .setRequestDetails(requestHandlerUtils.mapJSONtoMSOStyle(requestJSON, sir, aLaCarte, action))
939 .setApiVersion(apiVersion).setALaCarte(aLaCarte).setRequestUri(requestUri)
940 .setInstanceGroupId(instanceGroupId).build();
941 } catch (IOException e) {
942 logger.error("Exception occurred", e);
943 ErrorLoggerInfo errorLoggerInfo =
944 new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, ErrorCode.SchemaError)
945 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
946 throw new ValidateException.Builder("Unable to generate RequestClientParamter object" + e.getMessage(),
947 HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER).errorInfo(errorLoggerInfo)
950 return requestHandlerUtils.postBPELRequest(currentActiveReq, requestClientParameter,
951 recipeLookupResult.getOrchestrationURI(), requestScope);
959 protected Actions handleReplaceInstance(Actions action, ServiceInstancesRequest sir) {
960 if (action != null && action.equals(Action.replaceInstance)
961 && sir.getRequestDetails().getRequestParameters().getRetainAssignments() != null
962 && sir.getRequestDetails().getRequestParameters().getRetainAssignments()) {
963 action = Action.replaceInstanceRetainAssignments;
969 * This method deletes the Instance Groups.
971 * This method will check whether the request is not duplicate in requestdb. if its not then will save as a new
972 * request. And will send a POST request to BEPL client to delete the Insatnce Groups.
975 * @param instanceIdMap
979 * @param requestContext
981 * @throws ApiException
983 public Response deleteInstanceGroups(Actions action, HashMap<String, String> instanceIdMap, String version,
984 String requestId, String requestUri, ContainerRequestContext requestContext) throws ApiException {
985 String instanceGroupId = instanceIdMap.get(CommonConstants.INSTANCE_GROUP_INSTANCE_ID);
986 Boolean aLaCarte = true;
987 String apiVersion = version.substring(1);
988 ServiceInstancesRequest sir = new ServiceInstancesRequest();
989 sir.setInstanceGroupId(instanceGroupId);
991 String requestScope = ModelType.instanceGroup.toString();
992 InfraActiveRequests currentActiveReq =
993 msoRequest.createRequestObject(sir, action, requestId, Status.IN_PROGRESS, null, requestScope);
994 requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
996 requestHandlerUtils.validateHeaders(requestContext);
997 } catch (ValidationException e) {
998 logger.error("Exception occurred", e);
999 ErrorLoggerInfo errorLoggerInfo =
1000 new ErrorLoggerInfo.Builder(MessageEnum.APIH_VALIDATION_ERROR, ErrorCode.SchemaError)
1001 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1002 ValidateException validateException =
1003 new ValidateException.Builder(e.getMessage(), HttpStatus.SC_BAD_REQUEST,
1004 ErrorNumbers.SVC_BAD_PARAMETER).cause(e).errorInfo(errorLoggerInfo).build();
1005 requestHandlerUtils.updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1006 throw validateException;
1009 InfraActiveRequests dup =
1010 requestHandlerUtils.duplicateCheck(action, instanceIdMap, null, requestScope, currentActiveReq);
1011 boolean inProgress = false;
1014 inProgress = requestHandlerUtils.camundaHistoryCheck(dup, currentActiveReq);
1017 if (dup != null && inProgress) {
1018 requestHandlerUtils.buildErrorOnDuplicateRecord(currentActiveReq, action, instanceIdMap, null, requestScope,
1022 ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
1024 RequestReferences referencesResponse = new RequestReferences();
1026 referencesResponse.setRequestId(requestId);
1028 serviceResponse.setRequestReferences(referencesResponse);
1029 Boolean isBaseVfModule = false;
1031 RecipeLookupResult recipeLookupResult = new RecipeLookupResult("/mso/async/services/WorkflowActionBB", 180);
1034 infraActiveRequestsClient.save(currentActiveReq);
1035 } catch (Exception e) {
1036 logger.error("Exception occurred", e);
1037 ErrorLoggerInfo errorLoggerInfo =
1038 new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError)
1039 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1040 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR,
1041 ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e).errorInfo(errorLoggerInfo).build();
1044 RequestClientParameter requestClientParameter = new RequestClientParameter.Builder().setRequestId(requestId)
1045 .setBaseVfModule(isBaseVfModule).setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
1046 .setRequestAction(action.toString()).setApiVersion(apiVersion).setALaCarte(aLaCarte)
1047 .setRequestUri(requestUri).setInstanceGroupId(instanceGroupId).build();
1050 return requestHandlerUtils.postBPELRequest(currentActiveReq, requestClientParameter,
1051 recipeLookupResult.getOrchestrationURI(), requestScope);
1054 protected String getPnfCorrelationId(ServiceInstancesRequest sir) {
1055 return Optional.of(sir).map(ServiceInstancesRequest::getRequestDetails)
1056 .map(RequestDetails::getRequestParameters).map(parameters -> parameters.getUserParamValue("pnfId"))
1060 private Response configurationRecipeLookup(String requestJSON, Action action, HashMap<String, String> instanceIdMap,
1061 String version, String requestId, String requestUri) throws ApiException {
1062 String serviceInstanceId;
1063 Boolean aLaCarte = null;
1064 String apiVersion = version.substring(1);
1065 boolean inProgress = false;
1066 ServiceInstancesRequest sir;
1068 sir = requestHandlerUtils.convertJsonToServiceInstanceRequest(requestJSON, action, requestId, requestUri);
1069 String requestScope = requestHandlerUtils.deriveRequestScope(action, sir, requestUri);
1070 InfraActiveRequests currentActiveReq =
1071 msoRequest.createRequestObject(sir, action, requestId, Status.IN_PROGRESS, requestJSON, requestScope);
1072 if (sir.getRequestDetails().getRequestParameters() != null) {
1073 aLaCarte = sir.getRequestDetails().getRequestParameters().getALaCarte();
1075 requestHandlerUtils.parseRequest(sir, instanceIdMap, action, version, requestJSON, aLaCarte, requestId,
1077 requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
1078 String instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();
1080 InfraActiveRequests dup = null;
1082 dup = requestHandlerUtils.duplicateCheck(action, instanceIdMap, instanceName, requestScope, currentActiveReq);
1085 inProgress = requestHandlerUtils.camundaHistoryCheck(dup, currentActiveReq);
1088 if (instanceIdMap != null && dup != null && inProgress) {
1089 requestHandlerUtils.buildErrorOnDuplicateRecord(currentActiveReq, action, instanceIdMap, instanceName,
1093 ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
1094 RequestReferences referencesResponse = new RequestReferences();
1095 referencesResponse.setRequestId(requestId);
1096 serviceResponse.setRequestReferences(referencesResponse);
1098 String orchestrationUri = env.getProperty(CommonConstants.ALACARTE_ORCHESTRATION);
1099 String timeOut = env.getProperty(CommonConstants.ALACARTE_RECIPE_TIMEOUT);
1101 if (StringUtils.isBlank(orchestrationUri) || StringUtils.isBlank(timeOut)) {
1102 String error = StringUtils.isBlank(orchestrationUri) ? "ALaCarte Orchestration URI not found in properties"
1103 : "ALaCarte Recipe Timeout not found in properties";
1105 ErrorLoggerInfo errorLoggerInfo =
1106 new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, ErrorCode.DataError)
1107 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1109 ValidateException validateException = new ValidateException.Builder(error, HttpStatus.SC_NOT_FOUND,
1110 ErrorNumbers.SVC_GENERAL_SERVICE_ERROR).errorInfo(errorLoggerInfo).build();
1112 requestHandlerUtils.updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1114 throw validateException;
1118 serviceInstanceId = "";
1119 String configurationId = "";
1120 String pnfCorrelationId = "";
1122 if (sir.getServiceInstanceId() != null) {
1123 serviceInstanceId = sir.getServiceInstanceId();
1126 if (sir.getConfigurationId() != null) {
1127 configurationId = sir.getConfigurationId();
1130 pnfCorrelationId = getPnfCorrelationId(sir);
1133 infraActiveRequestsClient.save(currentActiveReq);
1134 } catch (Exception e) {
1135 ErrorLoggerInfo errorLoggerInfo =
1136 new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError)
1137 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1138 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR,
1139 ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e).errorInfo(errorLoggerInfo).build();
1142 if (!requestScope.equalsIgnoreCase(ModelType.service.name())) {
1144 } else if (aLaCarte == null) {
1147 RequestClientParameter requestClientParameter = null;
1149 requestClientParameter = new RequestClientParameter.Builder().setRequestId(requestId).setBaseVfModule(false)
1150 .setRecipeTimeout(Integer.parseInt(timeOut)).setRequestAction(action.toString())
1151 .setServiceInstanceId(serviceInstanceId).setPnfCorrelationId(pnfCorrelationId)
1152 .setConfigurationId(configurationId)
1153 .setRequestDetails(requestHandlerUtils.mapJSONtoMSOStyle(requestJSON, sir, aLaCarte, action))
1154 .setApiVersion(apiVersion).setALaCarte(aLaCarte).setRequestUri(requestUri).build();
1155 } catch (IOException e) {
1156 ErrorLoggerInfo errorLoggerInfo =
1157 new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, ErrorCode.SchemaError)
1158 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1159 throw new ValidateException.Builder("Unable to generate RequestClientParamter object" + e.getMessage(),
1160 HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER).errorInfo(errorLoggerInfo)
1164 return requestHandlerUtils.postBPELRequest(currentActiveReq, requestClientParameter, orchestrationUri,