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][5-7]}/serviceInstances/{serviceInstanceId}/upgrade")
423 @Consumes(MediaType.APPLICATION_JSON)
424 @Produces(MediaType.APPLICATION_JSON)
425 @Operation(description = "Upgrade a Service Instance to newer model",
426 responses = @ApiResponse(
427 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
429 public Response upgradeServiceInstance(String request, @PathParam("version") String version,
430 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
431 throws ApiException {
432 String requestId = requestHandlerUtils.getRequestId(requestContext);
433 HashMap<String, String> instanceIdMap = new HashMap<>();
434 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
436 return serviceInstances(request, Action.upgradeInstance, instanceIdMap, version, requestId,
437 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
441 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/replace")
442 @Consumes(MediaType.APPLICATION_JSON)
443 @Produces(MediaType.APPLICATION_JSON)
444 @Operation(description = "Replace provided VNF instance",
445 responses = @ApiResponse(
446 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
448 public Response replaceVnfInstance(String request, @PathParam("version") String version,
449 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
450 @Context ContainerRequestContext requestContext) throws ApiException {
451 String requestId = requestHandlerUtils.getRequestId(requestContext);
452 HashMap<String, String> instanceIdMap = new HashMap<>();
453 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
454 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
455 return serviceInstances(request, Action.replaceInstance, instanceIdMap, version, requestId,
456 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
460 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/healthcheck")
461 @Consumes(MediaType.APPLICATION_JSON)
462 @Produces(MediaType.APPLICATION_JSON)
463 @Operation(description = "HealthCheck for provided VNF instance",
464 responses = @ApiResponse(
465 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
467 public Response cnfHealthCheck(String request, @PathParam("version") String version,
468 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
469 @Context ContainerRequestContext requestContext) throws ApiException {
470 String requestId = requestHandlerUtils.getRequestId(requestContext);
471 HashMap<String, String> instanceIdMap = new HashMap<>();
472 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
473 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
474 return serviceInstances(request, Action.healthCheck, instanceIdMap, version, requestId,
475 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
479 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/upgradeCnf")
480 @Consumes(MediaType.APPLICATION_JSON)
481 @Produces(MediaType.APPLICATION_JSON)
482 @Operation(description = "Upgrade CNF instance",
483 responses = @ApiResponse(
484 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
486 public Response cnfUpgrade(String request, @PathParam("version") String version,
487 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
488 @Context ContainerRequestContext requestContext) throws ApiException {
489 String requestId = requestHandlerUtils.getRequestId(requestContext);
490 HashMap<String, String> instanceIdMap = new HashMap<>();
491 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
492 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
493 return serviceInstances(request, Action.upgradeCnf, instanceIdMap, version, requestId,
494 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
498 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}")
499 @Consumes(MediaType.APPLICATION_JSON)
500 @Produces(MediaType.APPLICATION_JSON)
501 @Operation(description = "Update VNF on a specified version, serviceInstance and vnfInstance",
502 responses = @ApiResponse(
503 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
505 public Response updateVnfInstance(String request, @PathParam("version") String version,
506 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
507 @Context ContainerRequestContext requestContext) throws ApiException {
508 String requestId = requestHandlerUtils.getRequestId(requestContext);
509 HashMap<String, String> instanceIdMap = new HashMap<>();
510 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
511 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
512 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
513 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
517 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/applyUpdatedConfig")
518 @Consumes(MediaType.APPLICATION_JSON)
519 @Produces(MediaType.APPLICATION_JSON)
520 @Operation(description = "Apply updated configuration", responses = @ApiResponse(
521 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
522 public Response applyUpdatedConfig(String request, @PathParam("version") String version,
523 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
524 @Context ContainerRequestContext requestContext) throws ApiException {
525 String requestId = requestHandlerUtils.getRequestId(requestContext);
526 HashMap<String, String> instanceIdMap = new HashMap<>();
527 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
528 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
529 return serviceInstances(request, Action.applyUpdatedConfig, instanceIdMap, version, requestId,
530 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
534 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/recreate")
535 @Consumes(MediaType.APPLICATION_JSON)
536 @Produces(MediaType.APPLICATION_JSON)
537 @Operation(description = "Recreate VNF Instance", responses = @ApiResponse(
538 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
539 public Response recreateVnfInstance(String request, @PathParam("version") String version,
540 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
541 @Context ContainerRequestContext requestContext) throws ApiException {
542 String requestId = requestHandlerUtils.getRequestId(requestContext);
543 HashMap<String, String> instanceIdMap = new HashMap<>();
544 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
545 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
546 return serviceInstances(request, Action.recreateInstance, instanceIdMap, version, requestId,
547 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
551 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}")
552 @Consumes(MediaType.APPLICATION_JSON)
553 @Produces(MediaType.APPLICATION_JSON)
554 @Operation(description = "Delete provided VNF instance",
555 responses = @ApiResponse(
556 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
558 public Response deleteVnfInstance(String request, @PathParam("version") String version,
559 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
560 @Context ContainerRequestContext requestContext) throws ApiException {
561 String requestId = requestHandlerUtils.getRequestId(requestContext);
562 HashMap<String, String> instanceIdMap = new HashMap<>();
563 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
564 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
565 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
566 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
570 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules")
571 @Consumes(MediaType.APPLICATION_JSON)
572 @Produces(MediaType.APPLICATION_JSON)
573 @Operation(description = "Create VfModule on a specified version, serviceInstance and vnfInstance",
574 responses = @ApiResponse(
575 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
577 public Response createVfModuleInstance(String request, @PathParam("version") String version,
578 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
579 @Context ContainerRequestContext requestContext) throws ApiException {
580 String requestId = requestHandlerUtils.getRequestId(requestContext);
581 HashMap<String, String> instanceIdMap = new HashMap<>();
582 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
583 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
584 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
585 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
589 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/replace")
590 @Consumes(MediaType.APPLICATION_JSON)
591 @Produces(MediaType.APPLICATION_JSON)
592 @Operation(description = "Create VfModule on a specified version, serviceInstance and vnfInstance",
593 responses = @ApiResponse(
594 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
596 public Response replaceVfModuleInstance(String request, @PathParam("version") String version,
597 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
598 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
599 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 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
605 return serviceInstances(request, Action.replaceInstance, instanceIdMap, version, requestId,
606 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
610 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}")
611 @Consumes(MediaType.APPLICATION_JSON)
612 @Produces(MediaType.APPLICATION_JSON)
613 @Operation(description = "Update VfModule on a specified version, serviceInstance, vnfInstance and vfModule",
614 responses = @ApiResponse(
615 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
617 public Response updateVfModuleInstance(String request, @PathParam("version") String version,
618 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
619 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
620 throws ApiException {
621 String requestId = requestHandlerUtils.getRequestId(requestContext);
622 HashMap<String, String> instanceIdMap = new HashMap<>();
623 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
624 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
625 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
626 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
627 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
631 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/inPlaceSoftwareUpdate")
632 @Consumes(MediaType.APPLICATION_JSON)
633 @Produces(MediaType.APPLICATION_JSON)
634 @Operation(description = "Perform VNF software update",
635 responses = @ApiResponse(
636 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
638 public Response inPlaceSoftwareUpdate(String request, @PathParam("version") String version,
639 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
640 @Context ContainerRequestContext requestContext) 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 return serviceInstances(request, Action.inPlaceSoftwareUpdate, instanceIdMap, version, requestId,
646 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
650 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}")
651 @Consumes(MediaType.APPLICATION_JSON)
652 @Produces(MediaType.APPLICATION_JSON)
653 @Operation(description = "Delete provided VfModule instance",
654 responses = @ApiResponse(
655 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
657 public Response deleteVfModuleInstance(String request, @PathParam("version") String version,
658 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
659 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
660 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 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
666 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
667 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
671 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/deactivateAndCloudDelete")
672 @Consumes(MediaType.APPLICATION_JSON)
673 @Produces(MediaType.APPLICATION_JSON)
674 @Operation(description = "Deactivate and Cloud Delete VfModule instance",
675 responses = @ApiResponse(
676 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
678 public Response deactivateAndCloudDeleteVfModuleInstance(String request, @PathParam("version") String version,
679 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
680 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
681 throws ApiException {
682 String requestId = requestHandlerUtils.getRequestId(requestContext);
683 HashMap<String, String> instanceIdMap = new HashMap<>();
684 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
685 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
686 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
687 Response response = serviceInstances(request, Action.deactivateAndCloudDelete, instanceIdMap, version,
688 requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
693 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/scaleOut")
694 @Consumes(MediaType.APPLICATION_JSON)
695 @Produces(MediaType.APPLICATION_JSON)
696 @Operation(description = "VF Auto Scale Out",
697 responses = @ApiResponse(
698 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
700 public Response scaleOutVfModule(String request, @PathParam("version") String version,
701 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
702 @Context ContainerRequestContext requestContext) throws ApiException {
703 String requestId = requestHandlerUtils.getRequestId(requestContext);
704 HashMap<String, String> instanceIdMap = new HashMap<>();
705 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
706 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
707 return serviceInstances(request, Action.scaleOut, instanceIdMap, version, requestId,
708 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
712 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups")
713 @Consumes(MediaType.APPLICATION_JSON)
714 @Produces(MediaType.APPLICATION_JSON)
715 @Operation(description = "Create VolumeGroup on a specified version, serviceInstance, vnfInstance",
716 responses = @ApiResponse(
717 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
719 public Response createVolumeGroupInstance(String request, @PathParam("version") String version,
720 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
721 @Context ContainerRequestContext requestContext) throws ApiException {
722 String requestId = requestHandlerUtils.getRequestId(requestContext);
723 HashMap<String, String> instanceIdMap = new HashMap<>();
724 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
725 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
726 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
727 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
731 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}")
732 @Consumes(MediaType.APPLICATION_JSON)
733 @Produces(MediaType.APPLICATION_JSON)
734 @Operation(description = "Update VolumeGroup on a specified version, serviceInstance, vnfInstance and volumeGroup",
735 responses = @ApiResponse(
736 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
738 public Response updateVolumeGroupInstance(String request, @PathParam("version") String version,
739 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
740 @PathParam("volumeGroupInstanceId") String volumeGroupInstanceId,
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 instanceIdMap.put("volumeGroupInstanceId", volumeGroupInstanceId);
747 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
748 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
752 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}")
753 @Consumes(MediaType.APPLICATION_JSON)
754 @Produces(MediaType.APPLICATION_JSON)
755 @Operation(description = "Delete provided VolumeGroup instance",
756 responses = @ApiResponse(
757 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
759 public Response deleteVolumeGroupInstance(String request, @PathParam("version") String version,
760 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
761 @PathParam("volumeGroupInstanceId") String volumeGroupInstanceId,
762 @Context ContainerRequestContext requestContext) throws ApiException {
763 String requestId = requestHandlerUtils.getRequestId(requestContext);
764 HashMap<String, String> instanceIdMap = new HashMap<>();
765 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
766 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
767 instanceIdMap.put("volumeGroupInstanceId", volumeGroupInstanceId);
768 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
769 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
773 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks")
774 @Consumes(MediaType.APPLICATION_JSON)
775 @Produces(MediaType.APPLICATION_JSON)
776 @Operation(description = "Create NetworkInstance on a specified version and serviceInstance ",
777 responses = @ApiResponse(
778 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
780 public Response createNetworkInstance(String request, @PathParam("version") String version,
781 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
782 throws ApiException {
783 String requestId = requestHandlerUtils.getRequestId(requestContext);
784 HashMap<String, String> instanceIdMap = new HashMap<>();
785 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
786 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
787 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
791 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks/{networkInstanceId}")
792 @Consumes(MediaType.APPLICATION_JSON)
793 @Produces(MediaType.APPLICATION_JSON)
794 @Operation(description = "Update VolumeGroup on a specified version, serviceInstance, networkInstance",
795 responses = @ApiResponse(
796 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
798 public Response updateNetworkInstance(String request, @PathParam("version") String version,
799 @PathParam("serviceInstanceId") String serviceInstanceId,
800 @PathParam("networkInstanceId") String networkInstanceId, @Context ContainerRequestContext requestContext)
801 throws ApiException {
802 String requestId = requestHandlerUtils.getRequestId(requestContext);
803 HashMap<String, String> instanceIdMap = new HashMap<>();
804 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
805 instanceIdMap.put("networkInstanceId", networkInstanceId);
806 return serviceInstances(request, Action.updateInstance, 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 = "Delete provided Network instance",
815 responses = @ApiResponse(
816 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
818 public Response deleteNetworkInstance(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.deleteInstance, instanceIdMap, version, requestId,
827 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
831 @Path("/{version:[vV][7]}/instanceGroups")
832 @Consumes(MediaType.APPLICATION_JSON)
833 @Produces(MediaType.APPLICATION_JSON)
834 @Operation(description = "Create instanceGroups",
835 responses = @ApiResponse(
836 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
838 public Response createInstanceGroups(String request, @PathParam("version") String version,
839 @Context ContainerRequestContext requestContext) throws ApiException {
840 String requestId = requestHandlerUtils.getRequestId(requestContext);
841 return serviceInstances(request, Action.createInstance, null, version, requestId,
842 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
846 @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}")
847 @Consumes(MediaType.APPLICATION_JSON)
848 @Produces(MediaType.APPLICATION_JSON)
849 @Operation(description = "Delete instanceGroup",
850 responses = @ApiResponse(
851 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
853 public Response deleteInstanceGroups(@PathParam("version") String version,
854 @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext)
855 throws ApiException {
856 String requestId = requestHandlerUtils.getRequestId(requestContext);
857 HashMap<String, String> instanceIdMap = new HashMap<>();
858 instanceIdMap.put(CommonConstants.INSTANCE_GROUP_INSTANCE_ID, instanceGroupId);
859 return deleteInstanceGroups(Action.deleteInstance, instanceIdMap, version, requestId,
860 requestHandlerUtils.getRequestUri(requestContext, uriPrefix), requestContext);
864 @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}/addMembers")
865 @Consumes(MediaType.APPLICATION_JSON)
866 @Produces(MediaType.APPLICATION_JSON)
867 @Operation(description = "Add instanceGroup members",
868 responses = @ApiResponse(
869 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
871 public Response addInstanceGroupMembers(String request, @PathParam("version") String version,
872 @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext)
873 throws ApiException {
874 String requestId = requestHandlerUtils.getRequestId(requestContext);
875 HashMap<String, String> instanceIdMap = new HashMap<>();
876 instanceIdMap.put(CommonConstants.INSTANCE_GROUP_INSTANCE_ID, instanceGroupId);
877 return serviceInstances(request, Action.addMembers, instanceIdMap, version, requestId,
878 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
882 @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}/removeMembers")
883 @Consumes(MediaType.APPLICATION_JSON)
884 @Produces(MediaType.APPLICATION_JSON)
885 @Operation(description = "Remove instanceGroup members",
886 responses = @ApiResponse(
887 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
889 public Response removeInstanceGroupMembers(String request, @PathParam("version") String version,
890 @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext)
891 throws ApiException {
892 String requestId = requestHandlerUtils.getRequestId(requestContext);
893 HashMap<String, String> instanceIdMap = new HashMap<>();
894 instanceIdMap.put(CommonConstants.INSTANCE_GROUP_INSTANCE_ID, instanceGroupId);
895 return serviceInstances(request, Action.removeMembers, instanceIdMap, version, requestId,
896 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
900 * This method is used for POST a request to the BPEL client (BPMN).
902 * Convert the requestJson to ServiceInstanceRequest(sir), create the msoRequest object, check whether this request
903 * is already being processed in requestdb for duplicate check.
905 * Based on the alacarte flag, sir and msoRequest will do the recipe lookup from the service and servicerecipe table
906 * of catalogdb, and get the OrchestrationURI.
908 * If the present request is not the duplicate request then this request will be saved in the requestdb. and will
909 * POST a request to the BPMN engine at the OrchestrationURI fetched.
911 * @param requestJSON Json fetched as body in the API call
912 * @param action Type of action to be performed
913 * @param instanceIdMap Map of instance ids of service/vnf/vf/configuration etc..
914 * @param version Supported version of API
915 * @param requestId Unique id for the request
917 * @return response object
918 * @throws ApiException
920 public Response serviceInstances(String requestJSON, Actions action, HashMap<String, String> instanceIdMap,
921 String version, String requestId, String requestUri) throws ApiException {
922 return serviceInstances(requestJSON, action, instanceIdMap, version, requestId, requestUri, null);
926 public Response serviceInstances(String requestJSON, Actions action, HashMap<String, String> instanceIdMap,
927 String version, String requestId, String requestUri, HashMap<String, String> queryParams)
928 throws ApiException {
929 String serviceInstanceId;
930 Boolean aLaCarte = null;
931 ServiceInstancesRequest sir;
932 String apiVersion = version.substring(1);
934 sir = requestHandlerUtils.convertJsonToServiceInstanceRequest(requestJSON, action, requestId, requestUri);
935 action = handleReplaceInstance(action, sir);
937 String requestScope = requestHandlerUtils.deriveRequestScope(action, sir, requestUri);
939 requestValidatorListenerRunner.runValidations(requestUri, instanceIdMap, sir, queryParams, action);
940 } catch (ApiException e) {
941 msoRequest.createErrorRequestRecord(Status.FAILED, requestId, e.getMessage(), action, requestScope,
942 requestJSON, requestHandlerUtils
943 .getServiceInstanceIdForValidationError(sir, instanceIdMap, requestScope).orElse(null),
948 InfraActiveRequests currentActiveReq =
949 msoRequest.createRequestObject(sir, action, requestId, Status.IN_PROGRESS, requestJSON, requestScope);
950 if (sir.getRequestDetails().getRequestParameters() != null) {
951 aLaCarte = sir.getRequestDetails().getRequestParameters().getALaCarte();
954 requestHandlerUtils.parseRequest(sir, instanceIdMap, action, version, requestJSON, aLaCarte, requestId,
956 if ((action == Action.replaceInstance || action == Action.replaceInstanceRetainAssignments)
957 && (requestScope.equals(ModelType.vnf.toString()) || requestScope.equals(ModelType.vfModule.toString())
958 || requestScope.equals(ModelType.cnf.toString()))
959 && sir.getRequestDetails().getCloudConfiguration() == null) {
960 CloudConfiguration cloudConfiguration =
961 getCloudConfigurationOnReplace(requestScope, instanceIdMap, currentActiveReq);
962 sir.getRequestDetails().setCloudConfiguration(cloudConfiguration);
963 setCloudConfigurationCurrentActiveRequest(cloudConfiguration, currentActiveReq);
965 requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
967 String instanceName = null;
968 if (sir.getRequestDetails().getRequestInfo() != null) {
969 instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();
971 boolean alaCarteFlag = msoRequest.getAlacarteFlag(sir);
972 String vnfType = msoRequest.getVnfType(sir, requestScope);
973 String networkType = msoRequest.getNetworkType(sir, requestScope);
974 String sdcServiceModelVersion = msoRequest.getSDCServiceModelVersion(sir);
975 String vfModuleType = msoRequest.getVfModuleType(sir, requestScope);
977 if (requestScope.equalsIgnoreCase(ModelType.vnf.name()) && vnfType != null) {
978 currentActiveReq.setVnfType(vnfType);
979 } else if (requestScope.equalsIgnoreCase(ModelType.network.name()) && networkType != null) {
980 currentActiveReq.setNetworkType(networkType);
983 requestHandlerUtils.checkForDuplicateRequests(action, instanceIdMap, requestScope, currentActiveReq,
986 ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
988 RequestReferences referencesResponse = new RequestReferences();
990 referencesResponse.setRequestId(requestId);
992 serviceResponse.setRequestReferences(referencesResponse);
993 RecipeLookupResult recipeLookupResult =
994 requestHandlerUtils.getServiceInstanceOrchestrationURI(sir, action, alaCarteFlag, currentActiveReq);
995 String serviceInstanceType = requestHandlerUtils.getServiceType(requestScope, sir, alaCarteFlag);
997 ModelInfo modelInfo = sir.getRequestDetails().getModelInfo();
998 ModelType modelType = requestHandlerUtils.getModelType(action, modelInfo);
1000 Boolean isBaseVfModule = false;
1002 if (modelType.equals(ModelType.vfModule)) {
1003 isBaseVfModule = requestHandlerUtils.getIsBaseVfModule(modelInfo, action, vnfType, sdcServiceModelVersion,
1007 serviceInstanceId = requestHandlerUtils.setServiceInstanceId(requestScope, sir);
1009 String vfModuleId = "";
1010 String volumeGroupId = "";
1011 String networkId = "";
1012 String pnfCorrelationId = "";
1013 String instanceGroupId = null;
1015 if (sir.getVnfInstanceId() != null) {
1016 vnfId = sir.getVnfInstanceId();
1019 if (sir.getVfModuleInstanceId() != null) {
1020 vfModuleId = sir.getVfModuleInstanceId();
1023 if (sir.getVolumeGroupInstanceId() != null) {
1024 volumeGroupId = sir.getVolumeGroupInstanceId();
1027 if (sir.getNetworkInstanceId() != null) {
1028 networkId = sir.getNetworkInstanceId();
1030 if (sir.getInstanceGroupId() != null) {
1031 instanceGroupId = sir.getInstanceGroupId();
1034 pnfCorrelationId = getPnfCorrelationId(sir);
1037 infraActiveRequestsClient.save(currentActiveReq);
1038 } catch (Exception e) {
1039 logger.error("Exception occurred", e);
1040 ErrorLoggerInfo errorLoggerInfo =
1041 new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError)
1042 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1043 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR,
1044 ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e).errorInfo(errorLoggerInfo).build();
1047 if (!requestScope.equalsIgnoreCase(ModelType.service.name()) && action != Action.recreateInstance
1048 && !requestScope.equalsIgnoreCase(ModelType.vnf.name())) {
1050 } else if (aLaCarte == null) {
1055 RequestClientParameter requestClientParameter;
1057 requestClientParameter = new RequestClientParameter.Builder().setRequestId(requestId)
1058 .setBaseVfModule(isBaseVfModule).setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
1059 .setRequestAction(action.toString()).setServiceInstanceId(serviceInstanceId)
1060 .setPnfCorrelationId(pnfCorrelationId).setVnfId(vnfId).setVfModuleId(vfModuleId)
1061 .setVolumeGroupId(volumeGroupId).setNetworkId(networkId).setServiceType(serviceInstanceType)
1062 .setVnfType(vnfType).setVfModuleType(vfModuleType).setNetworkType(networkType)
1063 .setRequestDetails(requestHandlerUtils.mapJSONtoMSOStyle(requestJSON, sir, aLaCarte, action))
1064 .setApiVersion(apiVersion).setALaCarte(aLaCarte).setRequestUri(requestUri)
1065 .setInstanceGroupId(instanceGroupId).build();
1066 } catch (IOException e) {
1067 logger.error("Exception occurred", e);
1068 ErrorLoggerInfo errorLoggerInfo =
1069 new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, ErrorCode.SchemaError)
1070 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1071 throw new ValidateException.Builder("Unable to generate RequestClientParamter object" + e.getMessage(),
1072 HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER).errorInfo(errorLoggerInfo)
1075 return requestHandlerUtils.postBPELRequest(currentActiveReq, requestClientParameter,
1076 recipeLookupResult.getOrchestrationURI(), requestScope);
1084 protected Actions handleReplaceInstance(Actions action, ServiceInstancesRequest sir) {
1085 if (action != null && action.equals(Action.replaceInstance)
1086 && sir.getRequestDetails().getRequestParameters().getRetainAssignments() != null
1087 && sir.getRequestDetails().getRequestParameters().getRetainAssignments()) {
1088 action = Action.replaceInstanceRetainAssignments;
1094 * This method deletes the Instance Groups.
1096 * This method will check whether the request is not duplicate in requestdb. if its not then will save as a new
1097 * request. And will send a POST request to BEPL client to delete the Insatnce Groups.
1100 * @param instanceIdMap
1104 * @param requestContext
1106 * @throws ApiException
1108 public Response deleteInstanceGroups(Actions action, HashMap<String, String> instanceIdMap, String version,
1109 String requestId, String requestUri, ContainerRequestContext requestContext) throws ApiException {
1110 String instanceGroupId = instanceIdMap.get(CommonConstants.INSTANCE_GROUP_INSTANCE_ID);
1111 Boolean aLaCarte = true;
1112 String apiVersion = version.substring(1);
1113 ServiceInstancesRequest sir = new ServiceInstancesRequest();
1114 sir.setInstanceGroupId(instanceGroupId);
1116 String requestScope = ModelType.instanceGroup.toString();
1117 InfraActiveRequests currentActiveReq =
1118 msoRequest.createRequestObject(sir, action, requestId, Status.IN_PROGRESS, null, requestScope);
1119 requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
1121 requestHandlerUtils.validateHeaders(requestContext);
1122 } catch (ValidationException e) {
1123 logger.error("Exception occurred", e);
1124 ErrorLoggerInfo errorLoggerInfo =
1125 new ErrorLoggerInfo.Builder(MessageEnum.APIH_VALIDATION_ERROR, ErrorCode.SchemaError)
1126 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1127 ValidateException validateException =
1128 new ValidateException.Builder(e.getMessage(), HttpStatus.SC_BAD_REQUEST,
1129 ErrorNumbers.SVC_BAD_PARAMETER).cause(e).errorInfo(errorLoggerInfo).build();
1130 requestHandlerUtils.updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1131 throw validateException;
1134 requestHandlerUtils.checkForDuplicateRequests(action, instanceIdMap, requestScope, currentActiveReq, null);
1136 ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
1138 RequestReferences referencesResponse = new RequestReferences();
1140 referencesResponse.setRequestId(requestId);
1142 serviceResponse.setRequestReferences(referencesResponse);
1143 Boolean isBaseVfModule = false;
1145 RecipeLookupResult recipeLookupResult = new RecipeLookupResult("/mso/async/services/WorkflowActionBB", 180);
1148 infraActiveRequestsClient.save(currentActiveReq);
1149 } catch (Exception e) {
1150 logger.error("Exception occurred", e);
1151 ErrorLoggerInfo errorLoggerInfo =
1152 new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError)
1153 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1154 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR,
1155 ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e).errorInfo(errorLoggerInfo).build();
1158 RequestClientParameter requestClientParameter = new RequestClientParameter.Builder().setRequestId(requestId)
1159 .setBaseVfModule(isBaseVfModule).setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
1160 .setRequestAction(action.toString()).setApiVersion(apiVersion).setALaCarte(aLaCarte)
1161 .setRequestUri(requestUri).setInstanceGroupId(instanceGroupId).build();
1164 return requestHandlerUtils.postBPELRequest(currentActiveReq, requestClientParameter,
1165 recipeLookupResult.getOrchestrationURI(), requestScope);
1168 protected String getPnfCorrelationId(ServiceInstancesRequest sir) {
1169 return Optional.of(sir).map(ServiceInstancesRequest::getRequestDetails)
1170 .map(RequestDetails::getRequestParameters).map(parameters -> parameters.getUserParamValue("pnfId"))
1174 private Response configurationRecipeLookup(String requestJSON, Action action, HashMap<String, String> instanceIdMap,
1175 String version, String requestId, String requestUri) throws ApiException {
1176 String serviceInstanceId;
1177 Boolean aLaCarte = null;
1178 String apiVersion = version.substring(1);
1179 ServiceInstancesRequest sir;
1181 sir = requestHandlerUtils.convertJsonToServiceInstanceRequest(requestJSON, action, requestId, requestUri);
1182 String requestScope = requestHandlerUtils.deriveRequestScope(action, sir, requestUri);
1183 InfraActiveRequests currentActiveReq =
1184 msoRequest.createRequestObject(sir, action, requestId, Status.IN_PROGRESS, requestJSON, requestScope);
1185 if (sir.getRequestDetails().getRequestParameters() != null) {
1186 aLaCarte = sir.getRequestDetails().getRequestParameters().getALaCarte();
1189 requestHandlerUtils.parseRequest(sir, instanceIdMap, action, version, requestJSON, aLaCarte, requestId,
1191 requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
1192 String instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();
1194 requestHandlerUtils.checkForDuplicateRequests(action, instanceIdMap, requestScope, currentActiveReq,
1197 ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
1198 RequestReferences referencesResponse = new RequestReferences();
1199 referencesResponse.setRequestId(requestId);
1200 serviceResponse.setRequestReferences(referencesResponse);
1202 String orchestrationUri = env.getProperty(CommonConstants.ALACARTE_ORCHESTRATION);
1203 String timeOut = env.getProperty(CommonConstants.ALACARTE_RECIPE_TIMEOUT);
1205 if (StringUtils.isBlank(orchestrationUri) || StringUtils.isBlank(timeOut)) {
1206 String error = StringUtils.isBlank(orchestrationUri) ? "ALaCarte Orchestration URI not found in properties"
1207 : "ALaCarte Recipe Timeout not found in properties";
1209 ErrorLoggerInfo errorLoggerInfo =
1210 new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, ErrorCode.DataError)
1211 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1213 ValidateException validateException = new ValidateException.Builder(error, HttpStatus.SC_NOT_FOUND,
1214 ErrorNumbers.SVC_GENERAL_SERVICE_ERROR).errorInfo(errorLoggerInfo).build();
1216 requestHandlerUtils.updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1218 throw validateException;
1222 serviceInstanceId = "";
1223 String configurationId = "";
1224 String pnfCorrelationId = "";
1226 if (sir.getServiceInstanceId() != null) {
1227 serviceInstanceId = sir.getServiceInstanceId();
1230 if (sir.getConfigurationId() != null) {
1231 configurationId = sir.getConfigurationId();
1234 pnfCorrelationId = getPnfCorrelationId(sir);
1237 infraActiveRequestsClient.save(currentActiveReq);
1238 } catch (Exception e) {
1239 ErrorLoggerInfo errorLoggerInfo =
1240 new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError)
1241 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1242 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR,
1243 ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e).errorInfo(errorLoggerInfo).build();
1246 if (!requestScope.equalsIgnoreCase(ModelType.service.name())) {
1248 } else if (aLaCarte == null) {
1251 RequestClientParameter requestClientParameter = null;
1253 requestClientParameter = new RequestClientParameter.Builder().setRequestId(requestId).setBaseVfModule(false)
1254 .setRecipeTimeout(Integer.parseInt(timeOut)).setRequestAction(action.toString())
1255 .setServiceInstanceId(serviceInstanceId).setPnfCorrelationId(pnfCorrelationId)
1256 .setConfigurationId(configurationId)
1257 .setRequestDetails(requestHandlerUtils.mapJSONtoMSOStyle(requestJSON, sir, aLaCarte, action))
1258 .setApiVersion(apiVersion).setALaCarte(aLaCarte).setRequestUri(requestUri).build();
1259 } catch (IOException e) {
1260 ErrorLoggerInfo errorLoggerInfo =
1261 new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, ErrorCode.SchemaError)
1262 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1263 throw new ValidateException.Builder("Unable to generate RequestClientParamter object" + e.getMessage(),
1264 HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER).errorInfo(errorLoggerInfo)
1268 return requestHandlerUtils.postBPELRequest(currentActiveReq, requestClientParameter, orchestrationUri,
1272 protected CloudConfiguration getCloudConfigurationOnReplace(String requestScope,
1273 HashMap<String, String> instanceIdMap, InfraActiveRequests currentActiveReq) throws ApiException {
1274 logger.debug("Replace request is missing cloudConfiguration, autofilling from create.");
1275 CloudConfiguration cloudConfiguration = null;
1276 if (requestScope.equals(ModelType.vfModule.toString())) {
1277 cloudConfiguration = bpmnRequestBuilder.getCloudConfigurationVfModuleReplace(
1278 instanceIdMap.get("vnfInstanceId"), instanceIdMap.get("vfModuleInstanceId"));
1280 cloudConfiguration = bpmnRequestBuilder.mapCloudConfigurationVnf(instanceIdMap.get("vnfInstanceId"));
1283 if (cloudConfiguration == null) {
1284 String errorMessage = "CloudConfiguration not found during autofill for replace request.";
1285 logger.error(errorMessage);
1286 updateStatus(currentActiveReq, Status.FAILED, errorMessage);
1287 throw new CloudConfigurationNotFoundException(
1288 "CloudConfiguration not found during autofill for replace request.");
1290 return cloudConfiguration;
1293 protected void setCloudConfigurationCurrentActiveRequest(CloudConfiguration cloudConfiguration,
1294 InfraActiveRequests currentActiveRequest) {
1295 if (cloudConfiguration.getLcpCloudRegionId() != null) {
1296 currentActiveRequest.setCloudRegion(cloudConfiguration.getLcpCloudRegionId());
1299 if (cloudConfiguration.getTenantId() != null) {
1300 currentActiveRequest.setTenantId(cloudConfiguration.getTenantId());