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 java.util.stream.Collectors;
30 import javax.transaction.Transactional;
31 import javax.ws.rs.Consumes;
32 import javax.ws.rs.DELETE;
33 import javax.ws.rs.POST;
34 import javax.ws.rs.PUT;
35 import javax.ws.rs.Path;
36 import javax.ws.rs.PathParam;
37 import javax.ws.rs.Produces;
38 import javax.ws.rs.container.ContainerRequestContext;
39 import javax.ws.rs.core.Context;
40 import javax.ws.rs.core.MediaType;
41 import javax.ws.rs.core.Response;
42 import org.apache.commons.lang.StringUtils;
43 import org.apache.http.HttpStatus;
44 import org.onap.logging.filter.base.ErrorCode;
45 import org.onap.so.apihandler.common.CommonConstants;
46 import org.onap.so.apihandler.common.ErrorNumbers;
47 import org.onap.so.apihandler.common.RequestClientParameter;
48 import org.onap.so.apihandlerinfra.exceptions.ApiException;
49 import org.onap.so.apihandlerinfra.exceptions.RequestDbFailureException;
50 import org.onap.so.apihandlerinfra.exceptions.ValidateException;
51 import org.onap.so.apihandlerinfra.infra.rest.BpmnRequestBuilder;
52 import org.onap.so.apihandlerinfra.infra.rest.exception.CloudConfigurationNotFoundException;
53 import org.onap.so.apihandlerinfra.infra.rest.handler.AbstractRestHandler;
54 import org.onap.so.apihandlerinfra.infra.rest.validators.RequestValidatorListenerRunner;
55 import org.onap.so.apihandlerinfra.logging.ErrorLoggerInfo;
56 import org.onap.so.constants.Status;
57 import org.onap.so.db.catalog.client.CatalogDbClient;
58 import org.onap.so.db.request.beans.InfraActiveRequests;
59 import org.onap.so.db.request.client.RequestsDbClient;
60 import org.onap.so.exceptions.ValidationException;
61 import org.onap.so.logger.MessageEnum;
62 import org.onap.so.serviceinstancebeans.CloudConfiguration;
63 import org.onap.so.serviceinstancebeans.ModelInfo;
64 import org.onap.so.serviceinstancebeans.ModelType;
65 import org.onap.so.serviceinstancebeans.RequestDetails;
66 import org.onap.so.serviceinstancebeans.RequestReferences;
67 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
68 import org.onap.so.serviceinstancebeans.ServiceInstancesResponse;
69 import org.slf4j.Logger;
70 import org.slf4j.LoggerFactory;
71 import org.springframework.beans.factory.annotation.Autowired;
72 import org.springframework.core.env.Environment;
73 import org.springframework.stereotype.Component;
74 import org.springframework.web.client.RestTemplate;
75 import io.swagger.v3.oas.annotations.OpenAPIDefinition;
76 import io.swagger.v3.oas.annotations.Operation;
77 import io.swagger.v3.oas.annotations.info.Info;
78 import io.swagger.v3.oas.annotations.media.ArraySchema;
79 import io.swagger.v3.oas.annotations.media.Content;
80 import io.swagger.v3.oas.annotations.media.Schema;
81 import io.swagger.v3.oas.annotations.responses.ApiResponse;
84 @Path("/onap/so/infra/serviceInstantiation")
85 @OpenAPIDefinition(info = @Info(title = "/onap/so/infra/serviceInstantiation",
86 description = "Infrastructure API Requests for Service Instances"))
87 public class ServiceInstances extends AbstractRestHandler {
89 private static Logger logger = LoggerFactory.getLogger(MsoRequest.class);
90 private static String uriPrefix = "/serviceInstantiation/";
91 private static final String SAVE_TO_DB = "save instance to db";
94 private Environment env;
97 private RestTemplate restTemplate;
100 private CatalogDbClient catalogDbClient;
103 private RequestsDbClient infraActiveRequestsClient;
106 private MsoRequest msoRequest;
109 private RequestHandlerUtils requestHandlerUtils;
112 private RequestValidatorListenerRunner requestValidatorListenerRunner;
115 private BpmnRequestBuilder bpmnRequestBuilder;
118 @Path("/{version:[vV][5-7]}/serviceInstances")
119 @Consumes(MediaType.APPLICATION_JSON)
120 @Produces(MediaType.APPLICATION_JSON)
121 @Operation(description = "Create a Service Instance on a version provided", responses = @ApiResponse(
122 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
124 public Response createServiceInstance(String request, @PathParam("version") String version,
125 @Context ContainerRequestContext requestContext) throws ApiException {
126 String requestId = requestHandlerUtils.getRequestId(requestContext);
127 return serviceInstances(request, Action.createInstance, null, version, requestId,
128 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
132 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/activate")
133 @Consumes(MediaType.APPLICATION_JSON)
134 @Produces(MediaType.APPLICATION_JSON)
135 @Operation(description = "Activate provided Service Instance", responses = @ApiResponse(
136 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
138 public Response activateServiceInstance(String request, @PathParam("version") String version,
139 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
140 throws ApiException {
141 String requestId = requestHandlerUtils.getRequestId(requestContext);
142 HashMap<String, String> instanceIdMap = new HashMap<>();
143 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
144 return serviceInstances(request, Action.activateInstance, instanceIdMap, version, requestId,
145 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
149 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/deactivate")
150 @Consumes(MediaType.APPLICATION_JSON)
151 @Produces(MediaType.APPLICATION_JSON)
152 @Operation(description = "Deactivate provided Service Instance", responses = @ApiResponse(
153 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
155 public Response deactivateServiceInstance(String request, @PathParam("version") String version,
156 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
157 throws ApiException {
158 String requestId = requestHandlerUtils.getRequestId(requestContext);
159 HashMap<String, String> instanceIdMap = new HashMap<>();
160 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
161 return serviceInstances(request, Action.deactivateInstance, instanceIdMap, version, requestId,
162 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
166 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}")
167 @Consumes(MediaType.APPLICATION_JSON)
168 @Produces(MediaType.APPLICATION_JSON)
169 @Operation(description = "Delete provided Service Instance", responses = @ApiResponse(
170 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
172 public Response deleteServiceInstance(String request, @PathParam("version") String version,
173 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
174 throws ApiException {
175 String requestId = requestHandlerUtils.getRequestId(requestContext);
176 HashMap<String, String> instanceIdMap = new HashMap<>();
177 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
178 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
179 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
183 @Path("/{version:[vV][7]}/serviceInstances/assign")
184 @Consumes(MediaType.APPLICATION_JSON)
185 @Produces(MediaType.APPLICATION_JSON)
186 @Operation(description = "Assign Service Instance", responses = @ApiResponse(
187 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
189 public Response assignServiceInstance(String request, @PathParam("version") String version,
190 @Context ContainerRequestContext requestContext) throws ApiException {
191 String requestId = requestHandlerUtils.getRequestId(requestContext);
192 return serviceInstances(request, Action.assignInstance, null, version, requestId,
193 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
197 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/unassign")
198 @Consumes(MediaType.APPLICATION_JSON)
199 @Produces(MediaType.APPLICATION_JSON)
200 @Operation(description = "Unassign Service Instance", responses = @ApiResponse(
201 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
203 public Response unassignServiceInstance(String request, @PathParam("version") String version,
204 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
205 throws ApiException {
206 String requestId = requestHandlerUtils.getRequestId(requestContext);
207 HashMap<String, String> instanceIdMap = new HashMap<>();
208 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
209 return serviceInstances(request, Action.unassignInstance, instanceIdMap, version, requestId,
210 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
214 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations")
215 @Consumes(MediaType.APPLICATION_JSON)
216 @Produces(MediaType.APPLICATION_JSON)
217 @Operation(description = "Create Port Mirroring Configuration", responses = @ApiResponse(
218 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
220 public Response createPortConfiguration(String request, @PathParam("version") String version,
221 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
222 throws ApiException {
223 String requestId = requestHandlerUtils.getRequestId(requestContext);
224 HashMap<String, String> instanceIdMap = new HashMap<>();
225 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
226 return configurationRecipeLookup(request, Action.createInstance, instanceIdMap, version, requestId,
227 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
231 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}")
232 @Consumes(MediaType.APPLICATION_JSON)
233 @Produces(MediaType.APPLICATION_JSON)
234 @Operation(description = "Delete provided Port", responses = @ApiResponse(
235 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
237 public Response deletePortConfiguration(String request, @PathParam("version") String version,
238 @PathParam("serviceInstanceId") String serviceInstanceId,
239 @PathParam("configurationInstanceId") String configurationInstanceId,
240 @Context ContainerRequestContext requestContext) throws ApiException {
241 String requestId = requestHandlerUtils.getRequestId(requestContext);
242 HashMap<String, String> instanceIdMap = new HashMap<>();
243 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
244 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
245 return configurationRecipeLookup(request, Action.deleteInstance, instanceIdMap, version, requestId,
246 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
250 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/enablePort")
251 @Consumes(MediaType.APPLICATION_JSON)
252 @Produces(MediaType.APPLICATION_JSON)
253 @Operation(description = "Enable Port Mirroring", responses = @ApiResponse(
254 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
256 public Response enablePort(String request, @PathParam("version") String version,
257 @PathParam("serviceInstanceId") String serviceInstanceId,
258 @PathParam("configurationInstanceId") String configurationInstanceId,
259 @Context ContainerRequestContext requestContext) throws ApiException {
260 String requestId = requestHandlerUtils.getRequestId(requestContext);
261 HashMap<String, String> instanceIdMap = new HashMap<>();
262 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
263 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
264 return configurationRecipeLookup(request, Action.enablePort, instanceIdMap, version, requestId,
265 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
269 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/disablePort")
270 @Consumes(MediaType.APPLICATION_JSON)
271 @Produces(MediaType.APPLICATION_JSON)
272 @Operation(description = "Disable Port Mirroring", responses = @ApiResponse(
273 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
275 public Response disablePort(String request, @PathParam("version") String version,
276 @PathParam("serviceInstanceId") String serviceInstanceId,
277 @PathParam("configurationInstanceId") String configurationInstanceId,
278 @Context ContainerRequestContext requestContext) throws ApiException {
279 String requestId = requestHandlerUtils.getRequestId(requestContext);
280 HashMap<String, String> instanceIdMap = new HashMap<>();
281 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
282 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
283 return configurationRecipeLookup(request, Action.disablePort, instanceIdMap, version, requestId,
284 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
288 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/activate")
289 @Consumes(MediaType.APPLICATION_JSON)
290 @Produces(MediaType.APPLICATION_JSON)
291 @Operation(description = "Activate Port Mirroring", responses = @ApiResponse(
292 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
294 public Response activatePort(String request, @PathParam("version") String version,
295 @PathParam("serviceInstanceId") String serviceInstanceId,
296 @PathParam("configurationInstanceId") String configurationInstanceId,
297 @Context ContainerRequestContext requestContext) throws ApiException {
298 String requestId = requestHandlerUtils.getRequestId(requestContext);
299 HashMap<String, String> instanceIdMap = new HashMap<>();
300 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
301 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
302 return configurationRecipeLookup(request, Action.activateInstance, instanceIdMap, version, requestId,
303 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
307 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/deactivate")
308 @Consumes(MediaType.APPLICATION_JSON)
309 @Produces(MediaType.APPLICATION_JSON)
310 @Operation(description = "Deactivate Port Mirroring", responses = @ApiResponse(
311 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
313 public Response deactivatePort(String request, @PathParam("version") String version,
314 @PathParam("serviceInstanceId") String serviceInstanceId,
315 @PathParam("configurationInstanceId") String configurationInstanceId,
316 @Context ContainerRequestContext requestContext) throws ApiException {
317 String requestId = requestHandlerUtils.getRequestId(requestContext);
318 HashMap<String, String> instanceIdMap = new HashMap<>();
319 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
320 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
321 return configurationRecipeLookup(request, Action.deactivateInstance, instanceIdMap, version, requestId,
322 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
326 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/addRelationships")
327 @Consumes(MediaType.APPLICATION_JSON)
328 @Produces(MediaType.APPLICATION_JSON)
329 @Operation(description = "Add Relationships to a Service Instance", responses = @ApiResponse(
330 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
332 public Response addRelationships(String request, @PathParam("version") String version,
333 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
334 throws ApiException {
335 String requestId = requestHandlerUtils.getRequestId(requestContext);
336 HashMap<String, String> instanceIdMap = new HashMap<>();
337 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
338 return configurationRecipeLookup(request, Action.addRelationships, instanceIdMap, version, requestId,
339 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
343 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/removeRelationships")
344 @Consumes(MediaType.APPLICATION_JSON)
345 @Produces(MediaType.APPLICATION_JSON)
346 @Operation(description = "Remove Relationships from Service Instance", responses = @ApiResponse(
347 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
349 public Response removeRelationships(String request, @PathParam("version") String version,
350 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
351 throws ApiException {
352 String requestId = requestHandlerUtils.getRequestId(requestContext);
353 HashMap<String, String> instanceIdMap = new HashMap<>();
354 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
355 return configurationRecipeLookup(request, Action.removeRelationships, instanceIdMap, version, requestId,
356 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
360 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs")
361 @Consumes(MediaType.APPLICATION_JSON)
362 @Produces(MediaType.APPLICATION_JSON)
363 @Operation(description = "Create VNF on a specified version and serviceInstance", responses = @ApiResponse(
364 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
366 public Response createVnfInstance(String request, @PathParam("version") String version,
367 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
368 throws ApiException {
369 String requestId = requestHandlerUtils.getRequestId(requestContext);
370 HashMap<String, String> instanceIdMap = new HashMap<>();
371 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
373 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
374 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
375 } catch (Exception e) {
376 logger.error("Error in vnf", e);
382 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/upgrade")
383 @Consumes(MediaType.APPLICATION_JSON)
384 @Produces(MediaType.APPLICATION_JSON)
385 @Operation(description = "Upgrade a Service Instance to newer model", responses = @ApiResponse(
386 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
388 public Response upgradeServiceInstance(String request, @PathParam("version") String version,
389 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
390 throws ApiException {
391 String requestId = requestHandlerUtils.getRequestId(requestContext);
392 HashMap<String, String> instanceIdMap = new HashMap<>();
393 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
395 return serviceInstances(request, Action.upgradeInstance, instanceIdMap, version, requestId,
396 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
400 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/replace")
401 @Consumes(MediaType.APPLICATION_JSON)
402 @Produces(MediaType.APPLICATION_JSON)
403 @Operation(description = "Replace provided VNF instance", responses = @ApiResponse(
404 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
406 public Response replaceVnfInstance(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.replaceInstance, instanceIdMap, version, requestId,
414 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
418 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}")
419 @Consumes(MediaType.APPLICATION_JSON)
420 @Produces(MediaType.APPLICATION_JSON)
421 @Operation(description = "Update VNF on a specified version, serviceInstance and vnfInstance",
422 responses = @ApiResponse(
423 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
425 public Response updateVnfInstance(String request, @PathParam("version") String version,
426 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
427 @Context ContainerRequestContext requestContext) throws ApiException {
428 String requestId = requestHandlerUtils.getRequestId(requestContext);
429 HashMap<String, String> instanceIdMap = new HashMap<>();
430 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
431 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
432 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
433 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
437 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/applyUpdatedConfig")
438 @Consumes(MediaType.APPLICATION_JSON)
439 @Produces(MediaType.APPLICATION_JSON)
440 @Operation(description = "Apply updated configuration", responses = @ApiResponse(
441 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
442 public Response applyUpdatedConfig(String request, @PathParam("version") String version,
443 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
444 @Context ContainerRequestContext requestContext) throws ApiException {
445 String requestId = requestHandlerUtils.getRequestId(requestContext);
446 HashMap<String, String> instanceIdMap = new HashMap<>();
447 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
448 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
449 return serviceInstances(request, Action.applyUpdatedConfig, instanceIdMap, version, requestId,
450 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
454 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/recreate")
455 @Consumes(MediaType.APPLICATION_JSON)
456 @Produces(MediaType.APPLICATION_JSON)
457 @Operation(description = "Recreate VNF Instance", responses = @ApiResponse(
458 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
459 public Response recreateVnfInstance(String request, @PathParam("version") String version,
460 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
461 @Context ContainerRequestContext requestContext) throws ApiException {
462 String requestId = requestHandlerUtils.getRequestId(requestContext);
463 HashMap<String, String> instanceIdMap = new HashMap<>();
464 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
465 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
466 return serviceInstances(request, Action.recreateInstance, instanceIdMap, version, requestId,
467 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
471 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}")
472 @Consumes(MediaType.APPLICATION_JSON)
473 @Produces(MediaType.APPLICATION_JSON)
474 @Operation(description = "Delete provided VNF instance", responses = @ApiResponse(
475 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
477 public Response deleteVnfInstance(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.deleteInstance, instanceIdMap, version, requestId,
485 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
489 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules")
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 createVfModuleInstance(String request, @PathParam("version") String version,
497 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
498 @Context ContainerRequestContext requestContext) throws ApiException {
499 String requestId = requestHandlerUtils.getRequestId(requestContext);
500 HashMap<String, String> instanceIdMap = new HashMap<>();
501 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
502 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
503 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
504 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
508 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/replace")
509 @Consumes(MediaType.APPLICATION_JSON)
510 @Produces(MediaType.APPLICATION_JSON)
511 @Operation(description = "Create VfModule on a specified version, serviceInstance and vnfInstance",
512 responses = @ApiResponse(
513 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
515 public Response replaceVfModuleInstance(String request, @PathParam("version") String version,
516 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
517 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
518 throws ApiException {
519 String requestId = requestHandlerUtils.getRequestId(requestContext);
520 HashMap<String, String> instanceIdMap = new HashMap<>();
521 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
522 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
523 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
524 return serviceInstances(request, Action.replaceInstance, instanceIdMap, version, requestId,
525 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
529 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}")
530 @Consumes(MediaType.APPLICATION_JSON)
531 @Produces(MediaType.APPLICATION_JSON)
532 @Operation(description = "Update VfModule on a specified version, serviceInstance, vnfInstance and vfModule",
533 responses = @ApiResponse(
534 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
536 public Response updateVfModuleInstance(String request, @PathParam("version") String version,
537 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
538 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
539 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 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
545 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
546 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
550 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/inPlaceSoftwareUpdate")
551 @Consumes(MediaType.APPLICATION_JSON)
552 @Produces(MediaType.APPLICATION_JSON)
553 @Operation(description = "Perform VNF software update", responses = @ApiResponse(
554 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
556 public Response inPlaceSoftwareUpdate(String request, @PathParam("version") String version,
557 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
558 @Context ContainerRequestContext requestContext) 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 return serviceInstances(request, Action.inPlaceSoftwareUpdate, instanceIdMap, version, requestId,
564 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
568 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}")
569 @Consumes(MediaType.APPLICATION_JSON)
570 @Produces(MediaType.APPLICATION_JSON)
571 @Operation(description = "Delete provided VfModule instance", responses = @ApiResponse(
572 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
574 public Response deleteVfModuleInstance(String request, @PathParam("version") String version,
575 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
576 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
577 throws ApiException {
578 String requestId = requestHandlerUtils.getRequestId(requestContext);
579 HashMap<String, String> instanceIdMap = new HashMap<>();
580 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
581 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
582 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
583 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
584 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
588 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/deactivateAndCloudDelete")
589 @Consumes(MediaType.APPLICATION_JSON)
590 @Produces(MediaType.APPLICATION_JSON)
591 @Operation(description = "Deactivate and Cloud Delete VfModule instance", responses = @ApiResponse(
592 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
594 public Response deactivateAndCloudDeleteVfModuleInstance(String request, @PathParam("version") String version,
595 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
596 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
597 throws ApiException {
598 String requestId = requestHandlerUtils.getRequestId(requestContext);
599 HashMap<String, String> instanceIdMap = new HashMap<>();
600 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
601 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
602 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
603 Response response = serviceInstances(request, Action.deactivateAndCloudDelete, instanceIdMap, version,
604 requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
609 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/scaleOut")
610 @Consumes(MediaType.APPLICATION_JSON)
611 @Produces(MediaType.APPLICATION_JSON)
612 @Operation(description = "VF Auto Scale Out", responses = @ApiResponse(
613 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
615 public Response scaleOutVfModule(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.scaleOut, instanceIdMap, version, requestId,
623 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
627 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups")
628 @Consumes(MediaType.APPLICATION_JSON)
629 @Produces(MediaType.APPLICATION_JSON)
630 @Operation(description = "Create VolumeGroup on a specified version, serviceInstance, vnfInstance",
631 responses = @ApiResponse(
632 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
634 public Response createVolumeGroupInstance(String request, @PathParam("version") String version,
635 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
636 @Context ContainerRequestContext requestContext) throws ApiException {
637 String requestId = requestHandlerUtils.getRequestId(requestContext);
638 HashMap<String, String> instanceIdMap = new HashMap<>();
639 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
640 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
641 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
642 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
646 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}")
647 @Consumes(MediaType.APPLICATION_JSON)
648 @Produces(MediaType.APPLICATION_JSON)
649 @Operation(description = "Update VolumeGroup on a specified version, serviceInstance, vnfInstance and volumeGroup",
650 responses = @ApiResponse(
651 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
653 public Response updateVolumeGroupInstance(String request, @PathParam("version") String version,
654 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
655 @PathParam("volumeGroupInstanceId") String volumeGroupInstanceId,
656 @Context ContainerRequestContext requestContext) throws ApiException {
657 String requestId = requestHandlerUtils.getRequestId(requestContext);
658 HashMap<String, String> instanceIdMap = new HashMap<>();
659 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
660 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
661 instanceIdMap.put("volumeGroupInstanceId", volumeGroupInstanceId);
662 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
663 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
667 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}")
668 @Consumes(MediaType.APPLICATION_JSON)
669 @Produces(MediaType.APPLICATION_JSON)
670 @Operation(description = "Delete provided VolumeGroup instance", responses = @ApiResponse(
671 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
673 public Response deleteVolumeGroupInstance(String request, @PathParam("version") String version,
674 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
675 @PathParam("volumeGroupInstanceId") String volumeGroupInstanceId,
676 @Context ContainerRequestContext requestContext) throws ApiException {
677 String requestId = requestHandlerUtils.getRequestId(requestContext);
678 HashMap<String, String> instanceIdMap = new HashMap<>();
679 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
680 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
681 instanceIdMap.put("volumeGroupInstanceId", volumeGroupInstanceId);
682 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
683 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
687 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks")
688 @Consumes(MediaType.APPLICATION_JSON)
689 @Produces(MediaType.APPLICATION_JSON)
690 @Operation(description = "Create NetworkInstance on a specified version and serviceInstance ",
691 responses = @ApiResponse(
692 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
694 public Response createNetworkInstance(String request, @PathParam("version") String version,
695 @PathParam("serviceInstanceId") String serviceInstanceId, @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 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
701 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
705 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks/{networkInstanceId}")
706 @Consumes(MediaType.APPLICATION_JSON)
707 @Produces(MediaType.APPLICATION_JSON)
708 @Operation(description = "Update VolumeGroup on a specified version, serviceInstance, networkInstance",
709 responses = @ApiResponse(
710 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
712 public Response updateNetworkInstance(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.updateInstance, instanceIdMap, version, requestId,
721 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
725 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks/{networkInstanceId}")
726 @Consumes(MediaType.APPLICATION_JSON)
727 @Produces(MediaType.APPLICATION_JSON)
728 @Operation(description = "Delete provided Network instance", responses = @ApiResponse(
729 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
731 public Response deleteNetworkInstance(String request, @PathParam("version") String version,
732 @PathParam("serviceInstanceId") String serviceInstanceId,
733 @PathParam("networkInstanceId") String networkInstanceId, @Context ContainerRequestContext requestContext)
734 throws ApiException {
735 String requestId = requestHandlerUtils.getRequestId(requestContext);
736 HashMap<String, String> instanceIdMap = new HashMap<>();
737 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
738 instanceIdMap.put("networkInstanceId", networkInstanceId);
739 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
740 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
744 @Path("/{version:[vV][7]}/instanceGroups")
745 @Consumes(MediaType.APPLICATION_JSON)
746 @Produces(MediaType.APPLICATION_JSON)
747 @Operation(description = "Create instanceGroups", responses = @ApiResponse(
748 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
750 public Response createInstanceGroups(String request, @PathParam("version") String version,
751 @Context ContainerRequestContext requestContext) throws ApiException {
752 String requestId = requestHandlerUtils.getRequestId(requestContext);
753 return serviceInstances(request, Action.createInstance, null, version, requestId,
754 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
758 @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}")
759 @Consumes(MediaType.APPLICATION_JSON)
760 @Produces(MediaType.APPLICATION_JSON)
761 @Operation(description = "Delete instanceGroup", responses = @ApiResponse(
762 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
764 public Response deleteInstanceGroups(@PathParam("version") String version,
765 @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext)
766 throws ApiException {
767 String requestId = requestHandlerUtils.getRequestId(requestContext);
768 HashMap<String, String> instanceIdMap = new HashMap<>();
769 instanceIdMap.put(CommonConstants.INSTANCE_GROUP_INSTANCE_ID, instanceGroupId);
770 return deleteInstanceGroups(Action.deleteInstance, instanceIdMap, version, requestId,
771 requestHandlerUtils.getRequestUri(requestContext, uriPrefix), requestContext);
775 @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}/addMembers")
776 @Consumes(MediaType.APPLICATION_JSON)
777 @Produces(MediaType.APPLICATION_JSON)
778 @Operation(description = "Add instanceGroup members", responses = @ApiResponse(
779 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
781 public Response addInstanceGroupMembers(String request, @PathParam("version") String version,
782 @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext)
783 throws ApiException {
784 String requestId = requestHandlerUtils.getRequestId(requestContext);
785 HashMap<String, String> instanceIdMap = new HashMap<>();
786 instanceIdMap.put(CommonConstants.INSTANCE_GROUP_INSTANCE_ID, instanceGroupId);
787 return serviceInstances(request, Action.addMembers, instanceIdMap, version, requestId,
788 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
792 @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}/removeMembers")
793 @Consumes(MediaType.APPLICATION_JSON)
794 @Produces(MediaType.APPLICATION_JSON)
795 @Operation(description = "Remove instanceGroup members", responses = @ApiResponse(
796 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
798 public Response removeInstanceGroupMembers(String request, @PathParam("version") String version,
799 @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext)
800 throws ApiException {
801 String requestId = requestHandlerUtils.getRequestId(requestContext);
802 HashMap<String, String> instanceIdMap = new HashMap<>();
803 instanceIdMap.put(CommonConstants.INSTANCE_GROUP_INSTANCE_ID, instanceGroupId);
804 return serviceInstances(request, Action.removeMembers, instanceIdMap, version, requestId,
805 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
809 * This method is used for POST a request to the BPEL client (BPMN).
811 * Convert the requestJson to ServiceInstanceRequest(sir), create the msoRequest object, check whether this request
812 * is already being processed in requestdb for duplicate check.
814 * Based on the alacarte flag, sir and msoRequest will do the recipe lookup from the service and servicerecipe table
815 * of catalogdb, and get the OrchestrationURI.
817 * If the present request is not the duplicate request then this request will be saved in the requestdb. and will
818 * POST a request to the BPMN engine at the OrchestrationURI fetched.
820 * @param requestJSON Json fetched as body in the API call
821 * @param action Type of action to be performed
822 * @param instanceIdMap Map of instance ids of service/vnf/vf/configuration etc..
823 * @param version Supported version of API
824 * @param requestId Unique id for the request
826 * @return response object
827 * @throws ApiException
829 public Response serviceInstances(String requestJSON, Actions action, HashMap<String, String> instanceIdMap,
830 String version, String requestId, String requestUri) throws ApiException {
831 return serviceInstances(requestJSON, action, instanceIdMap, version, requestId, requestUri, null);
835 public Response serviceInstances(String requestJSON, Actions action, HashMap<String, String> instanceIdMap,
836 String version, String requestId, String requestUri, HashMap<String, String> queryParams)
837 throws ApiException {
838 String serviceInstanceId;
839 Boolean aLaCarte = null;
840 ServiceInstancesRequest sir;
841 String apiVersion = version.substring(1);
843 sir = requestHandlerUtils.convertJsonToServiceInstanceRequest(requestJSON, action, requestId, requestUri);
844 action = handleReplaceInstance(action, sir);
846 String requestScope = requestHandlerUtils.deriveRequestScope(action, sir, requestUri);
848 requestValidatorListenerRunner.runValidations(requestUri, instanceIdMap, sir, queryParams, action);
849 } catch (ApiException e) {
850 msoRequest.createErrorRequestRecord(Status.FAILED, requestId, e.getMessage(), action, requestScope,
851 requestJSON, requestHandlerUtils
852 .getServiceInstanceIdForValidationError(sir, instanceIdMap, requestScope).orElse(null),
857 InfraActiveRequests currentActiveReq =
858 msoRequest.createRequestObject(sir, action, requestId, Status.IN_PROGRESS, requestJSON, requestScope);
859 if (sir.getRequestDetails().getRequestParameters() != null) {
860 aLaCarte = sir.getRequestDetails().getRequestParameters().getALaCarte();
863 requestHandlerUtils.parseRequest(sir, instanceIdMap, action, version, requestJSON, aLaCarte, requestId,
865 if ((action == Action.replaceInstance || action == Action.replaceInstanceRetainAssignments)
866 && (requestScope.equals(ModelType.vnf.toString()) || requestScope.equals(ModelType.vfModule.toString()))
867 && sir.getRequestDetails().getCloudConfiguration() == null) {
868 CloudConfiguration cloudConfiguration =
869 getCloudConfigurationOnReplace(requestScope, instanceIdMap, currentActiveReq);
870 sir.getRequestDetails().setCloudConfiguration(cloudConfiguration);
871 setCloudConfigurationCurrentActiveRequest(cloudConfiguration, currentActiveReq);
873 requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
875 String instanceName = null;
876 if (sir.getRequestDetails().getRequestInfo() != null) {
877 instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();
879 boolean alaCarteFlag = msoRequest.getAlacarteFlag(sir);
880 String vnfType = msoRequest.getVnfType(sir, requestScope);
881 String networkType = msoRequest.getNetworkType(sir, requestScope);
882 String sdcServiceModelVersion = msoRequest.getSDCServiceModelVersion(sir);
883 String vfModuleType = msoRequest.getVfModuleType(sir, requestScope);
885 if (requestScope.equalsIgnoreCase(ModelType.vnf.name()) && vnfType != null) {
886 currentActiveReq.setVnfType(vnfType);
887 } else if (requestScope.equalsIgnoreCase(ModelType.network.name()) && networkType != null) {
888 currentActiveReq.setNetworkType(networkType);
891 requestHandlerUtils.checkForDuplicateRequests(action, instanceIdMap, requestScope, currentActiveReq,
894 ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
896 RequestReferences referencesResponse = new RequestReferences();
898 referencesResponse.setRequestId(requestId);
900 serviceResponse.setRequestReferences(referencesResponse);
901 RecipeLookupResult recipeLookupResult =
902 requestHandlerUtils.getServiceInstanceOrchestrationURI(sir, action, alaCarteFlag, currentActiveReq);
903 String serviceInstanceType = requestHandlerUtils.getServiceType(requestScope, sir, alaCarteFlag);
905 ModelInfo modelInfo = sir.getRequestDetails().getModelInfo();
906 ModelType modelType = requestHandlerUtils.getModelType(action, modelInfo);
908 Boolean isBaseVfModule = false;
910 if (modelType.equals(ModelType.vfModule)) {
911 isBaseVfModule = requestHandlerUtils.getIsBaseVfModule(modelInfo, action, vnfType, sdcServiceModelVersion,
915 serviceInstanceId = requestHandlerUtils.setServiceInstanceId(requestScope, sir);
917 String vfModuleId = "";
918 String volumeGroupId = "";
919 String networkId = "";
920 String pnfCorrelationId = "";
921 String instanceGroupId = null;
923 if (sir.getVnfInstanceId() != null) {
924 vnfId = sir.getVnfInstanceId();
927 if (sir.getVfModuleInstanceId() != null) {
928 vfModuleId = sir.getVfModuleInstanceId();
931 if (sir.getVolumeGroupInstanceId() != null) {
932 volumeGroupId = sir.getVolumeGroupInstanceId();
935 if (sir.getNetworkInstanceId() != null) {
936 networkId = sir.getNetworkInstanceId();
938 if (sir.getInstanceGroupId() != null) {
939 instanceGroupId = sir.getInstanceGroupId();
942 pnfCorrelationId = getPnfCorrelationId(sir);
945 infraActiveRequestsClient.save(currentActiveReq);
946 } catch (Exception e) {
947 logger.error("Exception occurred", e);
948 ErrorLoggerInfo errorLoggerInfo =
949 new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError)
950 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
951 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR,
952 ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e).errorInfo(errorLoggerInfo).build();
955 if (!requestScope.equalsIgnoreCase(ModelType.service.name()) && action != Action.recreateInstance
956 && !requestScope.equalsIgnoreCase(ModelType.vnf.name())) {
958 } else if (aLaCarte == null) {
963 RequestClientParameter requestClientParameter;
965 requestClientParameter = new RequestClientParameter.Builder().setRequestId(requestId)
966 .setBaseVfModule(isBaseVfModule).setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
967 .setRequestAction(action.toString()).setServiceInstanceId(serviceInstanceId)
968 .setPnfCorrelationId(pnfCorrelationId).setVnfId(vnfId).setVfModuleId(vfModuleId)
969 .setVolumeGroupId(volumeGroupId).setNetworkId(networkId).setServiceType(serviceInstanceType)
970 .setVnfType(vnfType).setVfModuleType(vfModuleType).setNetworkType(networkType)
971 .setRequestDetails(requestHandlerUtils.mapJSONtoMSOStyle(requestJSON, sir, aLaCarte, action))
972 .setApiVersion(apiVersion).setALaCarte(aLaCarte).setRequestUri(requestUri)
973 .setInstanceGroupId(instanceGroupId).build();
974 } catch (IOException e) {
975 logger.error("Exception occurred", e);
976 ErrorLoggerInfo errorLoggerInfo =
977 new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, ErrorCode.SchemaError)
978 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
979 throw new ValidateException.Builder("Unable to generate RequestClientParamter object" + e.getMessage(),
980 HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER).errorInfo(errorLoggerInfo)
983 return requestHandlerUtils.postBPELRequest(currentActiveReq, requestClientParameter,
984 recipeLookupResult.getOrchestrationURI(), requestScope);
992 protected Actions handleReplaceInstance(Actions action, ServiceInstancesRequest sir) {
993 if (action != null && action.equals(Action.replaceInstance)
994 && sir.getRequestDetails().getRequestParameters().getRetainAssignments() != null
995 && sir.getRequestDetails().getRequestParameters().getRetainAssignments()) {
996 action = Action.replaceInstanceRetainAssignments;
1002 * This method deletes the Instance Groups.
1004 * This method will check whether the request is not duplicate in requestdb. if its not then will save as a new
1005 * request. And will send a POST request to BEPL client to delete the Insatnce Groups.
1008 * @param instanceIdMap
1012 * @param requestContext
1014 * @throws ApiException
1016 public Response deleteInstanceGroups(Actions action, HashMap<String, String> instanceIdMap, String version,
1017 String requestId, String requestUri, ContainerRequestContext requestContext) throws ApiException {
1018 String instanceGroupId = instanceIdMap.get(CommonConstants.INSTANCE_GROUP_INSTANCE_ID);
1019 Boolean aLaCarte = true;
1020 String apiVersion = version.substring(1);
1021 ServiceInstancesRequest sir = new ServiceInstancesRequest();
1022 sir.setInstanceGroupId(instanceGroupId);
1024 String requestScope = ModelType.instanceGroup.toString();
1025 InfraActiveRequests currentActiveReq =
1026 msoRequest.createRequestObject(sir, action, requestId, Status.IN_PROGRESS, null, requestScope);
1027 requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
1029 requestHandlerUtils.validateHeaders(requestContext);
1030 } catch (ValidationException e) {
1031 logger.error("Exception occurred", e);
1032 ErrorLoggerInfo errorLoggerInfo =
1033 new ErrorLoggerInfo.Builder(MessageEnum.APIH_VALIDATION_ERROR, ErrorCode.SchemaError)
1034 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1035 ValidateException validateException =
1036 new ValidateException.Builder(e.getMessage(), HttpStatus.SC_BAD_REQUEST,
1037 ErrorNumbers.SVC_BAD_PARAMETER).cause(e).errorInfo(errorLoggerInfo).build();
1038 requestHandlerUtils.updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1039 throw validateException;
1042 requestHandlerUtils.checkForDuplicateRequests(action, instanceIdMap, requestScope, currentActiveReq, null);
1044 ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
1046 RequestReferences referencesResponse = new RequestReferences();
1048 referencesResponse.setRequestId(requestId);
1050 serviceResponse.setRequestReferences(referencesResponse);
1051 Boolean isBaseVfModule = false;
1053 RecipeLookupResult recipeLookupResult = new RecipeLookupResult("/mso/async/services/WorkflowActionBB", 180);
1056 infraActiveRequestsClient.save(currentActiveReq);
1057 } catch (Exception e) {
1058 logger.error("Exception occurred", e);
1059 ErrorLoggerInfo errorLoggerInfo =
1060 new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError)
1061 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1062 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR,
1063 ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e).errorInfo(errorLoggerInfo).build();
1066 RequestClientParameter requestClientParameter = new RequestClientParameter.Builder().setRequestId(requestId)
1067 .setBaseVfModule(isBaseVfModule).setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
1068 .setRequestAction(action.toString()).setApiVersion(apiVersion).setALaCarte(aLaCarte)
1069 .setRequestUri(requestUri).setInstanceGroupId(instanceGroupId).build();
1072 return requestHandlerUtils.postBPELRequest(currentActiveReq, requestClientParameter,
1073 recipeLookupResult.getOrchestrationURI(), requestScope);
1076 protected String getPnfCorrelationId(ServiceInstancesRequest sir) {
1077 return Optional.of(sir).map(ServiceInstancesRequest::getRequestDetails)
1078 .map(RequestDetails::getRequestParameters).map(parameters -> parameters.getUserParamValue("pnfId"))
1082 private Response configurationRecipeLookup(String requestJSON, Action action, HashMap<String, String> instanceIdMap,
1083 String version, String requestId, String requestUri) throws ApiException {
1084 String serviceInstanceId;
1085 Boolean aLaCarte = null;
1086 String apiVersion = version.substring(1);
1087 ServiceInstancesRequest sir;
1089 sir = requestHandlerUtils.convertJsonToServiceInstanceRequest(requestJSON, action, requestId, requestUri);
1090 String requestScope = requestHandlerUtils.deriveRequestScope(action, sir, requestUri);
1091 InfraActiveRequests currentActiveReq =
1092 msoRequest.createRequestObject(sir, action, requestId, Status.IN_PROGRESS, requestJSON, requestScope);
1093 if (sir.getRequestDetails().getRequestParameters() != null) {
1094 aLaCarte = sir.getRequestDetails().getRequestParameters().getALaCarte();
1097 requestHandlerUtils.parseRequest(sir, instanceIdMap, action, version, requestJSON, aLaCarte, requestId,
1099 requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
1100 String instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();
1102 requestHandlerUtils.checkForDuplicateRequests(action, instanceIdMap, requestScope, currentActiveReq,
1105 ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
1106 RequestReferences referencesResponse = new RequestReferences();
1107 referencesResponse.setRequestId(requestId);
1108 serviceResponse.setRequestReferences(referencesResponse);
1110 String orchestrationUri = env.getProperty(CommonConstants.ALACARTE_ORCHESTRATION);
1111 String timeOut = env.getProperty(CommonConstants.ALACARTE_RECIPE_TIMEOUT);
1113 if (StringUtils.isBlank(orchestrationUri) || StringUtils.isBlank(timeOut)) {
1114 String error = StringUtils.isBlank(orchestrationUri) ? "ALaCarte Orchestration URI not found in properties"
1115 : "ALaCarte Recipe Timeout not found in properties";
1117 ErrorLoggerInfo errorLoggerInfo =
1118 new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, ErrorCode.DataError)
1119 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1121 ValidateException validateException = new ValidateException.Builder(error, HttpStatus.SC_NOT_FOUND,
1122 ErrorNumbers.SVC_GENERAL_SERVICE_ERROR).errorInfo(errorLoggerInfo).build();
1124 requestHandlerUtils.updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1126 throw validateException;
1130 serviceInstanceId = "";
1131 String configurationId = "";
1132 String pnfCorrelationId = "";
1134 if (sir.getServiceInstanceId() != null) {
1135 serviceInstanceId = sir.getServiceInstanceId();
1138 if (sir.getConfigurationId() != null) {
1139 configurationId = sir.getConfigurationId();
1142 pnfCorrelationId = getPnfCorrelationId(sir);
1145 infraActiveRequestsClient.save(currentActiveReq);
1146 } catch (Exception e) {
1147 ErrorLoggerInfo errorLoggerInfo =
1148 new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError)
1149 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1150 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR,
1151 ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e).errorInfo(errorLoggerInfo).build();
1154 if (!requestScope.equalsIgnoreCase(ModelType.service.name())) {
1156 } else if (aLaCarte == null) {
1159 RequestClientParameter requestClientParameter = null;
1161 requestClientParameter = new RequestClientParameter.Builder().setRequestId(requestId).setBaseVfModule(false)
1162 .setRecipeTimeout(Integer.parseInt(timeOut)).setRequestAction(action.toString())
1163 .setServiceInstanceId(serviceInstanceId).setPnfCorrelationId(pnfCorrelationId)
1164 .setConfigurationId(configurationId)
1165 .setRequestDetails(requestHandlerUtils.mapJSONtoMSOStyle(requestJSON, sir, aLaCarte, action))
1166 .setApiVersion(apiVersion).setALaCarte(aLaCarte).setRequestUri(requestUri).build();
1167 } catch (IOException e) {
1168 ErrorLoggerInfo errorLoggerInfo =
1169 new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, ErrorCode.SchemaError)
1170 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1171 throw new ValidateException.Builder("Unable to generate RequestClientParamter object" + e.getMessage(),
1172 HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER).errorInfo(errorLoggerInfo)
1176 return requestHandlerUtils.postBPELRequest(currentActiveReq, requestClientParameter, orchestrationUri,
1180 protected CloudConfiguration getCloudConfigurationOnReplace(String requestScope,
1181 HashMap<String, String> instanceIdMap, InfraActiveRequests currentActiveReq) throws ApiException {
1182 logger.debug("Replace request is missing cloudConfiguration, autofilling from create.");
1183 CloudConfiguration cloudConfiguration = null;
1184 if (requestScope.equals(ModelType.vfModule.toString())) {
1185 cloudConfiguration = bpmnRequestBuilder.getCloudConfigurationVfModuleReplace(
1186 instanceIdMap.get("vnfInstanceId"), instanceIdMap.get("vfModuleInstanceId"));
1188 cloudConfiguration = bpmnRequestBuilder.mapCloudConfigurationVnf(instanceIdMap.get("vnfInstanceId"));
1191 if (cloudConfiguration == null) {
1192 String errorMessage = "CloudConfiguration not found during autofill for replace request.";
1193 logger.error(errorMessage);
1194 updateStatus(currentActiveReq, Status.FAILED, errorMessage);
1195 throw new CloudConfigurationNotFoundException(
1196 "CloudConfiguration not found during autofill for replace request.");
1198 return cloudConfiguration;
1201 protected void setCloudConfigurationCurrentActiveRequest(CloudConfiguration cloudConfiguration,
1202 InfraActiveRequests currentActiveRequest) {
1203 if (cloudConfiguration.getLcpCloudRegionId() != null) {
1204 currentActiveRequest.setCloudRegion(cloudConfiguration.getLcpCloudRegionId());
1207 if (cloudConfiguration.getTenantId() != null) {
1208 currentActiveRequest.setTenantId(cloudConfiguration.getTenantId());