mso.max.polls=3\r
mso.user.name=infraportal\r
mso.password.x=OBF:1ghz1kfx1j1w1m7w1i271e8q1eas1hzj1m4i1iyy1kch1gdz\r
+#E2E is v3\r
+mso.restapi.svc.e2einstance=/e2eServiceInstances/v3\r
mso.restapi.svc.instance=/serviceInstances/v6\r
mso.restapi.vnf.instance=/serviceInstances/v6/<service_instance_id>/vnfs\r
mso.restapi.network.instance=/serviceInstances/v6/<service_instance_id>/networks\r
mso.max.polls=10\r
mso.user.name=${VID_MSO_USER}\r
mso.password.x=${VID_MSO_PASS}\r
+#E2E is v3\r
+mso.restapi.svc.e2einstance=/ecomp/mso/infra/e2eServiceInstances/v3\r
mso.restapi.svc.instance=/ecomp/mso/infra/serviceInstances/v6\r
mso.restapi.vnf.instance=/ecomp/mso/infra/serviceInstances/v6/<service_instance_id>/vnfs\r
mso.restapi.network.instance=/ecomp/mso/infra/serviceInstances/v6/<service_instance_id>/networks\r
@JsonProperty("cloudRegionID")
public String cloudRegionId;
+ @JsonProperty("cloudOwner")
+ public String cloudOwner;
+
@JsonProperty("tenantName")
public String tenantName;
public GetTenantsResponse() {
}
- public GetTenantsResponse(String cloudRegionId, String tenantName, String tenantID, boolean isPermitted) {
+ public GetTenantsResponse(String cloudRegionId, String cloudOwner, String tenantName, String tenantID, boolean isPermitted) {
this.cloudRegionId = cloudRegionId;
+ this.cloudOwner = cloudOwner;
this.tenantName = tenantName;
this.tenantID = tenantID;
this.isPermitted = isPermitted;
/** The required field. If not set, the default is true */
private boolean required = true;
+ /** Details the inputs template */
+ private String templateName;
+ private String templateUUID;
+ private String templateInvariantUUID;
+ private String templateCustomizationUUID;
+
/**
* Instantiates a new input.
*/
public String toString() {
return "type=" + type + ",description=" + description + ",default=" + _default;
}
+
+ public String getTemplateName() {
+ return templateName;
+ }
+
+ public void setTemplateName(String templateName) {
+ this.templateName = templateName;
+ }
+
+ public String getTemplateUUID() {
+ return templateUUID;
+ }
+
+ public void setTemplateUUID(String templateUUID) {
+ this.templateUUID = templateUUID;
+ }
+
+ public String getTemplateInvariantUUID() {
+ return templateInvariantUUID;
+ }
+
+ public void setTemplateInvariantUUID(String templateInvariantUUID) {
+ this.templateInvariantUUID = templateInvariantUUID;
+ }
+
+ public String getTemplateCustomizationUUID() {
+ return templateCustomizationUUID;
+ }
+
+ public void setTemplateCustomizationUUID(String templateCustomizationUUID) {
+ this.templateCustomizationUUID = templateCustomizationUUID;
+ }
}
import org.onap.sdc.tosca.parser.impl.SdcToscaParserFactory;
import org.onap.sdc.tosca.parser.impl.SdcTypes;
import org.onap.sdc.toscaparser.api.*;
+import org.onap.sdc.toscaparser.api.elements.Metadata;
import org.onap.sdc.toscaparser.api.parameters.Input;
import java.nio.file.Path;
private Map<String, org.onap.vid.asdc.beans.tosca.Input> inputsListToInputsMap(List<org.onap.sdc.toscaparser.api.parameters.Input> inputList) {
Map<String, org.onap.vid.asdc.beans.tosca.Input> inputs = new HashMap<>();
for (org.onap.sdc.toscaparser.api.parameters.Input input : inputList) {
- inputs.put(input.getName(), convertInput(input, new org.onap.vid.asdc.beans.tosca.Input()));
+ inputs.put(input.getName(), convertInput(input, new org.onap.vid.asdc.beans.tosca.Input(), null));
}
return inputs;
}
for (Input input: inputs){
if(input.getName().equals(key)){
org.onap.vid.asdc.beans.tosca.Input localInput = new org.onap.vid.asdc.beans.tosca.Input();
- localInput = convertInput(input, localInput);
+ localInput = convertInput(input, localInput, nodeTemplate);
String name = property.getKey();
commandPropertyMap.put(name, extractCommands(name, key));
inputMap.put(name, localInput);
return inputKey.substring(inputKey.indexOf(":") + 1);
}
- private org.onap.vid.asdc.beans.tosca.Input convertInput(Input parserInput, org.onap.vid.asdc.beans.tosca.Input localInput){
+ private org.onap.vid.asdc.beans.tosca.Input convertInput(Input parserInput, org.onap.vid.asdc.beans.tosca.Input localInput, NodeTemplate nodeTemplate){
localInput.setDefault(parserInput.getDefault());
localInput.setDescription(parserInput.getDescription());
localInput.setRequired(parserInput.isRequired());
localInput.setType(parserInput.getType());
localInput.setConstraints(parserInput.getConstraints());
// localInput.setentry_schema()
+
+ //if inputs of inner nodeTemplate - tell its details
+ if(nodeTemplate != null) {
+ Metadata metadata = nodeTemplate.getMetaData();
+ localInput.setTemplateName(metadata.getValue("name"));
+ localInput.setTemplateUUID(metadata.getValue("UUID"));
+ localInput.setTemplateInvariantUUID(metadata.getValue("invariantUUID"));
+ localInput.setTemplateCustomizationUUID(metadata.getValue("customizationUUID"));
+ }
+
return localInput;
}
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
+import java.util.LinkedHashMap;
import java.util.List;
//import java.util.UUID;
return (new ResponseEntity<>(w.getResponse(), HttpStatus.OK));
}
+
+ /**
+ * Creates the e2e svc instance.
+ *
+ * @param request the request
+ * @return the response entity
+ * @throws Exception the exception
+ */
+ @RequestMapping(value = "/mso_create_e2e_svc_instance", method = RequestMethod.POST)
+ public ResponseEntity<String> createE2eSvcInstance(HttpServletRequest request, @RequestBody LinkedHashMap<String, Object> mso_request) throws Exception {
+ String methodName = "createE2eSvcInstance";
+
+ LOGGER.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
+
+ // always return OK, the MSO status code is embedded in the body
+
+ MsoResponseWrapper w = msoBusinessLogic.createE2eSvcInstance(mso_request.get("requestDetails"));
+
+ return (new ResponseEntity<>(w.getResponse(), HttpStatus.OK));
+
+ }
/**
* Creates the vnf.
// this function should get params from tosca and send them to instance at mso, then return success response.
MsoResponseWrapper createSvcInstance(RequestDetails msoRequest) throws Exception;
+ MsoResponseWrapper createE2eSvcInstance(Object msoRequest) throws Exception;
+
MsoResponseWrapper createVnf(RequestDetails requestDetails, String serviceInstanceId) throws Exception;
MsoResponseWrapper createNwInstance(RequestDetails requestDetails, String serviceInstanceId) throws Exception;
return msoClientInterface.createSvcInstance(msoRequest, endpoint);
}
+ @Override
+ public MsoResponseWrapper createE2eSvcInstance(Object msoRequest) throws Exception {
+ String methodName = "createE2eSvcInstance ";
+ logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
+
+ String endpoint;
+ try {
+ endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_E2E_SVC_INSTANCE);
+ } catch (Exception exception) {
+ throw exception;
+ }
+
+ return msoClientInterface.createE2eSvcInstance(msoRequest, endpoint);
+ }
+
void validateLineOfBusiness(RequestDetails requestDetails) {
Object value = requestDetails.getAdditionalProperties();
* @throws Exception
*/
MsoResponseWrapper createSvcInstance(RequestDetails requestDetails, String endpoint) throws Exception;
+
+ //For VoLTE E2E services
+ MsoResponseWrapper createE2eSvcInstance(Object requestDetails, String endpoint) throws Exception;
/**
* will create a virtual network function using MSO service.
/** The Constant MSO_PASSWORD. */
public static final String MSO_PASSWORD = "mso.password.x";
+ /** The Constant MSO_REST_API_SVC_INSTANCE. */
+ public static final String MSO_REST_API_E2E_SVC_INSTANCE = "mso.restapi.svc.e2einstance"; // /e2eServiceInstances/v3
+
/** The Constant MSO_REST_API_SVC_INSTANCE. */
public static final String MSO_REST_API_SVC_INSTANCE = "mso.restapi.svc.instance"; // /serviceInstances/v2
return createInstance(requestDetails, endpoint);
}
+
+ @Override
+ public MsoResponseWrapper createE2eSvcInstance(Object requestDetails, String endpoint) throws Exception {
+ String methodName = "createE2eSvcInstance ";
+ logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
+
+ return createInstance(requestDetails, endpoint);
+ }
@Override
public MsoResponseWrapper createVnf(RequestDetails requestDetails, String endpoint) throws Exception {
}
- public MsoResponseWrapper createInstance(RequestDetails request, String path) throws Exception {
+ public MsoResponseWrapper createInstance(Object request, String path) throws Exception {
String methodName = "createInstance";
logger.debug(dateFormat.format(new Date()) + "<== " + methodName + " start");
.constant("COMPONENT", (function() {
return {
A_LA_CARTE : "a la carte",
- CLOUD_REGION_ID : "cloudRegionID",
+ CLOUD_OWNER : "cloudOwner",
+ CLOUD_REGION_ID : "cloudRegionID",
COMPONENT_STATUS : "ComponentStatus",
CREATE_COMPONENT : "createComponent",
DELETE_RESUME_COMPONENT : "deleteResumeComponent",
\r
var serviceModel = getServiceResponse.data;\r
DataService.setServiceName(serviceModel.service.name);\r
- \r
+\r
+ //VOLTE services need input list generated and macro style\r
+ DataService.setE2EService(false);\r
+ if(serviceModel.service.category === 'E2E Service') {\r
+ DataService.setE2EService(true);\r
+ DataService.setHideServiceFields(false);\r
+ VIDCONFIGURATION.MACRO_SERVICES.push(serviceModel.service.invariantUuid);\r
+ }\r
+\r
DataService.setModelInfo(COMPONENT.SERVICE, {\r
"modelInvariantId": serviceModel.service.invariantUuid,\r
"modelVersion": serviceModel.service.version,\r
\r
for (var i = 0; i < aaiLcpCloudRegionTenants.length; i++) {\r
lcpCloudRegionTenants.push({\r
+ "cloudOwner": aaiLcpCloudRegionTenants[i][COMPONENT.CLOUD_OWNER],\r
"cloudRegionId": aaiLcpCloudRegionTenants[i][COMPONENT.CLOUD_REGION_ID],\r
"tenantName": aaiLcpCloudRegionTenants[i][COMPONENT.TENANT_NAME],\r
"tenantId": aaiLcpCloudRegionTenants[i][COMPONENT.TENANT_ID],\r
var getUserProvidedList = function() {\r
var parameterList = [];\r
var isUserProvidedNaming = false;\r
- if ( (DataService.getModelInfo(_this.componentId).serviceEcompNaming != null)\r
- && (DataService.getModelInfo(_this.componentId).serviceEcompNaming === "false") ) {\r
+ if ( ((DataService.getModelInfo(_this.componentId).serviceEcompNaming != null)\r
+ && (DataService.getModelInfo(_this.componentId).serviceEcompNaming === "false")) || DataService.getE2EService() ) {\r
isUserProvidedNaming = true;\r
}\r
\r
FIELD.PARAMETER.LCP_REGION_TEXT_HIDDEN,\r
FIELD.PARAMETER.TENANT_DISABLED\r
]);\r
- parameterList = parameterList.concat([ getAicZonesParameter() ]);\r
-\r
+ if(!DataService.getE2EService()) {\r
+ parameterList = parameterList.concat([getAicZonesParameter()]);\r
+ }\r
\r
}else{\r
parameterList = parameterList.concat([ getServiceId(),\r
}\r
}\r
\r
- parameterList = parameterList.concat([ getProjectParameter() ]);\r
- parameterList = parameterList.concat([ getOwningEntityParameter() ]);\r
+ if(!DataService.getE2EService()) {\r
+ parameterList = parameterList.concat([getProjectParameter()]);\r
+ parameterList = parameterList.concat([getOwningEntityParameter()]);\r
+ }\r
+\r
//if service model has a pnf, add a PNF ID parameter\r
if (DataService.getPnf()) {\r
parameterList = parameterList.concat([ FIELD.PARAMETER.PNF_ID ]);\r
return "mso_create_nw_instance/"\r
+ DataService.getServiceInstanceId();\r
case COMPONENT.SERVICE:\r
- return "mso_create_svc_instance";\r
+ if(DataService.getE2EService() === true)\r
+ return "mso_create_e2e_svc_instance";\r
+ else\r
+ return "mso_create_svc_instance";\r
case COMPONENT.VNF:\r
return "mso_create_vnf_instance/"\r
+ DataService.getServiceInstanceId();\r
}\r
};\r
\r
+ var getMsoE2ERequest = function(parameterList) {\r
+ var modelInfo = DataService.getModelInfo(_this.componentId);\r
+\r
+ //region id\r
+ var lcpRegion = getValueFromList(FIELD.ID.LCP_REGION, parameterList);\r
+ if (lcpRegion === FIELD.KEY.LCP_REGION_TEXT) {\r
+ lcpRegion = getValueFromList(FIELD.ID.LCP_REGION_TEXT,\r
+ parameterList);\r
+ }\r
+ var cloudOwner = _.find(DataService.getCloudRegionTenantList(), function(region){\r
+ return region.cloudRegionId === lcpRegion;\r
+ }).cloudOwner;\r
+\r
+ var params = [];\r
+ var displayInputs = modelInfo.displayInputs;\r
+ var groupBy = _.groupBy(displayInputs, "templateUUID");\r
+\r
+ _.forEach(groupBy, function(nodeTemplateInputs, nodeTemplateUUID) {\r
+ var reqParas = {};\r
+ var vfLocations = [];\r
+\r
+ nodeTemplateInputs.forEach(function(parameter){\r
+ if(parameter.type === 'vf_location') {\r
+ var loc = {\r
+ vnfProfileId: parameter.displayName,\r
+ locationConstraints : {\r
+ vimId: cloudOwner + '_' + lcpRegion\r
+ }\r
+ };\r
+ vfLocations.push(loc);\r
+ } else if(parameter.type === 'sdn_controller') {\r
+ if(parameter.value === undefined || parameter.value === null) {\r
+ reqParas[parameter.name] = '';\r
+ } else {\r
+ reqParas[parameter.name] = parameter.value.value;\r
+ }\r
+ } else {\r
+ var name;\r
+ _.forEach(displayInputs, function(item, key){\r
+ if(item === parameter) {\r
+ name = key;\r
+ }\r
+ });\r
+ var value = _.find(parameterList, function(item){\r
+ return item.id === name;\r
+ }).value;\r
+ reqParas[parameter.displayName] = value;\r
+ }\r
+ });\r
+\r
+ params.push({\r
+ resourceName: nodeTemplateInputs[0].templateName,\r
+ resourceInvariantUuid: nodeTemplateInputs[0].templateInvariantUUID,\r
+ resourceUuid: nodeTemplateInputs[0].templateUUID,\r
+ resourceCustomizationUuid: nodeTemplateInputs[0].templateCustomizationUUID,\r
+ parameters: {\r
+ locationConstraints: vfLocations,\r
+ //TODO resources: [],\r
+ requestInputs: reqParas\r
+ }\r
+ });\r
+ });\r
+\r
+ var requestBody = {\r
+ service: {\r
+ name: getValueFromList(FIELD.ID.INSTANCE_NAME, parameterList),\r
+ description: modelInfo["description"],\r
+ serviceInvariantUuid: modelInfo["modelInvariantId"],\r
+ serviceUuid: modelInfo["modelNameVersionId"],\r
+ globalSubscriberId: DataService.getGlobalCustomerId(),\r
+ serviceType: getValueFromList(FIELD.ID.SERVICE_TYPE, parameterList) || modelInfo["serviceTypeName"],\r
+ parameters: {\r
+ locationConstraints: [],\r
+ resources: params,\r
+ requestInputs: {} //TODO\r
+ }\r
+ }\r
+ };\r
+\r
+ return requestBody;\r
+ };\r
+\r
var getMsoRequestDetails = function(parameterList) {\r
console.log("getMsoRequestDetails invoked, parameterList="); console.log(JSON.stringify(parameterList,null,4));\r
//console.log("getMsoRequestDetails invoked, DataService.getArbitraryParameters()=");\r
//console.log(JSON.stringify(DataService.getArbitraryParameters(),null,4));\r
\r
+ //VoLTE logic goes here\r
+ if(DataService.getE2EService() === true) {\r
+ return getMsoE2ERequest(parameterList);\r
+ }\r
+\r
var modelInfo = DataService.getModelInfo(_this.componentId);\r
var requestorloggedInId = DataService.getLoggedInUserId();\r
var owningEntityId = getValueFromList(FIELD.ID.OWNING_ENTITY, parameterList);\r
getArbitraryParameters : function () {\r
return _this.arbitraryParameters;\r
},\r
+ setE2EService:function(b){\r
+ _this.e2eService=b;\r
+ },\r
+ getE2EService:function(){\r
+ return _this.e2eService;\r
+ },\r
setHideServiceFields:function(b){\r
_this.hideServiceFields=b;\r
},\r
serviceModel.service.inputs[cmdObj.inputName] != null ) {\r
networkModelDisplayInputs[cmdObj.inputName] = (serviceModel.service.inputs[cmdObj.inputName]);\r
networkModelDisplayInputs[cmdObj.inputName][PARAMETER.DISPLAY_NAME] = cmdObj.displayName;\r
+ //E2E services need this\r
+ ["templateInvariantUUID", "templateCustomizationUUID", "templateUUID", "templateName"].forEach(function(templateProp) {\r
+ networkModelDisplayInputs[cmdObj.inputName][templateProp] = networkModel.inputs[cmdObj.displayName][templateProp];\r
+ });\r
+\r
}\r
}\r
\r
serviceModel.service.inputs[cmdObj.inputName] != null ) {\r
vnfModelDisplayInputs[cmdObj.inputName] = (serviceModel.service.inputs[cmdObj.inputName]);\r
vnfModelDisplayInputs[cmdObj.inputName][PARAMETER.DISPLAY_NAME] = cmdObj.displayName;\r
+ //E2E services need this\r
+ ["templateInvariantUUID", "templateCustomizationUUID", "templateUUID", "templateName"].forEach(function(templateProp) {\r
+ networkModelDisplayInputs[cmdObj.inputName][templateProp] = vnfModel.inputs[cmdObj.displayName][templateProp];\r
+ });\r
}\r
}\r
\r
@Test(dataProvider = "getTenantsData")
public void testGetTenants(String userGlobalCustomerId, String userServiceType, String userTenantName, String serviceGlobalCustomerId,
String serviceServiceType, String serviceTenantName, String serviceTenantId, boolean expectedIsPermitted) {
- GetTenantsResponse[] getTenantsResponses = new GetTenantsResponse[] {new GetTenantsResponse(null, serviceTenantName, serviceTenantId, false)};
+ GetTenantsResponse[] getTenantsResponses = new GetTenantsResponse[] {new GetTenantsResponse(null, null, serviceTenantName, serviceTenantId, false)};
AaiResponse<GetTenantsResponse[]> aaiResponse = new AaiResponse<>(getTenantsResponses, null, 200);
Mockito.doReturn(aaiResponse).when(aaiClientInterface).getTenants(serviceGlobalCustomerId, serviceServiceType);
Role role = new Role(null, userGlobalCustomerId, userServiceType, userTenantName);