You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by bf...@apache.org on 2012/08/03 20:42:51 UTC
git commit: CS-15802: Add VPC filter to instance wizard network select
Updated Branches:
refs/heads/vpc 20b079075 -> 5cb356024
CS-15802: Add VPC filter to instance wizard network select
Adds drop-down select to filter networks by VPC.
-If no VPC is selected, only show non-VPC isolated networks
-If VPC is selected, show tiers from specified VPC. Note that only one
tier/network can be checked at a time in this mode, and 'add network'
text field is hidden
Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/5cb35602
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/5cb35602
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/5cb35602
Branch: refs/heads/vpc
Commit: 5cb356024f9ff393a78b596315ab8e7130cd670d
Parents: 20b0790
Author: Brian Federle <br...@citrix.com>
Authored: Fri Aug 3 11:21:48 2012 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Fri Aug 3 11:42:40 2012 -0700
----------------------------------------------------------------------
ui/scripts/instanceWizard.js | 38 +++++++++--
ui/scripts/ui-custom/instanceWizard.js | 91 ++++++++++++++++++++++++++-
2 files changed, 122 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/5cb35602/ui/scripts/instanceWizard.js
----------------------------------------------------------------------
diff --git a/ui/scripts/instanceWizard.js b/ui/scripts/instanceWizard.js
index 05a561e..8265d0c 100644
--- a/ui/scripts/instanceWizard.js
+++ b/ui/scripts/instanceWizard.js
@@ -16,7 +16,7 @@
// under the License.
(function($, cloudStack) {
- var zoneObjs, hypervisorObjs, featuredTemplateObjs, communityTemplateObjs, myTemplateObjs, featuredIsoObjs, community
+ var zoneObjs, hypervisorObjs, featuredTemplateObjs, communityTemplateObjs, myTemplateObjs, featuredIsoObjs, community;
var selectedZoneObj, selectedTemplateObj, selectedHypervisor, selectedDiskOfferingObj;
var step5ContainerType = 'nothing-to-select'; //'nothing-to-select', 'select-network', 'select-security-group'
@@ -24,6 +24,17 @@
maxDiskOfferingSize: function() {
return g_capabilities.customdiskofferingmaxsize;
},
+
+ // Called in networks list, when VPC drop-down is changed
+ // -- if vpcID given, return true if in network specified by vpcID
+ // -- if vpcID == -1, return true if network is not associated with a VPC
+ vpcFilter: function(data, vpcID) {
+ return vpcID != -1?
+ data.vpcid == vpcID :
+ !data.vpcid;
+ },
+
+ // Data providers for each wizard step
steps: [
// Step 1: Setup
function(args) {
@@ -308,11 +319,23 @@
networkData.account = g_account;
}
- var networkObjs;
+ var networkObjs, vpcObjs;
+
+ // Get VPCs
+ $.ajax({
+ url: createURL('listVPCs'),
+ data: isDomainAdmin() ?
+ { account: args.context.users[0].account, domainid: args.context.users[0].domainid } :
+ { listAll: true },
+ async: false,
+ success: function(json) {
+ vpcObjs = json.listvpcsresponse.vpc ? json.listvpcsresponse.vpc : [];
+ }
+ });
+
$.ajax({
url: createURL('listNetworks'),
data: networkData,
- dataType: "json",
async: false,
success: function(json) {
networkObjs = json.listnetworksresponse.network ? json.listnetworksresponse.network : [];
@@ -344,7 +367,8 @@
myNetworks: [], //not used any more
sharedNetworks: networkObjs,
securityGroups: [],
- networkOfferings: networkOfferingObjs
+ networkOfferings: networkOfferingObjs,
+ vpcs: vpcObjs
}
});
}
@@ -377,7 +401,8 @@
myNetworks: [], //not used any more
sharedNetworks: [],
securityGroups: securityGroupArray,
- networkOfferings: []
+ networkOfferings: [],
+ vpcs: []
}
});
}
@@ -389,7 +414,8 @@
myNetworks: [], //not used any more
sharedNetworks: [],
securityGroups: [],
- networkOfferings: []
+ networkOfferings: [],
+ vpcs: []
}
});
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/5cb35602/ui/scripts/ui-custom/instanceWizard.js
----------------------------------------------------------------------
diff --git a/ui/scripts/ui-custom/instanceWizard.js b/ui/scripts/ui-custom/instanceWizard.js
index 1e8dca9..8415fa9 100644
--- a/ui/scripts/ui-custom/instanceWizard.js
+++ b/ui/scripts/ui-custom/instanceWizard.js
@@ -108,6 +108,14 @@
.click(function() {
var $radio = $(this).closest('.select').find('input[type=radio]');
+ if ($(this).attr('type') == 'checkbox') {
+ if ($(this).closest('.select-container').hasClass('single-select')) {
+ $(this).closest('.select').siblings().find('input[type=checkbox]')
+ .attr('checked', false);
+ $(this).closest('.select').find('input[type=radio]').click();
+ }
+ }
+
if ($radio.is(':checked') && !$(this).is(':checked')) {
if (!$radio.closest('.select').index()) {
return false;
@@ -126,7 +134,8 @@
$('<div>').addClass('select-desc')
.append($('<div>').addClass('name').html(this[fields.name]))
.append($('<div>').addClass('desc').html(this[fields.desc]))
- );
+ )
+ .data('json-obj', this);
$selects.append($select);
@@ -145,6 +154,11 @@
if (!$checkbox.is(':checked')) {
$checkbox.attr('checked', true);
}
+
+ if ($(this).closest('.select-container').hasClass('single-select')) {
+ $(this).closest('.select').siblings().find('input[type=checkbox]')
+ .attr('checked', false);
+ }
})
.after(
$('<div>').addClass('name').html(options.secondary.desc)
@@ -486,9 +500,81 @@
// Show relevant conditional sub-step if present
$step.find('.wizard-step-conditional').hide();
+ // Filter network list by VPC ID
+ var filterNetworkList = function(vpcID) {
+ var $selects = $step.find('.my-networks .select-container .select');
+ var $visibleSelects = $($.grep($selects, function(select) {
+ var $select = $(select);
+
+ return args.vpcFilter($select.data('json-obj'), vpcID);
+ }));
+ var $addNetworkForm = $step.find('.select.new-network');
+ var $addNewNetworkCheck = $addNetworkForm.find('input[name=new-network]');
+
+ // VPC networks cannot be created via instance wizard
+ if (vpcID != -1) {
+ $step.find('.my-networks .select-container').addClass('single-select');
+ $addNetworkForm.hide();
+
+ if ($addNewNetworkCheck.is(':checked')) {
+ $addNewNetworkCheck.click();
+ $addNewNetworkCheck.attr('checked', false);
+ }
+ } else {
+ $step.find('.my-networks .select-container').removeClass('single-select');
+ $addNetworkForm.show();
+ }
+
+ $selects.find('input[type=checkbox]').attr('checked', false);
+ $selects.hide();
+ $visibleSelects.show();
+
+ // Select first visible item by default
+ $visibleSelects.filter(':first')
+ .find('input[type=radio]')
+ .click();
+
+ cloudStack.evenOdd($visibleSelects, 'div.select', {
+ even: function($elem) {
+ $elem.removeClass('odd');
+ $elem.addClass('even');
+ },
+ odd: function($elem) {
+ $elem.removeClass('even');
+ $elem.addClass('odd');
+ }
+ });
+ };
+
+ var $vpcSelect = $step.find('select[name=vpc-filter]');
+
+ $vpcSelect.unbind('change');
+ $vpcSelect.change(function() {
+ filterNetworkList($vpcSelect.val());
+ });
+
return {
response: {
success: function(args) {
+ var vpcs = args.data.vpcs;
+
+ // Populate VPC drop-down
+ $vpcSelect.html('');
+ $(vpcs).map(function(index, vpc) {
+ var $option = $('<option>');
+ var id = vpc.id;
+ var description = vpc.name;
+
+ $option.attr('value', id);
+ $option.html(description);
+ $option.appendTo($vpcSelect);
+ });
+
+ // 'No VPC' option
+ $('<option>').attr('value', '-1').html('None').prependTo($vpcSelect);
+
+ $vpcSelect.val(-1);
+
// Populate network offering drop-down
$(args.data.networkOfferings).each(function() {
$('<option>')
@@ -523,6 +609,9 @@
})
);
+ // Show non-VPC networks by default
+ filterNetworkList(-1);
+
// Security groups (alt. page)
$step.find('.security-groups .select-container').append(
makeSelects('security-groups', args.data.securityGroups, {