Repository: cloudstack Updated Branches: refs/heads/master c773754fd -> e1354878c
CLOUDSTACK-6694: Refactor 'assign vm' action into function Makes 'assign vm' action a function, to fix issue where quickview did not have updated code. Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/e1354878 Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/e1354878 Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/e1354878 Branch: refs/heads/master Commit: e1354878c0c83d9c20c986796c7e9f3e3ba0e00e Parents: c773754 Author: Brian Federle <brian.fede...@citrix.com> Authored: Mon Sep 8 10:44:40 2014 -0700 Committer: Brian Federle <brian.fede...@citrix.com> Committed: Mon Sep 8 10:44:40 2014 -0700 ---------------------------------------------------------------------- ui/scripts/vpc.js | 477 ++++++++++++++++++++----------------------------- 1 file changed, 195 insertions(+), 282 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e1354878/ui/scripts/vpc.js ---------------------------------------------------------------------- diff --git a/ui/scripts/vpc.js b/ui/scripts/vpc.js index d3602fc..10bd703 100644 --- a/ui/scripts/vpc.js +++ b/ui/scripts/vpc.js @@ -15,6 +15,199 @@ // specific language governing permissions and limitations // under the License. (function($, cloudStack) { + var assignVMAction = function() { + return { + label: 'Assign VMs', + messages: { + notification: function(args) { + return 'Assign VMs'; + } + }, + needsRefresh: true, + listView: $.extend(true, {}, cloudStack.sections.instances.listView, { + type: 'checkbox', + filters: false, + multiSelect: false, + subselect: { + isMultiple: true, + label: 'label.use.vm.ip', + dataProvider: function(args) { + var instance = args.context.instances[0]; + var network = args.context.networks[0]; + + $.ajax({ + url: createURL('listNics'), + data: { + virtualmachineid: instance.id, + nicId: instance.nic[0].id + }, + success: function(json) { + var nic = json.listnicsresponse.nic[0]; + var primaryIp = nic.ipaddress; + var secondaryIps = nic.secondaryip ? nic.secondaryip : []; + var ipSelection = []; + var existingIps = $(args.context.subItemData).map( + function(index, item) { return item.itemIp; } + ); + + // Add primary IP as default + if ($.inArray(primaryIp, existingIps) == -1) { + ipSelection.push({ + id: primaryIp, + description: primaryIp + ' (Primary)' + }); + } + + // Add secondary IPs + $(secondaryIps).map(function(index, secondaryIp) { + if ($.inArray(secondaryIp.ipaddress, existingIps) == -1) { + ipSelection.push({ + id: secondaryIp.ipaddress, + description: secondaryIp.ipaddress + }); + } + }); + + args.response.success({ + data: ipSelection + }); + } + }); + } + }, + dataProvider: function(args) { + var assignedInstances; + $.ajax({ + url: createURL('listLoadBalancers'), + data: { + id: args.context.internalLoadBalancers[0].id + }, + async: false, + success: function(json) { + assignedInstances = json.listloadbalancerssresponse.loadbalancer[0].loadbalancerinstance; + if (assignedInstances == null) + assignedInstances = []; + } + }); + + $.ajax({ + url: createURL('listVirtualMachines'), + data: { + networkid: args.context.networks[0].id, + listAll: true + }, + success: function(json) { + var instances = json.listvirtualmachinesresponse.virtualmachine; + + // Pre-select existing instances in LB rule + $(instances).map(function(index, instance) { + instance._isSelected = $.grep(assignedInstances, + function(assignedInstance) { + return assignedInstance.id == instance.id; + } + ).length ? true : false; + }); + + //remove assigned VMs (i.e. instance._isSelected == true) + var items = []; + if (instances != null) { + for (var i = 0; i < instances.length; i++) { + if (instances[i]._isSelected == true) + continue; + else + items.push(instances[i]); + } + } + + args.response.success({ + data: items + }); + } + }); + } + }), + action: function(args) { //UI > Network menu > VPC section > select and configure a VPC from listing > select an internal LB tier > click Internal LB > select an internal LB rule from listing > Details tab > click Assigned VMs tab > click Assign VMs button > Select VM dailog + var $rows = $(':ui-dialog .list-view tbody tr'); + var vms = args.context.instances; + + // Assign subselect values + $(vms).each(function() { + var vm = this; + var $vmRow = $rows.filter(function() { + return $(this).data('json-obj') === vm; + }); + $.extend(vm, { _subselect: $vmRow.find('.subselect select').val() }); + }); + + /* + var array1 = []; + for (var i = 0; i < vms.length; i++) { + array1.push(vms[i].id); + } + var virtualmachineids = array1.join(','); + var inputData = { + id: args.context.internalLoadBalancers[0].id, + virtualmachineids: virtualmachineids + }; + */ + //virtualmachineids parameter has been replaced with vmidipmap parameter, so comment out the lines above. + + + var inputData = { + id: args.context.internalLoadBalancers[0].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 = vms; + 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; + + //"ipAddresses" is not in args.context since this LB rule is under a VPC, not an address. + /* + if (args.context.ipAddresses[0].isportable) { + inputData['vmidipmap[' + vmidipmapIndex + '].vmip'] = selectedIPs[ipIndex].split(',')[1]; + } else { + inputData['vmidipmap[' + vmidipmapIndex + '].vmip'] = selectedIPs[ipIndex]; + } + */ + inputData['vmidipmap[' + vmidipmapIndex + '].vmip'] = selectedIPs[ipIndex]; + + vmidipmapIndex++; + } + } + } + + $.ajax({ + url: createURL('assignToLoadBalancerRule'), + data: inputData, + dataType: 'json', + async: true, + success: function(data) { + var jid = data.assigntoloadbalancerruleresponse.jobid; + args.response.success({ + _custom: { + jobId: jid + } + }); + } + }); + }, + notification: { + poll: pollAsyncJobResult + } + }; + }; + var aclMultiEdit = { noSelect: true, @@ -700,98 +893,7 @@ isMaximized: true, name: 'Internal LB details', actions: { - assignVMs: { - label: 'Assign VMs', - messages: { - notification: function(args) { - return 'Assign VMs'; - } - }, - needsRefresh: true, - listView: $.extend(true, {}, cloudStack.sections.instances.listView, { - type: 'checkbox', - filters: false, - dataProvider: function(args) { - var assignedInstances; - $.ajax({ - url: createURL('listLoadBalancers'), - data: { - id: args.context.internalLoadBalancers[0].id - }, - async: false, - success: function(json) { - assignedInstances = json.listloadbalancerssresponse.loadbalancer[0].loadbalancerinstance; - if (assignedInstances == null) - assignedInstances = []; - } - }); - - $.ajax({ - url: createURL('listVirtualMachines'), - data: { - networkid: args.context.networks[0].id, - listAll: true - }, - success: function(json) { - var instances = json.listvirtualmachinesresponse.virtualmachine; - - // Pre-select existing instances in LB rule - $(instances).map(function(index, instance) { - instance._isSelected = $.grep(assignedInstances, - function(assignedInstance) { - return assignedInstance.id == instance.id; - } - ).length ? true : false; - }); - - //remove assigned VMs (i.e. instance._isSelected == true) - var items = []; - if (instances != null) { - for (var i = 0; i < instances.length; i++) { - if (instances[i]._isSelected == true) - continue; - else - items.push(instances[i]); - } - } - - args.response.success({ - data: items - }); - } - }); - } - }), - action: function(args) { //UI > Network menu > VPC section > select and configure a VPC from listing > select an internal LB tier > click Internal LB > Quickview on an internal LB rule from listing > click Assign VMs button > Select VM dailog - var vms = args.context.instances; - var array1 = []; - for (var i = 0; i < vms.length; i++) { - array1.push(vms[i].id); - } - var virtualmachineids = array1.join(','); - - $.ajax({ - url: createURL('assignToLoadBalancerRule'), - data: { - id: args.context.internalLoadBalancers[0].id, - virtualmachineids: virtualmachineids - }, - dataType: 'json', - async: true, - success: function(data) { - var jid = data.assigntoloadbalancerruleresponse.jobid; - args.response.success({ - _custom: { - jobId: jid - } - }); - } - }); - }, - notification: { - poll: pollAsyncJobResult - } - }, + assignVMs: assignVMAction(), remove: { label: 'Delete Internal LB', @@ -944,196 +1046,7 @@ }); }, actions: { - add: { - label: 'Assign VMs', - messages: { - notification: function(args) { - return 'Assign VMs'; - } - }, - needsRefresh: true, - listView: $.extend(true, {}, cloudStack.sections.instances.listView, { - type: 'checkbox', - filters: false, - multiSelect: false, - subselect: { - isMultiple: true, - label: 'label.use.vm.ip', - dataProvider: function(args) { - var instance = args.context.instances[0]; - var network = args.context.networks[0]; - - $.ajax({ - url: createURL('listNics'), - data: { - virtualmachineid: instance.id, - nicId: instance.nic[0].id - }, - success: function(json) { - var nic = json.listnicsresponse.nic[0]; - var primaryIp = nic.ipaddress; - var secondaryIps = nic.secondaryip ? nic.secondaryip : []; - var ipSelection = []; - var existingIps = $(args.context.subItemData).map( - function(index, item) { return item.itemIp; } - ); - - // Add primary IP as default - if ($.inArray(primaryIp, existingIps) == -1) { - ipSelection.push({ - id: primaryIp, - description: primaryIp + ' (Primary)' - }); - } - - // Add secondary IPs - $(secondaryIps).map(function(index, secondaryIp) { - if ($.inArray(secondaryIp.ipaddress, existingIps) == -1) { - ipSelection.push({ - id: secondaryIp.ipaddress, - description: secondaryIp.ipaddress - }); - } - }); - - args.response.success({ - data: ipSelection - }); - } - }); - } - }, - dataProvider: function(args) { - var assignedInstances; - $.ajax({ - url: createURL('listLoadBalancers'), - data: { - id: args.context.internalLoadBalancers[0].id - }, - async: false, - success: function(json) { - assignedInstances = json.listloadbalancerssresponse.loadbalancer[0].loadbalancerinstance; - if (assignedInstances == null) - assignedInstances = []; - } - }); - - $.ajax({ - url: createURL('listVirtualMachines'), - data: { - networkid: args.context.networks[0].id, - listAll: true - }, - success: function(json) { - var instances = json.listvirtualmachinesresponse.virtualmachine; - - // Pre-select existing instances in LB rule - $(instances).map(function(index, instance) { - instance._isSelected = $.grep(assignedInstances, - function(assignedInstance) { - return assignedInstance.id == instance.id; - } - ).length ? true : false; - }); - - //remove assigned VMs (i.e. instance._isSelected == true) - var items = []; - if (instances != null) { - for (var i = 0; i < instances.length; i++) { - if (instances[i]._isSelected == true) - continue; - else - items.push(instances[i]); - } - } - - args.response.success({ - data: items - }); - } - }); - } - }), - action: function(args) { //UI > Network menu > VPC section > select and configure a VPC from listing > select an internal LB tier > click Internal LB > select an internal LB rule from listing > Details tab > click Assigned VMs tab > click Assign VMs button > Select VM dailog - var $rows = $(':ui-dialog .list-view tbody tr'); - var vms = args.context.instances; - - // Assign subselect values - $(vms).each(function() { - var vm = this; - var $vmRow = $rows.filter(function() { - return $(this).data('json-obj') === vm; - }); - $.extend(vm, { _subselect: $vmRow.find('.subselect select').val() }); - }); - - /* - var array1 = []; - for (var i = 0; i < vms.length; i++) { - array1.push(vms[i].id); - } - var virtualmachineids = array1.join(','); - var inputData = { - id: args.context.internalLoadBalancers[0].id, - virtualmachineids: virtualmachineids - }; - */ - //virtualmachineids parameter has been replaced with vmidipmap parameter, so comment out the lines above. - - - var inputData = { - id: args.context.internalLoadBalancers[0].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 = vms; - 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; - - //"ipAddresses" is not in args.context since this LB rule is under a VPC, not an address. - /* - if (args.context.ipAddresses[0].isportable) { - inputData['vmidipmap[' + vmidipmapIndex + '].vmip'] = selectedIPs[ipIndex].split(',')[1]; - } else { - inputData['vmidipmap[' + vmidipmapIndex + '].vmip'] = selectedIPs[ipIndex]; - } - */ - inputData['vmidipmap[' + vmidipmapIndex + '].vmip'] = selectedIPs[ipIndex]; - - vmidipmapIndex++; - } - } - } - - $.ajax({ - url: createURL('assignToLoadBalancerRule'), - data: inputData, - dataType: 'json', - async: true, - success: function(data) { - var jid = data.assigntoloadbalancerruleresponse.jobid; - args.response.success({ - _custom: { - jobId: jid - } - }); - } - }); - }, - notification: { - poll: pollAsyncJobResult - } - } + add: assignVMAction() }, detailView: { actions: {