From 14f27997dc747b706ed5b6b6a67641762167eee8 Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Tue, 8 Apr 2014 11:11:57 -0700 Subject: [PATCH] CLOUDSTACK-6342: UI - Load Balancing - LB rule listing - pass lbvmips=true to listLoadBalancerRuleInstances API and display "VM + IP Address" under each LB rule. --- ui/scripts/network.js | 83 ++++++++++++++++++------------ ui/scripts/ui/widgets/multiEdit.js | 9 ++++ 2 files changed, 60 insertions(+), 32 deletions(-) diff --git a/ui/scripts/network.js b/ui/scripts/network.js index d0ae2e119e2..0bf5d912a9d 100755 --- a/ui/scripts/network.js +++ b/ui/scripts/network.js @@ -3806,31 +3806,30 @@ dataType: 'json', async: true, success: function(data) { - var loadBalancerData = data.listloadbalancerrulesresponse.loadbalancerrule; - var loadVMTotal = loadBalancerData ? loadBalancerData.length : 0; - var loadVMCurrent = 0; - - $(loadBalancerData).each(function() { - loadVMCurrent++; - var item = this; + var loadbalancerrules = data.listloadbalancerrulesresponse.loadbalancerrule; + + $(loadbalancerrules).each(function() { + var lbRule = this; var stickyData = {}; - var lbInstances = []; + + //var lbInstances = []; + var itemData = []; // Passing _hideFields array will disable specified fields for this row - //item._hideFields = ['autoScale']; + //lbRule._hideFields = ['autoScale']; $.ajax({ url: createURL('listAutoScaleVmGroups'), data: { listAll: true, - lbruleid: item.id + lbruleid: lbRule.id }, async: false, success: function(json) { if (json.listautoscalevmgroupsresponse.autoscalevmgroup != null && json.listautoscalevmgroupsresponse.autoscalevmgroup.length > 0) { //from 'autoScale' button - item._hideFields = ['add-vm']; + lbRule._hideFields = ['add-vm']; } else { //from 'add-vm' button - item._hideFields = ['autoScale']; + lbRule._hideFields = ['autoScale']; } } }); @@ -3841,7 +3840,7 @@ async: false, data: { listAll: true, - lbruleid: item.id + lbruleid: lbRule.id }, success: function(json) { var stickyPolicy = json.listlbstickinesspoliciesresponse.stickinesspolicies ? @@ -3857,12 +3856,12 @@ methodname: stickyPolicy.methodname, stickyName: stickyPolicy.name, id: stickyPolicy.id, - lbRuleID: item.id + lbRuleID: lbRule.id }; $.extend(stickyData, stickyPolicy.params); } else { stickyData = { - lbRuleID: item.id + lbRuleID: lbRule.id }; } }, @@ -3880,42 +3879,62 @@ async: false, data: { listAll: true, - id: item.id + lbvmips: true, + id: lbRule.id }, success: function(data) { - lbInstances = data.listloadbalancerruleinstancesresponse.loadbalancerruleinstance ? - data.listloadbalancerruleinstancesresponse.loadbalancerruleinstance : []; + //when "lbvmips: true" is not passed to API + //lbVMs = data.listloadbalancerruleinstancesresponse.loadbalancerruleinstance; + + //when "lbvmips: true" is passed to API + lbrulevmidips = data.listloadbalancerruleinstancesresponse.lbrulevmidip; + + if (lbrulevmidips != null) { + for (var k = 0; k < lbrulevmidips.length; k++) { + var lbrulevmidip = lbrulevmidips[k]; + var lbVM = lbrulevmidip.loadbalancerruleinstance; + if (lbVM.displayname.indexOf('AutoScale-LB-') > -1) //autoscale VM is not allowed to be deleted manually. So, hide destroy button + lbVM._hideActions = ['destroy']; - $(lbInstances).each(function() { - if (this.displayname.indexOf('AutoScale-LB-') > -1) //autoscale VM is not allowed to be deleted manually. So, hide destroy button - this._hideActions = ['destroy']; - - if (this.servicestate) { - this._itemStateLabel = 'label.service.state'; - this._itemState = this.servicestate; - } - }); + if (lbVM.servicestate) { + lbVM._itemStateLabel = 'label.service.state'; + lbVM._itemState = lbVM.servicestate; + } + + if (lbrulevmidip.lbvmipaddresses != null) { + for (var m = 0 ; m < lbrulevmidip.lbvmipaddresses.length; m++) { + var ip = lbrulevmidip.lbvmipaddresses[m]; + itemData.push($.extend({}, lbVM, { + itemIp: ip + })); + } + } else { + itemData.push(lbVM); + } + } + } }, error: function(data) { args.response.error(parseXMLHttpResponse(data)); } - }); + }); - $.extend(item, { + $.extend(lbRule, { _itemName: 'name', - _itemData: lbInstances, + _itemIp: 'itemIp', + _itemData: itemData, _maxLength: { name: 7 }, sticky: stickyData, autoScale: { - lbRuleID: item.id + lbRuleID: lbRule.id } }); }); args.response.success({ - data: loadBalancerData + data: loadbalancerrules }); } }); diff --git a/ui/scripts/ui/widgets/multiEdit.js b/ui/scripts/ui/widgets/multiEdit.js index 713ebdeffd3..367cc27fd81 100755 --- a/ui/scripts/ui/widgets/multiEdit.js +++ b/ui/scripts/ui/widgets/multiEdit.js @@ -702,6 +702,7 @@ itemRow: function(item, itemActions, multiRule, $tbody) { var $tr = $(''); + var itemName = multiRule._itemName ? item[multiRule._itemName] : item.name; var $itemName = $('').html(_s(itemName)); @@ -716,6 +717,14 @@ }); }); + + var itemIp = multiRule._itemIp ? item[multiRule._itemIp] : null; + if (itemIp != null) { + var $itemIp = $('').html(_s(itemIp)); + $tr.append($('').addClass('state').appendTo($tr).append($itemIp)); + } + + var itemState = item._itemState ? item._itemState : item.state; $tr.append($('').addClass('state').appendTo($tr).append(