Repository: cloudstack Updated Branches: refs/heads/master 7d8d1e959 -> f52b98b06
CLOUDSTACK-6148: UI > IP Address > load balancing > Send multiple VMs + mutliple NIC Secondary IP to new parameter "vmidipmap" of assignToLoadBalancerRule API. Comment this part out until API change is in. Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/f52b98b0 Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/f52b98b0 Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/f52b98b0 Branch: refs/heads/master Commit: f52b98b063092b512c59096f392fd267f2357f58 Parents: 7d8d1e9 Author: Jessica Wang <[email protected]> Authored: Wed Feb 26 15:08:19 2014 -0800 Committer: Jessica Wang <[email protected]> Committed: Wed Feb 26 15:08:33 2014 -0800 ---------------------------------------------------------------------- ui/scripts/network.js | 157 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 129 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f52b98b0/ui/scripts/network.js ---------------------------------------------------------------------- diff --git a/ui/scripts/network.js b/ui/scripts/network.js index 98e0f49..6ce66e8 100755 --- a/ui/scripts/network.js +++ b/ui/scripts/network.js @@ -35,7 +35,8 @@ return elemData; }; - var instanceSecondaryIPSubselect = function(args) { + //value of Primary IP in subselect dropdown is -1, for single VM selection (API parameter virtualmachineid + vmguestip), e.g. enableStaticNat API, createPortForwardingRule API. + var singleVmSecondaryIPSubselect = function(args) { var instance = args.context.instances[0]; var network = args.context.networks[0]; @@ -116,6 +117,88 @@ }) }; + //value of Primary IP in subselect dropdown is itself (not -1), for multiple VM selection (API parameter vmidipmap), e.g. assignToLoadBalancerRule API. + var multipleVmSecondaryIPSubselect = function(args) { + var instance = args.context.instances[0]; + var network = args.context.networks[0]; + + if (args.context.ipAddresses[0].isportable) { + $.ajax({ + url: createURL('listNics'), + data: { + virtualmachineid: instance.id + }, + success: function(json) { + var nics = json.listnicsresponse.nic; + var ipSelection = []; + + $(nics).map(function(index, nic) { + var ips = nic.secondaryip ? nic.secondaryip : []; + var prefix = '[NIC ' + (index + 1) + '] '; + + // Add primary IP as default + ipSelection.push({ + id: nic.networkid + ',' + nic.ipaddress, + description: prefix + nic.ipaddress + ' (Primary)' + }); + + // Add secondary IPs + $(ips).map(function(index, ip) { + ipSelection.push({ + id: nic.networkid + ',' + ip.ipaddress, + description: prefix + ip.ipaddress + }); + }); + }); + + + args.response.success({ + data: ipSelection + }); + } + }); + + return; + } + + var nic = $.grep(instance.nic, function(nic) { + return nic.networkid == network.id; + })[0]; + + // Get NIC IPs + $.ajax({ + url: createURL('listNics'), + data: { + virtualmachineid: instance.id, + nicId: nic.id + }, + success: function(json) { + var nic = json.listnicsresponse.nic[0]; + var ips = nic.secondaryip ? nic.secondaryip : []; + var ipSelection = []; + + // Add primary IP as default + ipSelection.push({ + id: nic.ipaddress, + description: nic.ipaddress + ' (Primary)' + }); + + // Add secondary IPs + $(ips).map(function(index, ip) { + ipSelection.push({ + id: ip.ipaddress, + description: ip.ipaddress + }); + }); + + + args.response.success({ + data: ipSelection + }); + } + }) + }; + var ipChangeNotice = function() { cloudStack.dialog.confirm({ message: 'message.ip.address.changed', @@ -2386,7 +2469,7 @@ filters: false, subselect: { label: 'label.use.vm.ip', - dataProvider: instanceSecondaryIPSubselect + dataProvider: singleVmSecondaryIPSubselect }, dataProvider: function(args) { var data = { @@ -3232,10 +3315,15 @@ } }, filters: false, + + //when server-side change of adding new parameter "vmidipmap" to assignToLoadBalancerRule API is in, uncomment the following commented 4 lines. + /* subselect: { label: 'label.use.vm.ip', - dataProvider: instanceSecondaryIPSubselect + dataProvider: multipleVmSecondaryIPSubselect }, + */ + dataProvider: function(args) { var itemData = $.isArray(args.context.multiRule) && args.context.multiRule[0]['_itemData'] ? args.context.multiRule[0]['_itemData'] : []; @@ -3489,21 +3577,7 @@ }; var stickyData = $.extend(true, {}, args.data.sticky); - - if (args.context.ipAddresses[0].isportable) { - var subselect = args.itemData[0]._subselect.split(','); - //var networkid = subselect[0]; - var vmguestip = subselect[1]; - - //data.networkid = networkid; - - if (parseInt(vmguestip) !== -1) { - data.vmguestip = vmguestip; - } - } else if (args.itemData[0]._subselect && args.itemData[0]._subselect != -1) { - data.vmguestip = args.itemData[0]._subselect; - } - + $.ajax({ url: createURL('createLoadBalancerRule'), data: data, @@ -3513,17 +3587,44 @@ var itemData = args.itemData; var jobID = data.createloadbalancerruleresponse.jobid; var lbID = data.createloadbalancerruleresponse.id; - + + + var inputData = { + id: data.createloadbalancerruleresponse.id, + virtualmachineids: $.map(itemData, function(elem) { + return elem.id; + }).join(',') + }; + //when server-side change of adding new parameter "vmidipmap" to assignToLoadBalancerRule API is in, remove the above 6 lines and uncomment the commented section below. + + + /* + var inputData = { + id: data.createloadbalancerruleresponse.id + }; + if (args.context.ipAddresses[0].isportable) { + if (args.itemData != null) { + for (var k = 0; k < args.itemData.length; k++) { + inputData['vmidipmap[' + k + '].vmid'] = args.itemData[k].id; + inputData['vmidipmap[' + k + '].ip'] = args.itemData[k]._subselect.split(',')[1]; + } + } + + } else { + if (args.itemData != null) { + for (var k = 0; k < args.itemData.length; k++) { + inputData['vmidipmap[' + k + '].vmid'] = args.itemData[k].id; + inputData['vmidipmap[' + k + '].ip'] = args.itemData[k]._subselect; + } + } + } + */ + //http://localhost:8080/client/api?command=assignToLoadBalancerRule&response=json&sessionkey=M6I8h6gBXuEMeBMb4pjSDTjYprc=&id=da97bae5-9389-4bbb-aef3-ccca8408a852&vmidipmap[0].vmid=667d1450-3cd9-4670-b22e-aebb77f521a3&vmidipmap[0].ip=10.1.1.23&vmidipmap[1].vmid=5128d30b-7747-4a05-bdbc-6262191d7642&vmidipmap[1].ip=10.1.1.82&vmidipmap[2].vmid=48c61d00-28d2-4048-aed5-774289470804&vmidipmap[2].ip=10.1.1.5&_=1393451067671 + + $.ajax({ url: createURL('assignToLoadBalancerRule'), - data: { - id: data.createloadbalancerruleresponse.id, - virtualmachineids: $.map(itemData, function(elem) { - return elem.id; - }).join(',') - }, - dataType: 'json', - async: true, + data: inputData, success: function(data) { var jobID = data.assigntoloadbalancerruleresponse.jobid; var lbStickyCreated = false; @@ -3896,7 +3997,7 @@ filters: false, subselect: { label: 'label.use.vm.ip', - dataProvider: instanceSecondaryIPSubselect + dataProvider: singleVmSecondaryIPSubselect }, dataProvider: function(args) { var networkid;
