Skip to content

Commit

Permalink
Merge "Related-Bug: #1545657 1. Taking care some of validations in se…
Browse files Browse the repository at this point in the history
…rvice template. a. if physical-device selected as virtual_type then enable set value as false for shared_ip and static_routes b. Added deep validation in service templates c. For version 2, set null for flavor, image, availability zone and service scaling expicitly d. service interface type, only left, right, management and otherX in case sensitive is allowed. 2. Fix edit/delete of port-tuples of SVC Instance"
  • Loading branch information
Zuul authored and opencontrail-ci-admin committed Feb 19, 2016
2 parents 1298b4f + 646ac1a commit fabf799
Show file tree
Hide file tree
Showing 6 changed files with 225 additions and 44 deletions.
188 changes: 158 additions & 30 deletions webroot/config/services/instances/api/serviceinstanceconfig.api.js
Original file line number Diff line number Diff line change
Expand Up @@ -716,7 +716,7 @@ function getVNDetailsByServiceInstances(serviceInstances, appData, callback) {
var serInst = serviceInstances[i]['service-instance'];
var projUUID = serInst['parent_uuid'];
if (null == insertedProjList[projUUID]) {
reqUrl = '/project/' + projUUID;
var reqUrl = '/project/' + projUUID;
commonUtils.createReqObj(dataObjArr, reqUrl,
global.HTTP_REQUEST_GET,
null, null, null, appData);
Expand Down Expand Up @@ -1195,24 +1195,31 @@ function formSvcInstPortTupleRefsPostData (dataObjArr, vmiObj, portTupleObj,
if ((null == vmi) || (null == vmi['virtual-machine-interface'])) {
return;
}
var vmiPutData = {};
if (null == vmi['virtual-machine-interface']['port_tuple_refs']) {
vmi['virtual-machine-interface']['port_tuple_refs'] = [];
}
vmi['virtual-machine-interface']['port_tuple_refs'].push(
{'to': portTupleObj['to'], 'uuid': portTupleObj['uuid'],
'attr': null});
if (null == vmi['virtual-machine-interface']
['virtual_machine_interface_properties']) {
vmi['virtual-machine-interface']
['virtual_machine_interface_properties'] = {};
}
vmi['virtual-machine-interface']
['virtual_machine_interface_properties']['service_interface_type'] =
vmiObj['interfaceType'];
reqUrl = '/virtual-machine-interface/' +
vmi['virtual-machine-interface']['uuid'];
reqType = global.HTTP_REQUEST_PUT;
data = vmi;
vmiPutData['port_tuple_ref'] = {'to': portTupleObj['to'], 'uuid':
portTupleObj['uuid'], 'attr': null};
vmiPutData['fq_name'] =
commonUtils.getValueByJsonPath(vmi,
'virtual-machine-interface;fq_name',
null);
vmiPutData['uuid'] =
commonUtils.getValueByJsonPath(vmi,
'virtual-machine-interface;uuid',
null);
var vmiProp =
commonUtils.getValueByJsonPath(vmi,
'virtual-machine-interface;virtual_machine_interface_properties',
null);
vmiPutData['virtual_machine_interface_properties'] = {};
if (null != vmiProp) {
vmiPutData['virtual_machine_interface_properties'] = vmiProp;
}
vmiPutData['virtual_machine_interface_properties']
['service_interface_type'] = vmiObj['interfaceType'];
dataObjArr.push(vmiPutData);
} else {
/*
var portTupleRefs = vmi['virtual-machine-interface']['port_tuple_refs'];
Expand All @@ -1235,9 +1242,9 @@ function formSvcInstPortTupleRefsPostData (dataObjArr, vmiObj, portTupleObj,
'attr': null
};
reqUrl = '/ref-update';
commonUtils.createReqObj(dataObjArr, reqUrl, reqType, data, null, null,
appData);
}
commonUtils.createReqObj(dataObjArr, reqUrl, reqType, data, null, null,
appData);
}

function updatePortTuples (configSIData, siPostData, vmiDetails, appData,
Expand Down Expand Up @@ -1430,6 +1437,7 @@ function updateVMIsInPortTuples (configSIData, siPostData, vmiDetails, appData,
}
}
var dataObjArr = [];
var addDataObjArr = [];
for (var i = 0; i < uiPortTuplesLen; i++) {
var uiUUID = uiPortTuples[i]['uuid'];
if (null != portTupleObjs[uiUUID]) {
Expand All @@ -1452,7 +1460,7 @@ function updateVMIsInPortTuples (configSIData, siPostData, vmiDetails, appData,
(vmisDelta['addedList'].length > 0)) {
var len = vmisDelta['addedList'].length;
for (var k = 0; k < len; k++) {
formSvcInstPortTupleRefsPostData(dataObjArr,
formSvcInstPortTupleRefsPostData(addDataObjArr,
vmisDelta['addedList'][k],
uiPortTuples[i], vmiDetails,
'ADD', appData);
Expand All @@ -1465,9 +1473,83 @@ function updateVMIsInPortTuples (configSIData, siPostData, vmiDetails, appData,
commonUtils.getServerResponseByRestApi(configApiServer,
false),
function(error, data) {
addPortTupleRefsInVMI(addDataObjArr, appData, function(error, data) {
callback(error, data);
});
});
});
}

function addPortTupleRefsInVMI (addDataObjArr, appData, callback)
{
if (null == addDataObjArr) {
callback(null, null);
return;
}

var dataObjArr = [];
var addDataObjArrLen = addDataObjArr.length;
var vmiList = [];
var tmpVMIToIdxMap = {};
for (var i = 0; i < addDataObjArrLen; i++) {
vmiList.push(addDataObjArr[i]['uuid']);
tmpVMIToIdxMap[addDataObjArr[i]['uuid']] = i;
}
var vmiListLen = vmiList.length;
if (vmiListLen > 0) {
var vmiGetUrl = '/virtual-machine-interfaces?detail=true&obj_uuids=' +
vmiList.join(',') + '&fields=port_tuple_refs';
commonUtils.createReqObj(dataObjArr, vmiGetUrl, null, null, null, null,
appData);
}
if (!dataObjArr.length) {
callback(null, null);
return;
}

configApiServer.apiGet(vmiGetUrl, appData, function(error, vmiDetails) {
if ((null != error) || (null == vmiDetails) ||
(null == vmiDetails['virtual-machine-interfaces'])) {
callback(error, null);
return;
}
var vmiConfigData =
commonUtils.getValueByJsonPath(vmiDetails,
'virtual-machine-interfaces', []);
var vmiConfigDataLen = vmiConfigData.length;
dataObjArr = [];
for (var i = 0; i < vmiConfigDataLen; i++) {
var vmiConfig =
commonUtils.getValueByJsonPath(vmiConfigData[i],
'virtual-machine-interface', null);
var configUUID =
commonUtils.getValueByJsonPath(vmiConfig, 'uuid', null);
var idx = tmpVMIToIdxMap[configUUID];
if ((null != configUUID) && (null != idx)) {
var putData = {'virtual-machine-interface': {}};
if (null == vmiConfig['port_tuple_refs']) {
vmiConfig['port_tuple_refs'] = [];
}
vmiConfig['port_tuple_refs'].push(addDataObjArr[idx]['port_tuple_ref']);
delete addDataObjArr[idx]['port_tuple_ref'];
addDataObjArr[idx]['port_tuple_refs'] =
vmiConfig['port_tuple_refs'];
putData['virtual-machine-interface'] = addDataObjArr[idx];
var vmiPutUrl = '/virtual-machine-interface/' + configUUID;
commonUtils.createReqObj(dataObjArr, vmiPutUrl,
global.HTTP_REQUEST_PUT,
commonUtils.cloneObj(putData), null,
null, appData);
}
}
async.map(dataObjArr,
commonUtils.getServerResponseByRestApi(configApiServer,
false),
function(error, data) {
callback(error, data);
});
});
return;
}

function updatePortTupleRefsInVMI (portTuples, tmpUIPortTupleObjs, vmiDetails,
Expand All @@ -1479,6 +1561,7 @@ function updatePortTupleRefsInVMI (portTuples, tmpUIPortTupleObjs, vmiDetails,
return;
}
var cnt = portTuples.length;
var addDataObjArr = [];
for (var i = 0; i < cnt; i++) {
var fqn = portTuples[i]['to'].join(':');
var vmis = tmpUIPortTupleObjs[fqn];
Expand All @@ -1487,19 +1570,33 @@ function updatePortTupleRefsInVMI (portTuples, tmpUIPortTupleObjs, vmiDetails,
}
var vmisCnt = vmis.length;
for (var j = 0; j < vmisCnt; j++) {
formSvcInstPortTupleRefsPostData(dataObjArr, vmis[j],
portTuples[i], vmiDetails,
operation, appData);
if ('DELETE' == operation) {
formSvcInstPortTupleRefsPostData(dataObjArr, vmis[j],
portTuples[i], vmiDetails,
operation, appData);
} else {
formSvcInstPortTupleRefsPostData(addDataObjArr, vmis[j],
portTuples[i], vmiDetails,
operation, appData);
}
}
}

async.mapSeries(dataObjArr,
commonUtils.getServerResponseByRestApi(configApiServer,
false),
function(error, data) {
if ('ADD' == operation) {
if (null != error) {
callback(error, data);
return;
}
if ('ADD' == operation) {
addPortTupleRefsInVMI(addDataObjArr, appData,
function(error, data) {
callback(error, data);
});
return;
}
dataObjArr = [];
for (var i = 0; i < cnt; i++) {
var reqUrl = '/port-tuple/' + portTuples[i]['uuid'];
Expand Down Expand Up @@ -1998,17 +2095,47 @@ function formDataObjRefDelete (dataObjArr, deleteObj, type)
}
}

function deleteAllSIRefsAndSI (deleteObj, deleteRefs, callback)
function deletePortTuplesAndSI (portTupleUUIDList, siID, appData, callback)
{
var siDelURL = '/service-instance/' + siID;
var dataObjArr = [];
if ((null == portTupleUUIDList) || (!portTupleUUIDList.length)) {
configApiServer.apiDelete(siDelURL, appData, function(error, data) {
callback(error, data);
return;
});
}

var portTuplesCnt = portTupleUUIDList.length;
for (var i = 0; i < portTuplesCnt; i++) {
var ptDelUrl = '/port-tuple/' + portTupleUUIDList[i];
commonUtils.createReqObj(dataObjArr, ptDelUrl,
global.HTTP_REQUEST_DEL, null, null,
null, appData);
}
async.map(dataObjArr,
commonUtils.getServerResponseByRestApi(configApiServer,
false),
function(error, data) {
configApiServer.apiDelete(siDelURL, appData, function(error, data) {
callback(error, data);
return;
});
});
}

function deleteAllSIRefsAndSI (deleteObj, deleteRefs, portTupleUUIDList,
callback)
{
var appData = deleteObj.appData;
var userData = deleteObj.userData;
var dataObjArr = [];

var siDelUrl = '/service-instance/' + deleteObj.uuid;
if (false == deleteRefs) {
configApiServer.apiDelete(siDelUrl, appData, function(error, data) {
deletePortTuplesAndSI(portTupleUUIDList, deleteObj.uuid, appData,
function(error, data) {
callback(error, data);
return;
});
return;
}
Expand All @@ -2024,9 +2151,9 @@ function deleteAllSIRefsAndSI (deleteObj, deleteRefs, callback)
callback(error, data);
return;
}
configApiServer.apiDelete(siDelUrl, appData, function(error, data) {
deletePortTuplesAndSI(portTupleUUIDList, deleteObj.uuid, appData,
function(error, data) {
callback(error, data);
return;
});
});
}
Expand Down Expand Up @@ -2057,7 +2184,7 @@ function deleteServiceInstanceCB (deleteObj, callback)
}
if (!portTuplesCnt) {
var deleteRefs = true;
deleteAllSIRefsAndSI(deleteObj, true, function(error, data) {
deleteAllSIRefsAndSI(deleteObj, true, [], function(error, data) {
callback(null, {'error': error, 'data': data});
return;
});
Expand Down Expand Up @@ -2110,7 +2237,8 @@ function deleteServiceInstanceCB (deleteObj, callback)

if (!dataObjArr.length) {
var deleteRefs = false;
deleteAllSIRefsAndSI(deleteObj, deleteRefs, function(error, data) {
deleteAllSIRefsAndSI(deleteObj, deleteRefs, uuidList,
function(error, data) {
callback(null, {'error': error, data: data})
return;
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,10 +72,6 @@ define([
if (!dispName.length) {
return "Service Instance Name is required";
}
if (-1 != dispName.indexOf('_')) {
return 'Underscore is not allowed in Service ' +
'Instance Name';
}
},
'service_health_check': function(val, attr, data) {
var svcTmpl = data.service_template;
Expand Down
6 changes: 4 additions & 2 deletions webroot/config/services/instances/ui/js/svcInst.utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -442,10 +442,11 @@ define([
columns: [{
elementId: 'interfaceType',
view: 'FormInputView',
class: "", width: 385,
class: "",
name:'Interface Type',
viewConfig: {
placeholder: 'Select Interface Type',
width: 385,
disabled: true,
templateId:
cowc.TMPL_EDITABLE_GRID_INPUT_VIEW,
Expand All @@ -456,11 +457,12 @@ define([
{
elementId: 'interface',
view: 'FormDropdownView',
class: "", width: 345,
class: "",
name:'Virtual Machine Interface',
viewConfig: {
templateId:
cowc.TMPL_EDITABLE_GRID_DROPDOWN_VIEW,
width: 345,
path: 'interface',
disabled: 'disable()',
dataBindValue: 'interface()',
Expand Down

0 comments on commit fabf799

Please sign in to comment.