diff --git a/webroot/config/networking/port/api/portsconfig.api.js b/webroot/config/networking/port/api/portsconfig.api.js
index 96685efd5..abbc0cc69 100644
--- a/webroot/config/networking/port/api/portsconfig.api.js
+++ b/webroot/config/networking/port/api/portsconfig.api.js
@@ -255,9 +255,9 @@ function createPortValidate (request, data, response, appData, callback)
delete portPostData['virtual-machine-interface']['virtual_machine_refs'];
}
- if ('virtual_machine_interface_refs' in portPostData['virtual-machine-interface']){
+/* if ('virtual_machine_interface_refs' in portPostData['virtual-machine-interface']){
delete portPostData['virtual-machine-interface']['virtual_machine_interface_refs'];
- }
+ }*/
var lrUUID = "";
if ('logical_router_back_refs' in portPostData['virtual-machine-interface']) {
@@ -268,7 +268,8 @@ function createPortValidate (request, data, response, appData, callback)
}
if (('virtual_machine_interface_device_owner' in portPostData['virtual-machine-interface']) &&
(portPostData['virtual-machine-interface']["virtual_machine_interface_device_owner"]).substring(0,7) == "compute"){
- portPostData["virtual-machine-interface"]["virtual_machine_interface_device_owner"] = "";
+ //portPostData["virtual-machine-interface"]["virtual_machine_interface_device_owner"] = "";
+ delete portPostData["virtual-machine-interface"]["virtual_machine_interface_device_owner"];
}
configApiServer.apiPost(portsCreateURL, portPostData, appData,
function(error, vmisData) {
@@ -288,19 +289,19 @@ function createPortValidate (request, data, response, appData, callback)
return;
}
portSendResponse(error, request, vmiData, orginalPortData, apiLogicalRouterData, appData, function (err, results) {
- if(err){
+ //if(err){
callback(err, results);
return;
- }
- putVMISubInterface(orginalPortData, vmiData, results, appData, function(err, results){
- callback(err, results);
- });
+ //}
+ //putVMISubInterface(orginalPortData, vmiData, results, appData, function(err, results){
+ // callback(err, results);
+ //});
});
});
});
});
}
-
+/*
function putVMISubInterface (orginalPortData, currentVMIDetail, results, appData, callback)
{
if ('virtual_machine_interface_properties' in orginalPortData['virtual-machine-interface'] &&
@@ -324,47 +325,33 @@ function putVMISubInterface (orginalPortData, currentVMIDetail, results, appData
};
configApiServer.apiPut(subInterfacePutURL, vmiSubInterfaceJSON, appData,
function (error, data) {
- var vmRefs =
- vmiData['virtual-machine-interface']['virtual_machine_refs'];
- if (null == vmRefs) {
callback(error, data);
- return;
- }
- var putData = {};
- putData['virtual-machine-interface'] = {
- 'fq_name':
- results['virtual-machine-interface']['fq_name'],
- 'uuid': results['virtual-machine-interface']['uuid'],
- 'virtual_machine_refs': commonUtils.cloneObj(vmRefs)
- };
-
- var vmiUrl = '/virtual-machine-interface/' +
- results['virtual-machine-interface']['uuid'];
- configApiServer.apiPut(vmiUrl, putData, appData,
- function(error, data) {
- callback(error, data);
- });
});
});
} else {
callback(null, results);
}
-}
+}*/
function VMIJSONStructureSubInterface(vmiSubInterfaceDetail, currentVMIDetail){
var primaryInterfaceObject = {};
primaryInterfaceObject['virtual-machine-interface'] = {};
- primaryInterfaceObject['virtual-machine-interface'] = vmiSubInterfaceDetail;
+ //primaryInterfaceObject['virtual-machine-interface'] = vmiSubInterfaceDetail;
+ primaryInterfaceObject['virtual-machine-interface'].fq_name = vmiSubInterfaceDetail.fq_name;
+ primaryInterfaceObject['virtual-machine-interface'].uuid = vmiSubInterfaceDetail.uuid;
+ primaryInterfaceObject['virtual-machine-interface'].parent_type = vmiSubInterfaceDetail.parent_type;
var vmirefIndex = 0;
- if(primaryInterfaceObject['virtual-machine-interface']['virtual_machine_interface_refs'] != null &&
- primaryInterfaceObject['virtual-machine-interface']['virtual_machine_interface_refs'] != undefined){
- vmirefIndex = primaryInterfaceObject['virtual-machine-interface']['virtual_machine_interface_refs'].length;
+ if(vmiSubInterfaceDetail['virtual_machine_interface_refs'] != null &&
+ vmiSubInterfaceDetail['virtual_machine_interface_refs'] != undefined){
+ vmirefIndex = vmiSubInterfaceDetail['virtual_machine_interface_refs'].length;
+ primaryInterfaceObject['virtual-machine-interface']['virtual_machine_interface_refs']
+ = vmiSubInterfaceDetail['virtual_machine_interface_refs'];
} else {
primaryInterfaceObject['virtual-machine-interface']['virtual_machine_interface_refs'] = [];
}
primaryInterfaceObject['virtual-machine-interface']['virtual_machine_interface_refs'][vmirefIndex] = {};
primaryInterfaceObject['virtual-machine-interface']['virtual_machine_interface_refs'][vmirefIndex]["uuid"] = currentVMIDetail['virtual-machine-interface']["uuid"];
- primaryInterfaceObject['virtual-machine-interface']['virtual_machine_interface_refs'][vmirefIndex]["to"] = currentVMIDetail['virtual-machine-interface']["fq_name"]
+ primaryInterfaceObject['virtual-machine-interface']['virtual_machine_interface_refs'][vmirefIndex]["to"] = currentVMIDetail['virtual-machine-interface']["fq_name"];
return primaryInterfaceObject;
}
@@ -560,32 +547,30 @@ function portSendResponse (error, req, portConfig, orginalPortData, apiLogicalRo
}
}
}
-
- if("virtual_machine_interface_device_owner" in orginalPortData["virtual-machine-interface"] &&
- (orginalPortData["virtual-machine-interface"]["virtual_machine_interface_device_owner"]).substring(0,7) == "compute") {
- body = {};
- body.portID = portConfig["virtual-machine-interface"]["uuid"];
- //body.netID = portConfig["virtual-machine-interface"]["virtual_network_refs"][0]["uuid"];
- body.vmUUID = orginalPortData["virtual-machine-interface"]["virtual_machine_refs"][0]["uuid"];
- attachVMICompute(req, body, function (novaError, results){
- updateAvailableDataforCreate(DataObjectArr, instIpPostDataObjArr, portConfig, fixedIpPoolRefLen, appData, function(error, result){
- if(novaError != null){
- if(error != null){
- error.messages += "
" +novaError.messages;
- } else {
- error = novaError;
- }
- }
- callback(error, result);
+ updateAvailableDataforCreate(DataObjectArr, instIpPostDataObjArr, portConfig, fixedIpPoolRefLen, appData, function(error, result) {
+ if (error) {
+ callback(error, null);
+ return;
+ }
+ if ("virtual_machine_interface_device_owner" in orginalPortData["virtual-machine-interface"] &&
+ (orginalPortData["virtual-machine-interface"]["virtual_machine_interface_device_owner"]).substring(0,7) == "compute") {
+ body = {};
+ body.portID = portConfig["virtual-machine-interface"]["uuid"];
+ //body.netID = portConfig["virtual-machine-interface"]["virtual_network_refs"][0]["uuid"];
+ body.vmUUID = orginalPortData["virtual-machine-interface"]["virtual_machine_refs"][0]["uuid"];
+ attachVMICompute(req, body, function (novaError, results){
+ callback(novaError, results);
+ return;
});
- });
- } else {
- updateAvailableDataforCreate(DataObjectArr, instIpPostDataObjArr, portConfig, fixedIpPoolRefLen, appData, function(error, result){
+ } else {
callback(error, result);
- });
- }
+ return;
+ }
+ });
}
+
+
function updateAvailableDataforCreate(DataObjectArr, instIpPostDataObjArr, portConfig, fixedIpPoolRefLen, appData, callback)
{
async.map(instIpPostDataObjArr, createInstIP, function(err, result) {
@@ -596,7 +581,7 @@ function updateAvailableDataforCreate(DataObjectArr, instIpPostDataObjArr, portC
async.map(DataObjectArr,
commonUtils.getServerResponseByRestApi(configApiServer, true),
function(error, results) {
- callback(error, portConfig);
+ callback(error, portConfig);
});
});
@@ -704,7 +689,6 @@ function compareUpdateVMI (error, request, portPutData, vmiData, appData, callba
var deleteFloatingIpLen = 0;
var createVMISubInterfaceLen = 0;
var deleteVMISubInterfaceLen = 0;
-
if ("floating_ip_back_refs" in portPutData["virtual-machine-interface"] ||
"floating_ip_back_refs" in vmiData["virtual-machine-interface"]) {
filterUpdateFloatingIP(error, portPutData, vmiData, function(createFloatingIp,deleteFloatingip){
@@ -847,6 +831,8 @@ function compareUpdateVMI (error, request, portPutData, vmiData, appData, callba
portPutData["virtual-machine-interface"]["virtual_machine_refs"][0]["uuid"]) {
portPutData["virtual-machine-interface"]["virtual_machine_interface_device_owner"] =
vmiData["virtual-machine-interface"]["virtual_machine_interface_device_owner"];
+ delete(portPutData["virtual-machine-interface"]["virtual_machine_interface_device_owner"]);
+ delete(portPutData["virtual-machine-interface"]["virtual_machine_refs"]);
boolDeviceOwnerChange = false;
}
}
@@ -920,16 +906,20 @@ function processDataObjects (error, DataObjectArr, DataObjectDelArr, vmiData, po
commonUtils.getServerResponseByRestApi(configApiServer, true),
function(error, result) {
if(error){
- callback(error, results);
+ callback(error, result);
return;
}
linkUnlinkDetails(error, result, DataObjectLenDetail, portPutData, boolDeviceOwnerChange, vmiData, request, appData,
function(error, results, subIntfObjArr){
+ if (error) {
+ callback(error, results);
+ return;
+ }
async.map(subIntfObjArr,
commonUtils.getAPIServerResponse(configApiServer.apiPut, true),
function(err, results) {
- if(error){
- callback(error, results);
+ if(err){
+ callback(err, results);
return;
}
deleteAllReference(DataObjectDelArr,
@@ -1041,6 +1031,9 @@ function removeBackRef (portPutData)
if ("logical_router_back_refs" in portPutData["virtual-machine-interface"]) {
delete portPutData["virtual-machine-interface"]["logical_router_back_refs"];
}
+ if ("floating_ip_back_refs" in portPutData["virtual-machine-interface"]) {
+ delete portPutData["virtual-machine-interface"]["floating_ip_back_refs"];
+ }
if ('virtual_machine_interface_refs' in
portPutData['virtual-machine-interface']) {
delete
@@ -1109,9 +1102,7 @@ function linkUnlinkDetails (error, result, DataObjectLenDetail, portPutData, boo
vmiData['virtual-machine-interface']['uuid'];
var vmiPutData = { 'virtual-machine-interface' : {
'fq_name': vmiData['virtual-machine-interface']['fq_name'],
- 'uuid': vmiData['virtual-machine-interface']['uuid'],
- 'virtual_machine_refs':
- result[i]['virtual-machine-interface']['virtual_machine_refs']
+ 'uuid': vmiData['virtual-machine-interface']['uuid']
}
}
@@ -1165,32 +1156,55 @@ function linkUnlinkDetails (error, result, DataObjectLenDetail, portPutData, boo
}
}
}
-
- if(boolDeviceOwnerChange == true) {
- deviceOwnerChange(error, result, DataObjectArr, DataObjectLenDetail, portPutData, vmiData, request, appData, function(error, data, DataObjectArr){
- if(error){
- callback(error, data, subIntfObjArr);
- return;
+
+ if (DataObjectArr != null && DataObjectArr.length > 0) {
+ async.map(DataObjectArr,
+ commonUtils.getAPIServerResponse(configApiServer.apiPut, true),
+ function(error, results) {
+ if (error != null) {
+ error.messages += error.messages;
+ callback(error, results, subIntfObjArr);
}
- if(DataObjectArr != null && DataObjectArr.length > 0){
+ setDeviceOwner (error, result, DataObjectLenDetail,
+ portPutData, vmiData, boolDeviceOwnerChange, request,
+ appData, function(error, result) {
+ callback(error, result, subIntfObjArr);
+ return;
+ })
+ });
+ } else {
+ setDeviceOwner (error, result, DataObjectLenDetail,
+ portPutData, vmiData, boolDeviceOwnerChange, request,
+ appData, function(error, result) {
+ callback(error, result, subIntfObjArr);
+ return;
+ })
+ }
+}
+
+function setDeviceOwner(error, result, DataObjectLenDetail,
+ portPutData, vmiData, boolDeviceOwnerChange, request,
+ appData, callback) {
+ var DataObjectArr = [];
+ if (boolDeviceOwnerChange == true) {
+ deviceOwnerChange(error, result, DataObjectArr, DataObjectLenDetail,
+ portPutData, vmiData, request, appData, function(
+ error, data, DataObjectArr){
+ if (DataObjectArr != null && DataObjectArr.length > 0) {
async.map(DataObjectArr,
commonUtils.getAPIServerResponse(configApiServer.apiPut, true),
function(error, results) {
- callback(error, results, subIntfObjArr);
- return;
+ callback(error, results);
+ return;
});
} else {
- callback(error, result, subIntfObjArr);
+ callback(error, DataObjectArr);
return;
}
- });
- } else {
- async.map(DataObjectArr,
- commonUtils.getAPIServerResponse(configApiServer.apiPut, true),
- function(error, results) {
- callback(error, results, subIntfObjArr);
return;
});
+ } else {
+ callback(error, DataObjectArr);
}
}
@@ -1215,6 +1229,9 @@ function deviceOwnerChange(error, result, DataObjectArr, DataObjectLenDetail, po
vmiData["virtual-machine-interface"]["virtual_machine_interface_device_owner"] = "";
}
}
+ if (!("virtual_machine_interface_device_owner" in vmiData["virtual-machine-interface"])) {
+ vmiData["virtual-machine-interface"]["virtual_machine_interface_device_owner"] = "";
+ }
if ("virtual_machine_interface_device_owner" in portPutData["virtual-machine-interface"] &&
"virtual_machine_interface_device_owner" in vmiData["virtual-machine-interface"]) {
var serverIndex = DataObjectLenDetail["LogicalRouterServerStartIndex"];
@@ -1254,7 +1271,7 @@ function deviceOwnerChange(error, result, DataObjectArr, DataObjectLenDetail, po
} else if (portPutData["virtual-machine-interface"]["virtual_machine_interface_device_owner"] == "network:router_interface") {
//Add new router entrey
if(result[uiIndex] != null){
- if(DataObjectLenDetail["LogicalRouterUICount"] == 1)
+ if(DataObjectLenDetail["LogicalRouterUICount"] == 1) {
var logicalRouterURL = '/logical-router/'+result[uiIndex]['logical-router']['uuid'];
var responceData = {};
var responceData = createlogicalRouterDataObject(responceData,portPutData,result[uiIndex]);
@@ -1265,12 +1282,13 @@ function deviceOwnerChange(error, result, DataObjectArr, DataObjectLenDetail, po
var domainProject = [];
domainProject.push(portPutData["virtual-machine-interface"]["logical_router_back_refs"][0]["to"][0]);
domainProject.push(portPutData["virtual-machine-interface"]["logical_router_back_refs"][0]["to"][1]);
- callback(error, rtData, DataObjectArr);
+ callback(error, result, DataObjectArr);
return;
} else {
callback(error, result, DataObjectArr);
return;
}
+ }
} else {
//No attach/edit
callback(error, result, DataObjectArr);
@@ -1283,7 +1301,6 @@ function deviceOwnerChange(error, result, DataObjectArr, DataObjectLenDetail, po
return;
}
}
-
if (vmiData["virtual-machine-interface"]["virtual_machine_interface_device_owner"] == "network:router_interface") {
if (portPutData["virtual-machine-interface"]["virtual_machine_interface_device_owner"] != "network:router_interface"
|| ((portPutData["virtual-machine-interface"]["virtual_machine_interface_device_owner"] == "network:router_interface") &&
@@ -1378,7 +1395,6 @@ function deviceOwnerChange(error, result, DataObjectArr, DataObjectLenDetail, po
}
}
}
-
if (vmiData["virtual-machine-interface"]["virtual_machine_interface_device_owner"] == "") {
if (portPutData["virtual-machine-interface"]["virtual_machine_interface_device_owner"] == "network:router_interface") {
var logicalRouterURL = '/logical-router/'+result[uiIndex]['logical-router']['uuid'];
@@ -1754,6 +1770,43 @@ function deletePortsCB (dataObject, callback)
var appData = dataObject.appData;
var portId = dataObject.uuid;
var request = dataObject.request;
+ var userData = dataObject.userData;
+ if (userData != null) {
+ var dataObjArr = [];
+ var userDataLen = userData.length;
+ for (var i = 0; i < userDataLen; i++) {
+ dataObjArr.push({"portId" : userData[i],
+ "appData" : appData,
+ "request" :request})
+ }
+ async.mapLimit(dataObjArr, 100, deletePortPerUUID, function(error, data) {
+ if (error) {
+ callback(null, {'error': error, 'data': data});
+ return;
+ }
+ var dataObj = {"portId" : portId,
+ "appData" : appData,
+ "request" : request};
+ deletePortPerUUID (dataObj, function(error, data) {
+ callback(null, {'error': error, 'data': data});
+ return;
+ });
+ });
+ } else {
+ var dataObj = {"portId" : portId,
+ "appData" : appData,
+ "request" : request};
+ deletePortPerUUID (dataObj, function(error, data) {
+ callback(null, {'error': error, 'data': data});
+ return;
+ })
+ }
+}
+
+function deletePortPerUUID (dataObj, callback) {
+ var portId = dataObj.portId;
+ var appData = dataObj.appData;
+ var request = dataObj.request;
readVMIwithUUID(portId, appData, function(err, vmiData){
if(err){
callback(null, {'error': err, 'data': vmiData});
@@ -1886,7 +1939,7 @@ function deletePortAsync (dataObj, callback)
function(error, results) {
vmiDelFloatingIP(error, results, dataObj['vmiData'],
dataObj['appData'], function(err, data){
- callback(error, results);
+ callback(err, results);
//return;
});
});
@@ -1899,7 +1952,7 @@ function deletePortAsync (dataObj, callback)
function(error, results) {
removeRefSubInterface(error, results, dataObj['vmiData'],
dataObj['appData'], function(err, data){
- callback(error, results);
+ callback(err, results);
//return;
});
});
@@ -1912,7 +1965,7 @@ function deletePortAsync (dataObj, callback)
function(error, results) {
vmiDelLogicalInterface(error, results, dataObj['vmiData'],
dataObj['appData'], function(err, data){
- callback(error, results);
+ callback(err, results);
//return;
});
});
@@ -1925,7 +1978,7 @@ function deletePortAsync (dataObj, callback)
function(error, results) {
delSubnet(error, results, dataObj['vmiData'], dataObj['appData'],
function(err, data){
- callback(error, results);
+ callback(err, results);
//return;
});
});
@@ -1938,7 +1991,7 @@ function deletePortAsync (dataObj, callback)
function(error, results) {
delVm(error, results, dataObj['appData'],
function(err, data){
- callback(error, results);
+ callback(err, results);
//return;
});
});
@@ -1951,7 +2004,7 @@ function deletePortAsync (dataObj, callback)
function(error, results) {
vmiDelLogicalRout(error, results, dataObj['vmiData'],
dataObj['appData'], function(err, data){
- callback(error, results);
+ callback(err, results);
return;
});
});
@@ -2080,7 +2133,7 @@ function getReadDelVMICb (err, vmiData, request, appData, callback)
}
//Subnet Interface Reference
- if ( 'virtual_machine_interface_refs' in vmiData['virtual-machine-interface']) {
+ /* if ( 'virtual_machine_interface_refs' in vmiData['virtual-machine-interface']) {
vmiRef = vmiData['virtual-machine-interface']['virtual_machine_interface_refs'];
vmiRefLen = vmiRef.length;
}
@@ -2099,7 +2152,7 @@ function getReadDelVMICb (err, vmiData, request, appData, callback)
vmiSubInterfaceObj['vmiData'] = vmiData;
vmiSubInterfaceObj['appData'] = appData;
allDataObj.push(vmiSubInterfaceObj);
- }
+ }*/
//subnet
if ('virtual-machine-interface' in vmiData &&
@@ -2337,7 +2390,7 @@ function removeRefSubInterface(error, results, vmiData, appData, callback)
if('virtual_machine_interface_properties' in results[i]['virtual-machine-interface'] &&
"sub_interface_vlan_tag" in results[i]['virtual-machine-interface']['virtual_machine_interface_properties']) {
//delete only sub_interface_vlan_tag to make sure it wont affect if a port is created from the SI which has extra fields.
- delete results[i]['virtual-machine-interface']['virtual_machine_interface_properties']['sub_interface_vlan_tag'];
+ delete results[i]['virtual-machine-interface']['virtual_machine_interface_properties']['sub_interface_vlan_tag'];
}
j--;
vmiRefLen--;
@@ -2667,32 +2720,85 @@ function getVMIDetails (req, res, appData)
getVMIDetailsCB(vmiURL, appData, res);
}
-function deleteAllPorts (req, res, appData)
-{
- var projUUID = req.param('uuid');
- var reqUrl = '/virtual-machine-interfaces?parent_id=' + projUUID;
- var dataObjArr = [];
-
- configApiServer.apiGet(reqUrl, appData, function(err, vmiData) {
- if ((null != err) || (null == vmiData) ||
- (!vmiData['virtual-machine-interfaces'].length)) {
- commonUtils.handleJSONResponse(err, res, null);
- return;
- }
- var vmiCnt = vmiData['virtual-machine-interfaces'].length;
- dataObjArr[0] = {};
- dataObjArr[0]['deleteIDs'] = [];
- dataObjArr[0]['type'] = 'virtual-machine-interface';
- for (var i = 0; i < vmiCnt; i++) {
- dataObjArr[0]['deleteIDs'].push(vmiData['virtual-machine-interfaces'][i]['uuid']);
- }
- configUtil.deleteMultiObjectCB(dataObjArr, req, appData,
- function(err, data) {
- commonUtils.handleJSONResponse(err, res, data);
- });
- });
+function deleteAllPorts (req, res, appData)
+{
+ var projUUID = req.param('uuid');
+ var reqUrl = '/virtual-machine-interfaces?parent_id=' + projUUID + "&detail=true";
+ var dataObjArr = [];
+
+ configApiServer.apiGet(reqUrl, appData, function(err, vmiData) {
+ if ((null != err) || (null == vmiData) ||
+ (!vmiData['virtual-machine-interfaces'].length)) {
+ commonUtils.handleJSONResponse(err, res, null);
+ return;
+ }
+ var vmiCnt = vmiData['virtual-machine-interfaces'].length;
+ /*dataObjArr[0] = {};
+ dataObjArr[0]['deleteIDs'] = [];
+ dataObjArr[0]['type'] = 'virtual-machine-interface';*/
+ var primaryVMIs = {};
+ for (var i = 0; i < vmiCnt; i++) {
+ var vmi = vmiData['virtual-machine-interfaces'][i]["virtual-machine-interface"];
+ if(vmi.hasOwnProperty('virtual_machine_interface_refs') &&
+ vmi['virtual_machine_interface_refs'].length > 0) {
+ //either sub interface or primary interface
+ if(vmi.hasOwnProperty('virtual_machine_interface_properties') &&
+ vmi['virtual_machine_interface_properties'].hasOwnProperty('sub_interface_vlan_tag') &&
+ !isNaN(vmi['virtual_machine_interface_properties']['sub_interface_vlan_tag']) &&
+ vmi['virtual_machine_interface_refs'].length == 1) {
+ //sub interface
+ var primaryVMIRef = vmi['virtual_machine_interface_refs'][0].uuid;
+ if(null == primaryVMIs[primaryVMIRef] ||
+ typeof primaryVMIs[primaryVMIRef] == "undefined") {
+ primaryVMIs[primaryVMIRef] = [];
+ }
+ primaryVMIs[primaryVMIRef].push(vmi.uuid);
+ } else {
+ //primary interface
+ if(null == primaryVMIs[vmi.uuid] ||
+ typeof primaryVMIs[vmi.uuid] == "undefined") {
+ primaryVMIs[vmi.uuid] = [];
+ continue;
+ }
+ }
+ } else {
+ //independent VMIs
+ if(null == dataObjArr[0] ||
+ typeof dataObjArr[0] === "undefined") {
+ dataObjArr[0] = {};
+ dataObjArr[0]['deleteIDs'] = [];
+ dataObjArr[0]['type'] = 'virtual-machine-interface';
+ dataObjArr[0]['userData'] = null;
+ }
+ dataObjArr[0]['deleteIDs'].push(vmi.uuid);
+ }
+ //dataObjArr[0]['deleteIDs'].push(vmiData['virtual-machine-interfaces'][i]['uuid']);
+ }
+
+ for (var pVMI_UUID in primaryVMIs) {
+ if(!(primaryVMIs.hasOwnProperty(pVMI_UUID)))
+ continue;
+ var dataObjArrLen = dataObjArr.length;
+ dataObjArr[dataObjArrLen] = {};
+ dataObjArr[dataObjArrLen]['deleteIDs'] = [];
+ dataObjArr[dataObjArrLen]['deleteIDs'].push(pVMI_UUID);
+ dataObjArr[dataObjArrLen]["type"] = "virtual-machine-interface";
+ var subVMIs = primaryVMIs[pVMI_UUID];
+ for(var sVMI_UUID in subVMIs) {
+ if(!(subVMIs.hasOwnProperty(sVMI_UUID)))
+ continue;
+ if(!(dataObjArr[dataObjArrLen].hasOwnProperty('userData'))) {
+ dataObjArr[dataObjArrLen]['userData'] = [];
+ }
+ dataObjArr[dataObjArrLen]['userData'].push(subVMIs[sVMI_UUID]);
+ }
+ }
+ configUtil.deleteMultiObjectCB(dataObjArr, req, appData,
+ function(err, data) {
+ commonUtils.handleJSONResponse(err, res, data);
+ });
+ });
}
-
function buildVMIData (vmiData, dataObj)
{
var fip = dataObj['fip'];
diff --git a/webroot/config/networking/port/ui/js/models/allowAddressPairModel.js b/webroot/config/networking/port/ui/js/models/allowAddressPairModel.js
index d0ec4c1d6..ac9db691b 100644
--- a/webroot/config/networking/port/ui/js/models/allowAddressPairModel.js
+++ b/webroot/config/networking/port/ui/js/models/allowAddressPairModel.js
@@ -48,7 +48,7 @@ define([
}
},
'mac': function(value, attr, finalObj) {
- if(value != "" &&
+ if(value != "" && typeof value == "string" &&
isValidMACAddress(value) == false){
return "Enter valid MAC Address in Allowed address pairs";
}
diff --git a/webroot/config/networking/port/ui/js/models/portModel.js b/webroot/config/networking/port/ui/js/models/portModel.js
index 16bf84a99..03463f730 100644
--- a/webroot/config/networking/port/ui/js/models/portModel.js
+++ b/webroot/config/networking/port/ui/js/models/portModel.js
@@ -44,6 +44,7 @@ define([
'logicalRouterValue':'',
'virtual_machine_refs':[],
'virtualMachineValue':'',
+ 'service_health_check_refs':'',
'virtual_machine_interface_mac_addresses':
{
'mac_address':[]
@@ -90,6 +91,7 @@ define([
'templateGeneratorData': 'rawData',
'disable_sub_interface' : false,
'subnetGroupVisible': true,
+ 'isParent' : false,
'ecmp_hashing_include_fields': {/*
'hashing_configured': false,
'source_ip': true,
@@ -168,7 +170,6 @@ define([
}
}
}
-
//Modal config default Fixed IP formatting
var fixedIPModels = [];
var fixedipList = modelConfig["instance_ip_back_refs"];
@@ -256,6 +257,17 @@ define([
modelConfig['staticRoute'].push(SRVal);
}
}
+ //Modal config default Health Check formatting
+ healthCheck = getValueByJsonPath(modelConfig, 'service_health_check_refs', []);
+ if (healthCheck.length > 0) {
+ var healthCheckTo = getValueByJsonPath(healthCheck[0], 'to', '');
+ var healthCheckuuid = getValueByJsonPath(healthCheck[0],
+ 'uuid', '');
+ if (healthCheckTo != "" && healthCheckuuid != "") {
+ healthCheckVal = healthCheckTo.join(":") + " " + healthCheckuuid;
+ modelConfig['service_health_check_refs'] = healthCheckVal;
+ }
+ }
//Modal config default ECMP formatting
var ecmpHashIncFields = [];
@@ -322,6 +334,10 @@ define([
//Modal config default Port Binding formatting
var portBinding = [];
+ var devOwner = getValueByJsonPath(modelConfig, 'virtual_machine_interface_device_owner');
+ if ("compute" == devOwner.substring(0,7)) {
+ devOwner = "compute";
+ }
var portBindingList =
modelConfig["virtual_machine_interface_bindings"]["key_value_pair"];
if(portBindingList != null && portBindingList.length > 0) {
@@ -332,10 +348,11 @@ define([
port_binding_obj.value == "direct" ) {
port_binding_obj.key = "SR-IOV (vnic_type:direct)";
}
- if(port_binding_obj.key == "SR-IOV (vnic_type:direct)" ||
+ if(devOwner == "compute" &&
+ (port_binding_obj.key == "SR-IOV (vnic_type:direct)" ||
port_binding_obj.key == "vnic_type" ||
port_binding_obj.key == "vif_type" ||
- port_binding_obj.key == "vif_details") {
+ port_binding_obj.key == "vif_details")) {
port_binding_obj.disablePortBindKey = true;
}
var portBindingModel = new PortBindingModel(port_binding_obj);
@@ -412,6 +429,13 @@ define([
modelConfig["disable_sub_interface"] = true;
}
}
+ if(vlanTag == ""){
+ var vmiRefTo = getValueByJsonPath(modelConfig,
+ "virtual_machine_interface_refs",[]);
+ if (vmiRefTo.length > 0) {
+ modelConfig['isParent'] = true;
+ }
+ }
modelConfig['deviceOwnerValue'] = deviceOwnerValue;
return modelConfig;
},
@@ -483,6 +507,16 @@ define([
return "Device Owner UUID cannot be empty.";
}
},
+ 'deviceOwnerValue': function(value, attr, finalObj) {
+ if (value == "router") {
+ if (finalObj.isParent == true) {
+ return "Router cannot be set to a parent port.";
+ }
+ if (finalObj.is_sub_interface == true) {
+ return "Router cannot be set to a Sub Interface.";
+ }
+ }
+ },
'portBindingCollection': function(value, attr, finalObj) {
if(value.length > 0) {
var portBindingLength = value.length;
@@ -822,7 +856,10 @@ define([
aapLocal[i] = {};
var prefix = 32;
var ip = aapCollection[i].ipPrefixVal();
- aapLocal[i]["mac"] = aapCollection[i].mac();
+ //aapLocal[i]["mac"] = null;
+ if (aapCollection[i].mac() != "") {
+ aapLocal[i]["mac"] = aapCollection[i].mac();
+ }
if(ip != ""){
aapLocal[i]["ip"] = {};
if(ip.split("/").length == 2) {
@@ -946,6 +983,18 @@ define([
} else {
newPortData.interface_route_table_refs = [];
}
+ // Health Check
+ var healthCheck = getValueByJsonPath(newPortData,
+ "service_health_check_refs","");
+ if(healthCheck != "") {
+ var healthCheckArr = healthCheck.split(" ");
+ newPortData.service_health_check_refs = [];
+ newPortData.service_health_check_refs[0] = {};
+ newPortData.service_health_check_refs[0].to = healthCheckArr[0].split(":");
+ newPortData.service_health_check_refs[0].uuid = healthCheckArr[1];
+ } else {
+ newPortData.service_health_checks_refs = [];
+ }
/* ECMP Hashing */
var ecmpHashIncFields = this.getNonDefaultECMPHashingFields();
var count = 0;
@@ -1096,10 +1145,10 @@ define([
newPortData.virtual_machine_interface_refs[0].uuid = uuid;
newPortData.virtual_machine_interface_refs[0].to = to;
} else {
- newPortData.virtual_machine_interface_refs = [];
- //if(selectedParentVMIObject.length > 0) {
- // newPortData["virtual_machine_interface_refs"] = selectedParentVMIObject;
- //}
+ newPortData.virtual_machine_interface_properties.sub_interface_vlan_tag = null;
+ if (newPortData.isParent != true) {
+ newPortData.virtual_machine_interface_refs = [];
+ }
}
newPortData.virtual_machine_interface_properties.interface_mirror = {}
if (newPortData.is_mirror == true) {
@@ -1188,6 +1237,7 @@ define([
delete(newPortData.mirrorToAnalyzerIpAddress);
delete(newPortData.mirrorToRoutingInstance);
delete(newPortData.mirrorToUdpPort);
+ delete(newPortData.isParent);
if("parent_href" in newPortData) {
delete(newPortData.parent_href);
}
@@ -1250,30 +1300,74 @@ define([
deletePort: function(selectedGridData, callbackObj) {
var ajaxConfig = {}, returnFlag = false;
var delDataID = [];
- for(var i=0;i 0) {
+ var sentData = delDataID;
+ ajaxConfig.async = false;
+ ajaxConfig.type = "POST";
+ ajaxConfig.data = JSON.stringify(sentData);
+ ajaxConfig.url = "/api/tenants/config/delete";
+ contrail.ajaxHandler(ajaxConfig, function () {
+ if (contrail.checkIfFunction(callbackObj.init)) {
+ callbackObj.init();
+ }
+ }, function (response) {
+ if (contrail.checkIfFunction(callbackObj.success)) {
+ callbackObj.success();
+ }
+ returnFlag = true;
+ }, function (error) {
+ if (contrail.checkIfFunction(callbackObj.error)) {
+ callbackObj.error(error);
+ }
+ returnFlag = false;
+ });
+ }
return returnFlag;
},
deleteAllPort: function(callbackObj) {
diff --git a/webroot/config/networking/port/ui/js/views/portEditView.js b/webroot/config/networking/port/ui/js/views/portEditView.js
index 6708378e8..86300a8ec 100644
--- a/webroot/config/networking/port/ui/js/views/portEditView.js
+++ b/webroot/config/networking/port/ui/js/views/portEditView.js
@@ -128,12 +128,20 @@ define([
var selectedGridData = options['selectedGridData'],
elId = 'deletePortID';
var items = "";
+ var errorString = "";
var rowIdxLen = selectedGridData.length;
for (var i = 0; i < rowIdxLen; i++) {
- items +=
- selectedGridData[i]["name"];
- if (i < rowIdxLen - 1) {
- items += ',';
+ var isParentPortBool = portFormatter.isParentPort(selectedGridData[i]);
+ if (isParentPortBool != true) {
+ if (items != "") {
+ items += ', ';
+ }
+ items += selectedGridData[i]["name"];
+ } else {
+ if (errorString != "") {
+ errorString += ", ";
+ }
+ errorString += selectedGridData[i]["name"];
}
}
var delTemplate =
@@ -142,12 +150,19 @@ define([
var delLayout = delTemplate({prefixId: prefixId,
item: ctwl.TEXT_PORT,
itemId: items})
+ var errorMessage = false;
+ if (errorString != "") {
+ errorMessage = "Deleting Primary Interface(s) "+errorString+" deletes all its sub interfaces. Do you want to continue?";
+ }
cowu.createModal({'modalId': modalId, 'className': 'modal-700',
'title': options['title'], 'btnName': 'Confirm',
'body': delLayout, 'onSave': function () {
+ self.model.showErrorAttr(prefixId + cowc.FORM_SUFFIX_ID,
+ errorMessage);
self.model.deletePort(selectedGridData, {
init: function () {
- self.model.showErrorAttr(elId, false);
+ self.model.showErrorAttr(prefixId + cowc.FORM_SUFFIX_ID,
+ false);
cowu.enableModalLoading(modalId);
},
success: function () {
@@ -156,7 +171,8 @@ define([
},
error: function (error) {
cowu.disableModalLoading(modalId, function () {
- self.model.showErrorAttr(elId, error.responseText);
+ self.model.showErrorAttr(prefixId + cowc.FORM_SUFFIX_ID,
+ error.responseText);
});
}
});
@@ -165,7 +181,7 @@ define([
kbValidation.unbind(self);
$("#" + modalId).modal('hide');
}});
- this.model.showErrorAttr(elId, false);
+ this.model.showErrorAttr(prefixId + cowc.FORM_SUFFIX_ID, errorMessage);
Knockback.applyBindings(this.model,
document.getElementById(modalId));
kbValidation.bind(this);
@@ -183,7 +199,7 @@ define([
'body': delLayout, 'onSave': function () {
self.model.deleteAllPort({
init: function () {
- self.model.showErrorAttr(elId, false);
+ self.model.showErrorAttr(prefixId + cowc.FORM_SUFFIX_ID, false);
cowu.enableModalLoading(modalId);
},
success: function () {
@@ -192,7 +208,8 @@ define([
},
error: function (error) {
cowu.disableModalLoading(modalId, function () {
- self.model.showErrorAttr(elId, error.responseText);
+ self.model.showErrorAttr(prefixId + cowc.FORM_SUFFIX_ID,
+ error.responseText);
});
}
});
@@ -201,7 +218,7 @@ define([
kbValidation.unbind(self);
$("#" + modalId).modal('hide');
}});
- this.model.showErrorAttr(elId, false);
+ this.model.showErrorAttr(prefixId + cowc.FORM_SUFFIX_ID, false);
Knockback.applyBindings(this.model,
document.getElementById(modalId));
kbValidation.bind(this);
@@ -248,6 +265,9 @@ define([
var routingInstance = {};
routingInstance.data = [];
routingInstance.data[0] = {'type':'routing-instances', 'fields':''};
+ var healthCheck = {};
+ healthCheck.data = [];
+ healthCheck.data[0] = {'type':'service-health-checks', 'fields':''};
return {
elementId: cowu.formatElementId([prefixId, ctwl.TITLE_EDIT_PORT]),
view: "SectionView",
@@ -262,6 +282,7 @@ define([
disabled: isDisable,
path: 'virtualNetworkName',
dataBindValue: 'virtualNetworkName',
+ dropdownAutoWidth : false,
class: "span6",
elementConfig:{
allowClear: true,
@@ -485,6 +506,36 @@ define([
}
}
}]
+ },{
+ columns: [{
+ elementId: 'ServiceHealthCheck',
+ view: 'FormDropdownView',
+ name: 'Static Routes',
+ viewConfig: {
+ label:'Service Health Check',
+ path: 'service_health_check_refs',
+ dataBindValue: 'service_health_check_refs',
+ elementConfig:{
+ allowClear: true,
+ placeholder: 'Service Health Check',
+ dataTextField: "text",
+ dataValueField: "value",
+ dropdownAutoWidth : false,
+ dataSource : {
+ type: 'remote',
+ requestType: 'post',
+ postData: JSON.stringify(healthCheck),
+ url:'/api/tenants/config/get-config-list',
+ parse: function(result) {
+ return portFormatter.healthCheckDDFormatter(
+ result,
+ isDisable,
+ self);
+ }
+ }
+ }
+ }
+ }]
}, {
columns: [{
elementId: 'allowedAddressPairCollection',
@@ -579,9 +630,81 @@ define([
}
}
]
- },
- this.deviceOwner(isDisable, selectedProjectVal)
- , {
+ },{
+ columns: [{
+ elementId: 'deviceOwnerValue',
+ name: "Device Owner",
+ view: "FormDropdownView",
+ viewConfig: {
+ visible : "!isVCenter()",
+ path: 'deviceOwnerValue',
+ dataBindValue: 'deviceOwnerValue',
+ class: "span6",
+ label: "Device Owner",
+ elementConfig:{
+ allowClear: true,
+ dataTextField: "text",
+ dataValueField: "value",
+ data : [
+ {"text":"None","value":"none"},
+ {"text":"Compute","value":"compute"},
+ {"text":"Router","value":"router"}
+ ]
+ }
+ }
+ },{
+ elementId: 'virtualMachineValue',
+ view: "FormComboboxView",
+ viewConfig: {
+ path: 'virtualMachineValue',
+ label: "Compute UUID",
+ dataBindValue: 'virtualMachineValue',
+ class: "span6",
+ visible: "deviceComputeShow()",
+ elementConfig:{
+ dataTextField: "text",
+ dataValueField: "value",
+ defaultValueId : 0,
+ dataSource : {
+ type: 'remote',
+ url:'/api/tenants/config/listVirtualMachines',
+ parse: function(result) {
+ return portFormatter.computeUUIDFormatter(
+ result,
+ isDisable,
+ self);
+ }
+ }
+ }
+ }
+ },{
+ elementId: 'logicalRouterValue',
+ view: "FormDropdownView",
+ viewConfig: {
+ path: 'logicalRouterValue',
+ label: "Router",
+ dataBindValue: 'logicalRouterValue',
+ class: "span6",
+ visible: "deviceRouterShow()",
+ elementConfig:{
+ dataTextField: "text",
+ dataValueField: "value",
+ //defaultValueId : 0,
+ dropdownAutoWidth : false,
+ dataSource : {
+ type: 'remote',
+ url:"/api/tenants/config/list-logical-routers?projUUID="
+ +selectedProjectVal,
+ parse: function(result) {
+ return portFormatter.routerFormater(
+ result,
+ isDisable,
+ self);
+ }
+ }
+ }}
+ }]
+ } , {
columns: [{
elementId: 'portBindingCollection',
view: 'FormEditableGridView',
@@ -651,12 +774,14 @@ define([
}]
}
}]
- },{
+ }, {
columns: [{
elementId: 'is_sub_interface',
name: "Sub Interface",
view: "FormCheckboxView",
viewConfig: {
+ visible : "!isParent()",
+ disabled: "disable_sub_interface",
path: 'is_sub_interface',
label: "Sub Interface",
templateId: cowc.TMPL_CHECKBOX_LABEL_RIGHT_VIEW,
@@ -695,6 +820,7 @@ define([
dataTextField: "text",
dataValueField: "value",
//defaultValueId : 0,
+ dropdownAutoWidth : false,
dataSource : {
type: 'remote',
url:"/api/tenants/config/get-virtual-machines-ips?uuid="
@@ -726,6 +852,7 @@ define([
elementConfig:{
dataTextField: "text",
dataValueField: "value",
+ dropdownAutoWidth : false,
//defaultValueId : 0,
dataSource : {
type: 'remote',
@@ -829,6 +956,7 @@ define([
placeholder: 'Select Routing Instance',
dataTextField: "text",
dataValueField: "value",
+ dropdownAutoWidth : false,
dataSource : {
type: 'remote',
requestType: 'post',
@@ -989,91 +1117,11 @@ define([
}
}]
}]
- }
- }]
- }]
- }]
- }
- }
- },
- deviceOwner : function(isDisable, selectedProjectVal) {
- if(!isVCenter()) {
- return({
- columns: [{
- elementId: 'deviceOwnerValue',
- name: "Device Owner",
- view: "FormDropdownView",
- viewConfig: {
- visible: true,
- path: 'deviceOwnerValue',
- dataBindValue: 'deviceOwnerValue',
- class: "span6",
- label: "Device Owner",
- elementConfig:{
- allowClear: true,
- dataTextField: "text",
- dataValueField: "value",
- data : [
- {"text":"None","value":"none"},
- {"text":"Compute","value":"compute"},
- {"text":"Router","value":"router"}
- ]
- }
- }
- },{
- elementId: 'virtualMachineValue',
- view: "FormComboboxView",
- viewConfig: {
- path: 'virtualMachineValue',
- label: "Compute UUID",
- dataBindValue: 'virtualMachineValue',
- class: "span6",
- visible: "deviceComputeShow()",
- elementConfig:{
- dataTextField: "text",
- dataValueField: "value",
- defaultValueId : 0,
- dataSource : {
- type: 'remote',
- url:'/api/tenants/config/listVirtualMachines',
- parse: function(result) {
- return portFormatter.computeUUIDFormatter(
- result,
- isDisable,
- self);
- }
- }
}
- }
- },{
- elementId: 'logicalRouterValue',
- view: "FormDropdownView",
- viewConfig: {
- path: 'logicalRouterValue',
- label: "Router",
- dataBindValue: 'logicalRouterValue',
- class: "span6",
- visible: "deviceRouterShow()",
- elementConfig:{
- dataTextField: "text",
- dataValueField: "value",
- //defaultValueId : 0,
- dataSource : {
- type: 'remote',
- url:"/api/tenants/config/list-logical-routers?projUUID="
- +selectedProjectVal,
- parse: function(result) {
- return portFormatter.routerFormater(
- result,
- isDisable,
- self);
- }
- }
- }}
}]
- });
- } else {
- return ({columns: []});
+ }]
+ }]
+ }
}
}
});
diff --git a/webroot/config/networking/port/ui/js/views/portFormatters.js b/webroot/config/networking/port/ui/js/views/portFormatters.js
index ccaafa10c..1fb468433 100644
--- a/webroot/config/networking/port/ui/js/views/portFormatters.js
+++ b/webroot/config/networking/port/ui/js/views/portFormatters.js
@@ -23,6 +23,17 @@ define([
}
return vmiData;
}
+ this.uuidWithName = function(d, c, v, cd, dc) {
+ var uuidName = "-";
+ var uuid = getValueByJsonPath(dc, "uuid", "")
+ var name = getValueByJsonPath(dc, "fq_name;2", "")
+ if(uuid != name){
+ uuidName = name + " (" + uuid+ ")";
+ } else {
+ uuidName = uuid;
+ }
+ return uuidName;
+ };
//Start of grid data formating//
//Grid column label: Network//
//Grid column expand label : Network//
@@ -40,15 +51,15 @@ define([
var instIP = getValueByJsonPath(dc, "instance_ip_back_refs", []);
if(instIP.length > 0) {
var instIP_length = instIP.length;
- for(var i = 0; i < instIP_length && i < 3 ;i++) {
+ for(var i = 0; i < instIP_length && i < 2 ;i++) {
var ip = getValueByJsonPath(instIP[i], "fixedip;ip", "");
instanceIP += ip;
if(instanceIP != "") {
instanceIP += "
";
}
}
- if(instIP_length > 3) {
- instanceIP += "(" + Number(Number(instIP_length)-3)+" more)";
+ if(instIP_length > 2) {
+ instanceIP += "(" + Number(Number(instIP_length)-2)+" more)";
}
} else {
instanceIP = "-";
@@ -61,14 +72,14 @@ define([
var fipData = getValueByJsonPath(dc, "floating_ip_back_refs", []);
if(fipData.length > 0) {
var fip_length = fipData.length;
- for(var i = 0; i < fip_length && i < 3 ;i++) {
+ for(var i = 0; i < fip_length && i < 2 ;i++) {
floatingIP += fipData[i]["floatingip"]["ip"];
if(floatingIP != "") {
floatingIP += "
";
}
}
- if(fip_length > 3) {
- floatingIP += "(" + Number(Number(fip_length)-3)+" more)";
+ if(fip_length > 2) {
+ floatingIP += "(" + Number(Number(fip_length)-2)+" more)";
}
} else {
floatingIP = "-";
@@ -247,6 +258,26 @@ define([
}
return staticRout;
};
+
+ //Grid column expand label: Service Health Check//
+ this.serviceHealthCheckFormatter = function(d, c, v, cd, dc) {
+ var serviceHealthCheck = "";
+ var serviceHealthCheckValues = getValueByJsonPath(dc,
+ "service_health_check_refs",
+ []);
+ if(serviceHealthCheckValues.length > 0) {
+ var serviceHealthChecklength = serviceHealthCheckValues.length;
+ for(var i = 0; i < serviceHealthChecklength;i++) {
+ var serviceHealthCheckTo =
+ getValueByJsonPath(serviceHealthCheckValues[i], "to", []);
+ temp = ctwu.formatCurrentFQName(serviceHealthCheckTo);
+ serviceHealthCheck += temp;
+ }
+ } else {
+ serviceHealthCheck = "-";
+ }
+ return serviceHealthCheck;
+ };
//Grid column expand label: Static Routes//
this.ECMPHashingFormatter = function(d, c, v, cd, dc) {
var ecmp = getValueByJsonPath(dc, "ecmp_hashing_include_fields", ""),
@@ -673,6 +704,26 @@ define([
}
return lrReturn;
}
+ /*
+ Create / Edit Health check drop down data formatter
+ */
+ this.healthCheckDDFormatter = function(response, edit, portModel) {
+ var healthCheckDataReturn = [];
+ var healthCheckData = response[0]["service-health-checks"];
+ var healthCheckLen = healthCheckData.length;
+ var healthCheckVal = {};
+ for(var i = 0; i < healthCheckLen; i++) {
+ var healthCheckFQName = getValueByJsonPath(healthCheckData[i], 'fq_name', []);
+ var healthCheckUUID = getValueByJsonPath(healthCheckData[i], 'uuid', '');
+ if(healthCheckFQName.length > 0) {
+ healthCheckVal = healthCheckFQName.join(":") + " " + healthCheckUUID;
+ var text = ctwu.formatCurrentFQName(healthCheckFQName);
+ healthCheckDataReturn.push({value: healthCheckVal, text: text});
+ }
+ }
+ return healthCheckDataReturn;
+ }
+
/*
Create / Edit Sub Interface drop down data formatter
*/
@@ -828,6 +879,29 @@ define([
}
return fqn;
};
+ this.isParentPort = function(selectedGridData) {
+ var vlanTag = getValueByJsonPath(selectedGridData,
+ "virtual_machine_interface_properties;sub_interface_vlan_tag","");
+ var vmiRefTo = getValueByJsonPath(selectedGridData,
+ "virtual_machine_interface_refs",[]);
+ if (vmiRefTo.length > 0 && vlanTag == "") {
+ return true;
+ }
+ return false;
+ };
+ this.getVMIRelation = function(selectedGridData) {
+ var vlanTag = getValueByJsonPath(selectedGridData,
+ "virtual_machine_interface_properties;sub_interface_vlan_tag","");
+ var vmiRefTo = getValueByJsonPath(selectedGridData,
+ "virtual_machine_interface_refs",[]);
+ if (vmiRefTo.length > 0 && vlanTag == "") {
+ return "primaryInterface";
+ }
+ if (vmiRefTo.length > 0 && vlanTag != "") {
+ return "subInterface";
+ }
+ return "vmi";
+ };
}
return PortFormatters;
});
diff --git a/webroot/config/networking/port/ui/js/views/portGridView.js b/webroot/config/networking/port/ui/js/views/portGridView.js
index 06cf00133..18f05c7da 100644
--- a/webroot/config/networking/port/ui/js/views/portGridView.js
+++ b/webroot/config/networking/port/ui/js/views/portGridView.js
@@ -426,8 +426,8 @@ define([
formatter: "DHCPFormatter"
}
},
- self.deviceOwner(),
- self.deviceOwnerUUID()
+ this.deviceOwner(),
+ this.deviceOwnerUUID()
,{
key: 'interface_route_table_refs',
name:"interface_route_table_refs",
@@ -436,6 +436,14 @@ define([
templateGeneratorConfig:{
formatter: "staticRoutFormatter"
}
+ }, {
+ key: 'service_health_check_refs',
+ name:"service_health_check_refs",
+ label:"Service Health Check",
+ templateGenerator: 'TextGenerator',
+ templateGeneratorConfig:{
+ formatter: "serviceHealthCheckFormatter"
+ }
}, {
key: 'virtual_machine_interface_properties',
name:"virtual_machine_interface_properties",
@@ -501,8 +509,8 @@ define([
formatter: "subInterfaceVXLANUUID"
}
}, {
- key: 'virtual_machine_interface_refs',
- name:"virtual_machine_interface_refs",
+ key: 'virtual_machine_interface_properties.sub_interface_vlan_tag',
+ name:"virtual_machine_interface_refs.sub_interface_vlan_tag",
label:"Parent Port",
templateGenerator: 'TextGenerator',
templateGeneratorConfig:{
@@ -611,6 +619,9 @@ define([
this.mirrorFormatter = function(v, dc) {
return portFormatters.mirrorFormatter("", "", v, "", dc);
};
+ this.serviceHealthCheckFormatter = function(v, dc) {
+ return portFormatters.serviceHealthCheckFormatter("", "", v, "", dc);
+ };
this.localPrefFormater = function(v, dc) {
return portFormatters.localPrefFormater("", "", v, "", dc);
};