Skip to content

Commit

Permalink
Closes-Bug: #1462334
Browse files Browse the repository at this point in the history
(Code from Bala M and Siva as well)
Fixes the below issues:
FIP Page:
---------
   1. Change UI/backend server timeout for floating-ip-pools GET to 5 minutes
   2. Cherry-pick the missing CLs from master for fip page

Port Page:
----------
  1. Change VN only for the current project for all-virtual-networks-fields GET

VN Page:
--------------
  1. Increase the timeout of shared-vn-details GET.
  2. Route target list was not getting removed if all route-target-list are cleared from UI.
  3. Increase the second VN pagination count 600 in stead of 200.
  4. Add physical_router_back_refs in VN page GET request as field.

Logical Interface:
------------------
  1. If VN count is > 8k, then retrieve only the VN list, else get the details of VN.
  2. List the Servers whose device owners are set as NULL or empty and it should not be sub-interface.

Change-Id: Ie4967cbd88c3c48a39653ba3d17a607d5129d37a
  • Loading branch information
biswajit-mandal committed Jun 5, 2015
1 parent 9137f3a commit 83ab310
Show file tree
Hide file tree
Showing 7 changed files with 153 additions and 93 deletions.
76 changes: 34 additions & 42 deletions webroot/config/fip/api/fipconfig.api.js
Expand Up @@ -151,9 +151,10 @@ function getFipsForProjectCb (results, response, appData)
try {
var vmiUUID =
instIpsData[i]['instance-ip']['virtual_machine_interface_refs'][0]['uuid'];
if (null != vmiUUID) {
instIPObjs[vmiUUID] = instIpsData[i]['instance-ip'];
if (null == instIPObjs[vmiUUID]) {
instIPObjs[vmiUUID] = [];
}
instIPObjs[vmiUUID].push(instIpsData[i]['instance-ip']);
} catch(e) {
}
}
Expand All @@ -171,16 +172,22 @@ function getFipsForProjectCb (results, response, appData)
vmiRefsCnt = 0;
}
for (var j = 0; j < vmiRefsCnt; j++) {
if (null == instIPObjs[vmiRefs[j]['uuid']]) {
var instIpList = instIPObjs[vmiRefs[j]['uuid']];
if (null == instIpList) {
continue;
}
var fixedIpLen = instIpList.length;
var fixedIpArray = [];
for (var k = 0; k < fixedIpLen; k++) {
fixedIpArray.push({'fixedip': {'ip':
instIpList[k]['instance_ip_address']}});
}
fipAggList['floating_ip_back_refs'][i]['floating-ip']
['virtual_machine_interface_refs'][j]
['instance_ip_back_refs'] = [];
fipAggList['floating_ip_back_refs'][i]['floating-ip']
['virtual_machine_interface_refs'][j]
['instance_ip_back_refs'].push({'fixedip': {'ip':
instIPObjs[vmiRefs[j]['uuid']]['instance_ip_address']}});
['instance_ip_back_refs'] = fixedIpArray;
}
}
commonUtils.handleJSONResponse(null, response, fipAggList);
Expand Down Expand Up @@ -370,6 +377,8 @@ function getFloatingIpPoolsByProject (request, appData, callback)
* TODO - Add Language independent error code and return
*/
}
projectURL += '?fields=floating_ip_pool_refs';

