Updated Branches: refs/heads/master 9a3067fb8 -> 1bdb80a20
CLOUDSTACK-3164: UI - VPC section - tier - Internal LB - detailView - add assignVMs action in detailView (will show on Quickview in listView as well). Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/1bdb80a2 Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/1bdb80a2 Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/1bdb80a2 Branch: refs/heads/master Commit: 1bdb80a20b0429a33662ab350b405e12f19ac690 Parents: 9a3067f Author: Jessica Wang <[email protected]> Authored: Tue Jul 2 16:14:54 2013 -0700 Committer: Jessica Wang <[email protected]> Committed: Tue Jul 2 16:16:51 2013 -0700 ---------------------------------------------------------------------- ui/scripts/vpc.js | 110 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 108 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1bdb80a2/ui/scripts/vpc.js ---------------------------------------------------------------------- diff --git a/ui/scripts/vpc.js b/ui/scripts/vpc.js index 5742286..7cbf63a 100644 --- a/ui/scripts/vpc.js +++ b/ui/scripts/vpc.js @@ -582,7 +582,98 @@ detailView: { isMaximized: true, name: 'Internal LB details', - actions: { + 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) { + 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 + } + }, + remove: { label: 'Delete Internal LB', messages: { @@ -630,7 +721,22 @@ sourceipaddress: { label: 'Source IP Address' }, sourceport: { label: 'Source Port' }, instanceport: { label: 'Instance Port' }, - algorithm: { label: 'label.algorithm' } + algorithm: { label: 'label.algorithm' }, + loadbalancerinstance: { + label: 'Assigned VMs', + converter: function(objArray) { + var s = ''; + if(objArray != null) { + for(var i = 0; i < objArray.length; i++) { + if(i > 0) { + s += ', '; + } + s += objArray[i].name + ' ('+ objArray[i].ipaddress + ')'; + } + } + return s; + } + } } ], dataProvider: function(args) {
