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, ~ '

This commit is contained in:
Jessica Wang 2014-04-23 14:39:02 -07:00
parent c7f3250151
commit ee461f0c68

View File

@ -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,
@ -3601,34 +3606,35 @@
}).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.
//virtualmachineids parameter has been replaced with vmidipmap parameter, so comment out the 6 lines above.
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;
/*
* 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;
// 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];
}
}
}
if (args.context.ipAddresses[0].isportable) {
inputData['vmidipmap[' + vmidipmapIndex + '].vmip'] = selectedIPs[ipIndex].split(',')[1];
} else {
inputData['vmidipmap[' + vmidipmapIndex + '].vmip'] = selectedIPs[ipIndex];
}
//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
vmidipmapIndex++;
}
}
}
$.ajax({
url: createURL('assignToLoadBalancerRule'),
@ -3739,20 +3745,37 @@
},
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++;
}
}
}