configApiServer.apiGet(projectURL, appData,
function(error, data) {
getFipPoolsForProjectCb(error, data, appData, callback);
Expand All @@ -388,51 +397,34 @@ function getFloatingIpPoolsByVNLists (request, appData, callback)
var fipPool = {};
var dataObjArr = [];
fipPool['floating_ip_pool_refs'] = [];
configApiServer.apiGet(vnListURL, appData, function(err, vnList) {
var vnURL =
'/virtual-networks?detail=true&fields=router_external,' +
'floating_ip_pools,network_ipam_refs';
configApiServer.apiGet(vnURL, appData, function(err, vnList) {
if ((null != err) || (null == vnList) ||
(null == vnList['virtual-networks'])) {
callback(err, fipPool);
return;
}
var vns = vnList['virtual-networks'];
var vnCnt = vns.length;
for (var i = 0; i < vnCnt; i++) {
var vnURL = '/virtual-network/' + vns[i]['uuid'] +
'?exclude_back_refs=true';
commonUtils.createReqObj(dataObjArr, vnURL, global.HTTP_REQUEST_GET,
null, null, null, appData);
}
if (!dataObjArr.length) {
callback(null, fipPool);
return;
}
async.map(dataObjArr,
commonUtils.getAPIServerResponse(configApiServer.apiGet,
true),
function(error, results) {
if ((null != error) || (null == results)) {
callback(error, fipPool);
return;
}
var resCnt = results.length;
for (i = 0; i < resCnt; i++) {
try {
var vn = results[i]['virtual-network'];
if ((true == vn['router_external']) &&
(null != vn['floating_ip_pools'])) {
var subnets = parseVNSubnets(results[i]);
var fipCnt = vn['floating_ip_pools'].length;
for(var j = 0; j < fipCnt ; j++) {
vn['floating_ip_pools'][j]['subnets'] = subnets;
fipPool['floating_ip_pool_refs'].push(vn['floating_ip_pools'][j]);
}
var results = vnList['virtual-networks'];
var resCnt = results.length;
for (i = 0; i < resCnt; i++) {
try {
var vn = results[i]['virtual-network'];
if ((true == vn['router_external']) &&
(null != vn['floating_ip_pools'])) {
var subnets = parseVNSubnets(results[i]);
var fipCnt = vn['floating_ip_pools'].length;
for(var j = 0; j < fipCnt ; j++) {
vn['floating_ip_pools'][j]['subnets'] = subnets;
fipPool['floating_ip_pool_refs'].push(vn['floating_ip_pools'][j]);
}
} catch(e) {
continue;
}
} catch(e) {
continue;
}
callback(null, fipPool);
});
}
callback(null, fipPool);
});
}

Expand Down
1 change: 1 addition & 0 deletions webroot/config/fip/api/parseURL.xml
Expand Up @@ -49,6 +49,7 @@
<item>
<url>/api/tenants/config/floating-ip-pools/:id</url>
<method>get</method>
<timeout>300</timeout>
<feature>fipconfig</feature>
<callback>fipconfigapi.listFloatingIpPools</callback>
</item>
Expand Down
1 change: 1 addition & 0 deletions webroot/config/fip/ui/js/fip_config.js
Expand Up @@ -568,6 +568,7 @@ function showFIPEditWindow(mode) {
var getAjaxs = [];
getAjaxs[0] = $.ajax({
url:"/api/tenants/config/floating-ip-pools/" + selectedProject,
timeout:300000,
type:"GET"
});
$.when.apply($, getAjaxs).then(
Expand Down
Expand Up @@ -1135,51 +1135,61 @@ function physicalInterfacesConfig() {

function fetchVirtualNetworks() {
var postData = {};
postData.data = [];
postData.data.push({type : 'virtual-networks', fields : ['network_ipam_refs']});
doAjaxCall('/api/tenants/config/get-config-details','POST', JSON.stringify(postData), 'successHandlerForVN', 'failureHandlerForVN', null, null, ajaxTimeout);
postData.data = {fields : ['network_ipam_refs']};
doAjaxCall('/api/tenants/config/vn-list-details','POST', JSON.stringify(postData), 'successHandlerForVN', 'failureHandlerForVN', null, null, ajaxTimeout);
}

window.successHandlerForVN = function(result) {
var vnDataSrc = [{text : 'None', value : 'none'}];
if(result != null && result.length > 0 && result[0]['virtual-networks'] != null && result[0]['virtual-networks'].length > 0) {
var vns = result[0]['virtual-networks'];
for(var i = 0; i < vns.length; i++) {
var vn = vns[i]['virtual-network'];
var fqn = vn.fq_name;
var subnetStr = '';
var subnetUUID = '';
var field = 'network_ipam_refs';
if(field in vn && vn[field].length > 0) {
if(vn[field][0].attr != null && vn[field][0].attr.ipam_subnets != null
&& vn[field][0].attr.ipam_subnets.length > 0) {
subnetUUID = vn[field][0].attr.ipam_subnets[0].subnet_uuid;
}
for(var k = 0; k < vn[field].length; k++) {
var ipam = vn[field][k];
if(ipam.attr != null && ipam.attr.ipam_subnets != null
&& ipam.attr.ipam_subnets.length > 0) {
var ipamRefs = ipam.attr.ipam_subnets;
for(var j = 0; j < ipamRefs.length; j++) {
if('subnet' in ipamRefs[j]) {
var subnet = ipamRefs[j].subnet;
var cidr = subnet.ip_prefix + '/' + subnet.ip_prefix_len;
if(subnetStr === '') {
subnetStr = cidr;
} else {
subnetStr += ', ' + cidr;
var data = result.data;
if(data != null && data['virtual-networks'] != null && data['virtual-networks'].length > 0) {
var vns = data['virtual-networks'];
if(!result.isList) {
for(var i = 0; i < vns.length; i++) {
var vn = vns[i]['virtual-network'];
var fqn = vn.fq_name;
var subnetStr = '';
var subnetUUID = '';
var field = 'network_ipam_refs';
if(field in vn && vn[field].length > 0) {
if(vn[field][0].attr != null && vn[field][0].attr.ipam_subnets != null
&& vn[field][0].attr.ipam_subnets.length > 0) {
subnetUUID = vn[field][0].attr.ipam_subnets[0].subnet_uuid;
}
for(var k = 0; k < vn[field].length; k++) {
var ipam = vn[field][k];
if(ipam.attr != null && ipam.attr.ipam_subnets != null
&& ipam.attr.ipam_subnets.length > 0) {
var ipamRefs = ipam.attr.ipam_subnets;
for(var j = 0; j < ipamRefs.length; j++) {
if('subnet' in ipamRefs[j]) {
var subnet = ipamRefs[j].subnet;
var cidr = subnet.ip_prefix + '/' + subnet.ip_prefix_len;
if(subnetStr === '') {
subnetStr = cidr;
} else {
subnetStr += ', ' + cidr;
}
}
}
}
}
}
}
var textVN = fqn[2] + " (" + fqn[0] + ":" + fqn[1] + ")";
if(subnetStr != '') {
textVN += ' (' + subnetStr + ')';
}
var textVN = fqn[2] + " (" + fqn[0] + ":" + fqn[1] + ")";
if(subnetStr != '') {
textVN += ' (' + subnetStr + ')';
}
var vnData = {fqName : fqn, subnetId : subnetUUID};
vnDataSrc.push({ text : textVN, value : vn.uuid, data : JSON.stringify(vnData)});
}
} else {
for(var i = 0; i < vns.length; i++) {
var vn = vns[i];
var fqn = vn.fq_name;
var textVN = fqn[2] + " (" + fqn[0] + ":" + fqn[1] + ")";
var vnData = {fqName : fqn, subnetId : ''};
vnDataSrc.push({ text : textVN, value : vn.uuid, data : JSON.stringify(vnData)});
}
}
} else {
vnDataSrc.push({text : 'No Virtual Network found', value : 'empty'});
Expand Down Expand Up @@ -1224,15 +1234,19 @@ function physicalInterfacesConfig() {
for(var i = 0; i < result.length; i++) {
if(result[i]['virtual-machine-interface'] != null) {
var vmi = result[i]['virtual-machine-interface'];
var txt = getMacAddress(vmi.virtual_machine_interface_mac_addresses);
var fixedIp = vmi.instance_ip_address != null && vmi.instance_ip_address.length > 0 ? vmi.instance_ip_address[0] : '';
var txtVMI = '';
if(fixedIp != '') {
txtVMI = txt + ' (' + fixedIp + ')';
} else {
txtVMI = txt;
var owner = vmi['virtual_machine_interface_device_owner'];
var subInf = vmi["virtual_machine_interface_properties"];
if((owner == null || owner == "") && (subInf == null || (subInf != null && subInf["sub_interface_vlan_tag"] == null))) {
var txt = getMacAddress(vmi.virtual_machine_interface_mac_addresses);
var fixedIp = vmi.instance_ip_address != null && vmi.instance_ip_address.length > 0 ? vmi.instance_ip_address[0] : '';
var txtVMI = '';
if(fixedIp != '') {
txtVMI = txt + ' (' + fixedIp + ')';
} else {
txtVMI = txt;
}
vmiDataSrc.push({text : txtVMI, value : JSON.stringify(vmi.fq_name), ip : fixedIp, data:JSON.stringify(vmi)});
}
vmiDataSrc.push({text : txtVMI, value : JSON.stringify(vmi.fq_name), ip : fixedIp, data:JSON.stringify(vmi)});
}
}
if ($("[id$=serverMac]").length > 0){
Expand Down Expand Up @@ -1656,6 +1670,8 @@ function physicalInterfacesConfig() {
showInfoWindow('Invald IP ' + ip , "Invalid input in Server Details");
return false;
}
}
if(subNets.length > 0) {
var isInSubnetRange = false;
for(var j =0 ; j < subNets.length; j++){
if(isIPBoundToRange(subNets[j], ip)){
Expand Down
7 changes: 7 additions & 0 deletions webroot/config/vn/api/parseURL.xml
Expand Up @@ -153,6 +153,7 @@
<item>
<url>/api/tenants/config/shared-virtual-networks</url>
<method>get</method>
<timeout>300</timeout>
<feature>vnconfig</feature>
<callback>vnconfigapi.getSharedVirtualNetworks</callback>
</item>
Expand All @@ -168,5 +169,11 @@
<feature>vnconfig</feature>
<callback>vnconfigapi.getAllVirtualNetworksWFields</callback>
</item>
<item>
<url>/api/tenants/config/vn-list-details</url>
<method>post</method>
<feature>vnconfig</feature>
<callback>vnconfigapi.getVNListOrDetails</callback>
</item>
</urlLists>

47 changes: 45 additions & 2 deletions webroot/config/vn/api/vnconfig.api.js
Expand Up @@ -1045,7 +1045,8 @@ function createVirtualNetwork (request, response, appData)
physicalRouters = vnConfigData["virtual-network"]['physical-routers'];
delete vnConfigData["virtual-network"]['physical-routers'];

if ('route_target_list' in vnPostData['virtual-network']) {
if ('route_target_list' in vnPostData['virtual-network'] &&
'route_target' in vnPostData['virtual-network']['route_target_list']) {
if (!(vnPostData['virtual-network']['route_target_list']
['route_target'][0].length)) {
delete vnPostData['virtual-network']['route_target_list'];
Expand Down Expand Up @@ -2352,6 +2353,9 @@ function getAllVirtualNetworksWFields (req, res, appData)
var projUUID = req.param('uuid');
var vnURL = '/virtual-networks?detail=true&fields=' +
'network_ipam_refs,is_shared';
if (projUUID != null) {
vnURL += '&parent_id=' + projUUID;
}
var resultJSON = [];
var tmpVNUUIDs = {};
configApiServer.apiGet(vnURL, appData, function(err, vnDetails) {
Expand All @@ -2360,7 +2364,9 @@ function getAllVirtualNetworksWFields (req, res, appData)
commonUtils.handleJSONResponse(err, res, resultJSON);
return;
}
var vns = vnDetails['virtual-networks'];
var resultJSON = vnDetails['virtual-networks'];
/*
// We will not get VNs acroos project now
var vnCnt = vns.length;
var vnUUID = null;
for (var i = 0; i < vnCnt; i++) {
Expand All @@ -2379,6 +2385,7 @@ function getAllVirtualNetworksWFields (req, res, appData)
}
}
}
*/
if (!resultJSON.length) {
commonUtils.handleJSONResponse(null, res, resultJSON);
return;
Expand All @@ -2389,6 +2396,41 @@ function getAllVirtualNetworksWFields (req, res, appData)
});
}

function getVNListOrDetails (req, res, appData)
{
var resultJSON = {};
var body = req.body;
var fields = body['fields'];

var vnCountUrl = '/virtual-networks?count=true';
configApiServer.apiGet(vnCountUrl, appData, function(err, vnCountData) {
if ((null != err) || (null == vnCountData) ||
(null == vnCountData['virtual-networks']) ||
(null == vnCountData['virtual-networks']['count'])) {
commonUtils.handleJSONResponse(err, res, null);
return;
}
var vnCnt = vnCountData['virtual-networks']['count'];
if (vnCnt > 1000) {
/* If vn count is more than 8k, we will send only list, not whole
* data
*/
vnUrl = '/virtual-networks';
resultJSON['isList'] = true;
} else {
vnUrl = '/virtual-networks?detail=true';
resultJSON['isList'] = false;
if (fields != null) {
vnUrl += ',fields=' + fields.join(',');
}
}
configApiServer.apiGet(vnUrl, appData, function(err, vnData) {
resultJSON['data'] = vnData;
commonUtils.handleJSONResponse(err, res, resultJSON);
});
});
}

exports.listVirtualNetworks = listVirtualNetworks;
exports.getVirtualNetwork = getVirtualNetwork;
exports.readVirtualNetworks = readVirtualNetworks;
Expand All @@ -2409,4 +2451,5 @@ exports.getPagedVirtualNetworks = getPagedVirtualNetworks;
exports.getAllVirtualNetworksWFields = getAllVirtualNetworksWFields;
exports.fipPoolDelete = fipPoolDelete;
exports.getVirtualNetworkCb = getVirtualNetworkCb;
exports.getVNListOrDetails = getVNListOrDetails;

0 comments on commit 83ab310

Please sign in to comment.