1 package org.onap.vid.mso;
3 import com.fasterxml.jackson.core.JsonProcessingException;
4 import com.fasterxml.jackson.databind.DeserializationFeature;
5 import com.fasterxml.jackson.databind.ObjectMapper;
6 import com.fasterxml.jackson.databind.SerializationFeature;
7 import com.google.common.collect.ImmutableList;
8 import com.google.common.collect.ImmutableMap;
9 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
10 import org.onap.portalsdk.core.util.SystemProperties;
11 import org.onap.vid.changeManagement.ChangeManagementRequest;
12 import org.onap.vid.changeManagement.RequestDetailsWrapper;
13 import org.onap.vid.controllers.OperationalEnvironmentController;
14 import org.onap.vid.domain.mso.RequestInfo;
15 import org.onap.vid.mso.model.OperationalEnvironmentActivateInfo;
16 import org.onap.vid.mso.model.OperationalEnvironmentDeactivateInfo;
17 import org.onap.vid.mso.rest.OperationalEnvironment.OperationEnvironmentRequestDetails;
18 import org.onap.vid.mso.rest.*;
19 import org.springframework.beans.factory.annotation.Autowired;
21 import javax.ws.rs.BadRequestException;
22 import java.text.DateFormat;
23 import java.text.SimpleDateFormat;
25 import java.util.regex.Pattern;
27 import static org.onap.vid.changeManagement.ChangeManagementRequest.MsoChangeManagementRequest;
28 import static org.onap.vid.controllers.MsoController.*;
29 import static org.onap.vid.mso.MsoProperties.*;
31 public class MsoBusinessLogicImpl implements MsoBusinessLogic {
34 * The Constant dateFormat.
36 final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS");
37 final static Pattern SOFTWARE_VERSION_PATTERN = Pattern.compile("^[A-Za-z0-9.\\-]+$");
38 final static Pattern NUMBER_PATTERN = Pattern.compile("^[0-9]+$");
39 private static final String ACTIVATE = "/activate";
40 private static final String DEACTIVATE = "/deactivate";
41 private static final String ENABLE_PORT = "/enablePort";
42 private static final String DISABLE_PORT = "/disablePort";
43 private final static String RESOURCE_TYPE_OPERATIONAL_ENVIRONMENT = "operationalEnvironment";
44 private final static String SOURCE_OPERATIONAL_ENVIRONMENT = "VID";
45 final static private ObjectMapper objectMapper = new ObjectMapper();
48 * This should be replaced with mso client factory.
50 private final MsoInterface msoClientInterface;
54 private static final EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MsoBusinessLogicImpl.class);
57 public MsoBusinessLogicImpl(MsoInterface msoClientInterface) {
58 this.msoClientInterface = msoClientInterface;
61 static String validateEndpointPath(String endpointEnvVariable) {
62 String endpoint = SystemProperties.getProperty(endpointEnvVariable);
63 if (endpoint == null || endpoint.isEmpty()) {
64 throw new RuntimeException(endpointEnvVariable + " env variable is not defined");
69 // this function should get params from tosca and send them to instance at mso, then return success response.
71 public MsoResponseWrapper createSvcInstance(RequestDetails msoRequest) throws Exception {
72 String methodName = "createSvcInstance ";
73 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
77 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_SVC_INSTANCE);
78 } catch (Exception exception) {
82 return msoClientInterface.createSvcInstance(msoRequest, endpoint);
86 public MsoResponseWrapper createE2eSvcInstance(Object msoRequest) throws Exception {
87 String methodName = "createE2eSvcInstance ";
88 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
92 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_E2E_SVC_INSTANCE);
93 } catch (Exception exception) {
97 return msoClientInterface.createE2eSvcInstance(msoRequest, endpoint);
100 void validateLineOfBusiness(RequestDetails requestDetails) {
102 Object value = requestDetails.getAdditionalProperties();
104 for(String prop: ImmutableList.of("requestDetails", "lineOfBusiness", "lineOfBusinessName")) {
105 if(value==null ||!(value instanceof Map)) {
110 value = ((Map)value).get(prop);
114 if(value == null || value.toString().isEmpty()) {
115 throw new BadRequestException("lineOfBusiness is required");
121 public MsoResponseWrapper createVnf(RequestDetails requestDetails, String serviceInstanceId) throws Exception {
122 String methodName = "createVnf";
123 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
127 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_INSTANCE);
128 } catch (Exception exception) {
132 String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
133 return msoClientInterface.createVnf(requestDetails, vnf_endpoint);
137 public MsoResponseWrapper createNwInstance(RequestDetails requestDetails, String serviceInstanceId) throws Exception {
138 String methodName = "createNwInstance";
139 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
143 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_NETWORK_INSTANCE);
144 } catch (Exception exception) {
148 String nw_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
149 return msoClientInterface.createNwInstance(requestDetails, nw_endpoint);
153 public MsoResponseWrapper createVolumeGroupInstance(RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) throws Exception {
154 String methodName = "createVolumeGroupInstance";
155 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
159 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VOLUME_GROUP_INSTANCE);
160 } catch (Exception exception) {
164 String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
165 vnf_endpoint = vnf_endpoint.replaceFirst(VNF_INSTANCE_ID, vnfInstanceId);
167 return msoClientInterface.createVolumeGroupInstance(requestDetails, vnf_endpoint);
171 public MsoResponseWrapper createVfModuleInstance(RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) throws Exception {
172 String methodName = "createVfModuleInstance";
173 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
177 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VF_MODULE_INSTANCE);
178 } catch (Exception exception) {
182 String partial_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
183 String vf_module_endpoint = partial_endpoint.replaceFirst(VNF_INSTANCE_ID, vnfInstanceId);
185 return msoClientInterface.createVfModuleInstance(requestDetails, vf_module_endpoint);
189 public MsoResponseWrapper createConfigurationInstance(RequestDetails requestDetails, String serviceInstanceId) throws Exception {
190 String methodName = "createConfigurationInstance";
191 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
193 String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_CONFIGURATIONS);
194 endpoint = endpoint.replace(SVC_INSTANCE_ID, serviceInstanceId);
196 return msoClientInterface.createConfigurationInstance(requestDetails, endpoint);
200 public MsoResponseWrapper deleteE2eSvcInstance(Object requestDetails, String serviceInstanceId) throws Exception {
201 String methodName = "deleteE2eSvcInstance";
202 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
206 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_E2E_SVC_INSTANCE);
207 } catch (Exception exception) {
211 String svc_endpoint = endpoint + "/" + serviceInstanceId;
213 return msoClientInterface.deleteE2eSvcInstance(requestDetails, svc_endpoint);
217 public MsoResponseWrapper deleteSvcInstance(RequestDetails requestDetails, String serviceInstanceId) throws Exception {
218 String methodName = "deleteSvcInstance";
219 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
223 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_SVC_INSTANCE);
224 } catch (Exception exception) {
228 String svc_endpoint = endpoint + "/" + serviceInstanceId;
230 return msoClientInterface.deleteSvcInstance(requestDetails, svc_endpoint);
234 public MsoResponseWrapper deleteVnf(RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) throws Exception {
235 String methodName = "deleteVnf";
236 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
240 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_INSTANCE);
241 } catch (Exception exception) {
244 String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
245 vnf_endpoint = vnf_endpoint + '/' + vnfInstanceId;
247 return msoClientInterface.deleteVnf(requestDetails, vnf_endpoint);
251 public MsoResponseWrapper deleteVfModule(RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId, String vfModuleId) throws Exception {
252 String methodName = "deleteVfModule";
253 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
257 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VF_MODULE_INSTANCE);
258 } catch (Exception exception) {
262 String vf__modules_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId).replaceFirst(VNF_INSTANCE_ID, vnfInstanceId);
264 String delete_vf_endpoint = vf__modules_endpoint + '/' + vfModuleId;
266 return msoClientInterface.deleteVfModule(requestDetails, delete_vf_endpoint);
270 public MsoResponseWrapper deleteVolumeGroupInstance(RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId, String volumeGroupId) throws Exception {
271 String methodName = "deleteVolumeGroupInstance";
272 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
276 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VOLUME_GROUP_INSTANCE);
277 } catch (Exception exception) {
281 String svc_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
282 String vnf_endpoint = svc_endpoint.replaceFirst(VNF_INSTANCE_ID, vnfInstanceId);
283 String delete_volume_group_endpoint = vnf_endpoint + "/" + volumeGroupId;
285 return msoClientInterface.deleteVolumeGroupInstance(requestDetails, delete_volume_group_endpoint);
289 public MsoResponseWrapper deleteNwInstance(RequestDetails requestDetails, String serviceInstanceId, String networkInstanceId) throws Exception {
290 String methodName = "deleteNwInstance";
291 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
295 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_NETWORK_INSTANCE);
296 } catch (Exception exception) {
300 String svc_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
301 String delete_nw_endpoint = svc_endpoint + "/" + networkInstanceId;
303 return msoClientInterface.deleteNwInstance(requestDetails, delete_nw_endpoint);
307 public MsoResponseWrapper getOrchestrationRequest(String requestId) throws Exception {
308 String methodName = "getOrchestrationRequest";
309 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
310 MsoResponseWrapper w = null;
312 String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_ORC_REQ);
313 String path = p + "/" + requestId;
315 RestObject<String> restObjStr = new RestObject<String>();
316 String str = new String();
319 msoClientInterface.getOrchestrationRequest(str, "", path, restObjStr);
321 return MsoUtil.wrapResponse(restObjStr);
323 } catch (Exception e) {
324 logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
325 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
331 public MsoResponseWrapper getOrchestrationRequests(String filterString) throws Exception {
332 String methodName = "getOrchestrationRequest";
333 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
334 MsoResponseWrapper w = null;
336 String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_ORC_REQS);
337 String path = p + filterString;
339 RestObject<String> restObjStr = new RestObject<String>();
340 String str = new String();
343 msoClientInterface.getOrchestrationRequest(str, "", path, restObjStr);
345 return MsoUtil.wrapResponse(restObjStr);
347 } catch (Exception e) {
348 logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
349 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
355 public List<Request> getOrchestrationRequestsForDashboard() throws Exception {
356 String methodName = "getOrchestrationRequestsForDashboard";
357 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
358 List<Request> filteredOrchestrationRequests = new ArrayList<>();
360 String path = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_ORC_REQS);
361 path += "filter=modelType:EQUALS:vnf";
362 RestObject<String> restObjStr = new RestObject<String>();
363 String str = new String();
366 MsoResponseWrapper msoResponseWrapper = msoClientInterface.getOrchestrationRequestsForDashboard(str, "", path, restObjStr);
367 List<RequestWrapper> allOrchestrationRequests = deserializeOrchestrationRequestsJson(msoResponseWrapper.getEntity());
370 for (RequestWrapper currentRequest : allOrchestrationRequests) {
371 if ((currentRequest.getRequest() != null) && (currentRequest.getRequest().getRequestScope() == Request.RequestScope.VNF) && ((currentRequest.getRequest().getRequestType() ==
372 Request.RequestType.REPLACE_INSTANCE) || (currentRequest.getRequest().getRequestType() ==
373 Request.RequestType.UPDATE_INSTANCE))) {
374 filteredOrchestrationRequests.add(currentRequest.getRequest());
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());
381 return filteredOrchestrationRequests;
385 private List<RequestWrapper> deserializeOrchestrationRequestsJson(String orchestrationRequestsJson) throws Exception {
386 String methodName = "deserializeOrchestrationRequestsJson";
387 logger.debug(dateFormat.format(new Date()) + "<== " + methodName + " start");
389 ObjectMapper mapper = new ObjectMapper();
390 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
391 mapper.configure(DeserializationFeature.READ_ENUMS_USING_TO_STRING, true);
392 RequestList requestList = mapper.readValue(orchestrationRequestsJson, RequestList.class);
393 return requestList.getRequestList();
398 public List<Task> getManualTasksByRequestId(String originalRequestId) throws Exception {
399 String methodName = "getManualTasksByRequestId";
400 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 + "?originalRequestId=" + originalRequestId;
406 RestObject<String> restObjStr = new RestObject<String>();
407 String str = new String();
410 MsoResponseWrapper msoResponseWrapper = msoClientInterface.getManualTasksByRequestId(str, "", path, restObjStr);
411 return deserializeManualTasksJson(msoResponseWrapper.getEntity());
413 } catch (Exception e) {
414 logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
415 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
420 private List<Task> deserializeManualTasksJson(String manualTasksJson) throws Exception {
421 String methodName = "deserializeManualTasksJson";
422 logger.debug(dateFormat.format(new Date()) + "<== " + methodName + " start");
424 ObjectMapper mapper = new ObjectMapper();
425 TaskList taskList = mapper.readValue(manualTasksJson, TaskList.class);
426 return taskList.getTaskList();
431 public MsoResponseWrapper completeManualTask(RequestDetails requestDetails, String taskId) throws Exception {
432 String methodName = "completeManualTask";
433 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
434 MsoResponseWrapper w = null;
436 String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_MAN_TASKS);
437 String path = p + "/" + taskId + "/complete";
439 RestObject<String> restObjStr = new RestObject<String>();
440 String str = new String();
443 msoClientInterface.completeManualTask(requestDetails, str, "", path, restObjStr);
445 return MsoUtil.wrapResponse(restObjStr);
447 } catch (Exception e) {
448 logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
449 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
455 public MsoResponseWrapper activateServiceInstance(RequestDetails requestDetails, String serviceInstanceId) throws Exception {
456 String methodName = "activateServiceInstance";
457 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
459 String serviceEndpoint = SystemProperties.getProperty(MsoProperties.MSO_REST_API_SVC_INSTANCE);
460 String activateServicePath = serviceEndpoint + "/" + serviceInstanceId + "/activate";
462 RestObject<String> restObjStr = new RestObject<>();
466 msoClientInterface.setServiceInstanceStatus(requestDetails, str, "", activateServicePath, restObjStr);
468 return MsoUtil.wrapResponse(restObjStr);
470 } catch (Exception e) {
471 logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
472 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
479 public MsoResponseWrapperInterface updateVnf(org.onap.vid.changeManagement.RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) throws Exception {
480 String methodName = "updateVnf";
481 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
485 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_INSTANCE);
486 } catch (Exception exception) {
489 String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
490 vnf_endpoint = vnf_endpoint + '/' + vnfInstanceId;
491 return msoClientInterface.updateVnf(requestDetails, vnf_endpoint);
495 public MsoResponseWrapperInterface replaceVnf(org.onap.vid.changeManagement.RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) throws Exception {
496 String methodName = "replaceVnf";
497 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
501 endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_CHANGE_MANAGEMENT_INSTANCE);
502 } catch (Exception exception) {
505 String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
506 vnf_endpoint = vnf_endpoint.replace(VNF_INSTANCE_ID, vnfInstanceId);
507 vnf_endpoint = vnf_endpoint.replace(REQUEST_TYPE, MsoChangeManagementRequest.REPLACE);
508 return msoClientInterface.replaceVnf(requestDetails, vnf_endpoint);
511 public RequestDetailsWrapper generateInPlaceMsoRequest(org.onap.vid.changeManagement.RequestDetails requestDetails) throws Exception {
512 validateUpdateVnfSoftwarePayload(requestDetails);
513 RequestDetails inPlaceSoftwareUpdateRequest = new RequestDetails();
514 inPlaceSoftwareUpdateRequest.setCloudConfiguration(requestDetails.getCloudConfiguration());
515 inPlaceSoftwareUpdateRequest.setRequestParameters(requestDetails.getRequestParameters());
516 inPlaceSoftwareUpdateRequest.setRequestInfo(requestDetails.getRequestInfo());
517 RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
518 requestDetailsWrapper.requestDetails = inPlaceSoftwareUpdateRequest;
519 return requestDetailsWrapper;
523 public RequestDetailsWrapper generateConfigMsoRequest(org.onap.vid.changeManagement.RequestDetails requestDetails) throws Exception {
524 validateUpdateVnfConfig(requestDetails);
525 RequestDetails ConfigUpdateRequest = new RequestDetails();
526 ConfigUpdateRequest.setRequestParameters(requestDetails.getRequestParameters());
527 ConfigUpdateRequest.setRequestInfo(requestDetails.getRequestInfo());
528 RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
529 requestDetailsWrapper.requestDetails = ConfigUpdateRequest;
530 return requestDetailsWrapper;
534 public MsoResponseWrapperInterface updateVnfSoftware(org.onap.vid.changeManagement.RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) throws Exception {
535 String methodName = "updateVnfSoftware";
536 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
537 String vnf_endpoint = getChangeManagementEndpoint(serviceInstanceId, vnfInstanceId, MsoChangeManagementRequest.SOFTWARE_UPDATE); //workflow name in mso is different than workflow name in vid UI
538 RequestDetailsWrapper finalRequestDetails = generateInPlaceMsoRequest(requestDetails);
539 return msoClientInterface.changeManagementUpdate(finalRequestDetails, vnf_endpoint);
543 public MsoResponseWrapperInterface updateVnfConfig(org.onap.vid.changeManagement.RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) throws Exception {
544 String methodName = "updateVnfConfig";
545 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
546 RequestDetailsWrapper finalRequestDetails = generateConfigMsoRequest(requestDetails);
547 String vnf_endpoint = getChangeManagementEndpoint(serviceInstanceId, vnfInstanceId, MsoChangeManagementRequest.CONFIG_UPDATE);
548 return msoClientInterface.changeManagementUpdate(finalRequestDetails, vnf_endpoint);
551 private String getChangeManagementEndpoint(String serviceInstanceId, String vnfInstanceId, String vnfRequestType) {
552 String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_CHANGE_MANAGEMENT_INSTANCE);
553 String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
554 vnf_endpoint = vnf_endpoint.replace(VNF_INSTANCE_ID, vnfInstanceId);
555 vnf_endpoint = vnf_endpoint.replace(REQUEST_TYPE, vnfRequestType);
559 private Map getChangeManagementPayload(RequestDetails requestDetails, String message) throws Exception{
560 if(requestDetails.getRequestParameters()==null||requestDetails.getRequestParameters().getAdditionalProperties()==null){
561 throw new BadRequestException(message);
563 Object payloadRaw=requestDetails.getRequestParameters().getAdditionalProperties().get("payload");
565 return objectMapper.readValue((String)payloadRaw,Map.class);
567 catch(Exception exception){
568 throw new BadRequestException(message);
572 private void validateUpdateVnfSoftwarePayload(RequestDetails requestDetails) throws Exception {
573 final String noValidPayloadMsg = "No valid payload in " + ChangeManagementRequest.VNF_IN_PLACE_SOFTWARE_UPDATE + " request";
575 Map payload = getChangeManagementPayload(requestDetails, noValidPayloadMsg);
576 validateUpdateVnfSoftwarePayloadProperty(payload, noValidPayloadMsg, "existing_software_version", SOFTWARE_VERSION_PATTERN);
577 validateUpdateVnfSoftwarePayloadProperty(payload, noValidPayloadMsg, "new_software_version", SOFTWARE_VERSION_PATTERN);
579 //if "operations-timeout" is not integer, trying to read it as String that represent a number
580 if (!(payload.get("operations-timeout") instanceof Integer)) {
581 validateUpdateVnfSoftwarePayloadProperty(payload, noValidPayloadMsg, "operations_timeout", NUMBER_PATTERN);
586 private void validateUpdateVnfSoftwarePayloadProperty(Map payload, String noValidPayloadMsg, String propertyName, Pattern pattern) {
587 Object forValidation = payload.get(propertyName);
588 final String noValidPayloadPropertyMsg = noValidPayloadMsg + ", " + propertyName + " property is not valid";
589 if (!(forValidation instanceof String)) {
590 throw new BadRequestException(noValidPayloadPropertyMsg);
592 if (!pattern.matcher((String) forValidation).matches()) {
593 throw new BadRequestException(noValidPayloadPropertyMsg);
597 private void validateUpdateVnfConfig(RequestDetails requestDetails) throws Exception {
598 final String noValidPayloadMsg = "No valid payload in " + ChangeManagementRequest.CONFIG_UPDATE + " request";
600 Map payload = getChangeManagementPayload(requestDetails, noValidPayloadMsg);
601 validateConfigUpdateVnfPayloadProperty(payload, noValidPayloadMsg, "request-parameters");
602 validateConfigUpdateVnfPayloadProperty(payload, noValidPayloadMsg, "configuration-parameters");
605 private void validateConfigUpdateVnfPayloadProperty(Map payload, String noValidPayloadMsg, String propertyName) {
606 Object forValidation = payload.get(propertyName);
607 final String noValidPayloadPropertyMsg = noValidPayloadMsg+ ", "+ propertyName + " property is not valid";
608 if(!payload.containsKey(propertyName)) {
609 throw new BadRequestException( noValidPayloadPropertyMsg);
614 public MsoResponseWrapper deleteConfiguration(
615 RequestDetails requestDetails,
616 String serviceInstanceId,
617 String configurationId) throws Exception {
619 String methodName = "deleteConfiguration";
620 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
622 String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_CONFIGURATION_INSTANCE);
623 endpoint = endpoint.replace(SVC_INSTANCE_ID, serviceInstanceId);
624 endpoint = endpoint.replace(CONFIGURATION_ID, configurationId);
626 return msoClientInterface.deleteConfiguration(requestDetails, endpoint);
630 public MsoResponseWrapper setConfigurationActiveStatus(
631 RequestDetails requestDetails,
632 String serviceInstanceId,
633 String configurationId,
634 boolean isActivate) throws Exception {
636 String methodName = "setConfigurationActiveStatus";
637 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
639 String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_CONFIGURATION_INSTANCE);
640 endpoint = endpoint.replace(SVC_INSTANCE_ID, serviceInstanceId);
641 endpoint = endpoint.replace(CONFIGURATION_ID, configurationId);
643 String isActivateState = (isActivate ? ACTIVATE : DEACTIVATE);
644 endpoint = endpoint + isActivateState;
646 return msoClientInterface.setConfigurationActiveStatus(requestDetails, endpoint);
650 public MsoResponseWrapper setServiceInstanceStatus(RequestDetails requestDetails , String serviceInstanceId, boolean isActivate)throws Exception{
651 String methodName = "setServiceInstanceStatus";
652 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
654 String serviceEndpoint = validateEndpointPath(MsoProperties.MSO_REST_API_SVC_INSTANCE);
655 String endpoint = serviceEndpoint + "/" + serviceInstanceId;
657 String isActivateState = (isActivate ? ACTIVATE : DEACTIVATE);
658 endpoint = endpoint + isActivateState;
661 RestObject<String> restObjStr = new RestObject<>();
665 msoClientInterface.setServiceInstanceStatus(requestDetails , str, "", endpoint, restObjStr);
667 return MsoUtil.wrapResponse(restObjStr);
669 } catch (Exception e) {
670 logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
671 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
677 public MsoResponseWrapper setPortOnConfigurationStatus(
678 RequestDetails requestDetails,
679 String serviceInstanceId,
680 String configurationId,
681 boolean isEnable) throws Exception {
682 String methodName = "setPortOnConfigurationStatus";
683 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
685 String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_CONFIGURATION_INSTANCE);
686 endpoint = endpoint.replace(SVC_INSTANCE_ID, serviceInstanceId);
687 endpoint = endpoint.replace(CONFIGURATION_ID, configurationId);
689 String isEnablePortStatus = (isEnable ? ENABLE_PORT : DISABLE_PORT);
690 endpoint = endpoint + isEnablePortStatus;
692 return msoClientInterface.setPortOnConfigurationStatus(requestDetails, endpoint);
697 public RequestDetailsWrapper<RequestDetails> createOperationalEnvironmentActivationRequestDetails(OperationalEnvironmentActivateInfo details) {
698 RequestDetails requestDetails = new RequestDetails();
699 RequestInfo requestInfo = new RequestInfo();
700 requestInfo.setAdditionalProperty("resourceType", RESOURCE_TYPE_OPERATIONAL_ENVIRONMENT);
701 requestInfo.setSource(SOURCE_OPERATIONAL_ENVIRONMENT);
702 requestInfo.setRequestorId(details.getUserId());
703 requestDetails.setRequestInfo(requestInfo);
705 org.onap.vid.domain.mso.RelatedInstance relatedInstance = new org.onap.vid.domain.mso.RelatedInstance();
706 relatedInstance.setAdditionalProperty("resourceType", RESOURCE_TYPE_OPERATIONAL_ENVIRONMENT);
707 relatedInstance.setInstanceId(details.getRelatedInstanceId());
708 relatedInstance.setInstanceName(details.getRelatedInstanceName());
709 requestDetails.setAdditionalProperty("relatedInstanceList", Collections.singletonList(ImmutableMap.of("relatedInstance", relatedInstance)));
711 org.onap.vid.domain.mso.RequestParameters requestParameters = new org.onap.vid.domain.mso.RequestParameters();
712 requestParameters.setUserParams(null);
713 requestParameters.setAdditionalProperty("operationalEnvironmentType", "VNF");
714 requestParameters.setAdditionalProperty("workloadContext", details.getWorkloadContext());
715 requestParameters.setAdditionalProperty("manifest", details.getManifest());
716 requestDetails.setRequestParameters(requestParameters);
718 RequestDetailsWrapper<RequestDetails> requestDetailsWrapper = new RequestDetailsWrapper<>(requestDetails);
720 debugRequestDetails(requestDetailsWrapper);
722 return requestDetailsWrapper;
726 public String getOperationalEnvironmentActivationPath(OperationalEnvironmentActivateInfo details) {
727 String path = validateEndpointPath(MSO_REST_API_OPERATIONAL_ENVIRONMENT_ACTIVATE);
728 path = path.replace("<operational_environment_id>", details.getOperationalEnvironmentId());
733 public RequestDetailsWrapper<RequestDetails> createOperationalEnvironmentDeactivationRequestDetails(OperationalEnvironmentDeactivateInfo details) {
734 RequestDetails requestDetails = new RequestDetails();
736 RequestInfo requestInfo = new RequestInfo();
737 requestInfo.setAdditionalProperty("resourceType", RESOURCE_TYPE_OPERATIONAL_ENVIRONMENT);
738 requestInfo.setSource(SOURCE_OPERATIONAL_ENVIRONMENT);
739 requestInfo.setRequestorId(details.getUserId());
740 requestDetails.setRequestInfo(requestInfo);
742 org.onap.vid.domain.mso.RequestParameters requestParameters = new org.onap.vid.domain.mso.RequestParameters();
743 requestParameters.setUserParams(null);
744 requestParameters.setAdditionalProperty("operationalEnvironmentType", "VNF");
745 requestDetails.setRequestParameters(requestParameters);
746 RequestDetailsWrapper<RequestDetails> requestDetailsWrapper = new RequestDetailsWrapper<>(requestDetails);
747 debugRequestDetails(requestDetailsWrapper);
748 return requestDetailsWrapper;
752 public String getCloudResourcesRequestsStatusPath(String requestId) {
753 String path = validateEndpointPath(MSO_REST_API_CLOUD_RESOURCES_REQUEST_STATUS);
754 path = path.replace("<request_id>", requestId);
759 public String getOperationalEnvironmentDeactivationPath(OperationalEnvironmentDeactivateInfo details) {
760 String path = validateEndpointPath(MSO_REST_API_OPERATIONAL_ENVIRONMENT_DEACTIVATE);
761 path = path.replace("<operational_environment_id>", details.getOperationalEnvironmentId());
765 private void debugRequestDetails(Object requestDetails) {
766 if (logger.isDebugEnabled()) {
767 String requestDetailsAsString;
769 requestDetailsAsString = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT).writeValueAsString(requestDetails);
770 } catch (JsonProcessingException e) {
771 requestDetailsAsString = "error: cannot stringify RequestDetails";
773 logger.debug(EELFLoggerDelegate.debugLogger, "requestDetailsAsString: {}", requestDetailsAsString);
778 public String getOperationalEnvironmentCreationPath() {
779 String path = validateEndpointPath(MSO_REST_API_OPERATIONAL_ENVIRONMENT_CREATE);
784 public RequestDetailsWrapper<OperationEnvironmentRequestDetails> convertParametersToRequestDetails(OperationalEnvironmentController.OperationalEnvironmentCreateBody input, String userId) {
785 OperationEnvironmentRequestDetails.RequestInfo requestInfo = new OperationEnvironmentRequestDetails.RequestInfo(
786 RESOURCE_TYPE_OPERATIONAL_ENVIRONMENT,
787 input.getInstanceName(),
788 SOURCE_OPERATIONAL_ENVIRONMENT,
791 OperationEnvironmentRequestDetails.RelatedInstance relatedInstance = new OperationEnvironmentRequestDetails.RelatedInstance(
792 RESOURCE_TYPE_OPERATIONAL_ENVIRONMENT,
793 input.getEcompInstanceId(),
794 input.getEcompInstanceName());
796 List<OperationEnvironmentRequestDetails.RelatedInstance> relatedInstanceList = Collections.singletonList((relatedInstance));
798 OperationEnvironmentRequestDetails.RequestParameters requestParameters = new OperationEnvironmentRequestDetails.RequestParameters(
799 input.getOperationalEnvironmentType(),
800 input.getTenantContext(),
801 input.getWorkloadContext());
803 OperationEnvironmentRequestDetails requestDetails = new OperationEnvironmentRequestDetails(requestInfo, relatedInstanceList, requestParameters);
804 RequestDetailsWrapper<OperationEnvironmentRequestDetails> requestDetailsWrapper = new RequestDetailsWrapper<>(requestDetails);
805 debugRequestDetails(requestDetailsWrapper);
806 return requestDetailsWrapper;
810 public MsoResponseWrapper removeRelationshipFromServiceInstance(RequestDetails requestDetails, String serviceInstanceId) throws Exception {
811 String methodName = "removeRelationshipFromServiceInstance";
812 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
814 String serviceEndpoint = SystemProperties.getProperty(MsoProperties.MSO_REST_API_SVC_INSTANCE);
815 String removeRelationshipsPath = serviceEndpoint + "/" + serviceInstanceId + "/removeRelationships";
817 return msoClientInterface.removeRelationshipFromServiceInstance(requestDetails, removeRelationshipsPath);
821 public MsoResponseWrapper addRelationshipToServiceInstance(RequestDetails requestDetails, String serviceInstanceId) throws Exception {
822 String methodName = "addRelationshipToServiceInstance";
823 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
825 String serviceEndpoint = SystemProperties.getProperty(MsoProperties.MSO_REST_API_SVC_INSTANCE);
826 String addRelationshipsPath = serviceEndpoint + "/" + serviceInstanceId + "/addRelationships";
828 return msoClientInterface.addRelationshipToServiceInstance(requestDetails, addRelationshipsPath);