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 * Modifications Copyright (c) 2022 Ericsson. All rights reserved.
11 * ================================================================================
12 * Licensed under the Apache License, Version 2.0 (the "License");
13 * you may not use this file except in compliance with the License.
14 * You may obtain a copy of the License at
16 * http://www.apache.org/licenses/LICENSE-2.0
18 * Unless required by applicable law or agreed to in writing, software
19 * distributed under the License is distributed on an "AS IS" BASIS,
20 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21 * See the License for the specific language governing permissions and
22 * limitations under the License.
23 * ============LICENSE_END=========================================================
26 package org.onap.so.apihandlerinfra;
28 import java.io.IOException;
29 import java.util.HashMap;
30 import java.util.Optional;
31 import java.util.stream.Collectors;
32 import javax.transaction.Transactional;
33 import javax.ws.rs.Consumes;
34 import javax.ws.rs.DELETE;
35 import javax.ws.rs.POST;
36 import javax.ws.rs.PUT;
37 import javax.ws.rs.Path;
38 import javax.ws.rs.PathParam;
39 import javax.ws.rs.Produces;
40 import javax.ws.rs.container.ContainerRequestContext;
41 import javax.ws.rs.core.Context;
42 import javax.ws.rs.core.MediaType;
43 import javax.ws.rs.core.Response;
44 import org.apache.commons.lang.StringUtils;
45 import org.apache.http.HttpStatus;
46 import org.onap.logging.filter.base.ErrorCode;
47 import org.onap.so.apihandler.common.CommonConstants;
48 import org.onap.so.apihandler.common.ErrorNumbers;
49 import org.onap.so.apihandler.common.RequestClientParameter;
50 import org.onap.so.apihandlerinfra.exceptions.ApiException;
51 import org.onap.so.apihandlerinfra.exceptions.RequestDbFailureException;
52 import org.onap.so.apihandlerinfra.exceptions.ValidateException;
53 import org.onap.so.apihandlerinfra.infra.rest.BpmnRequestBuilder;
54 import org.onap.so.apihandlerinfra.infra.rest.exception.CloudConfigurationNotFoundException;
55 import org.onap.so.apihandlerinfra.infra.rest.handler.AbstractRestHandler;
56 import org.onap.so.apihandlerinfra.infra.rest.validators.RequestValidatorListenerRunner;
57 import org.onap.so.apihandlerinfra.logging.ErrorLoggerInfo;
58 import org.onap.so.constants.Status;
59 import org.onap.so.db.catalog.client.CatalogDbClient;
60 import org.onap.so.db.request.beans.InfraActiveRequests;
61 import org.onap.so.db.request.client.RequestsDbClient;
62 import org.onap.so.exceptions.ValidationException;
63 import org.onap.so.logger.MessageEnum;
64 import org.onap.so.serviceinstancebeans.CloudConfiguration;
65 import org.onap.so.serviceinstancebeans.ModelInfo;
66 import org.onap.so.serviceinstancebeans.ModelType;
67 import org.onap.so.serviceinstancebeans.RequestDetails;
68 import org.onap.so.serviceinstancebeans.RequestReferences;
69 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
70 import org.onap.so.serviceinstancebeans.ServiceInstancesResponse;
71 import org.slf4j.Logger;
72 import org.slf4j.LoggerFactory;
73 import org.springframework.beans.factory.annotation.Autowired;
74 import org.springframework.core.env.Environment;
75 import org.springframework.stereotype.Component;
76 import org.springframework.web.client.RestTemplate;
77 import io.swagger.v3.oas.annotations.OpenAPIDefinition;
78 import io.swagger.v3.oas.annotations.Operation;
79 import io.swagger.v3.oas.annotations.info.Info;
80 import io.swagger.v3.oas.annotations.media.ArraySchema;
81 import io.swagger.v3.oas.annotations.media.Content;
82 import io.swagger.v3.oas.annotations.media.Schema;
83 import io.swagger.v3.oas.annotations.responses.ApiResponse;
86 @Path("/onap/so/infra/serviceInstantiation")
87 @OpenAPIDefinition(info = @Info(title = "/onap/so/infra/serviceInstantiation",
88 description = "Infrastructure API Requests for Service Instances"))
89 public class ServiceInstances extends AbstractRestHandler {
91 private static Logger logger = LoggerFactory.getLogger(MsoRequest.class);
92 private static String uriPrefix = "/serviceInstantiation/";
93 private static final String SAVE_TO_DB = "save instance to db";
96 private Environment env;
99 private RestTemplate restTemplate;
102 private CatalogDbClient catalogDbClient;
105 private RequestsDbClient infraActiveRequestsClient;
108 private MsoRequest msoRequest;
111 private RequestHandlerUtils requestHandlerUtils;
114 private RequestValidatorListenerRunner requestValidatorListenerRunner;
117 private BpmnRequestBuilder bpmnRequestBuilder;
120 @Path("/{version:[vV][5-7]}/serviceInstances")
121 @Consumes(MediaType.APPLICATION_JSON)
122 @Produces(MediaType.APPLICATION_JSON)
123 @Operation(description = "Create a Service Instance on a version provided",
124 responses = @ApiResponse(
125 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
127 public Response createServiceInstance(String request, @PathParam("version") String version,
128 @Context ContainerRequestContext requestContext) throws ApiException {
129 String requestId = requestHandlerUtils.getRequestId(requestContext);
130 return serviceInstances(request, Action.createInstance, null, version, requestId,
131 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
135 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/activate")
136 @Consumes(MediaType.APPLICATION_JSON)
137 @Produces(MediaType.APPLICATION_JSON)
138 @Operation(description = "Activate provided Service Instance",
139 responses = @ApiResponse(
140 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
142 public Response activateServiceInstance(String request, @PathParam("version") String version,
143 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
144 throws ApiException {
145 String requestId = requestHandlerUtils.getRequestId(requestContext);
146 HashMap<String, String> instanceIdMap = new HashMap<>();
147 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
148 return serviceInstances(request, Action.activateInstance, instanceIdMap, version, requestId,
149 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
153 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/deactivate")
154 @Consumes(MediaType.APPLICATION_JSON)
155 @Produces(MediaType.APPLICATION_JSON)
156 @Operation(description = "Deactivate provided Service Instance",
157 responses = @ApiResponse(
158 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
160 public Response deactivateServiceInstance(String request, @PathParam("version") String version,
161 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
162 throws ApiException {
163 String requestId = requestHandlerUtils.getRequestId(requestContext);
164 HashMap<String, String> instanceIdMap = new HashMap<>();
165 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
166 return serviceInstances(request, Action.deactivateInstance, instanceIdMap, version, requestId,
167 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
171 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}")
172 @Consumes(MediaType.APPLICATION_JSON)
173 @Produces(MediaType.APPLICATION_JSON)
174 @Operation(description = "Delete provided Service Instance",
175 responses = @ApiResponse(
176 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
178 public Response deleteServiceInstance(String request, @PathParam("version") String version,
179 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
180 throws ApiException {
181 String requestId = requestHandlerUtils.getRequestId(requestContext);
182 HashMap<String, String> instanceIdMap = new HashMap<>();
183 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
184 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
185 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
189 @Path("/{version:[vV][7]}/serviceInstances/assign")
190 @Consumes(MediaType.APPLICATION_JSON)
191 @Produces(MediaType.APPLICATION_JSON)
192 @Operation(description = "Assign Service Instance",
193 responses = @ApiResponse(
194 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
196 public Response assignServiceInstance(String request, @PathParam("version") String version,
197 @Context ContainerRequestContext requestContext) throws ApiException {
198 String requestId = requestHandlerUtils.getRequestId(requestContext);
199 return serviceInstances(request, Action.assignInstance, null, version, requestId,
200 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
204 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/unassign")
205 @Consumes(MediaType.APPLICATION_JSON)
206 @Produces(MediaType.APPLICATION_JSON)
207 @Operation(description = "Unassign Service Instance",
208 responses = @ApiResponse(
209 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
211 public Response unassignServiceInstance(String request, @PathParam("version") String version,
212 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
213 throws ApiException {
214 String requestId = requestHandlerUtils.getRequestId(requestContext);
215 HashMap<String, String> instanceIdMap = new HashMap<>();
216 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
217 return serviceInstances(request, Action.unassignInstance, instanceIdMap, version, requestId,
218 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
222 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations")
223 @Consumes(MediaType.APPLICATION_JSON)
224 @Produces(MediaType.APPLICATION_JSON)
225 @Operation(description = "Create Port Mirroring Configuration",
226 responses = @ApiResponse(
227 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
229 public Response createPortConfiguration(String request, @PathParam("version") String version,
230 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
231 throws ApiException {
232 String requestId = requestHandlerUtils.getRequestId(requestContext);
233 HashMap<String, String> instanceIdMap = new HashMap<>();
234 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
235 return configurationRecipeLookup(request, Action.createInstance, instanceIdMap, version, requestId,
236 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
240 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}")
241 @Consumes(MediaType.APPLICATION_JSON)
242 @Produces(MediaType.APPLICATION_JSON)
243 @Operation(description = "Delete provided Port",
244 responses = @ApiResponse(
245 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
247 public Response deletePortConfiguration(String request, @PathParam("version") String version,
248 @PathParam("serviceInstanceId") String serviceInstanceId,
249 @PathParam("configurationInstanceId") String configurationInstanceId,
250 @Context ContainerRequestContext requestContext) throws ApiException {
251 String requestId = requestHandlerUtils.getRequestId(requestContext);
252 HashMap<String, String> instanceIdMap = new HashMap<>();
253 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
254 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
255 return configurationRecipeLookup(request, Action.deleteInstance, instanceIdMap, version, requestId,
256 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
260 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/enablePort")
261 @Consumes(MediaType.APPLICATION_JSON)
262 @Produces(MediaType.APPLICATION_JSON)
263 @Operation(description = "Enable Port Mirroring",
264 responses = @ApiResponse(
265 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
267 public Response enablePort(String request, @PathParam("version") String version,
268 @PathParam("serviceInstanceId") String serviceInstanceId,
269 @PathParam("configurationInstanceId") String configurationInstanceId,
270 @Context ContainerRequestContext requestContext) throws ApiException {
271 String requestId = requestHandlerUtils.getRequestId(requestContext);
272 HashMap<String, String> instanceIdMap = new HashMap<>();
273 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
274 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
275 return configurationRecipeLookup(request, Action.enablePort, instanceIdMap, version, requestId,
276 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
280 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/disablePort")
281 @Consumes(MediaType.APPLICATION_JSON)
282 @Produces(MediaType.APPLICATION_JSON)
283 @Operation(description = "Disable Port Mirroring",
284 responses = @ApiResponse(
285 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
287 public Response disablePort(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.disablePort, instanceIdMap, version, requestId,
296 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
300 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/activate")
301 @Consumes(MediaType.APPLICATION_JSON)
302 @Produces(MediaType.APPLICATION_JSON)
303 @Operation(description = "Activate Port Mirroring",
304 responses = @ApiResponse(
305 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
307 public Response activatePort(String request, @PathParam("version") String version,
308 @PathParam("serviceInstanceId") String serviceInstanceId,
309 @PathParam("configurationInstanceId") String configurationInstanceId,
310 @Context ContainerRequestContext requestContext) throws ApiException {
311 String requestId = requestHandlerUtils.getRequestId(requestContext);
312 HashMap<String, String> instanceIdMap = new HashMap<>();
313 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
314 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
315 return configurationRecipeLookup(request, Action.activateInstance, instanceIdMap, version, requestId,
316 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
320 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/deactivate")
321 @Consumes(MediaType.APPLICATION_JSON)
322 @Produces(MediaType.APPLICATION_JSON)
323 @Operation(description = "Deactivate Port Mirroring",
324 responses = @ApiResponse(
325 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
327 public Response deactivatePort(String request, @PathParam("version") String version,
328 @PathParam("serviceInstanceId") String serviceInstanceId,
329 @PathParam("configurationInstanceId") String configurationInstanceId,
330 @Context ContainerRequestContext requestContext) throws ApiException {
331 String requestId = requestHandlerUtils.getRequestId(requestContext);
332 HashMap<String, String> instanceIdMap = new HashMap<>();
333 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
334 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
335 return configurationRecipeLookup(request, Action.deactivateInstance, instanceIdMap, version, requestId,
336 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
340 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/addRelationships")
341 @Consumes(MediaType.APPLICATION_JSON)
342 @Produces(MediaType.APPLICATION_JSON)
343 @Operation(description = "Add Relationships to a Service Instance",
344 responses = @ApiResponse(
345 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
347 public Response addRelationships(String request, @PathParam("version") String version,
348 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
349 throws ApiException {
350 String requestId = requestHandlerUtils.getRequestId(requestContext);
351 HashMap<String, String> instanceIdMap = new HashMap<>();
352 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
353 return configurationRecipeLookup(request, Action.addRelationships, instanceIdMap, version, requestId,
354 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
358 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/removeRelationships")
359 @Consumes(MediaType.APPLICATION_JSON)
360 @Produces(MediaType.APPLICATION_JSON)
361 @Operation(description = "Remove Relationships from Service Instance",
362 responses = @ApiResponse(
363 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
365 public Response removeRelationships(String request, @PathParam("version") String version,
366 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
367 throws ApiException {
368 String requestId = requestHandlerUtils.getRequestId(requestContext);
369 HashMap<String, String> instanceIdMap = new HashMap<>();
370 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
371 return configurationRecipeLookup(request, Action.removeRelationships, instanceIdMap, version, requestId,
372 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
376 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs")
377 @Consumes(MediaType.APPLICATION_JSON)
378 @Produces(MediaType.APPLICATION_JSON)
379 @Operation(description = "Create VNF on a specified version and serviceInstance",
380 responses = @ApiResponse(
381 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
383 public Response createVnfInstance(String request, @PathParam("version") String version,
384 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
385 throws ApiException {
386 String requestId = requestHandlerUtils.getRequestId(requestContext);
387 HashMap<String, String> instanceIdMap = new HashMap<>();
388 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
390 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
391 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
392 } catch (Exception e) {
393 logger.error("Error in vnf", e);
399 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/cnfs")
400 @Consumes(MediaType.APPLICATION_JSON)
401 @Produces(MediaType.APPLICATION_JSON)
402 @Operation(description = "Create CNF on a specified version and serviceInstance",
403 responses = @ApiResponse(
404 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
406 public Response createCnfInstance(String request, @PathParam("version") String version,
407 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
408 throws ApiException {
409 String requestId = requestHandlerUtils.getRequestId(requestContext);
410 HashMap<String, String> instanceIdMap = new HashMap<>();
411 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
413 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
414 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
415 } catch (Exception e) {
416 logger.error("Error in cnf", e);
422 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/cnfs/{asInstanceId}")
423 @Consumes(MediaType.APPLICATION_JSON)
424 @Produces(MediaType.APPLICATION_JSON)
425 @Operation(description = "Delete provided for CNF instance",
426 responses = @ApiResponse(
427 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
429 public Response deleteCnfInstance(String request, @PathParam("version") String version,
430 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("asInstanceId") String asInstanceId,
431 @Context ContainerRequestContext requestContext) throws ApiException {
432 logger.debug("Inside API Handler to perform delete CNF Instance");
433 String requestId = requestHandlerUtils.getRequestId(requestContext);
434 HashMap<String, String> instanceIdMap = new HashMap<>();
435 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
436 instanceIdMap.put("asInstanceId", asInstanceId);
437 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
438 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
442 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/upgrade")
443 @Consumes(MediaType.APPLICATION_JSON)
444 @Produces(MediaType.APPLICATION_JSON)
445 @Operation(description = "Upgrade a Service Instance to newer model",
446 responses = @ApiResponse(
447 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
449 public Response upgradeServiceInstance(String request, @PathParam("version") String version,
450 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
451 throws ApiException {
452 String requestId = requestHandlerUtils.getRequestId(requestContext);
453 HashMap<String, String> instanceIdMap = new HashMap<>();
454 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
456 return serviceInstances(request, Action.upgradeInstance, instanceIdMap, version, requestId,
457 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
461 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/replace")
462 @Consumes(MediaType.APPLICATION_JSON)
463 @Produces(MediaType.APPLICATION_JSON)
464 @Operation(description = "Replace provided VNF instance",
465 responses = @ApiResponse(
466 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
468 public Response replaceVnfInstance(String request, @PathParam("version") String version,
469 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
470 @Context ContainerRequestContext requestContext) throws ApiException {
471 String requestId = requestHandlerUtils.getRequestId(requestContext);
472 HashMap<String, String> instanceIdMap = new HashMap<>();
473 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
474 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
475 return serviceInstances(request, Action.replaceInstance, instanceIdMap, version, requestId,
476 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
480 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/healthcheck")
481 @Consumes(MediaType.APPLICATION_JSON)
482 @Produces(MediaType.APPLICATION_JSON)
483 @Operation(description = "HealthCheck for provided VNF instance",
484 responses = @ApiResponse(
485 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
487 public Response cnfHealthCheck(String request, @PathParam("version") String version,
488 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
489 @Context ContainerRequestContext requestContext) throws ApiException {
490 String requestId = requestHandlerUtils.getRequestId(requestContext);
491 HashMap<String, String> instanceIdMap = new HashMap<>();
492 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
493 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
494 return serviceInstances(request, Action.healthCheck, instanceIdMap, version, requestId,
495 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
499 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/upgradeCnf")
500 @Consumes(MediaType.APPLICATION_JSON)
501 @Produces(MediaType.APPLICATION_JSON)
502 @Operation(description = "Upgrade CNF instance",
503 responses = @ApiResponse(
504 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
506 public Response cnfUpgrade(String request, @PathParam("version") String version,
507 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
508 @Context ContainerRequestContext requestContext) throws ApiException {
509 String requestId = requestHandlerUtils.getRequestId(requestContext);
510 HashMap<String, String> instanceIdMap = new HashMap<>();
511 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
512 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
513 return serviceInstances(request, Action.upgradeCnf, instanceIdMap, version, requestId,
514 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
518 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}")
519 @Consumes(MediaType.APPLICATION_JSON)
520 @Produces(MediaType.APPLICATION_JSON)
521 @Operation(description = "Update VNF on a specified version, serviceInstance and vnfInstance",
522 responses = @ApiResponse(
523 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
525 public Response updateVnfInstance(String request, @PathParam("version") String version,
526 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
527 @Context ContainerRequestContext requestContext) throws ApiException {
528 String requestId = requestHandlerUtils.getRequestId(requestContext);
529 HashMap<String, String> instanceIdMap = new HashMap<>();
530 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
531 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
532 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
533 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
537 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/applyUpdatedConfig")
538 @Consumes(MediaType.APPLICATION_JSON)
539 @Produces(MediaType.APPLICATION_JSON)
540 @Operation(description = "Apply updated configuration", responses = @ApiResponse(
541 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
542 public Response applyUpdatedConfig(String request, @PathParam("version") String version,
543 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
544 @Context ContainerRequestContext requestContext) throws ApiException {
545 String requestId = requestHandlerUtils.getRequestId(requestContext);
546 HashMap<String, String> instanceIdMap = new HashMap<>();
547 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
548 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
549 return serviceInstances(request, Action.applyUpdatedConfig, instanceIdMap, version, requestId,
550 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
554 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/recreate")
555 @Consumes(MediaType.APPLICATION_JSON)
556 @Produces(MediaType.APPLICATION_JSON)
557 @Operation(description = "Recreate VNF Instance", responses = @ApiResponse(
558 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
559 public Response recreateVnfInstance(String request, @PathParam("version") String version,
560 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
561 @Context ContainerRequestContext requestContext) throws ApiException {
562 String requestId = requestHandlerUtils.getRequestId(requestContext);
563 HashMap<String, String> instanceIdMap = new HashMap<>();
564 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
565 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
566 return serviceInstances(request, Action.recreateInstance, instanceIdMap, version, requestId,
567 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
571 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}")
572 @Consumes(MediaType.APPLICATION_JSON)
573 @Produces(MediaType.APPLICATION_JSON)
574 @Operation(description = "Delete provided VNF instance",
575 responses = @ApiResponse(
576 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
578 public Response deleteVnfInstance(String request, @PathParam("version") String version,
579 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
580 @Context ContainerRequestContext requestContext) throws ApiException {
581 String requestId = requestHandlerUtils.getRequestId(requestContext);
582 HashMap<String, String> instanceIdMap = new HashMap<>();
583 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
584 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
585 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
586 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
590 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules")
591 @Consumes(MediaType.APPLICATION_JSON)
592 @Produces(MediaType.APPLICATION_JSON)
593 @Operation(description = "Create VfModule on a specified version, serviceInstance and vnfInstance",
594 responses = @ApiResponse(
595 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
597 public Response createVfModuleInstance(String request, @PathParam("version") String version,
598 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
599 @Context ContainerRequestContext requestContext) throws ApiException {
600 String requestId = requestHandlerUtils.getRequestId(requestContext);
601 HashMap<String, String> instanceIdMap = new HashMap<>();
602 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
603 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
604 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
605 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
609 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/replace")
610 @Consumes(MediaType.APPLICATION_JSON)
611 @Produces(MediaType.APPLICATION_JSON)
612 @Operation(description = "Create VfModule on a specified version, serviceInstance and vnfInstance",
613 responses = @ApiResponse(
614 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
616 public Response replaceVfModuleInstance(String request, @PathParam("version") String version,
617 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
618 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
619 throws ApiException {
620 String requestId = requestHandlerUtils.getRequestId(requestContext);
621 HashMap<String, String> instanceIdMap = new HashMap<>();
622 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
623 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
624 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
625 return serviceInstances(request, Action.replaceInstance, instanceIdMap, version, requestId,
626 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
630 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}")
631 @Consumes(MediaType.APPLICATION_JSON)
632 @Produces(MediaType.APPLICATION_JSON)
633 @Operation(description = "Update VfModule on a specified version, serviceInstance, vnfInstance and vfModule",
634 responses = @ApiResponse(
635 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
637 public Response updateVfModuleInstance(String request, @PathParam("version") String version,
638 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
639 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
640 throws ApiException {
641 String requestId = requestHandlerUtils.getRequestId(requestContext);
642 HashMap<String, String> instanceIdMap = new HashMap<>();
643 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
644 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
645 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
646 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
647 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
651 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/inPlaceSoftwareUpdate")
652 @Consumes(MediaType.APPLICATION_JSON)
653 @Produces(MediaType.APPLICATION_JSON)
654 @Operation(description = "Perform VNF software update",
655 responses = @ApiResponse(
656 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
658 public Response inPlaceSoftwareUpdate(String request, @PathParam("version") String version,
659 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
660 @Context ContainerRequestContext requestContext) throws ApiException {
661 String requestId = requestHandlerUtils.getRequestId(requestContext);
662 HashMap<String, String> instanceIdMap = new HashMap<>();
663 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
664 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
665 return serviceInstances(request, Action.inPlaceSoftwareUpdate, instanceIdMap, version, requestId,
666 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
670 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}")
671 @Consumes(MediaType.APPLICATION_JSON)
672 @Produces(MediaType.APPLICATION_JSON)
673 @Operation(description = "Delete provided VfModule instance",
674 responses = @ApiResponse(
675 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
677 public Response deleteVfModuleInstance(String request, @PathParam("version") String version,
678 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
679 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
680 throws ApiException {
681 String requestId = requestHandlerUtils.getRequestId(requestContext);
682 HashMap<String, String> instanceIdMap = new HashMap<>();
683 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
684 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
685 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
686 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
687 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
691 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/deactivateAndCloudDelete")
692 @Consumes(MediaType.APPLICATION_JSON)
693 @Produces(MediaType.APPLICATION_JSON)
694 @Operation(description = "Deactivate and Cloud Delete VfModule instance",
695 responses = @ApiResponse(
696 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
698 public Response deactivateAndCloudDeleteVfModuleInstance(String request, @PathParam("version") String version,
699 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
700 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
701 throws ApiException {
702 String requestId = requestHandlerUtils.getRequestId(requestContext);
703 HashMap<String, String> instanceIdMap = new HashMap<>();
704 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
705 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
706 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
707 Response response = serviceInstances(request, Action.deactivateAndCloudDelete, instanceIdMap, version,
708 requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
713 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/scaleOut")
714 @Consumes(MediaType.APPLICATION_JSON)
715 @Produces(MediaType.APPLICATION_JSON)
716 @Operation(description = "VF Auto Scale Out",
717 responses = @ApiResponse(
718 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
720 public Response scaleOutVfModule(String request, @PathParam("version") String version,
721 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
722 @Context ContainerRequestContext requestContext) throws ApiException {
723 String requestId = requestHandlerUtils.getRequestId(requestContext);
724 HashMap<String, String> instanceIdMap = new HashMap<>();
725 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
726 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
727 return serviceInstances(request, Action.scaleOut, instanceIdMap, version, requestId,
728 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
732 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups")
733 @Consumes(MediaType.APPLICATION_JSON)
734 @Produces(MediaType.APPLICATION_JSON)
735 @Operation(description = "Create VolumeGroup on a specified version, serviceInstance, vnfInstance",
736 responses = @ApiResponse(
737 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
739 public Response createVolumeGroupInstance(String request, @PathParam("version") String version,
740 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
741 @Context ContainerRequestContext requestContext) throws ApiException {
742 String requestId = requestHandlerUtils.getRequestId(requestContext);
743 HashMap<String, String> instanceIdMap = new HashMap<>();
744 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
745 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
746 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
747 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
751 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}")
752 @Consumes(MediaType.APPLICATION_JSON)
753 @Produces(MediaType.APPLICATION_JSON)
754 @Operation(description = "Update VolumeGroup on a specified version, serviceInstance, vnfInstance and volumeGroup",
755 responses = @ApiResponse(
756 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
758 public Response updateVolumeGroupInstance(String request, @PathParam("version") String version,
759 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
760 @PathParam("volumeGroupInstanceId") String volumeGroupInstanceId,
761 @Context ContainerRequestContext requestContext) throws ApiException {
762 String requestId = requestHandlerUtils.getRequestId(requestContext);
763 HashMap<String, String> instanceIdMap = new HashMap<>();
764 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
765 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
766 instanceIdMap.put("volumeGroupInstanceId", volumeGroupInstanceId);
767 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
768 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
772 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}")
773 @Consumes(MediaType.APPLICATION_JSON)
774 @Produces(MediaType.APPLICATION_JSON)
775 @Operation(description = "Delete provided VolumeGroup instance",
776 responses = @ApiResponse(
777 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
779 public Response deleteVolumeGroupInstance(String request, @PathParam("version") String version,
780 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
781 @PathParam("volumeGroupInstanceId") String volumeGroupInstanceId,
782 @Context ContainerRequestContext requestContext) throws ApiException {
783 String requestId = requestHandlerUtils.getRequestId(requestContext);
784 HashMap<String, String> instanceIdMap = new HashMap<>();
785 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
786 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
787 instanceIdMap.put("volumeGroupInstanceId", volumeGroupInstanceId);
788 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
789 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
793 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks")
794 @Consumes(MediaType.APPLICATION_JSON)
795 @Produces(MediaType.APPLICATION_JSON)
796 @Operation(description = "Create NetworkInstance on a specified version and serviceInstance ",
797 responses = @ApiResponse(
798 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
800 public Response createNetworkInstance(String request, @PathParam("version") String version,
801 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
802 throws ApiException {
803 String requestId = requestHandlerUtils.getRequestId(requestContext);
804 HashMap<String, String> instanceIdMap = new HashMap<>();
805 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
806 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
807 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
811 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks/{networkInstanceId}")
812 @Consumes(MediaType.APPLICATION_JSON)
813 @Produces(MediaType.APPLICATION_JSON)
814 @Operation(description = "Update VolumeGroup on a specified version, serviceInstance, networkInstance",
815 responses = @ApiResponse(
816 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
818 public Response updateNetworkInstance(String request, @PathParam("version") String version,
819 @PathParam("serviceInstanceId") String serviceInstanceId,
820 @PathParam("networkInstanceId") String networkInstanceId, @Context ContainerRequestContext requestContext)
821 throws ApiException {
822 String requestId = requestHandlerUtils.getRequestId(requestContext);
823 HashMap<String, String> instanceIdMap = new HashMap<>();
824 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
825 instanceIdMap.put("networkInstanceId", networkInstanceId);
826 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
827 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
831 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks/{networkInstanceId}")
832 @Consumes(MediaType.APPLICATION_JSON)
833 @Produces(MediaType.APPLICATION_JSON)
834 @Operation(description = "Delete provided Network instance",
835 responses = @ApiResponse(
836 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
838 public Response deleteNetworkInstance(String request, @PathParam("version") String version,
839 @PathParam("serviceInstanceId") String serviceInstanceId,
840 @PathParam("networkInstanceId") String networkInstanceId, @Context ContainerRequestContext requestContext)
841 throws ApiException {
842 String requestId = requestHandlerUtils.getRequestId(requestContext);
843 HashMap<String, String> instanceIdMap = new HashMap<>();
844 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
845 instanceIdMap.put("networkInstanceId", networkInstanceId);
846 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
847 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
851 @Path("/{version:[vV][7]}/instanceGroups")
852 @Consumes(MediaType.APPLICATION_JSON)
853 @Produces(MediaType.APPLICATION_JSON)
854 @Operation(description = "Create instanceGroups",
855 responses = @ApiResponse(
856 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
858 public Response createInstanceGroups(String request, @PathParam("version") String version,
859 @Context ContainerRequestContext requestContext) throws ApiException {
860 String requestId = requestHandlerUtils.getRequestId(requestContext);
861 return serviceInstances(request, Action.createInstance, null, version, requestId,
862 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
866 @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}")
867 @Consumes(MediaType.APPLICATION_JSON)
868 @Produces(MediaType.APPLICATION_JSON)
869 @Operation(description = "Delete instanceGroup",
870 responses = @ApiResponse(
871 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
873 public Response deleteInstanceGroups(@PathParam("version") String version,
874 @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext)
875 throws ApiException {
876 String requestId = requestHandlerUtils.getRequestId(requestContext);
877 HashMap<String, String> instanceIdMap = new HashMap<>();
878 instanceIdMap.put(CommonConstants.INSTANCE_GROUP_INSTANCE_ID, instanceGroupId);
879 return deleteInstanceGroups(Action.deleteInstance, instanceIdMap, version, requestId,
880 requestHandlerUtils.getRequestUri(requestContext, uriPrefix), requestContext);
884 @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}/addMembers")
885 @Consumes(MediaType.APPLICATION_JSON)
886 @Produces(MediaType.APPLICATION_JSON)
887 @Operation(description = "Add instanceGroup members",
888 responses = @ApiResponse(
889 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
891 public Response addInstanceGroupMembers(String request, @PathParam("version") String version,
892 @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext)
893 throws ApiException {
894 String requestId = requestHandlerUtils.getRequestId(requestContext);
895 HashMap<String, String> instanceIdMap = new HashMap<>();
896 instanceIdMap.put(CommonConstants.INSTANCE_GROUP_INSTANCE_ID, instanceGroupId);
897 return serviceInstances(request, Action.addMembers, instanceIdMap, version, requestId,
898 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
902 @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}/removeMembers")
903 @Consumes(MediaType.APPLICATION_JSON)
904 @Produces(MediaType.APPLICATION_JSON)
905 @Operation(description = "Remove instanceGroup members",
906 responses = @ApiResponse(
907 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
909 public Response removeInstanceGroupMembers(String request, @PathParam("version") String version,
910 @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext)
911 throws ApiException {
912 String requestId = requestHandlerUtils.getRequestId(requestContext);
913 HashMap<String, String> instanceIdMap = new HashMap<>();
914 instanceIdMap.put(CommonConstants.INSTANCE_GROUP_INSTANCE_ID, instanceGroupId);
915 return serviceInstances(request, Action.removeMembers, instanceIdMap, version, requestId,
916 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
920 * This method is used for POST a request to the BPEL client (BPMN).
922 * Convert the requestJson to ServiceInstanceRequest(sir), create the msoRequest object, check whether this request
923 * is already being processed in requestdb for duplicate check.
925 * Based on the alacarte flag, sir and msoRequest will do the recipe lookup from the service and servicerecipe table
926 * of catalogdb, and get the OrchestrationURI.
928 * If the present request is not the duplicate request then this request will be saved in the requestdb. and will
929 * POST a request to the BPMN engine at the OrchestrationURI fetched.
931 * @param requestJSON Json fetched as body in the API call
932 * @param action Type of action to be performed
933 * @param instanceIdMap Map of instance ids of service/vnf/vf/configuration etc..
934 * @param version Supported version of API
935 * @param requestId Unique id for the request
937 * @return response object
938 * @throws ApiException
940 public Response serviceInstances(String requestJSON, Actions action, HashMap<String, String> instanceIdMap,
941 String version, String requestId, String requestUri) throws ApiException {
942 return serviceInstances(requestJSON, action, instanceIdMap, version, requestId, requestUri, null);
946 public Response serviceInstances(String requestJSON, Actions action, HashMap<String, String> instanceIdMap,
947 String version, String requestId, String requestUri, HashMap<String, String> queryParams)
948 throws ApiException {
949 String serviceInstanceId;
950 Boolean aLaCarte = null;
951 ServiceInstancesRequest sir;
952 String apiVersion = version.substring(1);
954 sir = requestHandlerUtils.convertJsonToServiceInstanceRequest(requestJSON, action, requestId, requestUri);
955 action = handleReplaceInstance(action, sir);
957 String requestScope = requestHandlerUtils.deriveRequestScope(action, sir, requestUri);
959 requestValidatorListenerRunner.runValidations(requestUri, instanceIdMap, sir, queryParams, action);
960 } catch (ApiException e) {
961 msoRequest.createErrorRequestRecord(Status.FAILED, requestId, e.getMessage(), action, requestScope,
962 requestJSON, requestHandlerUtils
963 .getServiceInstanceIdForValidationError(sir, instanceIdMap, requestScope).orElse(null),
968 InfraActiveRequests currentActiveReq =
969 msoRequest.createRequestObject(sir, action, requestId, Status.IN_PROGRESS, requestJSON, requestScope);
970 if (sir.getRequestDetails().getRequestParameters() != null) {
971 aLaCarte = sir.getRequestDetails().getRequestParameters().getALaCarte();
974 requestHandlerUtils.parseRequest(sir, instanceIdMap, action, version, requestJSON, aLaCarte, requestId,
976 if ((action == Action.replaceInstance || action == Action.replaceInstanceRetainAssignments)
977 && (requestScope.equals(ModelType.vnf.toString()) || requestScope.equals(ModelType.vfModule.toString())
978 || requestScope.equals(ModelType.cnf.toString()))
979 && sir.getRequestDetails().getCloudConfiguration() == null) {
980 CloudConfiguration cloudConfiguration =
981 getCloudConfigurationOnReplace(requestScope, instanceIdMap, currentActiveReq);
982 sir.getRequestDetails().setCloudConfiguration(cloudConfiguration);
983 setCloudConfigurationCurrentActiveRequest(cloudConfiguration, currentActiveReq);
985 requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
987 String instanceName = null;
988 if (sir.getRequestDetails().getRequestInfo() != null) {
989 instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();
991 boolean alaCarteFlag = msoRequest.getAlacarteFlag(sir);
992 String vnfType = msoRequest.getVnfType(sir, requestScope);
993 String networkType = msoRequest.getNetworkType(sir, requestScope);
994 String sdcServiceModelVersion = msoRequest.getSDCServiceModelVersion(sir);
995 String vfModuleType = msoRequest.getVfModuleType(sir, requestScope);
997 if (requestScope.equalsIgnoreCase(ModelType.vnf.name()) && vnfType != null) {
998 currentActiveReq.setVnfType(vnfType);
999 } else if (requestScope.equalsIgnoreCase(ModelType.network.name()) && networkType != null) {
1000 currentActiveReq.setNetworkType(networkType);
1003 requestHandlerUtils.checkForDuplicateRequests(action, instanceIdMap, requestScope, currentActiveReq,
1006 ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
1008 RequestReferences referencesResponse = new RequestReferences();
1010 referencesResponse.setRequestId(requestId);
1012 serviceResponse.setRequestReferences(referencesResponse);
1013 RecipeLookupResult recipeLookupResult =
1014 requestHandlerUtils.getServiceInstanceOrchestrationURI(sir, action, alaCarteFlag, currentActiveReq);
1015 String serviceInstanceType = requestHandlerUtils.getServiceType(requestScope, sir, alaCarteFlag);
1017 ModelInfo modelInfo = sir.getRequestDetails().getModelInfo();
1018 ModelType modelType = requestHandlerUtils.getModelType(action, modelInfo);
1020 Boolean isBaseVfModule = false;
1022 if (modelType.equals(ModelType.vfModule)) {
1023 isBaseVfModule = requestHandlerUtils.getIsBaseVfModule(modelInfo, action, vnfType, sdcServiceModelVersion,
1027 serviceInstanceId = requestHandlerUtils.setServiceInstanceId(requestScope, sir);
1029 String vfModuleId = "";
1030 String volumeGroupId = "";
1031 String networkId = "";
1032 String pnfCorrelationId = "";
1033 String instanceGroupId = null;
1035 if (sir.getVnfInstanceId() != null) {
1036 vnfId = sir.getVnfInstanceId();
1039 if (sir.getVfModuleInstanceId() != null) {
1040 vfModuleId = sir.getVfModuleInstanceId();
1043 if (sir.getVolumeGroupInstanceId() != null) {
1044 volumeGroupId = sir.getVolumeGroupInstanceId();
1047 if (sir.getNetworkInstanceId() != null) {
1048 networkId = sir.getNetworkInstanceId();
1050 if (sir.getInstanceGroupId() != null) {
1051 instanceGroupId = sir.getInstanceGroupId();
1054 pnfCorrelationId = getPnfCorrelationId(sir);
1057 infraActiveRequestsClient.save(currentActiveReq);
1058 } catch (Exception e) {
1059 logger.error("Exception occurred", e);
1060 ErrorLoggerInfo errorLoggerInfo =
1061 new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError)
1062 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1063 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR,
1064 ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e).errorInfo(errorLoggerInfo).build();
1067 if (!requestScope.equalsIgnoreCase(ModelType.service.name()) && action != Action.recreateInstance
1068 && !requestScope.equalsIgnoreCase(ModelType.vnf.name())) {
1070 } else if (aLaCarte == null) {
1075 RequestClientParameter requestClientParameter;
1077 requestClientParameter = new RequestClientParameter.Builder().setRequestId(requestId)
1078 .setBaseVfModule(isBaseVfModule).setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
1079 .setRequestAction(action.toString()).setServiceInstanceId(serviceInstanceId)
1080 .setPnfCorrelationId(pnfCorrelationId).setVnfId(vnfId).setVfModuleId(vfModuleId)
1081 .setVolumeGroupId(volumeGroupId).setNetworkId(networkId).setServiceType(serviceInstanceType)
1082 .setVnfType(vnfType).setVfModuleType(vfModuleType).setNetworkType(networkType)
1083 .setRequestDetails(requestHandlerUtils.mapJSONtoMSOStyle(requestJSON, sir, aLaCarte, action))
1084 .setApiVersion(apiVersion).setALaCarte(aLaCarte).setRequestUri(requestUri)
1085 .setInstanceGroupId(instanceGroupId).build();
1086 } catch (IOException e) {
1087 logger.error("Exception occurred", e);
1088 ErrorLoggerInfo errorLoggerInfo =
1089 new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, ErrorCode.SchemaError)
1090 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1091 throw new ValidateException.Builder("Unable to generate RequestClientParamter object" + e.getMessage(),
1092 HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER).errorInfo(errorLoggerInfo)
1095 return requestHandlerUtils.postBPELRequest(currentActiveReq, requestClientParameter,
1096 recipeLookupResult.getOrchestrationURI(), requestScope);
1104 protected Actions handleReplaceInstance(Actions action, ServiceInstancesRequest sir) {
1105 if (action != null && action.equals(Action.replaceInstance)
1106 && sir.getRequestDetails().getRequestParameters().getRetainAssignments() != null
1107 && sir.getRequestDetails().getRequestParameters().getRetainAssignments()) {
1108 action = Action.replaceInstanceRetainAssignments;
1114 * This method deletes the Instance Groups.
1116 * This method will check whether the request is not duplicate in requestdb. if its not then will save as a new
1117 * request. And will send a POST request to BEPL client to delete the Insatnce Groups.
1120 * @param instanceIdMap
1124 * @param requestContext
1126 * @throws ApiException
1128 public Response deleteInstanceGroups(Actions action, HashMap<String, String> instanceIdMap, String version,
1129 String requestId, String requestUri, ContainerRequestContext requestContext) throws ApiException {
1130 String instanceGroupId = instanceIdMap.get(CommonConstants.INSTANCE_GROUP_INSTANCE_ID);
1131 Boolean aLaCarte = true;
1132 String apiVersion = version.substring(1);
1133 ServiceInstancesRequest sir = new ServiceInstancesRequest();
1134 sir.setInstanceGroupId(instanceGroupId);
1136 String requestScope = ModelType.instanceGroup.toString();
1137 InfraActiveRequests currentActiveReq =
1138 msoRequest.createRequestObject(sir, action, requestId, Status.IN_PROGRESS, null, requestScope);
1139 requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
1141 requestHandlerUtils.validateHeaders(requestContext);
1142 } catch (ValidationException e) {
1143 logger.error("Exception occurred", e);
1144 ErrorLoggerInfo errorLoggerInfo =
1145 new ErrorLoggerInfo.Builder(MessageEnum.APIH_VALIDATION_ERROR, ErrorCode.SchemaError)
1146 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1147 ValidateException validateException =
1148 new ValidateException.Builder(e.getMessage(), HttpStatus.SC_BAD_REQUEST,
1149 ErrorNumbers.SVC_BAD_PARAMETER).cause(e).errorInfo(errorLoggerInfo).build();
1150 requestHandlerUtils.updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1151 throw validateException;
1154 requestHandlerUtils.checkForDuplicateRequests(action, instanceIdMap, requestScope, currentActiveReq, null);
1156 ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
1158 RequestReferences referencesResponse = new RequestReferences();
1160 referencesResponse.setRequestId(requestId);
1162 serviceResponse.setRequestReferences(referencesResponse);
1163 Boolean isBaseVfModule = false;
1165 RecipeLookupResult recipeLookupResult = new RecipeLookupResult("/mso/async/services/WorkflowActionBB", 180);
1168 infraActiveRequestsClient.save(currentActiveReq);
1169 } catch (Exception e) {
1170 logger.error("Exception occurred", e);
1171 ErrorLoggerInfo errorLoggerInfo =
1172 new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError)
1173 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1174 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR,
1175 ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e).errorInfo(errorLoggerInfo).build();
1178 RequestClientParameter requestClientParameter = new RequestClientParameter.Builder().setRequestId(requestId)
1179 .setBaseVfModule(isBaseVfModule).setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
1180 .setRequestAction(action.toString()).setApiVersion(apiVersion).setALaCarte(aLaCarte)
1181 .setRequestUri(requestUri).setInstanceGroupId(instanceGroupId).build();
1184 return requestHandlerUtils.postBPELRequest(currentActiveReq, requestClientParameter,
1185 recipeLookupResult.getOrchestrationURI(), requestScope);
1188 protected String getPnfCorrelationId(ServiceInstancesRequest sir) {
1189 return Optional.of(sir).map(ServiceInstancesRequest::getRequestDetails)
1190 .map(RequestDetails::getRequestParameters).map(parameters -> parameters.getUserParamValue("pnfId"))
1194 private Response configurationRecipeLookup(String requestJSON, Action action, HashMap<String, String> instanceIdMap,
1195 String version, String requestId, String requestUri) throws ApiException {
1196 String serviceInstanceId;
1197 Boolean aLaCarte = null;
1198 String apiVersion = version.substring(1);
1199 ServiceInstancesRequest sir;
1201 sir = requestHandlerUtils.convertJsonToServiceInstanceRequest(requestJSON, action, requestId, requestUri);
1202 String requestScope = requestHandlerUtils.deriveRequestScope(action, sir, requestUri);
1203 InfraActiveRequests currentActiveReq =
1204 msoRequest.createRequestObject(sir, action, requestId, Status.IN_PROGRESS, requestJSON, requestScope);
1205 if (sir.getRequestDetails().getRequestParameters() != null) {
1206 aLaCarte = sir.getRequestDetails().getRequestParameters().getALaCarte();
1209 requestHandlerUtils.parseRequest(sir, instanceIdMap, action, version, requestJSON, aLaCarte, requestId,
1211 requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
1212 String instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();
1214 requestHandlerUtils.checkForDuplicateRequests(action, instanceIdMap, requestScope, currentActiveReq,
1217 ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
1218 RequestReferences referencesResponse = new RequestReferences();
1219 referencesResponse.setRequestId(requestId);
1220 serviceResponse.setRequestReferences(referencesResponse);
1222 String orchestrationUri = env.getProperty(CommonConstants.ALACARTE_ORCHESTRATION);
1223 String timeOut = env.getProperty(CommonConstants.ALACARTE_RECIPE_TIMEOUT);
1225 if (StringUtils.isBlank(orchestrationUri) || StringUtils.isBlank(timeOut)) {
1226 String error = StringUtils.isBlank(orchestrationUri) ? "ALaCarte Orchestration URI not found in properties"
1227 : "ALaCarte Recipe Timeout not found in properties";
1229 ErrorLoggerInfo errorLoggerInfo =
1230 new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, ErrorCode.DataError)
1231 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1233 ValidateException validateException = new ValidateException.Builder(error, HttpStatus.SC_NOT_FOUND,
1234 ErrorNumbers.SVC_GENERAL_SERVICE_ERROR).errorInfo(errorLoggerInfo).build();
1236 requestHandlerUtils.updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1238 throw validateException;
1242 serviceInstanceId = "";
1243 String configurationId = "";
1244 String pnfCorrelationId = "";
1246 if (sir.getServiceInstanceId() != null) {
1247 serviceInstanceId = sir.getServiceInstanceId();
1250 if (sir.getConfigurationId() != null) {
1251 configurationId = sir.getConfigurationId();
1254 pnfCorrelationId = getPnfCorrelationId(sir);
1257 infraActiveRequestsClient.save(currentActiveReq);
1258 } catch (Exception e) {
1259 ErrorLoggerInfo errorLoggerInfo =
1260 new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError)
1261 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1262 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR,
1263 ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e).errorInfo(errorLoggerInfo).build();
1266 if (!requestScope.equalsIgnoreCase(ModelType.service.name())) {
1268 } else if (aLaCarte == null) {
1271 RequestClientParameter requestClientParameter = null;
1273 requestClientParameter = new RequestClientParameter.Builder().setRequestId(requestId).setBaseVfModule(false)
1274 .setRecipeTimeout(Integer.parseInt(timeOut)).setRequestAction(action.toString())
1275 .setServiceInstanceId(serviceInstanceId).setPnfCorrelationId(pnfCorrelationId)
1276 .setConfigurationId(configurationId)
1277 .setRequestDetails(requestHandlerUtils.mapJSONtoMSOStyle(requestJSON, sir, aLaCarte, action))
1278 .setApiVersion(apiVersion).setALaCarte(aLaCarte).setRequestUri(requestUri).build();
1279 } catch (IOException e) {
1280 ErrorLoggerInfo errorLoggerInfo =
1281 new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, ErrorCode.SchemaError)
1282 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1283 throw new ValidateException.Builder("Unable to generate RequestClientParamter object" + e.getMessage(),
1284 HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER).errorInfo(errorLoggerInfo)
1288 return requestHandlerUtils.postBPELRequest(currentActiveReq, requestClientParameter, orchestrationUri,
1292 protected CloudConfiguration getCloudConfigurationOnReplace(String requestScope,
1293 HashMap<String, String> instanceIdMap, InfraActiveRequests currentActiveReq) throws ApiException {
1294 logger.debug("Replace request is missing cloudConfiguration, autofilling from create.");
1295 CloudConfiguration cloudConfiguration = null;
1296 if (requestScope.equals(ModelType.vfModule.toString())) {
1297 cloudConfiguration = bpmnRequestBuilder.getCloudConfigurationVfModuleReplace(
1298 instanceIdMap.get("vnfInstanceId"), instanceIdMap.get("vfModuleInstanceId"));
1300 cloudConfiguration = bpmnRequestBuilder.mapCloudConfigurationVnf(instanceIdMap.get("vnfInstanceId"));
1303 if (cloudConfiguration == null) {
1304 String errorMessage = "CloudConfiguration not found during autofill for replace request.";
1305 logger.error(errorMessage);
1306 updateStatus(currentActiveReq, Status.FAILED, errorMessage);
1307 throw new CloudConfigurationNotFoundException(
1308 "CloudConfiguration not found during autofill for replace request.");
1310 return cloudConfiguration;
1313 protected void setCloudConfigurationCurrentActiveRequest(CloudConfiguration cloudConfiguration,
1314 InfraActiveRequests currentActiveRequest) {
1315 if (cloudConfiguration.getLcpCloudRegionId() != null) {
1316 currentActiveRequest.setCloudRegion(cloudConfiguration.getLcpCloudRegionId());
1319 if (cloudConfiguration.getTenantId() != null) {
1320 currentActiveRequest.setTenantId(cloudConfiguration.getTenantId());