CLOUDSTACK-6477: UI - Load Balancing - add VMs => fix error 'Unable to decode parameter vmidipmap[0].vmip[]; if specifying an object array, please use parameter[index].field=XXX, ~ '
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/c6d1e10c Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/c6d1e10c Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/c6d1e10c Branch: refs/heads/4.4 Commit: c6d1e10cb654e6fa1ac7ade90e03c41d5c7c9284 Parents: 2bba381 Author: Jessica Wang <jessicaw...@apache.org> Authored: Wed Apr 23 14:39:02 2014 -0700 Committer: Daan Hoogland <d...@onecht.net> Committed: Fri Apr 25 21:33:26 2014 +0200 ---------------------------------------------------------------------- ui/scripts/network.js | 105 +++++++++++++++++++++++++++------------------ 1 file changed, 64 insertions(+), 41 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c6d1e10c/ui/scripts/network.js ---------------------------------------------------------------------- diff --git a/ui/scripts/network.js b/ui/scripts/network.js index 6494704..6462d2a 100755 --- a/ui/scripts/network.js +++ b/ui/scripts/network.js @@ -3583,6 +3583,7 @@ var stickyData = $.extend(true, {}, args.data.sticky); + //***** create new LB rule > Add VMs ***** $.ajax({ url: createURL('createLoadBalancerRule'), data: data, @@ -3593,6 +3594,10 @@ var jobID = data.createloadbalancerruleresponse.jobid; var lbID = data.createloadbalancerruleresponse.id; + var inputData = { + id: data.createloadbalancerruleresponse.id + }; + /* var inputData = { id: data.createloadbalancerruleresponse.id, @@ -3600,36 +3605,37 @@ 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 + '].vmip'] = 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; - - // NOTE - multiple IP support not ready for API integration yet - // for now, just use the first selected IP - // - // Please change this to pass multiple IPs - inputData['vmidipmap[' + k + '].vmip'] = args.itemData[k]._subselect[0]; - } - } - } - - //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 - + */ + //virtualmachineids parameter has been replaced with vmidipmap parameter, so comment out the 6 lines above. + + + /* + * e.g. first VM(xxx) has two IPs(10.1.1.~), second VM(yyy) has three IPs(10.2.2.~): + * vmidipmap[0].vmid=xxx vmidipmap[0].vmip=10.1.1.11 + * vmidipmap[1].vmid=xxx vmidipmap[1].vmip=10.1.1.12 + * vmidipmap[2].vmid=yyy vmidipmap[2].vmip=10.2.2.77 + * vmidipmap[3].vmid=yyy vmidipmap[3].vmip=10.2.2.78 + * vmidipmap[4].vmid=yyy vmidipmap[4].vmip=10.2.2.79 + */ + var selectedVMs = args.itemData; + if (selectedVMs != null) { + var vmidipmapIndex = 0; + for (var vmIndex = 0; vmIndex < selectedVMs.length; vmIndex++) { + var selectedIPs = selectedVMs[vmIndex]._subselect; + for (var ipIndex = 0; ipIndex < selectedIPs.length; ipIndex++) { + inputData['vmidipmap[' + vmidipmapIndex + '].vmid'] = selectedVMs[vmIndex].id; + + if (args.context.ipAddresses[0].isportable) { + inputData['vmidipmap[' + vmidipmapIndex + '].vmip'] = selectedIPs[ipIndex].split(',')[1]; + } else { + inputData['vmidipmap[' + vmidipmapIndex + '].vmip'] = selectedIPs[ipIndex]; + } + + vmidipmapIndex++; + } + } + } + $.ajax({ url: createURL('assignToLoadBalancerRule'), data: inputData, @@ -3739,21 +3745,38 @@ }, itemActions: { - add: { + //***** update existing LB rule > Add VMs ***** + add: { label: 'label.add.vms.to.lb', action: function(args) { var inputData = { id: args.multiRule.id - }; - if (args.data != null) { - for (var k = 0; k < args.data.length; k++) { - inputData['vmidipmap[' + k + '].vmid'] = args.data[k].id; - - if (args.context.ipAddresses[0].isportable) { - inputData['vmidipmap[' + k + '].vmip'] = args.data[k]._subselect.split(',')[1]; - } else { - inputData['vmidipmap[' + k + '].vmip'] = args.data[k]._subselect; - } + }; + + /* + * e.g. first VM(xxx) has two IPs(10.1.1.~), second VM(yyy) has three IPs(10.2.2.~): + * vmidipmap[0].vmid=xxx vmidipmap[0].vmip=10.1.1.11 + * vmidipmap[1].vmid=xxx vmidipmap[1].vmip=10.1.1.12 + * vmidipmap[2].vmid=yyy vmidipmap[2].vmip=10.2.2.77 + * vmidipmap[3].vmid=yyy vmidipmap[3].vmip=10.2.2.78 + * vmidipmap[4].vmid=yyy vmidipmap[4].vmip=10.2.2.79 + */ + var selectedVMs = args.data; + if (selectedVMs != null) { + var vmidipmapIndex = 0; + for (var vmIndex = 0; vmIndex < selectedVMs.length; vmIndex++) { + var selectedIPs = selectedVMs[vmIndex]._subselect; + for (var ipIndex = 0; ipIndex < selectedIPs.length; ipIndex++) { + inputData['vmidipmap[' + vmidipmapIndex + '].vmid'] = selectedVMs[vmIndex].id; + + if (args.context.ipAddresses[0].isportable) { + inputData['vmidipmap[' + vmidipmapIndex + '].vmip'] = selectedIPs[ipIndex].split(',')[1]; + } else { + inputData['vmidipmap[' + vmidipmapIndex + '].vmip'] = selectedIPs[ipIndex]; + } + + vmidipmapIndex++; + } } }