1 package org.onap.vid.mso;
3 import com.fasterxml.jackson.annotation.JsonCreator;
4 import com.fasterxml.jackson.annotation.JsonValue;
5 import com.fasterxml.jackson.databind.DeserializationFeature;
6 import com.fasterxml.jackson.databind.ObjectMapper;
7 import com.google.common.collect.ImmutableList;
8 import com.google.common.collect.ImmutableMap;
9 import org.onap.vid.changeManagement.ChangeManagementRequest;
10 import org.onap.vid.changeManagement.RequestDetailsWrapper;
11 import org.onap.vid.controllers.OperationalEnvironmentController;
12 import org.onap.vid.domain.mso.RequestInfo;
13 import org.onap.vid.exceptions.GenericUncheckedException;
14 import org.onap.vid.mso.model.OperationalEnvironmentActivateInfo;
15 import org.onap.vid.mso.model.OperationalEnvironmentDeactivateInfo;
16 import org.onap.vid.mso.rest.OperationalEnvironment.OperationEnvironmentRequestDetails;
17 import org.onap.vid.mso.rest.*;
18 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
19 import org.onap.portalsdk.core.util.SystemProperties;
20 import org.springframework.beans.factory.annotation.Autowired;
21 import org.togglz.core.manager.FeatureManager;
23 import javax.ws.rs.BadRequestException;
24 import java.io.IOException;
25 import java.text.DateFormat;
26 import java.text.SimpleDateFormat;
28 import java.util.regex.Pattern;
30 import static org.apache.commons.lang.StringUtils.upperCase;
31 import static org.onap.vid.changeManagement.ChangeManagementRequest.MsoChangeManagementRequest;
32 import static org.onap.vid.controllers.MsoController.*;
33 import static org.onap.vid.mso.MsoProperties.*;
34 import static org.onap.vid.properties.Features.FLAG_UNASSIGN_SERVICE;
35 import static org.onap.vid.utils.Logging.debugRequestDetails;
37 public class MsoBusinessLogicImpl implements MsoBusinessLogic {
39 public static final String START = " start";
40 public static final String RESOURCE_TYPE = "resourceType";
41 FeatureManager featureManager;
44 * The Constant dateFormat.
46 private static final DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS");
47 private static final Pattern SOFTWARE_VERSION_PATTERN = Pattern.compile("^[A-Za-z0-9.\\-]+$");
48 private static final Pattern NUMBER_PATTERN = Pattern.compile("^[0-9]+$");
49 private static final String ACTIVATE = "/activate";
50 private static final String DEACTIVATE = "/deactivate";
51 private static final String ENABLE_PORT = "/enablePort";
52 private static final String DISABLE_PORT = "/disablePort";
53 private static final String RESOURCE_TYPE_OPERATIONAL_ENVIRONMENT = "operationalEnvironment";
54 private static final String SOURCE_OPERATIONAL_ENVIRONMENT = "VID";
55 private static final ObjectMapper objectMapper = new ObjectMapper();
58 * This should be replaced with mso client factory.
60 private final MsoInterface msoClientInterface;
65 private static final EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MsoBusinessLogicImpl.class);
68 public MsoBusinessLogicImpl(MsoInterface msoClientInterface, FeatureManager featureManager) {
69 this.msoClientInterface = msoClientInterface;
70 this.featureManager = featureManager;
73 public static String validateEndpointPath(String endpointEnvVariable) {
74 String endpoint = SystemProperties.getProperty(endpointEnvVariable);
75 if (endpoint == null || endpoint.isEmpty()) {
76 throw new GenericUncheckedException(endpointEnvVariable + " env variable is not defined");
81 // this function should get params from tosca and send them to instance at mso, then return success response.
83 public MsoResponseWrapper createSvcInstance(RequestDetails msoRequest) {
84 String methodName = "createSvcInstance ";
85 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
88 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_SVC_INSTANCE);
90 return msoClientInterface.createSvcInstance(msoRequest, endpoint);
94 public MsoResponseWrapper createE2eSvcInstance(Object msoRequest){
95 String methodName = "createE2eSvcInstance ";
96 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
99 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_E2E_SVC_INSTANCE);
102 return msoClientInterface.createE2eSvcInstance(msoRequest, endpoint);
106 public MsoResponseWrapper createVnf(RequestDetails requestDetails, String serviceInstanceId) {
107 String methodName = "createVnf";
108 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
111 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_INSTANCE);
113 String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
114 return msoClientInterface.createVnf(requestDetails, vnf_endpoint);
118 public MsoResponseWrapper createNwInstance(RequestDetails requestDetails, String serviceInstanceId) {
119 String methodName = "createNwInstance";
120 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
123 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_NETWORK_INSTANCE);
125 String nw_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
126 return msoClientInterface.createNwInstance(requestDetails, nw_endpoint);
130 public MsoResponseWrapper createVolumeGroupInstance(RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) {
131 String methodName = "createVolumeGroupInstance";
132 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
135 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VOLUME_GROUP_INSTANCE);
137 String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
138 vnf_endpoint = vnf_endpoint.replaceFirst(VNF_INSTANCE_ID, vnfInstanceId);
140 return msoClientInterface.createVolumeGroupInstance(requestDetails, vnf_endpoint);
144 public MsoResponseWrapper createVfModuleInstance(RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) {
145 String methodName = "createVfModuleInstance";
146 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
149 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VF_MODULE_INSTANCE);
151 String partial_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
152 String vf_module_endpoint = partial_endpoint.replaceFirst(VNF_INSTANCE_ID, vnfInstanceId);
154 return msoClientInterface.createVfModuleInstance(requestDetails, vf_module_endpoint);
158 public MsoResponseWrapper createConfigurationInstance(org.onap.vid.mso.rest.RequestDetailsWrapper requestDetailsWrapper, String serviceInstanceId) {
159 String methodName = "createConfigurationInstance";
160 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
162 String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_CONFIGURATIONS);
163 endpoint = endpoint.replace(SVC_INSTANCE_ID, serviceInstanceId);
165 return msoClientInterface.createConfigurationInstance(requestDetailsWrapper, endpoint);
169 public MsoResponseWrapper deleteE2eSvcInstance(Object requestDetails, String serviceInstanceId) {
170 String methodName = "deleteE2eSvcInstance";
171 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
174 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_E2E_SVC_INSTANCE) + "/" + serviceInstanceId;
176 return msoClientInterface.deleteE2eSvcInstance(requestDetails, endpoint);
180 public MsoResponseWrapper deleteSvcInstance(RequestDetails requestDetails, String serviceInstanceId, String serviceStatus) {
181 String methodName = "deleteSvcInstance";
182 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
185 if (featureManager.isActive(FLAG_UNASSIGN_SERVICE)){
186 endpoint = validateEndpointPath(MsoProperties.MSO_DELETE_OR_UNASSIGN_REST_API_SVC_INSTANCE);
187 if (shouldUnassignService(serviceStatus)){
188 logger.debug(EELFLoggerDelegate.debugLogger, "unassign service");
189 String svc_endpoint = endpoint + "/" + serviceInstanceId + "/unassign";
190 return msoClientInterface.unassignSvcInstance(requestDetails, svc_endpoint);
193 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_SVC_INSTANCE);
196 String svc_endpoint = endpoint + "/" + serviceInstanceId;
197 return msoClientInterface.deleteSvcInstance(requestDetails, svc_endpoint);
200 private boolean shouldUnassignService(String serviceStatus) {
201 return ImmutableList.of("created","pendingdelete","pending-delete", "assigned").contains(serviceStatus.toLowerCase());
205 public MsoResponseWrapper deleteVnf(RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) {
206 String methodName = "deleteVnf";
207 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
210 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_INSTANCE);
211 String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
212 vnf_endpoint = vnf_endpoint + '/' + vnfInstanceId;
214 return msoClientInterface.deleteVnf(requestDetails, vnf_endpoint);
218 public MsoResponseWrapper deleteVfModule(RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId, String vfModuleId) {
219 String methodName = "deleteVfModule";
220 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
223 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VF_MODULE_INSTANCE);
225 String vf__modules_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId).replaceFirst(VNF_INSTANCE_ID, vnfInstanceId);
227 String delete_vf_endpoint = vf__modules_endpoint + '/' + vfModuleId;
229 return msoClientInterface.deleteVfModule(requestDetails, delete_vf_endpoint);
233 public MsoResponseWrapper deleteVolumeGroupInstance(RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId, String volumeGroupId) {
234 String methodName = "deleteVolumeGroupInstance";
235 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
238 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VOLUME_GROUP_INSTANCE);
240 String svc_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
241 String vnf_endpoint = svc_endpoint.replaceFirst(VNF_INSTANCE_ID, vnfInstanceId);
242 String delete_volume_group_endpoint = vnf_endpoint + "/" + volumeGroupId;
244 return msoClientInterface.deleteVolumeGroupInstance(requestDetails, delete_volume_group_endpoint);
248 public MsoResponseWrapper deleteNwInstance(RequestDetails requestDetails, String serviceInstanceId, String networkInstanceId) {
249 String methodName = "deleteNwInstance";
250 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
253 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_NETWORK_INSTANCE);
255 String svc_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
256 String delete_nw_endpoint = svc_endpoint + "/" + networkInstanceId;
258 return msoClientInterface.deleteNwInstance(requestDetails, delete_nw_endpoint);
262 public MsoResponseWrapper getOrchestrationRequest(String requestId) {
263 String methodName = "getOrchestrationRequest";
264 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
266 String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_ORC_REQ);
267 String path = p + "/" + requestId;
269 RestObject<String> restObjStr = new RestObject<>();
270 String str = new String();
273 msoClientInterface.getOrchestrationRequest(str, "", path, restObjStr);
275 return MsoUtil.wrapResponse(restObjStr);
277 } catch (Exception e) {
278 logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
279 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
285 public MsoResponseWrapper getOrchestrationRequests(String filterString) {
286 String methodName = "getOrchestrationRequest";
287 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
289 String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_ORC_REQS);
290 String path = p + filterString;
292 RestObject<String> restObjStr = new RestObject<>();
293 String str = new String();
296 msoClientInterface.getOrchestrationRequest(str, "", path, restObjStr);
298 return MsoUtil.wrapResponse(restObjStr);
300 } catch (Exception e) {
301 logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
302 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
308 public List<Request> getOrchestrationRequestsForDashboard() {
309 String methodName = "getOrchestrationRequestsForDashboard";
310 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
311 List<Request> filteredOrchestrationRequests = new ArrayList<>();
313 String path = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_ORC_REQS);
314 path += "filter=modelType:EQUALS:vnf";
315 RestObject<String> restObjStr = new RestObject<>();
316 String str = new String();
319 MsoResponseWrapper msoResponseWrapper = msoClientInterface.getOrchestrationRequestsForDashboard(str, "", path, restObjStr);
320 List<RequestWrapper> allOrchestrationRequests = deserializeOrchestrationRequestsJson(msoResponseWrapper.getEntity());
322 final ImmutableList<String> suppoertedRequestTypes = ImmutableList.of(
323 RequestType.REPLACE_INSTANCE.toString().toUpperCase(),
324 RequestType.UPDATE_INSTANCE.toString().toUpperCase(),
325 RequestType.APPLY_UPDATED_CONFIG.toString().toUpperCase(),
326 RequestType.IN_PLACE_SOFTWARE_UPDATE.toString().toUpperCase()
329 for (RequestWrapper currentRequest : allOrchestrationRequests) {
330 if (currentRequest.getRequest() != null
331 && "vnf".equalsIgnoreCase(currentRequest.getRequest().getRequestScope())
332 && suppoertedRequestTypes.contains(upperCase(currentRequest.getRequest().getRequestType()))
334 filteredOrchestrationRequests.add(currentRequest.getRequest());
337 } catch (Exception e) {
338 logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
339 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
341 return filteredOrchestrationRequests;
344 private List<RequestWrapper> deserializeOrchestrationRequestsJson(String orchestrationRequestsJson) {
345 String methodName = "deserializeOrchestrationRequestsJson";
346 logger.debug(dateFormat.format(new Date()) + "<== " + methodName + START);
348 ObjectMapper mapper = new ObjectMapper();
349 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
350 mapper.configure(DeserializationFeature.READ_ENUMS_USING_TO_STRING, true);
351 RequestList requestList = null;
353 requestList = mapper.readValue(orchestrationRequestsJson, RequestList.class);
354 } catch (IOException e) {
355 throw new GenericUncheckedException(e);
357 return requestList.getRequestList();
362 public List<Task> getManualTasksByRequestId(String originalRequestId) {
363 String methodName = "getManualTasksByRequestId";
364 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
367 String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_MAN_TASKS);
368 String path = p + "?originalRequestId=" + originalRequestId;
370 RestObject<String> restObjStr = new RestObject<>();
371 String str = new String();
374 MsoResponseWrapper msoResponseWrapper = msoClientInterface.getManualTasksByRequestId(str, "", path, restObjStr);
375 return deserializeManualTasksJson(msoResponseWrapper.getEntity());
377 } catch (Exception e) {
378 logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
379 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
384 private List<Task> deserializeManualTasksJson(String manualTasksJson) {
385 String methodName = "deserializeManualTasksJson";
386 logger.debug(dateFormat.format(new Date()) + "<== " + methodName + START);
388 ObjectMapper mapper = new ObjectMapper();
390 TaskList taskList = mapper.readValue(manualTasksJson, TaskList.class);
391 return taskList.getTaskList();
392 } catch (IOException e) {
393 throw new GenericUncheckedException(e);
399 public MsoResponseWrapper completeManualTask(RequestDetails requestDetails, String taskId) {
400 String methodName = "completeManualTask";
401 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
403 String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_MAN_TASKS);
404 String path = p + "/" + taskId + "/complete";
406 RestObject<String> restObjStr = new RestObject<>();
407 String str = new String();
410 msoClientInterface.completeManualTask(requestDetails, str, "", path, restObjStr);
412 return MsoUtil.wrapResponse(restObjStr);
414 } catch (Exception e) {
415 logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
416 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
422 public MsoResponseWrapper activateServiceInstance(RequestDetails requestDetails, String serviceInstanceId) {
423 String methodName = "activateServiceInstance";
424 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
426 String serviceEndpoint = SystemProperties.getProperty(MsoProperties.MSO_REST_API_SVC_INSTANCE);
427 String activateServicePath = serviceEndpoint + "/" + serviceInstanceId + ACTIVATE;
429 RestObject<String> restObjStr = new RestObject<>();
433 msoClientInterface.setServiceInstanceStatus(requestDetails, str, "", activateServicePath, restObjStr);
435 return MsoUtil.wrapResponse(restObjStr);
437 } catch (Exception e) {
438 logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
439 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
446 public MsoResponseWrapperInterface updateVnf(org.onap.vid.changeManagement.RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) {
447 String methodName = "updateVnf";
448 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
451 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_INSTANCE);
452 String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
453 vnf_endpoint = vnf_endpoint + '/' + vnfInstanceId;
454 return msoClientInterface.updateVnf(requestDetails, vnf_endpoint);
458 public MsoResponseWrapperInterface replaceVnf(org.onap.vid.changeManagement.RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) {
459 String methodName = "replaceVnf";
460 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
463 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_CHANGE_MANAGEMENT_INSTANCE);
464 String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
465 vnf_endpoint = vnf_endpoint.replace(VNF_INSTANCE_ID, vnfInstanceId);
466 vnf_endpoint = vnf_endpoint.replace(REQUEST_TYPE, MsoChangeManagementRequest.REPLACE);
467 return msoClientInterface.replaceVnf(requestDetails, vnf_endpoint);
470 public RequestDetailsWrapper generateInPlaceMsoRequest(org.onap.vid.changeManagement.RequestDetails requestDetails) {
471 validateUpdateVnfSoftwarePayload(requestDetails);
472 RequestDetails inPlaceSoftwareUpdateRequest = new RequestDetails();
473 inPlaceSoftwareUpdateRequest.setCloudConfiguration(requestDetails.getCloudConfiguration());
474 inPlaceSoftwareUpdateRequest.setRequestParameters(requestDetails.getRequestParameters());
475 inPlaceSoftwareUpdateRequest.setRequestInfo(requestDetails.getRequestInfo());
476 RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
477 requestDetailsWrapper.requestDetails = inPlaceSoftwareUpdateRequest;
478 return requestDetailsWrapper;
482 public RequestDetailsWrapper generateConfigMsoRequest(org.onap.vid.changeManagement.RequestDetails requestDetails) {
483 validateUpdateVnfConfig(requestDetails);
484 RequestDetails ConfigUpdateRequest = new RequestDetails();
485 ConfigUpdateRequest.setRequestParameters(requestDetails.getRequestParameters());
486 ConfigUpdateRequest.setRequestInfo(requestDetails.getRequestInfo());
487 RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
488 requestDetailsWrapper.requestDetails = ConfigUpdateRequest;
489 return requestDetailsWrapper;
497 public MsoResponseWrapperInterface updateVnfSoftware(org.onap.vid.changeManagement.RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) {
498 String methodName = "updateVnfSoftware";
499 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
500 String vnf_endpoint = getChangeManagementEndpoint(serviceInstanceId, vnfInstanceId, MsoChangeManagementRequest.SOFTWARE_UPDATE); //workflow name in mso is different than workflow name in vid UI
501 RequestDetailsWrapper finalRequestDetails = generateInPlaceMsoRequest(requestDetails);
502 return msoClientInterface.changeManagementUpdate(finalRequestDetails, vnf_endpoint);
506 public MsoResponseWrapperInterface updateVnfConfig(org.onap.vid.changeManagement.RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) {
507 String methodName = "updateVnfConfig";
508 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
509 RequestDetailsWrapper finalRequestDetails = generateConfigMsoRequest(requestDetails);
510 String vnf_endpoint = getChangeManagementEndpoint(serviceInstanceId, vnfInstanceId, MsoChangeManagementRequest.CONFIG_UPDATE);
511 return msoClientInterface.changeManagementUpdate(finalRequestDetails, vnf_endpoint);
514 private String getChangeManagementEndpoint(String serviceInstanceId, String vnfInstanceId, String vnfRequestType) {
515 String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_CHANGE_MANAGEMENT_INSTANCE);
516 String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
517 vnf_endpoint = vnf_endpoint.replace(VNF_INSTANCE_ID, vnfInstanceId);
518 vnf_endpoint = vnf_endpoint.replace(REQUEST_TYPE, vnfRequestType);
522 private Map getChangeManagementPayload(RequestDetails requestDetails, String message){
523 if(requestDetails.getRequestParameters()==null||requestDetails.getRequestParameters().getAdditionalProperties()==null){
524 throw new BadRequestException(message);
526 Object payloadRaw=requestDetails.getRequestParameters().getAdditionalProperties().get("payload");
528 return objectMapper.readValue((String)payloadRaw,Map.class);
530 catch(Exception exception){
531 throw new BadRequestException(message);
535 private void validateUpdateVnfSoftwarePayload(RequestDetails requestDetails) {
536 final String noValidPayloadMsg = "No valid payload in " + ChangeManagementRequest.VNF_IN_PLACE_SOFTWARE_UPDATE + " request";
538 Map payload = getChangeManagementPayload(requestDetails, noValidPayloadMsg);
539 validateUpdateVnfSoftwarePayloadProperty(payload, noValidPayloadMsg, "existing_software_version", SOFTWARE_VERSION_PATTERN);
540 validateUpdateVnfSoftwarePayloadProperty(payload, noValidPayloadMsg, "new_software_version", SOFTWARE_VERSION_PATTERN);
542 //if "operations_timeout" is not integer, trying to read it as String that represent a number
543 if (!(payload.get("operations_timeout") instanceof Integer)) {
544 validateUpdateVnfSoftwarePayloadProperty(payload, noValidPayloadMsg, "operations_timeout", NUMBER_PATTERN);
548 private void validateUpdateVnfSoftwarePayloadProperty(Map payload, String noValidPayloadMsg, String propertyName, Pattern pattern) {
549 Object forValidation = payload.get(propertyName);
550 final String noValidPayloadPropertyMsg = noValidPayloadMsg + ", " + propertyName + " property is not valid";
551 if (!(forValidation instanceof String)) {
552 throw new BadRequestException(noValidPayloadPropertyMsg);
554 if (!pattern.matcher((String) forValidation).matches()) {
555 throw new BadRequestException(noValidPayloadPropertyMsg);
559 private void validateUpdateVnfConfig(RequestDetails requestDetails) {
560 final String noValidPayloadMsg = "No valid payload in " + ChangeManagementRequest.CONFIG_UPDATE + " request";
562 Map payload = getChangeManagementPayload(requestDetails, noValidPayloadMsg);
563 validateConfigUpdateVnfPayloadProperty(payload, noValidPayloadMsg, "request-parameters");
564 validateConfigUpdateVnfPayloadProperty(payload, noValidPayloadMsg, "configuration-parameters");
567 private void validateConfigUpdateVnfPayloadProperty(Map payload, String noValidPayloadMsg, String propertyName) {
568 final String noValidPayloadPropertyMsg = noValidPayloadMsg+ ", "+ propertyName + " property is not valid";
569 if(!payload.containsKey(propertyName)) {
570 throw new BadRequestException( noValidPayloadPropertyMsg);
575 public MsoResponseWrapper deleteConfiguration(
576 org.onap.vid.mso.rest.RequestDetailsWrapper requestDetailsWrapper,
577 String serviceInstanceId,
578 String configurationId) {
580 String methodName = "deleteConfiguration";
581 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
583 String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_CONFIGURATION_INSTANCE);
584 endpoint = endpoint.replace(SVC_INSTANCE_ID, serviceInstanceId);
585 endpoint = endpoint.replace(CONFIGURATION_ID, configurationId);
587 return msoClientInterface.deleteConfiguration(requestDetailsWrapper, endpoint);
591 public MsoResponseWrapper setConfigurationActiveStatus(
592 RequestDetails requestDetails,
593 String serviceInstanceId,
594 String configurationId,
595 boolean isActivate) {
597 String methodName = "setConfigurationActiveStatus";
598 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
600 String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_CONFIGURATION_INSTANCE);
601 endpoint = endpoint.replace(SVC_INSTANCE_ID, serviceInstanceId);
602 endpoint = endpoint.replace(CONFIGURATION_ID, configurationId);
604 String isActivateState = (isActivate ? ACTIVATE : DEACTIVATE);
605 endpoint = endpoint + isActivateState;
607 return msoClientInterface.setConfigurationActiveStatus(requestDetails, endpoint);
611 public MsoResponseWrapper setServiceInstanceStatus(RequestDetails requestDetails , String serviceInstanceId, boolean isActivate) {
612 String methodName = "setServiceInstanceStatus";
613 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
615 String serviceEndpoint = validateEndpointPath(MsoProperties.MSO_REST_API_SVC_INSTANCE);
616 String endpoint = serviceEndpoint + "/" + serviceInstanceId;
618 String isActivateState = (isActivate ? ACTIVATE : DEACTIVATE);
619 endpoint = endpoint + isActivateState;
622 RestObject<String> restObjStr = new RestObject<>();
626 msoClientInterface.setServiceInstanceStatus(requestDetails , str, "", endpoint, restObjStr);
628 return MsoUtil.wrapResponse(restObjStr);
630 } catch (Exception e) {
631 logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
632 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
638 public MsoResponseWrapper setPortOnConfigurationStatus(
639 RequestDetails requestDetails,
640 String serviceInstanceId,
641 String configurationId,
643 String methodName = "setPortOnConfigurationStatus";
644 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
646 String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_CONFIGURATION_INSTANCE);
647 endpoint = endpoint.replace(SVC_INSTANCE_ID, serviceInstanceId);
648 endpoint = endpoint.replace(CONFIGURATION_ID, configurationId);
650 String isEnablePortStatus = (isEnable ? ENABLE_PORT : DISABLE_PORT);
651 endpoint = endpoint + isEnablePortStatus;
653 return msoClientInterface.setPortOnConfigurationStatus(requestDetails, endpoint);
658 public RequestDetailsWrapper<RequestDetails> createOperationalEnvironmentActivationRequestDetails(OperationalEnvironmentActivateInfo details) {
659 RequestDetails requestDetails = new RequestDetails();
660 RequestInfo requestInfo = new RequestInfo();
661 requestInfo.setAdditionalProperty(RESOURCE_TYPE, RESOURCE_TYPE_OPERATIONAL_ENVIRONMENT);
662 requestInfo.setSource(SOURCE_OPERATIONAL_ENVIRONMENT);
663 requestInfo.setRequestorId(details.getUserId());
664 requestDetails.setRequestInfo(requestInfo);
666 org.onap.vid.domain.mso.RelatedInstance relatedInstance = new org.onap.vid.domain.mso.RelatedInstance();
667 relatedInstance.setAdditionalProperty(RESOURCE_TYPE, RESOURCE_TYPE_OPERATIONAL_ENVIRONMENT);
668 relatedInstance.setInstanceId(details.getRelatedInstanceId());
669 relatedInstance.setInstanceName(details.getRelatedInstanceName());
670 requestDetails.setAdditionalProperty("relatedInstanceList", Collections.singletonList(ImmutableMap.of("relatedInstance", relatedInstance)));
672 org.onap.vid.domain.mso.RequestParameters requestParameters = new org.onap.vid.domain.mso.RequestParameters();
673 requestParameters.setUserParams(null);
674 requestParameters.setAdditionalProperty("operationalEnvironmentType", "VNF");
675 requestParameters.setAdditionalProperty("workloadContext", details.getWorkloadContext());
676 requestParameters.setAdditionalProperty("manifest", details.getManifest());
677 requestDetails.setRequestParameters(requestParameters);
679 RequestDetailsWrapper<RequestDetails> requestDetailsWrapper = new RequestDetailsWrapper<>(requestDetails);
681 debugRequestDetails(requestDetailsWrapper, logger);
683 return requestDetailsWrapper;
687 public String getOperationalEnvironmentActivationPath(OperationalEnvironmentActivateInfo details) {
688 String path = validateEndpointPath(MSO_REST_API_OPERATIONAL_ENVIRONMENT_ACTIVATE);
689 path = path.replace("<operational_environment_id>", details.getOperationalEnvironmentId());
694 public RequestDetailsWrapper<RequestDetails> createOperationalEnvironmentDeactivationRequestDetails(OperationalEnvironmentDeactivateInfo details) {
695 RequestDetails requestDetails = new RequestDetails();
697 RequestInfo requestInfo = new RequestInfo();
698 requestInfo.setAdditionalProperty(RESOURCE_TYPE, RESOURCE_TYPE_OPERATIONAL_ENVIRONMENT);
699 requestInfo.setSource(SOURCE_OPERATIONAL_ENVIRONMENT);
700 requestInfo.setRequestorId(details.getUserId());
701 requestDetails.setRequestInfo(requestInfo);
703 org.onap.vid.domain.mso.RequestParameters requestParameters = new org.onap.vid.domain.mso.RequestParameters();
704 requestParameters.setUserParams(null);
705 requestParameters.setAdditionalProperty("operationalEnvironmentType", "VNF");
706 requestDetails.setRequestParameters(requestParameters);
707 RequestDetailsWrapper<RequestDetails> requestDetailsWrapper = new RequestDetailsWrapper<>(requestDetails);
708 debugRequestDetails(requestDetailsWrapper, logger);
709 return requestDetailsWrapper;
713 public String getCloudResourcesRequestsStatusPath(String requestId) {
714 String path = validateEndpointPath(MSO_REST_API_CLOUD_RESOURCES_REQUEST_STATUS);
715 path = path.replace("<request_id>", requestId);
720 public String getOperationalEnvironmentDeactivationPath(OperationalEnvironmentDeactivateInfo details) {
721 String path = validateEndpointPath(MSO_REST_API_OPERATIONAL_ENVIRONMENT_DEACTIVATE);
722 path = path.replace("<operational_environment_id>", details.getOperationalEnvironmentId());
727 public String getOperationalEnvironmentCreationPath() {
728 return validateEndpointPath(MSO_REST_API_OPERATIONAL_ENVIRONMENT_CREATE);
734 public RequestDetailsWrapper<OperationEnvironmentRequestDetails> convertParametersToRequestDetails(OperationalEnvironmentController.OperationalEnvironmentCreateBody input, String userId) {
735 OperationEnvironmentRequestDetails.RequestInfo requestInfo = new OperationEnvironmentRequestDetails.RequestInfo(
736 RESOURCE_TYPE_OPERATIONAL_ENVIRONMENT,
737 input.getInstanceName(),
738 SOURCE_OPERATIONAL_ENVIRONMENT,
741 OperationEnvironmentRequestDetails.RelatedInstance relatedInstance = new OperationEnvironmentRequestDetails.RelatedInstance(
742 RESOURCE_TYPE_OPERATIONAL_ENVIRONMENT,
743 input.getEcompInstanceId(),
744 input.getEcompInstanceName());
746 List<OperationEnvironmentRequestDetails.RelatedInstance> relatedInstanceList = Collections.singletonList((relatedInstance));
748 OperationEnvironmentRequestDetails.RequestParameters requestParameters = new OperationEnvironmentRequestDetails.RequestParameters(
749 input.getOperationalEnvironmentType(),
750 input.getTenantContext(),
751 input.getWorkloadContext());
753 OperationEnvironmentRequestDetails requestDetails = new OperationEnvironmentRequestDetails(requestInfo, relatedInstanceList, requestParameters);
754 RequestDetailsWrapper<OperationEnvironmentRequestDetails> requestDetailsWrapper = new RequestDetailsWrapper<>(requestDetails);
755 debugRequestDetails(requestDetailsWrapper, logger);
756 return requestDetailsWrapper;
760 public MsoResponseWrapper removeRelationshipFromServiceInstance(RequestDetails requestDetails, String serviceInstanceId) {
761 String methodName = "removeRelationshipFromServiceInstance";
762 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
764 String serviceEndpoint = SystemProperties.getProperty(MsoProperties.MSO_REST_API_SVC_INSTANCE);
765 String removeRelationshipsPath = serviceEndpoint + "/" + serviceInstanceId + "/removeRelationships";
767 return msoClientInterface.removeRelationshipFromServiceInstance(requestDetails, removeRelationshipsPath);
771 public MsoResponseWrapper addRelationshipToServiceInstance(RequestDetails requestDetails, String serviceInstanceId) {
772 String methodName = "addRelationshipToServiceInstance";
773 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
775 String serviceEndpoint = SystemProperties.getProperty(MsoProperties.MSO_REST_API_SVC_INSTANCE);
776 String addRelationshipsPath = serviceEndpoint + "/" + serviceInstanceId + "/addRelationships";
778 return msoClientInterface.addRelationshipToServiceInstance(requestDetails, addRelationshipsPath);
782 public enum RequestType {
784 CREATE_INSTANCE("createInstance"),
785 DELETE_INSTANCE("deleteInstance"),
786 REPLACE_INSTANCE("replaceInstance"),
787 UPDATE_INSTANCE("updateInstance"),
788 ACTIVATE_INSTANCE("activateInstance"),
789 DEACTIVATE_INSTANCE("deactivateInstance"),
790 APPLY_UPDATED_CONFIG("applyUpdatedConfig"),
791 IN_PLACE_SOFTWARE_UPDATE("inPlaceSoftwareUpdate"),
793 NOT_PROVIDED("not provided");
794 private final String value;
795 private static final Map<String, RequestType> CONSTANTS = new HashMap<>();
798 for (RequestType c: values()) {
799 CONSTANTS.put(c.value, c);
803 RequestType(String value) {
809 public String toString() {
814 public static RequestType fromValue(String value) {
815 RequestType constant = CONSTANTS.get(value);
816 if (constant == null) {
817 throw new IllegalArgumentException(value);