2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
7 * ================================================================================
8 * Modifications Copyright (c) 2019 Samsung
9 * ================================================================================
10 * Licensed under the Apache License, Version 2.0 (the "License");
11 * you may not use this file except in compliance with the License.
12 * You may obtain a copy of the License at
14 * http://www.apache.org/licenses/LICENSE-2.0
16 * Unless required by applicable law or agreed to in writing, software
17 * distributed under the License is distributed on an "AS IS" BASIS,
18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19 * See the License for the specific language governing permissions and
20 * limitations under the License.
21 * ============LICENSE_END=========================================================
24 package org.onap.so.apihandlerinfra;
26 import java.io.IOException;
27 import java.util.HashMap;
28 import java.util.Optional;
29 import java.util.stream.Collectors;
30 import javax.transaction.Transactional;
31 import javax.ws.rs.Consumes;
32 import javax.ws.rs.DELETE;
33 import javax.ws.rs.POST;
34 import javax.ws.rs.PUT;
35 import javax.ws.rs.Path;
36 import javax.ws.rs.PathParam;
37 import javax.ws.rs.Produces;
38 import javax.ws.rs.container.ContainerRequestContext;
39 import javax.ws.rs.core.Context;
40 import javax.ws.rs.core.MediaType;
41 import javax.ws.rs.core.Response;
42 import org.apache.commons.lang.StringUtils;
43 import org.apache.http.HttpStatus;
44 import org.onap.logging.filter.base.ErrorCode;
45 import org.onap.so.apihandler.common.CommonConstants;
46 import org.onap.so.apihandler.common.ErrorNumbers;
47 import org.onap.so.apihandler.common.RequestClientParameter;
48 import org.onap.so.apihandlerinfra.exceptions.ApiException;
49 import org.onap.so.apihandlerinfra.exceptions.RequestDbFailureException;
50 import org.onap.so.apihandlerinfra.exceptions.ValidateException;
51 import org.onap.so.apihandlerinfra.infra.rest.BpmnRequestBuilder;
52 import org.onap.so.apihandlerinfra.infra.rest.exception.CloudConfigurationNotFoundException;
53 import org.onap.so.apihandlerinfra.infra.rest.handler.AbstractRestHandler;
54 import org.onap.so.apihandlerinfra.infra.rest.validators.RequestValidatorListenerRunner;
55 import org.onap.so.apihandlerinfra.logging.ErrorLoggerInfo;
56 import org.onap.so.constants.Status;
57 import org.onap.so.db.catalog.client.CatalogDbClient;
58 import org.onap.so.db.request.beans.InfraActiveRequests;
59 import org.onap.so.db.request.client.RequestsDbClient;
60 import org.onap.so.exceptions.ValidationException;
61 import org.onap.so.logger.MessageEnum;
62 import org.onap.so.serviceinstancebeans.CloudConfiguration;
63 import org.onap.so.serviceinstancebeans.ModelInfo;
64 import org.onap.so.serviceinstancebeans.ModelType;
65 import org.onap.so.serviceinstancebeans.RequestDetails;
66 import org.onap.so.serviceinstancebeans.RequestReferences;
67 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
68 import org.onap.so.serviceinstancebeans.ServiceInstancesResponse;
69 import org.slf4j.Logger;
70 import org.slf4j.LoggerFactory;
71 import org.springframework.beans.factory.annotation.Autowired;
72 import org.springframework.core.env.Environment;
73 import org.springframework.stereotype.Component;
74 import org.springframework.web.client.RestTemplate;
75 import io.swagger.v3.oas.annotations.OpenAPIDefinition;
76 import io.swagger.v3.oas.annotations.Operation;
77 import io.swagger.v3.oas.annotations.info.Info;
78 import io.swagger.v3.oas.annotations.media.ArraySchema;
79 import io.swagger.v3.oas.annotations.media.Content;
80 import io.swagger.v3.oas.annotations.media.Schema;
81 import io.swagger.v3.oas.annotations.responses.ApiResponse;
84 @Path("/onap/so/infra/serviceInstantiation")
85 @OpenAPIDefinition(info = @Info(title = "/onap/so/infra/serviceInstantiation",
86 description = "Infrastructure API Requests for Service Instances"))
87 public class ServiceInstances extends AbstractRestHandler {
89 private static Logger logger = LoggerFactory.getLogger(MsoRequest.class);
90 private static String uriPrefix = "/serviceInstantiation/";
91 private static final String SAVE_TO_DB = "save instance to db";
94 private Environment env;
97 private RestTemplate restTemplate;
100 private CatalogDbClient catalogDbClient;
103 private RequestsDbClient infraActiveRequestsClient;
106 private MsoRequest msoRequest;
109 private RequestHandlerUtils requestHandlerUtils;
112 private RequestValidatorListenerRunner requestValidatorListenerRunner;
115 private BpmnRequestBuilder bpmnRequestBuilder;
118 @Path("/{version:[vV][5-7]}/serviceInstances")
119 @Consumes(MediaType.APPLICATION_JSON)
120 @Produces(MediaType.APPLICATION_JSON)
121 @Operation(description = "Create a Service Instance on a version provided", responses = @ApiResponse(
122 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
124 public Response createServiceInstance(String request, @PathParam("version") String version,
125 @Context ContainerRequestContext requestContext) throws ApiException {
126 String requestId = requestHandlerUtils.getRequestId(requestContext);
127 return serviceInstances(request, Action.createInstance, null, version, requestId,
128 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
132 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/activate")
133 @Consumes(MediaType.APPLICATION_JSON)
134 @Produces(MediaType.APPLICATION_JSON)
135 @Operation(description = "Activate provided Service Instance", responses = @ApiResponse(
136 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
138 public Response activateServiceInstance(String request, @PathParam("version") String version,
139 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
140 throws ApiException {
141 String requestId = requestHandlerUtils.getRequestId(requestContext);
142 HashMap<String, String> instanceIdMap = new HashMap<>();
143 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
144 return serviceInstances(request, Action.activateInstance, instanceIdMap, version, requestId,
145 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
149 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/deactivate")
150 @Consumes(MediaType.APPLICATION_JSON)
151 @Produces(MediaType.APPLICATION_JSON)
152 @Operation(description = "Deactivate provided Service Instance", responses = @ApiResponse(
153 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
155 public Response deactivateServiceInstance(String request, @PathParam("version") String version,
156 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
157 throws ApiException {
158 String requestId = requestHandlerUtils.getRequestId(requestContext);
159 HashMap<String, String> instanceIdMap = new HashMap<>();
160 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
161 return serviceInstances(request, Action.deactivateInstance, instanceIdMap, version, requestId,
162 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
166 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}")
167 @Consumes(MediaType.APPLICATION_JSON)
168 @Produces(MediaType.APPLICATION_JSON)
169 @Operation(description = "Delete provided Service Instance", responses = @ApiResponse(
170 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
172 public Response deleteServiceInstance(String request, @PathParam("version") String version,
173 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
174 throws ApiException {
175 String requestId = requestHandlerUtils.getRequestId(requestContext);
176 HashMap<String, String> instanceIdMap = new HashMap<>();
177 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
178 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
179 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
183 @Path("/{version:[vV][7]}/serviceInstances/assign")
184 @Consumes(MediaType.APPLICATION_JSON)
185 @Produces(MediaType.APPLICATION_JSON)
186 @Operation(description = "Assign Service Instance", responses = @ApiResponse(
187 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
189 public Response assignServiceInstance(String request, @PathParam("version") String version,
190 @Context ContainerRequestContext requestContext) throws ApiException {
191 String requestId = requestHandlerUtils.getRequestId(requestContext);
192 return serviceInstances(request, Action.assignInstance, null, version, requestId,
193 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
197 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/unassign")
198 @Consumes(MediaType.APPLICATION_JSON)
199 @Produces(MediaType.APPLICATION_JSON)
200 @Operation(description = "Unassign Service Instance", responses = @ApiResponse(
201 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
203 public Response unassignServiceInstance(String request, @PathParam("version") String version,
204 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
205 throws ApiException {
206 String requestId = requestHandlerUtils.getRequestId(requestContext);
207 HashMap<String, String> instanceIdMap = new HashMap<>();
208 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
209 return serviceInstances(request, Action.unassignInstance, instanceIdMap, version, requestId,
210 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
214 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations")
215 @Consumes(MediaType.APPLICATION_JSON)
216 @Produces(MediaType.APPLICATION_JSON)
217 @Operation(description = "Create Port Mirroring Configuration", responses = @ApiResponse(
218 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
220 public Response createPortConfiguration(String request, @PathParam("version") String version,
221 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
222 throws ApiException {
223 String requestId = requestHandlerUtils.getRequestId(requestContext);
224 HashMap<String, String> instanceIdMap = new HashMap<>();
225 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
226 return configurationRecipeLookup(request, Action.createInstance, instanceIdMap, version, requestId,
227 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
231 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}")
232 @Consumes(MediaType.APPLICATION_JSON)
233 @Produces(MediaType.APPLICATION_JSON)
234 @Operation(description = "Delete provided Port", responses = @ApiResponse(
235 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
237 public Response deletePortConfiguration(String request, @PathParam("version") String version,
238 @PathParam("serviceInstanceId") String serviceInstanceId,
239 @PathParam("configurationInstanceId") String configurationInstanceId,
240 @Context ContainerRequestContext requestContext) throws ApiException {
241 String requestId = requestHandlerUtils.getRequestId(requestContext);
242 HashMap<String, String> instanceIdMap = new HashMap<>();
243 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
244 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
245 return configurationRecipeLookup(request, Action.deleteInstance, instanceIdMap, version, requestId,
246 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
250 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/enablePort")
251 @Consumes(MediaType.APPLICATION_JSON)
252 @Produces(MediaType.APPLICATION_JSON)
253 @Operation(description = "Enable Port Mirroring", responses = @ApiResponse(
254 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
256 public Response enablePort(String request, @PathParam("version") String version,
257 @PathParam("serviceInstanceId") String serviceInstanceId,
258 @PathParam("configurationInstanceId") String configurationInstanceId,
259 @Context ContainerRequestContext requestContext) throws ApiException {
260 String requestId = requestHandlerUtils.getRequestId(requestContext);
261 HashMap<String, String> instanceIdMap = new HashMap<>();
262 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
263 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
264 return configurationRecipeLookup(request, Action.enablePort, instanceIdMap, version, requestId,
265 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
269 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/disablePort")
270 @Consumes(MediaType.APPLICATION_JSON)
271 @Produces(MediaType.APPLICATION_JSON)
272 @Operation(description = "Disable Port Mirroring", responses = @ApiResponse(
273 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
275 public Response disablePort(String request, @PathParam("version") String version,
276 @PathParam("serviceInstanceId") String serviceInstanceId,
277 @PathParam("configurationInstanceId") String configurationInstanceId,
278 @Context ContainerRequestContext requestContext) throws ApiException {
279 String requestId = requestHandlerUtils.getRequestId(requestContext);
280 HashMap<String, String> instanceIdMap = new HashMap<>();
281 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
282 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
283 return configurationRecipeLookup(request, Action.disablePort, instanceIdMap, version, requestId,
284 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
288 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/activate")
289 @Consumes(MediaType.APPLICATION_JSON)
290 @Produces(MediaType.APPLICATION_JSON)
291 @Operation(description = "Activate Port Mirroring", responses = @ApiResponse(
292 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
294 public Response activatePort(String request, @PathParam("version") String version,
295 @PathParam("serviceInstanceId") String serviceInstanceId,
296 @PathParam("configurationInstanceId") String configurationInstanceId,
297 @Context ContainerRequestContext requestContext) throws ApiException {
298 String requestId = requestHandlerUtils.getRequestId(requestContext);
299 HashMap<String, String> instanceIdMap = new HashMap<>();
300 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
301 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
302 return configurationRecipeLookup(request, Action.activateInstance, instanceIdMap, version, requestId,
303 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
307 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/deactivate")
308 @Consumes(MediaType.APPLICATION_JSON)
309 @Produces(MediaType.APPLICATION_JSON)
310 @Operation(description = "Deactivate Port Mirroring", responses = @ApiResponse(
311 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
313 public Response deactivatePort(String request, @PathParam("version") String version,
314 @PathParam("serviceInstanceId") String serviceInstanceId,
315 @PathParam("configurationInstanceId") String configurationInstanceId,
316 @Context ContainerRequestContext requestContext) throws ApiException {
317 String requestId = requestHandlerUtils.getRequestId(requestContext);
318 HashMap<String, String> instanceIdMap = new HashMap<>();
319 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
320 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
321 return configurationRecipeLookup(request, Action.deactivateInstance, instanceIdMap, version, requestId,
322 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
326 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/addRelationships")
327 @Consumes(MediaType.APPLICATION_JSON)
328 @Produces(MediaType.APPLICATION_JSON)
329 @Operation(description = "Add Relationships to a Service Instance", responses = @ApiResponse(
330 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
332 public Response addRelationships(String request, @PathParam("version") String version,
333 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
334 throws ApiException {
335 String requestId = requestHandlerUtils.getRequestId(requestContext);
336 HashMap<String, String> instanceIdMap = new HashMap<>();
337 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
338 return configurationRecipeLookup(request, Action.addRelationships, instanceIdMap, version, requestId,
339 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
343 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/removeRelationships")
344 @Consumes(MediaType.APPLICATION_JSON)
345 @Produces(MediaType.APPLICATION_JSON)
346 @Operation(description = "Remove Relationships from Service Instance", responses = @ApiResponse(
347 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
349 public Response removeRelationships(String request, @PathParam("version") String version,
350 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
351 throws ApiException {
352 String requestId = requestHandlerUtils.getRequestId(requestContext);
353 HashMap<String, String> instanceIdMap = new HashMap<>();
354 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
355 return configurationRecipeLookup(request, Action.removeRelationships, instanceIdMap, version, requestId,
356 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
360 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs")
361 @Consumes(MediaType.APPLICATION_JSON)
362 @Produces(MediaType.APPLICATION_JSON)
363 @Operation(description = "Create VNF on a specified version and serviceInstance", responses = @ApiResponse(
364 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
366 public Response createVnfInstance(String request, @PathParam("version") String version,
367 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
368 throws ApiException {
369 String requestId = requestHandlerUtils.getRequestId(requestContext);
370 HashMap<String, String> instanceIdMap = new HashMap<>();
371 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
373 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
374 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
375 } catch (Exception e) {
376 logger.error("Error in vnf", e);
382 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/upgrade")
383 @Consumes(MediaType.APPLICATION_JSON)
384 @Produces(MediaType.APPLICATION_JSON)
385 @Operation(description = "Upgrade a Service Instance to newer model", responses = @ApiResponse(
386 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
388 public Response upgradeServiceInstance(String request, @PathParam("version") String version,
389 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
390 throws ApiException {
391 String requestId = requestHandlerUtils.getRequestId(requestContext);
392 HashMap<String, String> instanceIdMap = new HashMap<>();
393 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
395 return serviceInstances(request, Action.upgradeInstance, instanceIdMap, version, requestId,
396 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
400 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/replace")
401 @Consumes(MediaType.APPLICATION_JSON)
402 @Produces(MediaType.APPLICATION_JSON)
403 @Operation(description = "Replace provided VNF instance", responses = @ApiResponse(
404 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
406 public Response replaceVnfInstance(String request, @PathParam("version") String version,
407 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
408 @Context ContainerRequestContext requestContext) throws ApiException {
409 String requestId = requestHandlerUtils.getRequestId(requestContext);
410 HashMap<String, String> instanceIdMap = new HashMap<>();
411 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
412 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
413 return serviceInstances(request, Action.replaceInstance, instanceIdMap, version, requestId,
414 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
418 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/healthcheck")
419 @Consumes(MediaType.APPLICATION_JSON)
420 @Produces(MediaType.APPLICATION_JSON)
421 @Operation(description = "HealthCheck for provided VNF instance", responses = @ApiResponse(
422 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
424 public Response cnfHealthCheck(String request, @PathParam("version") String version,
425 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
426 @Context ContainerRequestContext requestContext) throws ApiException {
427 String requestId = requestHandlerUtils.getRequestId(requestContext);
428 HashMap<String, String> instanceIdMap = new HashMap<>();
429 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
430 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
431 return serviceInstances(request, Action.healthCheck, instanceIdMap, version, requestId,
432 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
436 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/upgradeCnf")
437 @Consumes(MediaType.APPLICATION_JSON)
438 @Produces(MediaType.APPLICATION_JSON)
439 @Operation(description = "Upgrade CNF instance", responses = @ApiResponse(
440 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
442 public Response cnfUpgrade(String request, @PathParam("version") String version,
443 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
444 @Context ContainerRequestContext requestContext) throws ApiException {
445 String requestId = requestHandlerUtils.getRequestId(requestContext);
446 HashMap<String, String> instanceIdMap = new HashMap<>();
447 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
448 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
449 return serviceInstances(request, Action.upgradeCnf, instanceIdMap, version, requestId,
450 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
454 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}")
455 @Consumes(MediaType.APPLICATION_JSON)
456 @Produces(MediaType.APPLICATION_JSON)
457 @Operation(description = "Update VNF on a specified version, serviceInstance and vnfInstance",
458 responses = @ApiResponse(
459 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
461 public Response updateVnfInstance(String request, @PathParam("version") String version,
462 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
463 @Context ContainerRequestContext requestContext) throws ApiException {
464 String requestId = requestHandlerUtils.getRequestId(requestContext);
465 HashMap<String, String> instanceIdMap = new HashMap<>();
466 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
467 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
468 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
469 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
473 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/applyUpdatedConfig")
474 @Consumes(MediaType.APPLICATION_JSON)
475 @Produces(MediaType.APPLICATION_JSON)
476 @Operation(description = "Apply updated configuration", responses = @ApiResponse(
477 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
478 public Response applyUpdatedConfig(String request, @PathParam("version") String version,
479 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
480 @Context ContainerRequestContext requestContext) throws ApiException {
481 String requestId = requestHandlerUtils.getRequestId(requestContext);
482 HashMap<String, String> instanceIdMap = new HashMap<>();
483 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
484 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
485 return serviceInstances(request, Action.applyUpdatedConfig, instanceIdMap, version, requestId,
486 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
490 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/recreate")
491 @Consumes(MediaType.APPLICATION_JSON)
492 @Produces(MediaType.APPLICATION_JSON)
493 @Operation(description = "Recreate VNF Instance", responses = @ApiResponse(
494 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
495 public Response recreateVnfInstance(String request, @PathParam("version") String version,
496 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
497 @Context ContainerRequestContext requestContext) throws ApiException {
498 String requestId = requestHandlerUtils.getRequestId(requestContext);
499 HashMap<String, String> instanceIdMap = new HashMap<>();
500 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
501 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
502 return serviceInstances(request, Action.recreateInstance, instanceIdMap, version, requestId,
503 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
507 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}")
508 @Consumes(MediaType.APPLICATION_JSON)
509 @Produces(MediaType.APPLICATION_JSON)
510 @Operation(description = "Delete provided VNF instance", responses = @ApiResponse(
511 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
513 public Response deleteVnfInstance(String request, @PathParam("version") String version,
514 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
515 @Context ContainerRequestContext requestContext) throws ApiException {
516 String requestId = requestHandlerUtils.getRequestId(requestContext);
517 HashMap<String, String> instanceIdMap = new HashMap<>();
518 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
519 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
520 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
521 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
525 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules")
526 @Consumes(MediaType.APPLICATION_JSON)
527 @Produces(MediaType.APPLICATION_JSON)
528 @Operation(description = "Create VfModule on a specified version, serviceInstance and vnfInstance",
529 responses = @ApiResponse(
530 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
532 public Response createVfModuleInstance(String request, @PathParam("version") String version,
533 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
534 @Context ContainerRequestContext requestContext) throws ApiException {
535 String requestId = requestHandlerUtils.getRequestId(requestContext);
536 HashMap<String, String> instanceIdMap = new HashMap<>();
537 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
538 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
539 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
540 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
544 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/replace")
545 @Consumes(MediaType.APPLICATION_JSON)
546 @Produces(MediaType.APPLICATION_JSON)
547 @Operation(description = "Create VfModule on a specified version, serviceInstance and vnfInstance",
548 responses = @ApiResponse(
549 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
551 public Response replaceVfModuleInstance(String request, @PathParam("version") String version,
552 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
553 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
554 throws ApiException {
555 String requestId = requestHandlerUtils.getRequestId(requestContext);
556 HashMap<String, String> instanceIdMap = new HashMap<>();
557 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
558 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
559 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
560 return serviceInstances(request, Action.replaceInstance, instanceIdMap, version, requestId,
561 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
565 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}")
566 @Consumes(MediaType.APPLICATION_JSON)
567 @Produces(MediaType.APPLICATION_JSON)
568 @Operation(description = "Update VfModule on a specified version, serviceInstance, vnfInstance and vfModule",
569 responses = @ApiResponse(
570 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
572 public Response updateVfModuleInstance(String request, @PathParam("version") String version,
573 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
574 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
575 throws ApiException {
576 String requestId = requestHandlerUtils.getRequestId(requestContext);
577 HashMap<String, String> instanceIdMap = new HashMap<>();
578 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
579 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
580 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
581 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
582 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
586 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/inPlaceSoftwareUpdate")
587 @Consumes(MediaType.APPLICATION_JSON)
588 @Produces(MediaType.APPLICATION_JSON)
589 @Operation(description = "Perform VNF software update", responses = @ApiResponse(
590 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
592 public Response inPlaceSoftwareUpdate(String request, @PathParam("version") String version,
593 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
594 @Context ContainerRequestContext requestContext) throws ApiException {
595 String requestId = requestHandlerUtils.getRequestId(requestContext);
596 HashMap<String, String> instanceIdMap = new HashMap<>();
597 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
598 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
599 return serviceInstances(request, Action.inPlaceSoftwareUpdate, instanceIdMap, version, requestId,
600 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
604 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}")
605 @Consumes(MediaType.APPLICATION_JSON)
606 @Produces(MediaType.APPLICATION_JSON)
607 @Operation(description = "Delete provided VfModule instance", responses = @ApiResponse(
608 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
610 public Response deleteVfModuleInstance(String request, @PathParam("version") String version,
611 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
612 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
613 throws ApiException {
614 String requestId = requestHandlerUtils.getRequestId(requestContext);
615 HashMap<String, String> instanceIdMap = new HashMap<>();
616 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
617 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
618 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
619 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
620 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
624 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/deactivateAndCloudDelete")
625 @Consumes(MediaType.APPLICATION_JSON)
626 @Produces(MediaType.APPLICATION_JSON)
627 @Operation(description = "Deactivate and Cloud Delete VfModule instance", responses = @ApiResponse(
628 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
630 public Response deactivateAndCloudDeleteVfModuleInstance(String request, @PathParam("version") String version,
631 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
632 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext)
633 throws ApiException {
634 String requestId = requestHandlerUtils.getRequestId(requestContext);
635 HashMap<String, String> instanceIdMap = new HashMap<>();
636 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
637 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
638 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
639 Response response = serviceInstances(request, Action.deactivateAndCloudDelete, instanceIdMap, version,
640 requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
645 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/scaleOut")
646 @Consumes(MediaType.APPLICATION_JSON)
647 @Produces(MediaType.APPLICATION_JSON)
648 @Operation(description = "VF Auto Scale Out", responses = @ApiResponse(
649 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
651 public Response scaleOutVfModule(String request, @PathParam("version") String version,
652 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
653 @Context ContainerRequestContext requestContext) throws ApiException {
654 String requestId = requestHandlerUtils.getRequestId(requestContext);
655 HashMap<String, String> instanceIdMap = new HashMap<>();
656 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
657 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
658 return serviceInstances(request, Action.scaleOut, instanceIdMap, version, requestId,
659 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
663 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups")
664 @Consumes(MediaType.APPLICATION_JSON)
665 @Produces(MediaType.APPLICATION_JSON)
666 @Operation(description = "Create VolumeGroup on a specified version, serviceInstance, vnfInstance",
667 responses = @ApiResponse(
668 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
670 public Response createVolumeGroupInstance(String request, @PathParam("version") String version,
671 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
672 @Context ContainerRequestContext requestContext) throws ApiException {
673 String requestId = requestHandlerUtils.getRequestId(requestContext);
674 HashMap<String, String> instanceIdMap = new HashMap<>();
675 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
676 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
677 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
678 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
682 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}")
683 @Consumes(MediaType.APPLICATION_JSON)
684 @Produces(MediaType.APPLICATION_JSON)
685 @Operation(description = "Update VolumeGroup on a specified version, serviceInstance, vnfInstance and volumeGroup",
686 responses = @ApiResponse(
687 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
689 public Response updateVolumeGroupInstance(String request, @PathParam("version") String version,
690 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
691 @PathParam("volumeGroupInstanceId") String volumeGroupInstanceId,
692 @Context ContainerRequestContext requestContext) throws ApiException {
693 String requestId = requestHandlerUtils.getRequestId(requestContext);
694 HashMap<String, String> instanceIdMap = new HashMap<>();
695 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
696 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
697 instanceIdMap.put("volumeGroupInstanceId", volumeGroupInstanceId);
698 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
699 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
703 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}")
704 @Consumes(MediaType.APPLICATION_JSON)
705 @Produces(MediaType.APPLICATION_JSON)
706 @Operation(description = "Delete provided VolumeGroup instance", responses = @ApiResponse(
707 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
709 public Response deleteVolumeGroupInstance(String request, @PathParam("version") String version,
710 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("vnfInstanceId") String vnfInstanceId,
711 @PathParam("volumeGroupInstanceId") String volumeGroupInstanceId,
712 @Context ContainerRequestContext requestContext) throws ApiException {
713 String requestId = requestHandlerUtils.getRequestId(requestContext);
714 HashMap<String, String> instanceIdMap = new HashMap<>();
715 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
716 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
717 instanceIdMap.put("volumeGroupInstanceId", volumeGroupInstanceId);
718 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
719 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
724 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/pnfs")
725 @Consumes(MediaType.APPLICATION_JSON)
726 @Produces(MediaType.APPLICATION_JSON)
727 @Operation(description = "Create VNF on a specified version and serviceInstance", responses = @ApiResponse(
728 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
730 public Response createPnfInstance(String request, @PathParam("version") String version,
731 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
732 throws ApiException {
733 String requestId = requestHandlerUtils.getRequestId(requestContext);
734 HashMap<String, String> instanceIdMap = new HashMap<>();
735 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
737 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
738 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
739 } catch (Exception e) {
740 logger.error("Error in pnf", e);
747 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/pnfs/{pnfInstanceId}")
748 @Consumes(MediaType.APPLICATION_JSON)
749 @Produces(MediaType.APPLICATION_JSON)
750 @Operation(description = "Create PNF on a specified version and serviceInstance", responses = @ApiResponse(
751 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
753 public Response deletePnfInstance(String request, @PathParam("version") String version,
754 @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("pnfInstanceId") String pnfInstanceId,
755 @Context ContainerRequestContext requestContext) throws ApiException {
756 String requestId = requestHandlerUtils.getRequestId(requestContext);
757 HashMap<String, String> instanceIdMap = new HashMap<>();
758 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
759 instanceIdMap.put("pnfInstanceId", pnfInstanceId);
761 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
762 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
763 } catch (Exception e) {
764 logger.error("Error in pnf", e);
770 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks")
771 @Consumes(MediaType.APPLICATION_JSON)
772 @Produces(MediaType.APPLICATION_JSON)
773 @Operation(description = "Create NetworkInstance on a specified version and serviceInstance ",
774 responses = @ApiResponse(
775 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
777 public Response createNetworkInstance(String request, @PathParam("version") String version,
778 @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext)
779 throws ApiException {
780 String requestId = requestHandlerUtils.getRequestId(requestContext);
781 HashMap<String, String> instanceIdMap = new HashMap<>();
782 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
783 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId,
784 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
788 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks/{networkInstanceId}")
789 @Consumes(MediaType.APPLICATION_JSON)
790 @Produces(MediaType.APPLICATION_JSON)
791 @Operation(description = "Update VolumeGroup on a specified version, serviceInstance, networkInstance",
792 responses = @ApiResponse(
793 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
795 public Response updateNetworkInstance(String request, @PathParam("version") String version,
796 @PathParam("serviceInstanceId") String serviceInstanceId,
797 @PathParam("networkInstanceId") String networkInstanceId, @Context ContainerRequestContext requestContext)
798 throws ApiException {
799 String requestId = requestHandlerUtils.getRequestId(requestContext);
800 HashMap<String, String> instanceIdMap = new HashMap<>();
801 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
802 instanceIdMap.put("networkInstanceId", networkInstanceId);
803 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId,
804 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
808 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks/{networkInstanceId}")
809 @Consumes(MediaType.APPLICATION_JSON)
810 @Produces(MediaType.APPLICATION_JSON)
811 @Operation(description = "Delete provided Network instance", responses = @ApiResponse(
812 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
814 public Response deleteNetworkInstance(String request, @PathParam("version") String version,
815 @PathParam("serviceInstanceId") String serviceInstanceId,
816 @PathParam("networkInstanceId") String networkInstanceId, @Context ContainerRequestContext requestContext)
817 throws ApiException {
818 String requestId = requestHandlerUtils.getRequestId(requestContext);
819 HashMap<String, String> instanceIdMap = new HashMap<>();
820 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
821 instanceIdMap.put("networkInstanceId", networkInstanceId);
822 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId,
823 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
827 @Path("/{version:[vV][7]}/instanceGroups")
828 @Consumes(MediaType.APPLICATION_JSON)
829 @Produces(MediaType.APPLICATION_JSON)
830 @Operation(description = "Create instanceGroups", responses = @ApiResponse(
831 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
833 public Response createInstanceGroups(String request, @PathParam("version") String version,
834 @Context ContainerRequestContext requestContext) throws ApiException {
835 String requestId = requestHandlerUtils.getRequestId(requestContext);
836 return serviceInstances(request, Action.createInstance, null, version, requestId,
837 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
841 @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}")
842 @Consumes(MediaType.APPLICATION_JSON)
843 @Produces(MediaType.APPLICATION_JSON)
844 @Operation(description = "Delete instanceGroup", responses = @ApiResponse(
845 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
847 public Response deleteInstanceGroups(@PathParam("version") String version,
848 @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext)
849 throws ApiException {
850 String requestId = requestHandlerUtils.getRequestId(requestContext);
851 HashMap<String, String> instanceIdMap = new HashMap<>();
852 instanceIdMap.put(CommonConstants.INSTANCE_GROUP_INSTANCE_ID, instanceGroupId);
853 return deleteInstanceGroups(Action.deleteInstance, instanceIdMap, version, requestId,
854 requestHandlerUtils.getRequestUri(requestContext, uriPrefix), requestContext);
858 @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}/addMembers")
859 @Consumes(MediaType.APPLICATION_JSON)
860 @Produces(MediaType.APPLICATION_JSON)
861 @Operation(description = "Add instanceGroup members", responses = @ApiResponse(
862 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
864 public Response addInstanceGroupMembers(String request, @PathParam("version") String version,
865 @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext)
866 throws ApiException {
867 String requestId = requestHandlerUtils.getRequestId(requestContext);
868 HashMap<String, String> instanceIdMap = new HashMap<>();
869 instanceIdMap.put(CommonConstants.INSTANCE_GROUP_INSTANCE_ID, instanceGroupId);
870 return serviceInstances(request, Action.addMembers, instanceIdMap, version, requestId,
871 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
875 @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}/removeMembers")
876 @Consumes(MediaType.APPLICATION_JSON)
877 @Produces(MediaType.APPLICATION_JSON)
878 @Operation(description = "Remove instanceGroup members", responses = @ApiResponse(
879 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
881 public Response removeInstanceGroupMembers(String request, @PathParam("version") String version,
882 @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext)
883 throws ApiException {
884 String requestId = requestHandlerUtils.getRequestId(requestContext);
885 HashMap<String, String> instanceIdMap = new HashMap<>();
886 instanceIdMap.put(CommonConstants.INSTANCE_GROUP_INSTANCE_ID, instanceGroupId);
887 return serviceInstances(request, Action.removeMembers, instanceIdMap, version, requestId,
888 requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
892 * This method is used for POST a request to the BPEL client (BPMN).
894 * Convert the requestJson to ServiceInstanceRequest(sir), create the msoRequest object, check whether this request
895 * is already being processed in requestdb for duplicate check.
897 * Based on the alacarte flag, sir and msoRequest will do the recipe lookup from the service and servicerecipe table
898 * of catalogdb, and get the OrchestrationURI.
900 * If the present request is not the duplicate request then this request will be saved in the requestdb. and will
901 * POST a request to the BPMN engine at the OrchestrationURI fetched.
903 * @param requestJSON Json fetched as body in the API call
904 * @param action Type of action to be performed
905 * @param instanceIdMap Map of instance ids of service/vnf/vf/configuration etc..
906 * @param version Supported version of API
907 * @param requestId Unique id for the request
909 * @return response object
910 * @throws ApiException
912 public Response serviceInstances(String requestJSON, Actions action, HashMap<String, String> instanceIdMap,
913 String version, String requestId, String requestUri) throws ApiException {
914 return serviceInstances(requestJSON, action, instanceIdMap, version, requestId, requestUri, null);
918 public Response serviceInstances(String requestJSON, Actions action, HashMap<String, String> instanceIdMap,
919 String version, String requestId, String requestUri, HashMap<String, String> queryParams)
920 throws ApiException {
921 String serviceInstanceId;
922 Boolean aLaCarte = null;
923 ServiceInstancesRequest sir;
924 String apiVersion = version.substring(1);
926 sir = requestHandlerUtils.convertJsonToServiceInstanceRequest(requestJSON, action, requestId, requestUri);
927 action = handleReplaceInstance(action, sir);
929 String requestScope = requestHandlerUtils.deriveRequestScope(action, sir, requestUri);
931 requestValidatorListenerRunner.runValidations(requestUri, instanceIdMap, sir, queryParams, action);
932 } catch (ApiException e) {
933 msoRequest.createErrorRequestRecord(Status.FAILED, requestId, e.getMessage(), action, requestScope,
934 requestJSON, requestHandlerUtils
935 .getServiceInstanceIdForValidationError(sir, instanceIdMap, requestScope).orElse(null),
940 InfraActiveRequests currentActiveReq =
941 msoRequest.createRequestObject(sir, action, requestId, Status.IN_PROGRESS, requestJSON, requestScope);
942 if (sir.getRequestDetails().getRequestParameters() != null) {
943 aLaCarte = sir.getRequestDetails().getRequestParameters().getALaCarte();
946 requestHandlerUtils.parseRequest(sir, instanceIdMap, action, version, requestJSON, aLaCarte, requestId,
948 if ((action == Action.replaceInstance || action == Action.replaceInstanceRetainAssignments)
949 && (requestScope.equals(ModelType.vnf.toString()) || requestScope.equals(ModelType.vfModule.toString()))
950 && sir.getRequestDetails().getCloudConfiguration() == null) {
951 CloudConfiguration cloudConfiguration =
952 getCloudConfigurationOnReplace(requestScope, instanceIdMap, currentActiveReq);
953 sir.getRequestDetails().setCloudConfiguration(cloudConfiguration);
954 setCloudConfigurationCurrentActiveRequest(cloudConfiguration, currentActiveReq);
956 requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
958 String instanceName = null;
959 if (sir.getRequestDetails().getRequestInfo() != null) {
960 instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();
962 boolean alaCarteFlag = msoRequest.getAlacarteFlag(sir);
963 String vnfType = msoRequest.getVnfType(sir, requestScope);
964 String networkType = msoRequest.getNetworkType(sir, requestScope);
965 String sdcServiceModelVersion = msoRequest.getSDCServiceModelVersion(sir);
966 String vfModuleType = msoRequest.getVfModuleType(sir, requestScope);
968 if (requestScope.equalsIgnoreCase(ModelType.vnf.name()) && vnfType != null) {
969 currentActiveReq.setVnfType(vnfType);
970 } else if (requestScope.equalsIgnoreCase(ModelType.network.name()) && networkType != null) {
971 currentActiveReq.setNetworkType(networkType);
974 requestHandlerUtils.checkForDuplicateRequests(action, instanceIdMap, requestScope, currentActiveReq,
977 ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
979 RequestReferences referencesResponse = new RequestReferences();
981 referencesResponse.setRequestId(requestId);
983 serviceResponse.setRequestReferences(referencesResponse);
984 RecipeLookupResult recipeLookupResult =
985 requestHandlerUtils.getServiceInstanceOrchestrationURI(sir, action, alaCarteFlag, currentActiveReq);
986 String serviceInstanceType = requestHandlerUtils.getServiceType(requestScope, sir, alaCarteFlag);
988 ModelInfo modelInfo = sir.getRequestDetails().getModelInfo();
989 ModelType modelType = requestHandlerUtils.getModelType(action, modelInfo);
991 Boolean isBaseVfModule = false;
993 if (modelType.equals(ModelType.vfModule)) {
994 isBaseVfModule = requestHandlerUtils.getIsBaseVfModule(modelInfo, action, vnfType, sdcServiceModelVersion,
998 serviceInstanceId = requestHandlerUtils.setServiceInstanceId(requestScope, sir);
1000 String vfModuleId = "";
1001 String volumeGroupId = "";
1002 String networkId = "";
1003 String pnfCorrelationId = "";
1004 String instanceGroupId = null;
1006 if (sir.getVnfInstanceId() != null) {
1007 vnfId = sir.getVnfInstanceId();
1010 if (sir.getVfModuleInstanceId() != null) {
1011 vfModuleId = sir.getVfModuleInstanceId();
1014 if (sir.getVolumeGroupInstanceId() != null) {
1015 volumeGroupId = sir.getVolumeGroupInstanceId();
1018 if (sir.getNetworkInstanceId() != null) {
1019 networkId = sir.getNetworkInstanceId();
1021 if (sir.getInstanceGroupId() != null) {
1022 instanceGroupId = sir.getInstanceGroupId();
1025 pnfCorrelationId = getPnfCorrelationId(sir);
1028 infraActiveRequestsClient.save(currentActiveReq);
1029 } catch (Exception e) {
1030 logger.error("Exception occurred", e);
1031 ErrorLoggerInfo errorLoggerInfo =
1032 new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError)
1033 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1034 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR,
1035 ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e).errorInfo(errorLoggerInfo).build();
1038 if (!requestScope.equalsIgnoreCase(ModelType.service.name()) && action != Action.recreateInstance
1039 && !requestScope.equalsIgnoreCase(ModelType.vnf.name())
1040 && !requestScope.equalsIgnoreCase(ModelType.pnf.name())) {
1042 } else if (aLaCarte == null) {
1047 RequestClientParameter requestClientParameter;
1049 requestClientParameter = new RequestClientParameter.Builder().setRequestId(requestId)
1050 .setBaseVfModule(isBaseVfModule).setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
1051 .setRequestAction(action.toString()).setServiceInstanceId(serviceInstanceId)
1052 .setPnfCorrelationId(pnfCorrelationId).setVnfId(vnfId).setVfModuleId(vfModuleId)
1053 .setVolumeGroupId(volumeGroupId).setNetworkId(networkId).setServiceType(serviceInstanceType)
1054 .setVnfType(vnfType).setVfModuleType(vfModuleType).setNetworkType(networkType)
1055 .setRequestDetails(requestHandlerUtils.mapJSONtoMSOStyle(requestJSON, sir, aLaCarte, action))
1056 .setApiVersion(apiVersion).setALaCarte(aLaCarte).setRequestUri(requestUri)
1057 .setInstanceGroupId(instanceGroupId).build();
1058 } catch (IOException e) {
1059 logger.error("Exception occurred", e);
1060 ErrorLoggerInfo errorLoggerInfo =
1061 new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, ErrorCode.SchemaError)
1062 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1063 throw new ValidateException.Builder("Unable to generate RequestClientParamter object" + e.getMessage(),
1064 HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER).errorInfo(errorLoggerInfo)
1067 return requestHandlerUtils.postBPELRequest(currentActiveReq, requestClientParameter,
1068 recipeLookupResult.getOrchestrationURI(), requestScope);
1076 protected Actions handleReplaceInstance(Actions action, ServiceInstancesRequest sir) {
1077 if (action != null && action.equals(Action.replaceInstance)
1078 && sir.getRequestDetails().getRequestParameters().getRetainAssignments() != null
1079 && sir.getRequestDetails().getRequestParameters().getRetainAssignments()) {
1080 action = Action.replaceInstanceRetainAssignments;
1086 * This method deletes the Instance Groups.
1088 * This method will check whether the request is not duplicate in requestdb. if its not then will save as a new
1089 * request. And will send a POST request to BEPL client to delete the Insatnce Groups.
1092 * @param instanceIdMap
1096 * @param requestContext
1098 * @throws ApiException
1100 public Response deleteInstanceGroups(Actions action, HashMap<String, String> instanceIdMap, String version,
1101 String requestId, String requestUri, ContainerRequestContext requestContext) throws ApiException {
1102 String instanceGroupId = instanceIdMap.get(CommonConstants.INSTANCE_GROUP_INSTANCE_ID);
1103 Boolean aLaCarte = true;
1104 String apiVersion = version.substring(1);
1105 ServiceInstancesRequest sir = new ServiceInstancesRequest();
1106 sir.setInstanceGroupId(instanceGroupId);
1108 String requestScope = ModelType.instanceGroup.toString();
1109 InfraActiveRequests currentActiveReq =
1110 msoRequest.createRequestObject(sir, action, requestId, Status.IN_PROGRESS, null, requestScope);
1111 requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
1113 requestHandlerUtils.validateHeaders(requestContext);
1114 } catch (ValidationException e) {
1115 logger.error("Exception occurred", e);
1116 ErrorLoggerInfo errorLoggerInfo =
1117 new ErrorLoggerInfo.Builder(MessageEnum.APIH_VALIDATION_ERROR, ErrorCode.SchemaError)
1118 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1119 ValidateException validateException =
1120 new ValidateException.Builder(e.getMessage(), HttpStatus.SC_BAD_REQUEST,
1121 ErrorNumbers.SVC_BAD_PARAMETER).cause(e).errorInfo(errorLoggerInfo).build();
1122 requestHandlerUtils.updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1123 throw validateException;
1126 requestHandlerUtils.checkForDuplicateRequests(action, instanceIdMap, requestScope, currentActiveReq, null);
1128 ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
1130 RequestReferences referencesResponse = new RequestReferences();
1132 referencesResponse.setRequestId(requestId);
1134 serviceResponse.setRequestReferences(referencesResponse);
1135 Boolean isBaseVfModule = false;
1137 RecipeLookupResult recipeLookupResult = new RecipeLookupResult("/mso/async/services/WorkflowActionBB", 180);
1140 infraActiveRequestsClient.save(currentActiveReq);
1141 } catch (Exception e) {
1142 logger.error("Exception occurred", e);
1143 ErrorLoggerInfo errorLoggerInfo =
1144 new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError)
1145 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1146 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR,
1147 ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e).errorInfo(errorLoggerInfo).build();
1150 RequestClientParameter requestClientParameter = new RequestClientParameter.Builder().setRequestId(requestId)
1151 .setBaseVfModule(isBaseVfModule).setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
1152 .setRequestAction(action.toString()).setApiVersion(apiVersion).setALaCarte(aLaCarte)
1153 .setRequestUri(requestUri).setInstanceGroupId(instanceGroupId).build();
1156 return requestHandlerUtils.postBPELRequest(currentActiveReq, requestClientParameter,
1157 recipeLookupResult.getOrchestrationURI(), requestScope);
1160 protected String getPnfCorrelationId(ServiceInstancesRequest sir) {
1161 return Optional.of(sir).map(ServiceInstancesRequest::getRequestDetails)
1162 .map(RequestDetails::getRequestParameters).map(parameters -> parameters.getUserParamValue("pnfId"))
1166 private Response configurationRecipeLookup(String requestJSON, Action action, HashMap<String, String> instanceIdMap,
1167 String version, String requestId, String requestUri) throws ApiException {
1168 String serviceInstanceId;
1169 Boolean aLaCarte = null;
1170 String apiVersion = version.substring(1);
1171 ServiceInstancesRequest sir;
1173 sir = requestHandlerUtils.convertJsonToServiceInstanceRequest(requestJSON, action, requestId, requestUri);
1174 String requestScope = requestHandlerUtils.deriveRequestScope(action, sir, requestUri);
1175 InfraActiveRequests currentActiveReq =
1176 msoRequest.createRequestObject(sir, action, requestId, Status.IN_PROGRESS, requestJSON, requestScope);
1177 if (sir.getRequestDetails().getRequestParameters() != null) {
1178 aLaCarte = sir.getRequestDetails().getRequestParameters().getALaCarte();
1181 requestHandlerUtils.parseRequest(sir, instanceIdMap, action, version, requestJSON, aLaCarte, requestId,
1183 requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
1184 String instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();
1186 requestHandlerUtils.checkForDuplicateRequests(action, instanceIdMap, requestScope, currentActiveReq,
1189 ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
1190 RequestReferences referencesResponse = new RequestReferences();
1191 referencesResponse.setRequestId(requestId);
1192 serviceResponse.setRequestReferences(referencesResponse);
1194 String orchestrationUri = env.getProperty(CommonConstants.ALACARTE_ORCHESTRATION);
1195 String timeOut = env.getProperty(CommonConstants.ALACARTE_RECIPE_TIMEOUT);
1197 if (StringUtils.isBlank(orchestrationUri) || StringUtils.isBlank(timeOut)) {
1198 String error = StringUtils.isBlank(orchestrationUri) ? "ALaCarte Orchestration URI not found in properties"
1199 : "ALaCarte Recipe Timeout not found in properties";
1201 ErrorLoggerInfo errorLoggerInfo =
1202 new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, ErrorCode.DataError)
1203 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1205 ValidateException validateException = new ValidateException.Builder(error, HttpStatus.SC_NOT_FOUND,
1206 ErrorNumbers.SVC_GENERAL_SERVICE_ERROR).errorInfo(errorLoggerInfo).build();
1208 requestHandlerUtils.updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1210 throw validateException;
1214 serviceInstanceId = "";
1215 String configurationId = "";
1216 String pnfCorrelationId = "";
1218 if (sir.getServiceInstanceId() != null) {
1219 serviceInstanceId = sir.getServiceInstanceId();
1222 if (sir.getConfigurationId() != null) {
1223 configurationId = sir.getConfigurationId();
1226 pnfCorrelationId = getPnfCorrelationId(sir);
1229 infraActiveRequestsClient.save(currentActiveReq);
1230 } catch (Exception e) {
1231 ErrorLoggerInfo errorLoggerInfo =
1232 new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError)
1233 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1234 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR,
1235 ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e).errorInfo(errorLoggerInfo).build();
1238 if (!requestScope.equalsIgnoreCase(ModelType.service.name())) {
1240 } else if (aLaCarte == null) {
1243 RequestClientParameter requestClientParameter = null;
1245 requestClientParameter = new RequestClientParameter.Builder().setRequestId(requestId).setBaseVfModule(false)
1246 .setRecipeTimeout(Integer.parseInt(timeOut)).setRequestAction(action.toString())
1247 .setServiceInstanceId(serviceInstanceId).setPnfCorrelationId(pnfCorrelationId)
1248 .setConfigurationId(configurationId)
1249 .setRequestDetails(requestHandlerUtils.mapJSONtoMSOStyle(requestJSON, sir, aLaCarte, action))
1250 .setApiVersion(apiVersion).setALaCarte(aLaCarte).setRequestUri(requestUri).build();
1251 } catch (IOException e) {
1252 ErrorLoggerInfo errorLoggerInfo =
1253 new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, ErrorCode.SchemaError)
1254 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1255 throw new ValidateException.Builder("Unable to generate RequestClientParamter object" + e.getMessage(),
1256 HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER).errorInfo(errorLoggerInfo)
1260 return requestHandlerUtils.postBPELRequest(currentActiveReq, requestClientParameter, orchestrationUri,
1264 protected CloudConfiguration getCloudConfigurationOnReplace(String requestScope,
1265 HashMap<String, String> instanceIdMap, InfraActiveRequests currentActiveReq) throws ApiException {
1266 logger.debug("Replace request is missing cloudConfiguration, autofilling from create.");
1267 CloudConfiguration cloudConfiguration = null;
1268 if (requestScope.equals(ModelType.vfModule.toString())) {
1269 cloudConfiguration = bpmnRequestBuilder.getCloudConfigurationVfModuleReplace(
1270 instanceIdMap.get("vnfInstanceId"), instanceIdMap.get("vfModuleInstanceId"));
1272 cloudConfiguration = bpmnRequestBuilder.mapCloudConfigurationVnf(instanceIdMap.get("vnfInstanceId"));
1275 if (cloudConfiguration == null) {
1276 String errorMessage = "CloudConfiguration not found during autofill for replace request.";
1277 logger.error(errorMessage);
1278 updateStatus(currentActiveReq, Status.FAILED, errorMessage);
1279 throw new CloudConfigurationNotFoundException(
1280 "CloudConfiguration not found during autofill for replace request.");
1282 return cloudConfiguration;
1285 protected void setCloudConfigurationCurrentActiveRequest(CloudConfiguration cloudConfiguration,
1286 InfraActiveRequests currentActiveRequest) {
1287 if (cloudConfiguration.getLcpCloudRegionId() != null) {
1288 currentActiveRequest.setCloudRegion(cloudConfiguration.getLcpCloudRegionId());
1291 if (cloudConfiguration.getTenantId() != null) {
1292 currentActiveRequest.setTenantId(cloudConfiguration.getTenantId());