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 com.fasterxml.jackson.core.JsonParseException;
27 import com.fasterxml.jackson.core.JsonProcessingException;
28 import com.fasterxml.jackson.databind.JsonMappingException;
29 import com.fasterxml.jackson.databind.ObjectMapper;
30 import io.swagger.annotations.Api;
31 import io.swagger.annotations.ApiOperation;
32 import org.apache.commons.lang.StringUtils;
33 import org.apache.http.HttpStatus;
34 import org.onap.so.apihandler.common.CommonConstants;
35 import org.onap.so.apihandler.common.ErrorNumbers;
36 import org.onap.so.apihandler.common.RequestClientParameter;
37 import org.onap.so.apihandlerinfra.exceptions.ApiException;
38 import org.onap.so.apihandlerinfra.exceptions.RecipeNotFoundException;
39 import org.onap.so.apihandlerinfra.exceptions.RequestDbFailureException;
40 import org.onap.so.apihandlerinfra.exceptions.ValidateException;
41 import org.onap.so.apihandlerinfra.exceptions.VfModuleNotFoundException;
42 import org.onap.so.apihandlerinfra.logging.ErrorLoggerInfo;
43 import org.onap.so.db.catalog.beans.NetworkResource;
44 import org.onap.so.db.catalog.beans.NetworkResourceCustomization;
45 import org.onap.so.db.catalog.beans.Recipe;
46 import org.onap.so.db.catalog.beans.ServiceRecipe;
47 import org.onap.so.db.catalog.beans.VfModule;
48 import org.onap.so.db.catalog.beans.VfModuleCustomization;
49 import org.onap.so.db.catalog.beans.VnfRecipe;
50 import org.onap.so.db.catalog.beans.VnfResource;
51 import org.onap.so.db.catalog.beans.VnfResourceCustomization;
52 import org.onap.so.db.catalog.client.CatalogDbClient;
53 import org.onap.so.db.request.beans.InfraActiveRequests;
54 import org.onap.so.db.request.client.RequestsDbClient;
55 import org.onap.so.exceptions.ValidationException;
56 import org.onap.so.logger.ErrorCode;
57 import org.onap.so.logger.MessageEnum;
58 import org.onap.so.serviceinstancebeans.CloudConfiguration;
59 import org.onap.so.serviceinstancebeans.ModelInfo;
60 import org.onap.so.serviceinstancebeans.ModelType;
61 import org.onap.so.serviceinstancebeans.Networks;
62 import org.onap.so.serviceinstancebeans.RelatedInstance;
63 import org.onap.so.serviceinstancebeans.RelatedInstanceList;
64 import org.onap.so.serviceinstancebeans.RequestDetails;
65 import org.onap.so.serviceinstancebeans.RequestParameters;
66 import org.onap.so.serviceinstancebeans.RequestReferences;
67 import org.onap.so.serviceinstancebeans.Service;
68 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
69 import org.onap.so.serviceinstancebeans.ServiceInstancesResponse;
70 import org.onap.so.serviceinstancebeans.VfModules;
71 import org.onap.so.serviceinstancebeans.Vnfs;
72 import org.slf4j.Logger;
73 import org.slf4j.LoggerFactory;
74 import org.springframework.beans.factory.annotation.Autowired;
75 import org.springframework.core.env.Environment;
76 import org.springframework.stereotype.Component;
78 import javax.transaction.Transactional;
79 import javax.ws.rs.Consumes;
80 import javax.ws.rs.DELETE;
81 import javax.ws.rs.POST;
82 import javax.ws.rs.PUT;
83 import javax.ws.rs.Path;
84 import javax.ws.rs.PathParam;
85 import javax.ws.rs.Produces;
86 import javax.ws.rs.container.ContainerRequestContext;
87 import javax.ws.rs.core.Context;
88 import javax.ws.rs.core.MediaType;
89 import javax.ws.rs.core.Response;
90 import java.io.IOException;
91 import java.util.ArrayList;
92 import java.util.HashMap;
93 import java.util.List;
95 import java.util.Optional;
98 @Path("/onap/so/infra/serviceInstantiation")
99 @Api(value="/onap/so/infra/serviceInstantiation",description="Infrastructure API Requests for Service Instances")
100 public class ServiceInstances {
102 private static Logger logger = LoggerFactory.getLogger(MsoRequest.class);
103 private static String NAME = "name";
104 private static String VALUE = "value";
105 private static String uriPrefix = "/serviceInstantiation/";
106 private static final String SAVE_TO_DB = "save instance to db";
109 private Environment env;
112 private CatalogDbClient catalogDbClient;
115 private RequestsDbClient infraActiveRequestsClient;
118 private MsoRequest msoRequest;
121 private RequestHandlerUtils requestHandlerUtils;
124 @Path("/{version:[vV][5-7]}/serviceInstances")
125 @Consumes(MediaType.APPLICATION_JSON)
126 @Produces(MediaType.APPLICATION_JSON)
127 @ApiOperation(value="Create a Service Instance on a version provided",response=Response.class)
129 public Response createServiceInstance(String request, @PathParam("version") String version, @Context ContainerRequestContext requestContext) throws ApiException {
130 String requestId = requestHandlerUtils.getRequestId(requestContext);
131 return serviceInstances(request, Action.createInstance, null, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
135 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/activate")
136 @Consumes(MediaType.APPLICATION_JSON)
137 @Produces(MediaType.APPLICATION_JSON)
138 @ApiOperation(value="Activate provided Service Instance",response=Response.class)
140 public Response activateServiceInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) 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, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
148 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/deactivate")
149 @Consumes(MediaType.APPLICATION_JSON)
150 @Produces(MediaType.APPLICATION_JSON)
151 @ApiOperation(value="Deactivate provided Service Instance",response=Response.class)
153 public Response deactivateServiceInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
154 String requestId = requestHandlerUtils.getRequestId(requestContext);
155 HashMap<String, String> instanceIdMap = new HashMap<>();
156 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
157 return serviceInstances(request, Action.deactivateInstance, instanceIdMap, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
161 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}")
162 @Consumes(MediaType.APPLICATION_JSON)
163 @Produces(MediaType.APPLICATION_JSON)
164 @ApiOperation(value="Delete provided Service Instance",response=Response.class)
166 public Response deleteServiceInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
167 String requestId = requestHandlerUtils.getRequestId(requestContext);
168 HashMap<String, String> instanceIdMap = new HashMap<>();
169 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
170 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
174 @Path("/{version:[vV][7]}/serviceInstances/assign")
175 @Consumes(MediaType.APPLICATION_JSON)
176 @Produces(MediaType.APPLICATION_JSON)
177 @ApiOperation(value="Assign Service Instance", response=Response.class)
179 public Response assignServiceInstance(String request, @PathParam("version") String version, @Context ContainerRequestContext requestContext) throws ApiException {
180 String requestId = requestHandlerUtils.getRequestId(requestContext);
181 return serviceInstances(request, Action.assignInstance, null, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
185 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/unassign")
186 @Consumes(MediaType.APPLICATION_JSON)
187 @Produces(MediaType.APPLICATION_JSON)
188 @ApiOperation(value="Unassign Service Instance", response=Response.class)
190 public Response unassignServiceInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
191 String requestId = requestHandlerUtils.getRequestId(requestContext);
192 HashMap<String, String> instanceIdMap = new HashMap<String,String>();
193 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
194 return serviceInstances(request, Action.unassignInstance, instanceIdMap, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
198 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations")
199 @Consumes(MediaType.APPLICATION_JSON)
200 @Produces(MediaType.APPLICATION_JSON)
201 @ApiOperation(value="Create Port Mirroring Configuration",response=Response.class)
203 public Response createPortConfiguration(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
204 String requestId = requestHandlerUtils.getRequestId(requestContext);
205 HashMap<String, String> instanceIdMap = new HashMap<>();
206 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
207 return configurationRecipeLookup(request, Action.createInstance, instanceIdMap, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
211 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}")
212 @Consumes(MediaType.APPLICATION_JSON)
213 @Produces(MediaType.APPLICATION_JSON)
214 @ApiOperation(value="Delete provided Port",response=Response.class)
216 public Response deletePortConfiguration(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
217 @PathParam("configurationInstanceId") String configurationInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
218 String requestId = requestHandlerUtils.getRequestId(requestContext);
219 HashMap<String, String> instanceIdMap = new HashMap<>();
220 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
221 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
222 return configurationRecipeLookup(request, Action.deleteInstance, instanceIdMap, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
226 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/enablePort")
227 @Consumes(MediaType.APPLICATION_JSON)
228 @Produces(MediaType.APPLICATION_JSON)
229 @ApiOperation(value="Enable Port Mirroring",response=Response.class)
231 public Response enablePort(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
232 @PathParam("configurationInstanceId") String configurationInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
233 String requestId = requestHandlerUtils.getRequestId(requestContext);
234 HashMap<String, String> instanceIdMap = new HashMap<>();
235 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
236 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
237 return configurationRecipeLookup(request, Action.enablePort, instanceIdMap, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
241 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/disablePort")
242 @Consumes(MediaType.APPLICATION_JSON)
243 @Produces(MediaType.APPLICATION_JSON)
244 @ApiOperation(value="Disable Port Mirroring",response=Response.class)
246 public Response disablePort(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
247 @PathParam("configurationInstanceId") String configurationInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
248 String requestId = requestHandlerUtils.getRequestId(requestContext);
249 HashMap<String, String> instanceIdMap = new HashMap<>();
250 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
251 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
252 return configurationRecipeLookup(request, Action.disablePort, instanceIdMap, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
256 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/activate")
257 @Consumes(MediaType.APPLICATION_JSON)
258 @Produces(MediaType.APPLICATION_JSON)
259 @ApiOperation(value="Activate Port Mirroring",response=Response.class)
261 public Response activatePort(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
262 @PathParam("configurationInstanceId") String configurationInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
263 String requestId = requestHandlerUtils.getRequestId(requestContext);
264 HashMap<String, String> instanceIdMap = new HashMap<>();
265 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
266 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
267 return configurationRecipeLookup(request, Action.activateInstance, instanceIdMap, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
271 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/deactivate")
272 @Consumes(MediaType.APPLICATION_JSON)
273 @Produces(MediaType.APPLICATION_JSON)
274 @ApiOperation(value="Deactivate Port Mirroring",response=Response.class)
276 public Response deactivatePort(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
277 @PathParam("configurationInstanceId") String configurationInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
278 String requestId = requestHandlerUtils.getRequestId(requestContext);
279 HashMap<String, String> instanceIdMap = new HashMap<>();
280 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
281 instanceIdMap.put("configurationInstanceId", configurationInstanceId);
282 return configurationRecipeLookup(request, Action.deactivateInstance, instanceIdMap, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
286 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/addRelationships")
287 @Consumes(MediaType.APPLICATION_JSON)
288 @Produces(MediaType.APPLICATION_JSON)
289 @ApiOperation(value="Add Relationships to a Service Instance",response=Response.class)
291 public Response addRelationships(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
292 String requestId = requestHandlerUtils.getRequestId(requestContext);
293 HashMap<String, String> instanceIdMap = new HashMap<>();
294 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
295 return configurationRecipeLookup(request, Action.addRelationships, instanceIdMap, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
299 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/removeRelationships")
300 @Consumes(MediaType.APPLICATION_JSON)
301 @Produces(MediaType.APPLICATION_JSON)
302 @ApiOperation(value="Remove Relationships from Service Instance",response=Response.class)
304 public Response removeRelationships(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
305 String requestId = requestHandlerUtils.getRequestId(requestContext);
306 HashMap<String, String> instanceIdMap = new HashMap<>();
307 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
308 return configurationRecipeLookup(request, Action.removeRelationships, instanceIdMap, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
312 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs")
313 @Consumes(MediaType.APPLICATION_JSON)
314 @Produces(MediaType.APPLICATION_JSON)
315 @ApiOperation(value="Create VNF on a specified version and serviceInstance",response=Response.class)
317 public Response createVnfInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
318 String requestId = requestHandlerUtils.getRequestId(requestContext);
319 HashMap<String, String> instanceIdMap = new HashMap<>();
320 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
322 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
323 }catch (Exception e){
324 logger.error("Error in vnf", e);
330 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/replace")
331 @Consumes(MediaType.APPLICATION_JSON)
332 @Produces(MediaType.APPLICATION_JSON)
333 @ApiOperation(value="Replace provided VNF instance",response=Response.class)
335 public Response replaceVnfInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
336 @PathParam("vnfInstanceId") String vnfInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
337 String requestId = requestHandlerUtils.getRequestId(requestContext);
338 HashMap<String, String> instanceIdMap = new HashMap<>();
339 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
340 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
341 return serviceInstances(request, Action.replaceInstance, instanceIdMap, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
345 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}")
346 @Consumes(MediaType.APPLICATION_JSON)
347 @Produces(MediaType.APPLICATION_JSON)
348 @ApiOperation(value="Update VNF on a specified version, serviceInstance and vnfInstance",response=Response.class)
350 public Response updateVnfInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
351 @PathParam("vnfInstanceId") String vnfInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
352 String requestId = requestHandlerUtils.getRequestId(requestContext);
353 HashMap<String, String> instanceIdMap = new HashMap<>();
354 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
355 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
356 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
360 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/applyUpdatedConfig")
361 @Consumes(MediaType.APPLICATION_JSON)
362 @Produces(MediaType.APPLICATION_JSON)
363 @ApiOperation(value="Apply updated configuration",response=Response.class)
364 public Response applyUpdatedConfig(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
365 @PathParam("vnfInstanceId") String vnfInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
366 String requestId = requestHandlerUtils.getRequestId(requestContext);
367 HashMap<String, String> instanceIdMap = new HashMap<>();
368 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
369 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
370 return serviceInstances(request, Action.applyUpdatedConfig, instanceIdMap, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
374 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/recreate")
375 @Consumes(MediaType.APPLICATION_JSON)
376 @Produces(MediaType.APPLICATION_JSON)
377 @ApiOperation(value="Recreate VNF Instance",response=Response.class)
378 public Response recreateVnfInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
379 @PathParam("vnfInstanceId") String vnfInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
380 String requestId = requestHandlerUtils.getRequestId(requestContext);
381 HashMap<String, String> instanceIdMap = new HashMap<>();
382 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
383 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
384 return serviceInstances(request, Action.recreateInstance, instanceIdMap, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
389 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}")
390 @Consumes(MediaType.APPLICATION_JSON)
391 @Produces(MediaType.APPLICATION_JSON)
392 @ApiOperation(value="Delete provided VNF instance",response=Response.class)
394 public Response deleteVnfInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
395 @PathParam("vnfInstanceId") String vnfInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
396 String requestId = requestHandlerUtils.getRequestId(requestContext);
397 HashMap<String, String> instanceIdMap = new HashMap<>();
398 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
399 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
400 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
404 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules")
405 @Consumes(MediaType.APPLICATION_JSON)
406 @Produces(MediaType.APPLICATION_JSON)
407 @ApiOperation(value="Create VfModule on a specified version, serviceInstance and vnfInstance",response=Response.class)
409 public Response createVfModuleInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
410 @PathParam("vnfInstanceId") String vnfInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
411 String requestId = requestHandlerUtils.getRequestId(requestContext);
412 HashMap<String, String> instanceIdMap = new HashMap<>();
413 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
414 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
415 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
419 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/replace")
420 @Consumes(MediaType.APPLICATION_JSON)
421 @Produces(MediaType.APPLICATION_JSON)
422 @ApiOperation(value="Create VfModule on a specified version, serviceInstance and vnfInstance",response=Response.class)
424 public Response replaceVfModuleInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
425 @PathParam("vnfInstanceId") String vnfInstanceId,
426 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @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 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
432 return serviceInstances(request, Action.replaceInstance, instanceIdMap, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
436 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}")
437 @Consumes(MediaType.APPLICATION_JSON)
438 @Produces(MediaType.APPLICATION_JSON)
439 @ApiOperation(value="Update VfModule on a specified version, serviceInstance, vnfInstance and vfModule",response=Response.class)
441 public Response updateVfModuleInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
442 @PathParam("vnfInstanceId") String vnfInstanceId,
443 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
444 String requestId = requestHandlerUtils.getRequestId(requestContext);
445 HashMap<String, String> instanceIdMap = new HashMap<>();
446 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
447 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
448 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
449 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
453 @Path("/{version:[vV][6-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/inPlaceSoftwareUpdate")
454 @Consumes(MediaType.APPLICATION_JSON)
455 @Produces(MediaType.APPLICATION_JSON)
456 @ApiOperation(value="Perform VNF software update",response=Response.class)
458 public Response inPlaceSoftwareUpdate(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
459 @PathParam("vnfInstanceId") String vnfInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
460 String requestId = requestHandlerUtils.getRequestId(requestContext);
461 HashMap<String, String> instanceIdMap = new HashMap<>();
462 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
463 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
464 return serviceInstances(request, Action.inPlaceSoftwareUpdate, instanceIdMap, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
468 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}")
469 @Consumes(MediaType.APPLICATION_JSON)
470 @Produces(MediaType.APPLICATION_JSON)
471 @ApiOperation(value="Delete provided VfModule instance",response=Response.class)
473 public Response deleteVfModuleInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
474 @PathParam("vnfInstanceId") String vnfInstanceId,
475 @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
476 String requestId = requestHandlerUtils.getRequestId(requestContext);
477 HashMap<String, String> instanceIdMap = new HashMap<>();
478 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
479 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
480 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
481 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
485 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/deactivateAndCloudDelete")
486 @Consumes(MediaType.APPLICATION_JSON)
487 @Produces(MediaType.APPLICATION_JSON)
488 @ApiOperation(value="Deactivate and Cloud Delete VfModule instance",response=Response.class)
490 public Response deactivateAndCloudDeleteVfModuleInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
491 @PathParam("vnfInstanceId") String vnfInstanceId, @PathParam("vfmoduleInstanceId") String vfmoduleInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
492 String requestId = requestHandlerUtils.getRequestId(requestContext);
493 HashMap<String, String> instanceIdMap = new HashMap<>();
494 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
495 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
496 instanceIdMap.put("vfModuleInstanceId", vfmoduleInstanceId);
497 Response response = serviceInstances(request, Action.deactivateAndCloudDelete, instanceIdMap, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
502 @Path("/{version:[vV][7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/scaleOut")
503 @Consumes(MediaType.APPLICATION_JSON)
504 @Produces(MediaType.APPLICATION_JSON)
505 @ApiOperation(value="VF Auto Scale Out",response=Response.class)
507 public Response scaleOutVfModule(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
508 @PathParam("vnfInstanceId") String vnfInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
509 String requestId = requestHandlerUtils.getRequestId(requestContext);
510 HashMap<String, String> instanceIdMap = new HashMap<>();
511 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
512 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
513 return serviceInstances(request, Action.scaleOut, instanceIdMap, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
518 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups")
519 @Consumes(MediaType.APPLICATION_JSON)
520 @Produces(MediaType.APPLICATION_JSON)
521 @ApiOperation(value="Create VolumeGroup on a specified version, serviceInstance, vnfInstance",response=Response.class)
523 public Response createVolumeGroupInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
524 @PathParam("vnfInstanceId") String vnfInstanceId, @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.createInstance, instanceIdMap, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
533 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}")
534 @Consumes(MediaType.APPLICATION_JSON)
535 @Produces(MediaType.APPLICATION_JSON)
536 @ApiOperation(value="Update VolumeGroup on a specified version, serviceInstance, vnfInstance and volumeGroup",response=Response.class)
538 public Response updateVolumeGroupInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
539 @PathParam("vnfInstanceId") String vnfInstanceId,
540 @PathParam("volumeGroupInstanceId") String volumeGroupInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
541 String requestId = requestHandlerUtils.getRequestId(requestContext);
542 HashMap<String, String> instanceIdMap = new HashMap<>();
543 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
544 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
545 instanceIdMap.put("volumeGroupInstanceId", volumeGroupInstanceId);
546 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
550 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}")
551 @Consumes(MediaType.APPLICATION_JSON)
552 @Produces(MediaType.APPLICATION_JSON)
553 @ApiOperation(value="Delete provided VolumeGroup instance",response=Response.class)
555 public Response deleteVolumeGroupInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
556 @PathParam("vnfInstanceId") String vnfInstanceId,
557 @PathParam("volumeGroupInstanceId") String volumeGroupInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
558 String requestId = requestHandlerUtils.getRequestId(requestContext);
559 HashMap<String, String> instanceIdMap = new HashMap<>();
560 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
561 instanceIdMap.put("vnfInstanceId", vnfInstanceId);
562 instanceIdMap.put("volumeGroupInstanceId", volumeGroupInstanceId);
563 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
567 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks")
568 @Consumes(MediaType.APPLICATION_JSON)
569 @Produces(MediaType.APPLICATION_JSON)
570 @ApiOperation(value="Create NetworkInstance on a specified version and serviceInstance ",response=Response.class)
572 public Response createNetworkInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
573 String requestId = requestHandlerUtils.getRequestId(requestContext);
574 HashMap<String, String> instanceIdMap = new HashMap<>();
575 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
576 return serviceInstances(request, Action.createInstance, instanceIdMap, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
580 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks/{networkInstanceId}")
581 @Consumes(MediaType.APPLICATION_JSON)
582 @Produces(MediaType.APPLICATION_JSON)
583 @ApiOperation(value="Update VolumeGroup on a specified version, serviceInstance, networkInstance",response=Response.class)
585 public Response updateNetworkInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
586 @PathParam("networkInstanceId") String networkInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
587 String requestId = requestHandlerUtils.getRequestId(requestContext);
588 HashMap<String, String> instanceIdMap = new HashMap<>();
589 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
590 instanceIdMap.put("networkInstanceId", networkInstanceId);
591 return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
595 @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks/{networkInstanceId}")
596 @Consumes(MediaType.APPLICATION_JSON)
597 @Produces(MediaType.APPLICATION_JSON)
598 @ApiOperation(value="Delete provided Network instance",response=Response.class)
600 public Response deleteNetworkInstance(String request, @PathParam("version") String version, @PathParam("serviceInstanceId") String serviceInstanceId,
601 @PathParam("networkInstanceId") String networkInstanceId, @Context ContainerRequestContext requestContext) throws ApiException {
602 String requestId = requestHandlerUtils.getRequestId(requestContext);
603 HashMap<String, String> instanceIdMap = new HashMap<>();
604 instanceIdMap.put("serviceInstanceId", serviceInstanceId);
605 instanceIdMap.put("networkInstanceId", networkInstanceId);
606 return serviceInstances(request, Action.deleteInstance, instanceIdMap, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
610 @Path("/{version:[vV][7]}/instanceGroups")
611 @Consumes(MediaType.APPLICATION_JSON)
612 @Produces(MediaType.APPLICATION_JSON)
613 @ApiOperation(value="Create instanceGroups",response=Response.class)
615 public Response createInstanceGroups(String request, @PathParam("version") String version, @Context ContainerRequestContext requestContext) throws ApiException {
616 String requestId = requestHandlerUtils.getRequestId(requestContext);
617 return serviceInstances(request, Action.createInstance, null, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
621 @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}")
622 @Consumes(MediaType.APPLICATION_JSON)
623 @Produces(MediaType.APPLICATION_JSON)
624 @ApiOperation(value="Delete instanceGroup",response=Response.class)
626 public Response deleteInstanceGroups(@PathParam("version") String version, @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext) throws ApiException {
627 String requestId = requestHandlerUtils.getRequestId(requestContext);
628 HashMap<String, String> instanceIdMap = new HashMap<>();
629 instanceIdMap.put(CommonConstants.INSTANCE_GROUP_INSTANCE_ID, instanceGroupId);
630 return deleteInstanceGroups(Action.deleteInstance, instanceIdMap, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix), requestContext);
634 @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}/addMembers")
635 @Consumes(MediaType.APPLICATION_JSON)
636 @Produces(MediaType.APPLICATION_JSON)
637 @ApiOperation(value="Add instanceGroup members",response=Response.class)
639 public Response addInstanceGroupMembers(String request, @PathParam("version") String version, @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext) throws ApiException {
640 String requestId = requestHandlerUtils.getRequestId(requestContext);
641 HashMap<String, String> instanceIdMap = new HashMap<>();
642 instanceIdMap.put(CommonConstants.INSTANCE_GROUP_INSTANCE_ID, instanceGroupId);
643 return serviceInstances(request, Action.addMembers, instanceIdMap, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
647 @Path("/{version:[vV][7]}/instanceGroups/{instanceGroupId}/removeMembers")
648 @Consumes(MediaType.APPLICATION_JSON)
649 @Produces(MediaType.APPLICATION_JSON)
650 @ApiOperation(value="Remove instanceGroup members",response=Response.class)
652 public Response removeInstanceGroupMembers(String request, @PathParam("version") String version, @PathParam("instanceGroupId") String instanceGroupId, @Context ContainerRequestContext requestContext) throws ApiException {
653 String requestId = requestHandlerUtils.getRequestId(requestContext);
654 HashMap<String, String> instanceIdMap = new HashMap<>();
655 instanceIdMap.put(CommonConstants.INSTANCE_GROUP_INSTANCE_ID, instanceGroupId);
656 return serviceInstances(request, Action.removeMembers, instanceIdMap, version, requestId, requestHandlerUtils.getRequestUri(requestContext, uriPrefix));
659 public Response serviceInstances(String requestJSON, Actions action, HashMap<String, String> instanceIdMap, String version, String requestId, String requestUri) throws ApiException {
660 String serviceInstanceId = (instanceIdMap ==null)? null:instanceIdMap.get("serviceInstanceId");
661 Boolean aLaCarte = null;
662 long startTime = System.currentTimeMillis ();
663 ServiceInstancesRequest sir = null;
664 String apiVersion = version.substring(1);
666 sir = requestHandlerUtils.convertJsonToServiceInstanceRequest(requestJSON, action, startTime, sir, msoRequest, requestId, requestUri);
667 String requestScope = requestHandlerUtils.deriveRequestScope(action, sir, requestUri);
668 InfraActiveRequests currentActiveReq = msoRequest.createRequestObject (sir, action, requestId, Status.IN_PROGRESS, requestJSON, requestScope);
669 if(sir.getRequestDetails().getRequestParameters() != null){
670 aLaCarte = sir.getRequestDetails().getRequestParameters().getALaCarte();
672 requestHandlerUtils.parseRequest(sir, instanceIdMap, action, version, requestJSON, aLaCarte, requestId, currentActiveReq);
673 requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
675 int requestVersion = Integer.parseInt(version.substring(1));
676 String instanceName = null;
677 if (sir.getRequestDetails().getRequestInfo() != null) {
678 instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();
680 boolean alaCarteFlag = msoRequest.getAlacarteFlag(sir);
681 String vnfType = msoRequest.getVnfType(sir,requestScope,action,requestVersion);
682 String networkType = msoRequest.getNetworkType(sir,requestScope);
683 String sdcServiceModelVersion = msoRequest.getSDCServiceModelVersion(sir);
684 String vfModuleType = msoRequest.getVfModuleType(sir,requestScope,action,requestVersion);
686 if(requestScope.equalsIgnoreCase(ModelType.vnf.name()) && vnfType != null){
687 currentActiveReq.setVnfType(vnfType);
688 }else if(requestScope.equalsIgnoreCase(ModelType.network.name()) && networkType != null){
689 currentActiveReq.setNetworkType(networkType);
692 InfraActiveRequests dup = null;
693 boolean inProgress = false;
695 dup = requestHandlerUtils.duplicateCheck(action, instanceIdMap, startTime, msoRequest, instanceName,requestScope, currentActiveReq);
698 inProgress = requestHandlerUtils.camundaHistoryCheck(dup, currentActiveReq);
701 if (dup != null && inProgress) {
702 requestHandlerUtils.buildErrorOnDuplicateRecord(currentActiveReq, action, instanceIdMap, startTime, msoRequest, instanceName, requestScope, dup);
704 ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
706 RequestReferences referencesResponse = new RequestReferences();
708 referencesResponse.setRequestId(requestId);
710 serviceResponse.setRequestReferences(referencesResponse);
711 Boolean isBaseVfModule = false;
713 RecipeLookupResult recipeLookupResult = getServiceInstanceOrchestrationURI(sir, action, alaCarteFlag, currentActiveReq);
714 String serviceInstanceType = requestHandlerUtils.getServiceType(requestScope, sir, alaCarteFlag);
716 ModelInfo modelInfo = sir.getRequestDetails().getModelInfo();
717 if (action == Action.applyUpdatedConfig || action == Action.inPlaceSoftwareUpdate) {
718 modelType = ModelType.vnf;
719 }else if(action == Action.addMembers || action == Action.removeMembers){
720 modelType = ModelType.instanceGroup;
722 modelType =modelInfo.getModelType();
725 if (modelType.equals(ModelType.vfModule)) {
728 // Get VF Module-specific base module indicator
731 String modelVersionId = modelInfo.getModelVersionId();
733 if(modelVersionId != null) {
734 vfm = catalogDbClient.getVfModuleByModelUUID(modelVersionId);
735 } else if(modelInfo.getModelInvariantId() != null && modelInfo.getModelVersion() != null){
736 vfm = catalogDbClient.getVfModuleByModelInvariantUUIDAndModelVersion(modelInfo.getModelInvariantId(), modelInfo.getModelVersion());
740 if (vfm.getIsBase()) {
741 isBaseVfModule = true;
743 } else if (action == Action.createInstance || action == Action.updateInstance) {
744 // There is no entry for this vfModuleType with this version, if specified, in VF_MODULE table in Catalog DB.
745 // This request cannot proceed
747 String serviceVersionText = "";
748 if (sdcServiceModelVersion != null && !sdcServiceModelVersion.isEmpty ()) {
749 serviceVersionText = " with version " + sdcServiceModelVersion;
752 String errorMessage = "VnfType " + vnfType + " and VF Module Model Name " + modelInfo.getModelName() + serviceVersionText + " not found in MSO Catalog DB";
753 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
754 VfModuleNotFoundException vfModuleException = new VfModuleNotFoundException.Builder(errorMessage, HttpStatus.SC_NOT_FOUND, ErrorNumbers.SVC_BAD_PARAMETER).errorInfo(errorLoggerInfo).build();
755 requestHandlerUtils.updateStatus(currentActiveReq, Status.FAILED, vfModuleException.getMessage());
757 throw vfModuleException;
762 serviceInstanceId = requestHandlerUtils.setServiceInstanceId(requestScope, sir);
764 String vfModuleId = "";
765 String volumeGroupId = "";
766 String networkId = "";
767 String pnfCorrelationId = "";
768 String instanceGroupId = null;
770 if(sir.getVnfInstanceId () != null){
771 vnfId = sir.getVnfInstanceId ();
774 if(sir.getVfModuleInstanceId () != null){
775 vfModuleId = sir.getVfModuleInstanceId ();
778 if(sir.getVolumeGroupInstanceId () != null){
779 volumeGroupId = sir.getVolumeGroupInstanceId ();
782 if(sir.getNetworkInstanceId () != null){
783 networkId = sir.getNetworkInstanceId ();
785 if(sir.getInstanceGroupId() != null){
786 instanceGroupId = sir.getInstanceGroupId();
789 pnfCorrelationId = getPnfCorrelationId(sir);
792 infraActiveRequestsClient.save(currentActiveReq);
794 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
795 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e)
796 .errorInfo(errorLoggerInfo).build();
799 if(!requestScope.equalsIgnoreCase(ModelType.service.name()) && action != Action.recreateInstance){
801 }else if(aLaCarte == null){
805 RequestClientParameter requestClientParameter = null;
807 requestClientParameter = new RequestClientParameter.Builder()
808 .setRequestId(requestId)
809 .setBaseVfModule(isBaseVfModule)
810 .setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
811 .setRequestAction(action.toString())
812 .setServiceInstanceId(serviceInstanceId)
813 .setPnfCorrelationId(pnfCorrelationId)
815 .setVfModuleId(vfModuleId)
816 .setVolumeGroupId(volumeGroupId)
817 .setNetworkId(networkId)
818 .setServiceType(serviceInstanceType)
820 .setVfModuleType(vfModuleType)
821 .setNetworkType(networkType)
822 .setRequestDetails(requestHandlerUtils.mapJSONtoMSOStyle(requestJSON, sir, aLaCarte, action))
823 .setApiVersion(apiVersion)
824 .setALaCarte(aLaCarte)
825 .setRequestUri(requestUri)
826 .setInstanceGroupId(instanceGroupId).build();
827 } catch (IOException e) {
828 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
829 throw new ValidateException.Builder("Unable to generate RequestClientParamter object" + e.getMessage(), HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER)
830 .errorInfo(errorLoggerInfo).build();
832 return requestHandlerUtils.postBPELRequest(currentActiveReq, requestClientParameter, recipeLookupResult.getOrchestrationURI(), requestScope);
834 public Response deleteInstanceGroups(Actions action, HashMap<String, String> instanceIdMap, String version, String requestId, String requestUri, ContainerRequestContext requestContext) throws ApiException {
835 String instanceGroupId = instanceIdMap.get(CommonConstants.INSTANCE_GROUP_INSTANCE_ID);
836 Boolean aLaCarte = true;
837 long startTime = System.currentTimeMillis ();
838 String apiVersion = version.substring(1);
839 ServiceInstancesRequest sir = new ServiceInstancesRequest();
840 sir.setInstanceGroupId(instanceGroupId);
842 String requestScope = ModelType.instanceGroup.toString();
843 InfraActiveRequests currentActiveReq = msoRequest.createRequestObject (sir, action, requestId, Status.IN_PROGRESS, null, requestScope);
844 requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
846 requestHandlerUtils.validateHeaders(requestContext);
847 } catch (ValidationException e) {
848 logger.error("Exception occurred", e);
849 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_VALIDATION_ERROR, ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
850 ValidateException validateException = new ValidateException.Builder(e.getMessage(), HttpStatus.SC_BAD_REQUEST, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
851 .errorInfo(errorLoggerInfo).build();
852 requestHandlerUtils.updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
853 throw validateException;
856 InfraActiveRequests dup = requestHandlerUtils.duplicateCheck(action, instanceIdMap, startTime, msoRequest, null, requestScope, currentActiveReq);
857 boolean inProgress = false;
860 inProgress = requestHandlerUtils.camundaHistoryCheck(dup, currentActiveReq);
863 if (dup != null && inProgress) {
864 requestHandlerUtils.buildErrorOnDuplicateRecord(currentActiveReq, action, instanceIdMap, startTime, msoRequest, null, requestScope, dup);
867 ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
869 RequestReferences referencesResponse = new RequestReferences();
871 referencesResponse.setRequestId(requestId);
873 serviceResponse.setRequestReferences(referencesResponse);
874 Boolean isBaseVfModule = false;
876 RecipeLookupResult recipeLookupResult = new RecipeLookupResult("/mso/async/services/WorkflowActionBB", 180);
879 infraActiveRequestsClient.save(currentActiveReq);
881 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
882 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e)
883 .errorInfo(errorLoggerInfo).build();
886 RequestClientParameter requestClientParameter = new RequestClientParameter.Builder()
887 .setRequestId(requestId)
888 .setBaseVfModule(isBaseVfModule)
889 .setRecipeTimeout(recipeLookupResult.getRecipeTimeout())
890 .setRequestAction(action.toString())
891 .setApiVersion(apiVersion)
892 .setALaCarte(aLaCarte)
893 .setRequestUri(requestUri)
894 .setInstanceGroupId(instanceGroupId).build();
896 return requestHandlerUtils.postBPELRequest(currentActiveReq, requestClientParameter, recipeLookupResult.getOrchestrationURI(), requestScope);
899 private String getPnfCorrelationId(ServiceInstancesRequest sir) {
900 return Optional.of(sir)
901 .map(ServiceInstancesRequest::getRequestDetails)
902 .map(RequestDetails::getRequestParameters)
903 .map(parameters -> parameters.getUserParamValue("pnfId"))
907 private RecipeLookupResult getServiceInstanceOrchestrationURI(ServiceInstancesRequest sir, Actions action, boolean alaCarteFlag,
908 InfraActiveRequests currentActiveReq) throws ApiException {
909 RecipeLookupResult recipeLookupResult = null;
910 //if the aLaCarte flag is set to TRUE, the API-H should choose the VID_DEFAULT recipe for the requested action
911 ModelInfo modelInfo = sir.getRequestDetails().getModelInfo();
912 // Query MSO Catalog DB
914 if (action == Action.applyUpdatedConfig || action == Action.inPlaceSoftwareUpdate) {
915 recipeLookupResult = getDefaultVnfUri(sir, action);
916 }else if(action == Action.addMembers || action == Action.removeMembers){
917 recipeLookupResult = new RecipeLookupResult("/mso/async/services/WorkflowActionBB", 180);
918 }else if (modelInfo.getModelType().equals(ModelType.service)) {
920 recipeLookupResult = getServiceURI(sir, action,alaCarteFlag);
921 } catch (IOException e) {
922 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
925 ValidateException validateException = new ValidateException.Builder(e.getMessage(), HttpStatus.SC_BAD_REQUEST, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
926 .errorInfo(errorLoggerInfo).build();
928 requestHandlerUtils.updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
930 throw validateException;
932 } else if (modelInfo.getModelType().equals(ModelType.vfModule) ||
933 modelInfo.getModelType().equals(ModelType.volumeGroup) || modelInfo.getModelType().equals(ModelType.vnf)) {
935 recipeLookupResult = getVnfOrVfModuleUri( sir, action);
936 } catch (ValidationException e) {
937 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
940 ValidateException validateException = new ValidateException.Builder(e.getMessage(), HttpStatus.SC_BAD_REQUEST, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
941 .errorInfo(errorLoggerInfo).build();
943 requestHandlerUtils.updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
945 throw validateException;
947 }else if (modelInfo.getModelType().equals(ModelType.network)) {
949 recipeLookupResult = getNetworkUri( sir, action);
950 } catch (ValidationException e) {
952 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
955 ValidateException validateException = new ValidateException.Builder(e.getMessage(), HttpStatus.SC_BAD_REQUEST, ErrorNumbers.SVC_BAD_PARAMETER).cause(e)
956 .errorInfo(errorLoggerInfo).build();
957 requestHandlerUtils.updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
959 throw validateException;
961 }else if(modelInfo.getModelType().equals(ModelType.instanceGroup)){
962 recipeLookupResult = new RecipeLookupResult("/mso/async/services/WorkflowActionBB", 180);
965 if (recipeLookupResult == null) {
966 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
969 RecipeNotFoundException recipeNotFoundExceptionException = new RecipeNotFoundException.Builder("Recipe could not be retrieved from catalog DB.", HttpStatus.SC_NOT_FOUND, ErrorNumbers.SVC_GENERAL_SERVICE_ERROR)
970 .errorInfo(errorLoggerInfo).build();
972 requestHandlerUtils.updateStatus(currentActiveReq, Status.FAILED, recipeNotFoundExceptionException.getMessage());
973 throw recipeNotFoundExceptionException;
975 return recipeLookupResult;
978 private RecipeLookupResult getServiceURI(ServiceInstancesRequest servInstReq, Actions action, boolean alaCarteFlag) throws IOException {
980 // Construct the default service name
981 // TODO need to make this a configurable property
982 String defaultServiceModelName = requestHandlerUtils.getDefaultModel(servInstReq);
983 RequestDetails requestDetails = servInstReq.getRequestDetails();
984 ModelInfo modelInfo = requestDetails.getModelInfo();
985 org.onap.so.db.catalog.beans.Service serviceRecord;
986 List<org.onap.so.db.catalog.beans.Service> serviceRecordList;
987 ServiceRecipe recipe = null;
990 serviceRecord = catalogDbClient.getFirstByModelNameOrderByModelVersionDesc(defaultServiceModelName);
991 if(serviceRecord !=null){
992 recipe =catalogDbClient.getFirstByServiceModelUUIDAndAction(serviceRecord.getModelUUID(),action.toString());
995 serviceRecord = catalogDbClient.getServiceByID(modelInfo.getModelVersionId());
996 recipe = catalogDbClient.getFirstByServiceModelUUIDAndAction(modelInfo.getModelVersionId(), action.toString());
998 serviceRecordList = catalogDbClient.getServiceByModelInvariantUUIDOrderByModelVersionDesc(modelInfo.getModelInvariantId());
999 if(!serviceRecordList.isEmpty()){
1000 for(org.onap.so.db.catalog.beans.Service record : serviceRecordList){
1001 recipe = catalogDbClient.getFirstByServiceModelUUIDAndAction(record.getModelUUID(),action.toString());
1010 //if an aLaCarte flag was sent in the request, throw an error if the recipe was not found
1011 RequestParameters reqParam = requestDetails.getRequestParameters();
1012 if(reqParam!=null && alaCarteFlag && recipe==null){
1014 } else if(!alaCarteFlag && recipe != null && Action.createInstance.equals(action)) {
1015 mapToLegacyRequest(requestDetails);
1016 }else if (recipe == null) { //aLaCarte wasn't sent, so we'll try the default
1017 serviceRecord = catalogDbClient.getFirstByModelNameOrderByModelVersionDesc(defaultServiceModelName);
1018 recipe = catalogDbClient.getFirstByServiceModelUUIDAndAction(serviceRecord.getModelUUID(),action.toString());
1020 if(modelInfo.getModelVersionId() == null) {
1021 modelInfo.setModelVersionId(serviceRecord.getModelUUID());
1026 return new RecipeLookupResult (recipe.getOrchestrationUri (), recipe.getRecipeTimeout ());
1029 protected void mapToLegacyRequest(RequestDetails requestDetails) throws IOException {
1030 RequestParameters reqParam;
1031 if (requestDetails.getRequestParameters() == null) {
1032 reqParam = new RequestParameters();
1034 reqParam = requestDetails.getRequestParameters();
1036 if(requestDetails.getCloudConfiguration() == null) {
1037 CloudConfiguration cloudConfig = configureCloudConfig(reqParam);
1038 if(cloudConfig != null) {
1039 requestDetails.setCloudConfiguration(cloudConfig);
1043 List<Map<String, Object>> userParams = configureUserParams(reqParam);
1044 if(!userParams.isEmpty()) {
1045 if (reqParam == null) {
1046 requestDetails.setRequestParameters(new RequestParameters());
1048 requestDetails.getRequestParameters().setUserParams(userParams);
1052 protected CloudConfiguration configureCloudConfig(RequestParameters reqParams) throws IOException {
1054 for(Map<String, Object> params : reqParams.getUserParams()){
1055 if(params.containsKey("service")){
1056 Service service = serviceMapper(params);
1058 Optional<CloudConfiguration> targetConfiguration = addCloudConfig(service.getCloudConfiguration());
1060 if (targetConfiguration.isPresent()) {
1061 return targetConfiguration.get();
1063 for(Networks network : service.getResources().getNetworks()) {
1064 targetConfiguration = addCloudConfig(network.getCloudConfiguration());
1065 if(targetConfiguration.isPresent()) {
1066 return targetConfiguration.get();
1070 for(Vnfs vnf : service.getResources().getVnfs()) {
1071 targetConfiguration = addCloudConfig(vnf.getCloudConfiguration());
1073 if(targetConfiguration.isPresent()) {
1074 return targetConfiguration.get();
1077 for(VfModules vfModule : vnf.getVfModules()) {
1078 targetConfiguration = addCloudConfig(vfModule.getCloudConfiguration());
1080 if(targetConfiguration.isPresent()) {
1081 return targetConfiguration.get();
1092 private Optional<CloudConfiguration> addCloudConfig(CloudConfiguration sourceCloudConfiguration) {
1093 CloudConfiguration targetConfiguration = new CloudConfiguration();
1094 if(sourceCloudConfiguration != null) {
1095 targetConfiguration.setAicNodeClli(sourceCloudConfiguration.getAicNodeClli());
1096 targetConfiguration.setTenantId(sourceCloudConfiguration.getTenantId());
1097 targetConfiguration.setLcpCloudRegionId(sourceCloudConfiguration.getLcpCloudRegionId());
1098 targetConfiguration.setCloudOwner(sourceCloudConfiguration.getCloudOwner());
1099 return Optional.of(targetConfiguration);
1101 return Optional.empty();
1104 protected List<Map<String, Object>> configureUserParams(RequestParameters reqParams) throws IOException {
1105 logger.debug("Configuring UserParams for Macro Request");
1106 Map<String, Object> userParams = new HashMap<>();
1108 for(Map<String, Object> params : reqParams.getUserParams()){
1109 if(params.containsKey("service")){
1110 Service service = serviceMapper(params);
1112 addUserParams(userParams, service.getInstanceParams());
1114 for(Networks network : service.getResources().getNetworks()) {
1115 addUserParams(userParams, network.getInstanceParams());
1118 for(Vnfs vnf: service.getResources().getVnfs()) {
1119 addUserParams(userParams, vnf.getInstanceParams());
1121 for(VfModules vfModule: vnf.getVfModules()) {
1122 addUserParams(userParams, vfModule.getInstanceParams());
1128 return mapFlatMapToNameValue(userParams);
1131 private Service serviceMapper(Map<String, Object> params)
1132 throws JsonProcessingException, IOException, JsonParseException, JsonMappingException {
1133 ObjectMapper obj = new ObjectMapper();
1134 String input = obj.writeValueAsString(params.get("service"));
1135 return obj.readValue(input, Service.class);
1138 private void addUserParams(Map<String, Object> targetUserParams, List<Map<String, String>> sourceUserParams) {
1139 for(Map<String, String> map : sourceUserParams) {
1140 for (Map.Entry<String, String> entry : map.entrySet()) {
1141 targetUserParams.put(entry.getKey(), entry.getValue());
1146 protected List<Map<String, Object>> mapFlatMapToNameValue(Map<String, Object> flatMap) {
1147 List<Map<String, Object>> targetUserParams = new ArrayList<>();
1149 for(Map.Entry<String, Object> map : flatMap.entrySet()) {
1150 Map<String, Object> targetMap = new HashMap<>();
1151 targetMap.put(NAME, map.getKey());
1152 targetMap.put(VALUE, map.getValue());
1153 targetUserParams.add(targetMap);
1155 return targetUserParams;
1158 private RecipeLookupResult getVnfOrVfModuleUri(ServiceInstancesRequest servInstReq, Actions action) throws ValidationException {
1160 ModelInfo modelInfo = servInstReq.getRequestDetails().getModelInfo();
1161 String vnfComponentType = modelInfo.getModelType().name();
1163 RelatedInstanceList[] instanceList = null;
1164 if (servInstReq.getRequestDetails() != null) {
1165 instanceList = servInstReq.getRequestDetails().getRelatedInstanceList();
1168 Recipe recipe = null;
1169 String defaultSource = requestHandlerUtils.getDefaultModel(servInstReq);
1170 String modelCustomizationId = modelInfo.getModelCustomizationId();
1171 String modelCustomizationName = modelInfo.getModelCustomizationName();
1172 String relatedInstanceModelVersionId = null;
1173 String relatedInstanceModelInvariantId = null;
1174 String relatedInstanceVersion = null;
1175 String relatedInstanceModelCustomizationName = null;
1177 if (instanceList != null) {
1179 for(RelatedInstanceList relatedInstanceList : instanceList){
1181 RelatedInstance relatedInstance = relatedInstanceList.getRelatedInstance();
1182 ModelInfo relatedInstanceModelInfo = relatedInstance.getModelInfo();
1183 if(relatedInstanceModelInfo.getModelType().equals(ModelType.service)){
1184 relatedInstanceModelVersionId = relatedInstanceModelInfo.getModelVersionId();
1185 relatedInstanceVersion = relatedInstanceModelInfo.getModelVersion();
1188 if(relatedInstanceModelInfo.getModelType().equals(ModelType.vnf)){
1189 relatedInstanceModelVersionId = relatedInstanceModelInfo.getModelVersionId();
1190 relatedInstanceModelInvariantId = relatedInstanceModelInfo.getModelInvariantId();
1191 relatedInstanceVersion = relatedInstanceModelInfo.getModelVersion();
1192 relatedInstanceModelCustomizationName = relatedInstanceModelInfo.getModelCustomizationName();
1196 if(modelInfo.getModelType().equals(ModelType.vnf)) {
1197 // a. For a vnf request (only create, no update currently):
1198 // i. (v3-v4) If modelInfo.modelCustomizationId is provided, use it to validate catalog DB has record in vnf_resource_customization.model_customization_uuid.
1199 // ii. (v2-v4) If modelInfo.modelCustomizationId is NOT provided (because it is a pre-1702 ASDC model or pre-v3), then modelInfo.modelCustomizationName must have
1200 // been provided (else create request should be rejected). APIH should use the relatedInstance.modelInfo[service].modelVersionId** + modelInfo[vnf].modelCustomizationName
1201 // to “join�? service_to_resource_customizations with vnf_resource_customization to confirm a vnf_resource_customization.model_customization_uuid record exists.
1202 // **If relatedInstance.modelInfo[service].modelVersionId was not provided, use relatedInstance.modelInfo[service].modelInvariantId + modelVersion instead to lookup modelVersionId
1203 // (MODEL_UUID) in SERVICE table.
1204 // iii. Regardless of how the value was provided/obtained above, APIH must always populate vnfModelCustomizationId in bpmnRequest. It would be assumed it was MSO generated
1205 // during 1707 data migration if VID did not provide it originally on request.
1206 // iv. Note: continue to construct the “vnf-type�? value and pass to BPMN (must still be populated in A&AI).
1207 // 1. If modelCustomizationName is NOT provided on a vnf/vfModule request, use modelCustomizationId to look it up in our catalog to construct vnf-type value to pass to BPMN.
1209 VnfResource vnfResource = null;
1210 VnfResourceCustomization vrc=null;
1211 // Validation for vnfResource
1213 if(modelCustomizationId!=null) {
1214 vrc = catalogDbClient.getVnfResourceCustomizationByModelCustomizationUUID(modelCustomizationId);
1216 vnfResource = vrc.getVnfResources();
1219 org.onap.so.db.catalog.beans.Service service = catalogDbClient.getServiceByID(relatedInstanceModelVersionId);
1220 if(service == null) {
1221 service = catalogDbClient.getServiceByModelVersionAndModelInvariantUUID(relatedInstanceVersion, relatedInstanceModelInvariantId);
1224 if(service == null) {
1225 throw new ValidationException("service in relatedInstance");
1227 for (VnfResourceCustomization vnfResourceCustom : service.getVnfCustomizations()) {
1228 if (vnfResourceCustom.getModelInstanceName().equals(modelCustomizationName)) {
1229 vrc=vnfResourceCustom;
1234 vnfResource = vrc.getVnfResources();
1235 modelInfo.setModelCustomizationId(vrc.getModelCustomizationUUID());
1236 modelInfo.setModelCustomizationUuid(vrc.getModelCustomizationUUID());
1240 if(vnfResource==null){
1241 throw new ValidationException("vnfResource");
1243 if(modelInfo.getModelVersionId() == null) {
1244 modelInfo.setModelVersionId(vnfResource.getModelUUID());
1248 VnfRecipe vnfRecipe = null;
1251 String nfRole = vrc.getNfRole();
1252 if(nfRole != null) {
1253 vnfRecipe = catalogDbClient.getFirstVnfRecipeByNfRoleAndAction(vrc.getNfRole(), action.toString());
1257 if(vnfRecipe == null) {
1258 vnfRecipe = catalogDbClient.getFirstVnfRecipeByNfRoleAndAction(defaultSource, action.toString());
1261 if (vnfRecipe == null) {
1265 return new RecipeLookupResult (vnfRecipe.getOrchestrationUri(), vnfRecipe.getRecipeTimeout());
1267 /* (v5-v7) If modelInfo.modelCustomizationId is NOT provided (because it is a pre-1702 ASDC model or pre-v3), then modelInfo.modelCustomizationName must have
1268 // been provided (else create request should be rejected). APIH should use the relatedInstance.modelInfo[vnf].modelVersionId + modelInfo[vnf].modelCustomizationName
1269 // to join vnf_to_resource_customizations with vf_resource_customization to confirm a vf_resource_customization.model_customization_uuid record exists.
1270 // Once the vnfs model_customization_uuid has been obtained, use it to find all vfModule customizations for that vnf customization in the vnf_res_custom_to_vf_module_custom join table.
1271 // For each vf_module_cust_model_customization_uuid value returned, use that UUID to query vf_module_customization table along with modelInfo[vfModule|volumeGroup].modelVersionId to
1272 // confirm record matches request data (and to identify the modelCustomizationId associated with the vfModule in the request). This means taking each record found
1273 // in vf_module_customization and looking up in vf_module (using vf_module_customization’s FK into vf_module) to find a match on MODEL_INVARIANT_UUID (modelInvariantId)
1274 // and MODEL_VERSION (modelVersion).
1276 VfModuleCustomization vfmc = null;
1278 VnfResourceCustomization vnfrc;
1279 VfModule vfModule = null;
1281 if(modelInfo.getModelCustomizationId() != null) {
1282 vfmc = catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID(modelInfo.getModelCustomizationId());
1284 vnfr = catalogDbClient.getVnfResourceByModelUUID(relatedInstanceModelVersionId);
1286 vnfr = catalogDbClient.getFirstVnfResourceByModelInvariantUUIDAndModelVersion(relatedInstanceModelInvariantId, relatedInstanceVersion);
1288 vnfrc = catalogDbClient.getFirstVnfResourceCustomizationByModelInstanceNameAndVnfResources(relatedInstanceModelCustomizationName, vnfr);
1290 List<VfModuleCustomization> list = vnfrc.getVfModuleCustomizations();
1292 String vfModuleModelUUID = modelInfo.getModelVersionId();
1293 for(VfModuleCustomization vf : list) {
1294 VfModuleCustomization vfmCustom;
1295 if(vfModuleModelUUID != null){
1296 vfmCustom = catalogDbClient.getVfModuleCustomizationByModelCustomizationUUIDAndVfModuleModelUUID(vf.getModelCustomizationUUID(), vfModuleModelUUID);
1297 if(vfmCustom != null){
1298 vfModule = vfmCustom.getVfModule();
1301 vfmCustom = catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID(vf.getModelCustomizationUUID());
1302 if(vfmCustom != null){
1303 vfModule = vfmCustom.getVfModule();
1305 vfModule = catalogDbClient.getVfModuleByModelInvariantUUIDAndModelVersion(relatedInstanceModelInvariantId, relatedInstanceVersion);
1309 if(vfModule != null) {
1310 modelInfo.setModelCustomizationId(vf.getModelCustomizationUUID());
1311 modelInfo.setModelCustomizationUuid(vf.getModelCustomizationUUID());
1317 if(vfmc == null && vfModule == null) {
1318 throw new ValidationException("vfModuleCustomization");
1319 } else if (vfModule == null && vfmc != null) {
1320 vfModule = vfmc.getVfModule(); // can't be null as vfModuleModelUUID is not-null property in VfModuleCustomization table
1323 if(modelInfo.getModelVersionId() == null) {
1324 modelInfo.setModelVersionId(vfModule.getModelUUID());
1328 recipe = catalogDbClient.getFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction(vfModule.getModelUUID(), vnfComponentType, action.toString());
1330 List<VfModule> vfModuleRecords= catalogDbClient.getVfModuleByModelInvariantUUIDOrderByModelVersionDesc(vfModule.getModelInvariantUUID());
1331 if(!vfModuleRecords.isEmpty()){
1332 for(VfModule record : vfModuleRecords){
1333 recipe = catalogDbClient.getFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction(record.getModelUUID(), vnfComponentType, action.toString());
1340 if(recipe == null) {
1341 recipe = catalogDbClient.getFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction(defaultSource, vnfComponentType, action.toString());
1342 if (recipe == null) {
1343 recipe = catalogDbClient.getFirstVnfComponentsRecipeByVnfComponentTypeAndAction(vnfComponentType, action.toString());
1346 if(recipe == null) {
1353 if(modelInfo.getModelType().equals(ModelType.vnf)) {
1354 recipe = catalogDbClient.getFirstVnfRecipeByNfRoleAndAction(defaultSource, action.toString());
1355 if (recipe == null) {
1359 recipe = catalogDbClient.getFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction(defaultSource, vnfComponentType, action.toString());
1361 if (recipe == null) {
1367 return new RecipeLookupResult (recipe.getOrchestrationUri (), recipe.getRecipeTimeout ());
1370 private RecipeLookupResult getDefaultVnfUri(ServiceInstancesRequest sir, Actions action) {
1372 String defaultSource = requestHandlerUtils.getDefaultModel(sir);
1374 VnfRecipe vnfRecipe = catalogDbClient.getFirstVnfRecipeByNfRoleAndAction(defaultSource, action.toString());
1376 if (vnfRecipe == null) {
1380 return new RecipeLookupResult (vnfRecipe.getOrchestrationUri(), vnfRecipe.getRecipeTimeout());
1384 private RecipeLookupResult getNetworkUri(ServiceInstancesRequest sir, Actions action) throws ValidationException {
1386 String defaultNetworkType = requestHandlerUtils.getDefaultModel(sir);
1388 ModelInfo modelInfo = sir.getRequestDetails().getModelInfo();
1389 String modelName = modelInfo.getModelName();
1390 Recipe recipe = null;
1392 if(modelInfo.getModelCustomizationId()!=null){
1393 NetworkResourceCustomization networkResourceCustomization = catalogDbClient.getNetworkResourceCustomizationByModelCustomizationUUID(modelInfo.getModelCustomizationId());
1394 if(networkResourceCustomization != null){
1395 NetworkResource networkResource = networkResourceCustomization.getNetworkResource();
1396 if(networkResource!=null){
1397 if(modelInfo.getModelVersionId() == null) {
1398 modelInfo.setModelVersionId(networkResource.getModelUUID());
1400 recipe = catalogDbClient.getFirstNetworkRecipeByModelNameAndAction(networkResource.getModelName(), action.toString());
1402 throw new ValidationException("no catalog entry found");
1404 }else if(action != Action.deleteInstance){
1405 throw new ValidationException("modelCustomizationId for networkResourceCustomization lookup", true);
1408 //ok for version < 3 and action delete
1409 if(modelName != null){
1410 recipe = catalogDbClient.getFirstNetworkRecipeByModelNameAndAction(modelName, action.toString());
1415 recipe = catalogDbClient.getFirstNetworkRecipeByModelNameAndAction(defaultNetworkType, action.toString());
1418 return recipe !=null ? new RecipeLookupResult(recipe.getOrchestrationUri(), recipe.getRecipeTimeout()) : null;
1422 private Response configurationRecipeLookup(String requestJSON, Action action, HashMap<String, String> instanceIdMap, String version, String requestId, String requestUri) throws ApiException {
1423 String serviceInstanceId = (instanceIdMap ==null)? null:instanceIdMap.get("serviceInstanceId");
1424 Boolean aLaCarte = null;
1425 String apiVersion = version.substring(1);
1426 boolean inProgress = false;
1428 long startTime = System.currentTimeMillis ();
1429 ServiceInstancesRequest sir = null;
1431 sir = requestHandlerUtils.convertJsonToServiceInstanceRequest(requestJSON, action, startTime, sir, msoRequest, requestId, requestUri);
1432 String requestScope = requestHandlerUtils.deriveRequestScope(action,sir, requestUri);
1433 InfraActiveRequests currentActiveReq = msoRequest.createRequestObject ( sir, action, requestId, Status.IN_PROGRESS, requestJSON, requestScope);
1434 if(sir.getRequestDetails().getRequestParameters() != null){
1435 aLaCarte = sir.getRequestDetails().getRequestParameters().getALaCarte();
1437 requestHandlerUtils.parseRequest(sir, instanceIdMap, action, version, requestJSON, aLaCarte, requestId, currentActiveReq);
1438 requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, null, instanceIdMap);
1439 String instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();
1441 InfraActiveRequests dup = null;
1443 dup = requestHandlerUtils.duplicateCheck(action, instanceIdMap, startTime, msoRequest, instanceName,requestScope, currentActiveReq);
1446 inProgress = requestHandlerUtils.camundaHistoryCheck(dup, currentActiveReq);
1449 if (instanceIdMap != null && dup != null && inProgress) {
1450 requestHandlerUtils.buildErrorOnDuplicateRecord(currentActiveReq, action, instanceIdMap, startTime, msoRequest, instanceName, requestScope, dup);
1453 ServiceInstancesResponse serviceResponse = new ServiceInstancesResponse();
1454 RequestReferences referencesResponse = new RequestReferences();
1455 referencesResponse.setRequestId(requestId);
1456 serviceResponse.setRequestReferences(referencesResponse);
1459 String orchestrationUri = env.getProperty(CommonConstants.ALACARTE_ORCHESTRATION);
1460 String timeOut = env.getProperty(CommonConstants.ALACARTE_RECIPE_TIMEOUT);
1462 if (StringUtils.isBlank(orchestrationUri) || StringUtils.isBlank(timeOut)) {
1463 String error = StringUtils.isBlank(orchestrationUri) ? "ALaCarte Orchestration URI not found in properties" : "ALaCarte Recipe Timeout not found in properties";
1465 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1468 ValidateException validateException = new ValidateException.Builder(error, HttpStatus.SC_NOT_FOUND, ErrorNumbers.SVC_GENERAL_SERVICE_ERROR)
1469 .errorInfo(errorLoggerInfo).build();
1471 requestHandlerUtils.updateStatus(currentActiveReq, Status.FAILED, validateException.getMessage());
1473 throw validateException;
1477 serviceInstanceId = "";
1478 String configurationId = "";
1479 String pnfCorrelationId = "";
1481 if(sir.getServiceInstanceId () != null){
1482 serviceInstanceId = sir.getServiceInstanceId ();
1485 if(sir.getConfigurationId() != null){
1486 configurationId = sir.getConfigurationId();
1489 pnfCorrelationId = getPnfCorrelationId(sir);
1492 infraActiveRequestsClient.save(currentActiveReq);
1493 }catch(Exception e){
1494 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1495 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(), HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e)
1496 .errorInfo(errorLoggerInfo).build();
1499 if(!requestScope.equalsIgnoreCase(ModelType.service.name())){
1501 }else if(aLaCarte == null){
1504 RequestClientParameter requestClientParameter = null;
1506 requestClientParameter = new RequestClientParameter.Builder()
1507 .setRequestId(requestId)
1508 .setBaseVfModule(false)
1509 .setRecipeTimeout(Integer.parseInt(timeOut))
1510 .setRequestAction(action.toString())
1511 .setServiceInstanceId(serviceInstanceId)
1512 .setPnfCorrelationId(pnfCorrelationId)
1513 .setConfigurationId(configurationId)
1514 .setRequestDetails(requestHandlerUtils.mapJSONtoMSOStyle(requestJSON, sir, aLaCarte, action))
1515 .setApiVersion(apiVersion)
1516 .setALaCarte(aLaCarte)
1517 .setRequestUri(requestUri).build();
1518 } catch (IOException e) {
1519 ErrorLoggerInfo errorLoggerInfo = new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, ErrorCode.SchemaError).errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
1520 throw new ValidateException.Builder("Unable to generate RequestClientParamter object" + e.getMessage(), HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER)
1521 .errorInfo(errorLoggerInfo).build();
1524 return requestHandlerUtils.postBPELRequest(currentActiveReq, requestClientParameter, orchestrationUri, requestScope);