You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by je...@apache.org on 2013/07/16 22:38:37 UTC
git commit: updated refs/heads/master to be0dede
Updated Branches:
refs/heads/master 686f9ae64 -> be0dedefa
CLOUDSTACK-3563: UI > Network menu > Guest Netework section > provide "Add Guest Network" option where root-admin can create shared networks from.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/be0dedef
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/be0dedef
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/be0dedef
Branch: refs/heads/master
Commit: be0dedefa8875d1d36baca0686243334daae6964
Parents: 686f9ae
Author: Jessica Wang <je...@apache.org>
Authored: Tue Jul 16 13:28:16 2013 -0700
Committer: Jessica Wang <je...@apache.org>
Committed: Tue Jul 16 13:38:28 2013 -0700
----------------------------------------------------------------------
ui/scripts/network.js | 5 +-
ui/scripts/sharedFunctions.js | 512 +++++++++++++++++++++++++++++++++++++
ui/scripts/system.js | 414 +-----------------------------
3 files changed, 517 insertions(+), 414 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/be0dedef/ui/scripts/network.js
----------------------------------------------------------------------
diff --git a/ui/scripts/network.js b/ui/scripts/network.js
index c52b85a..0822d44 100755
--- a/ui/scripts/network.js
+++ b/ui/scripts/network.js
@@ -550,7 +550,10 @@
messages: {
notification: function() { return 'Add Isolated Guest Network'; }
}
- }
+ },
+
+ rootAdminAddGuestNetwork: $.extend( {}, addGuestNetworkDialog.def, {isHeader: true} )
+
},
id: 'networks',
fields: {
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/be0dedef/ui/scripts/sharedFunctions.js
----------------------------------------------------------------------
diff --git a/ui/scripts/sharedFunctions.js b/ui/scripts/sharedFunctions.js
index bf6464c..a9f833c 100644
--- a/ui/scripts/sharedFunctions.js
+++ b/ui/scripts/sharedFunctions.js
@@ -134,6 +134,518 @@ var lbProviderMap = {
}
};
+//Add Guest Network in Advanced zone (for root-admin only)
+var addGuestNetworkDialog = {
+ zoneObjs: [],
+ physicalNetworkObjs: [],
+ networkOfferingObjs: [],
+ def: {
+ label: 'label.add.guest.network',
+
+ messages: {
+ notification: function(args) {
+ return 'label.add.guest.network';
+ }
+ },
+
+ preFilter: function(args) {
+ if(isAdmin())
+ return true;
+ else
+ return false;
+ },
+
+ createForm: {
+ title: 'label.add.guest.network', //Add Shared Network in advanced zone
+
+ preFilter: function(args) {
+ if('zones' in args.context) {//Infrastructure menu > zone detail > guest traffic type > network tab (only shown in advanced zone) > add guest network dialog
+ args.$form.find('.form-item[rel=zoneId]').hide();
+ args.$form.find('.form-item[rel=physicalNetworkId]').hide();
+ }
+ else {//Network menu > guest network section > add guest network dialog
+ args.$form.find('.form-item[rel=zoneId]').css('display', 'inline-block');
+ args.$form.find('.form-item[rel=physicalNetworkId]').css('display', 'inline-block');
+ }
+ },
+
+ fields: {
+ name: {
+ docID: 'helpGuestNetworkZoneName',
+ label: 'label.name',
+ validation: { required: true }
+ },
+ description: {
+ label: 'label.description',
+ docID: 'helpGuestNetworkZoneDescription',
+ validation: { required: true }
+ },
+
+ zoneId: {
+ label: 'label.zone',
+ validation: { required: true },
+ docID: 'helpGuestNetworkZone',
+ select: function(args) {
+ if('zones' in args.context) {//Infrastructure menu > zone detail > guest traffic type > network tab (only shown in advanced zone) > add guest network dialog
+ addGuestNetworkDialog.zoneObjs = args.context.zones; //i.e. only one zone entry
+ }
+ else {//Network menu > guest network section > add guest network dialog
+ $.ajax({
+ url: createURL('listZones'),
+ async: false,
+ success: function(json) {
+ addGuestNetworkDialog.zoneObjs = []; //reset
+ var items = json.listzonesresponse.zone;
+ if(items != null) {
+ for(var i = 0; i < items.length; i++) {
+ if(items[i].networktype == 'Advanced') {
+ addGuestNetworkDialog.zoneObjs.push(items[i]);
+ }
+ }
+ }
+ }
+ });
+ }
+ args.response.success({
+ data: $.map(addGuestNetworkDialog.zoneObjs, function(zone) {
+ return {
+ id: zone.id,
+ description: zone.name
+ };
+ })
+ });
+ },
+ isHidden: true
+ },
+
+ physicalNetworkId: {
+ label: 'label.physical.network',
+ dependsOn: 'zoneId',
+ select: function(args) {
+ if('physicalNetworks' in args.context) {
+ addGuestNetworkDialog.physicalNetworkObjs = args.context.physicalNetworks;
+ }
+ else {
+ var selectedZoneId = args.$form.find('.form-item[rel=zoneId]').find('select').val();
+ $.ajax({
+ url: createURL('listPhysicalNetworks'),
+ data: {
+ zoneid: selectedZoneId
+ },
+ async: false,
+ success: function(json) {
+ addGuestNetworkDialog.physicalNetworkObjs = json.listphysicalnetworksresponse.physicalnetwork;
+ }
+ });
+ }
+ var items = [];
+ if(addGuestNetworkDialog.physicalNetworkObjs != null) {
+ for(var i = 0; i < addGuestNetworkDialog.physicalNetworkObjs.length; i++) {
+ items.push({ id: addGuestNetworkDialog.physicalNetworkObjs[i].id, description: addGuestNetworkDialog.physicalNetworkObjs[i].name });
+ }
+ }
+ args.response.success({data: items});
+ },
+ isHidden: true
+ },
+
+ vlanId: {
+ label: 'label.vlan.id',
+ docID: 'helpGuestNetworkZoneVLANID'
+ },
+ isolatedpvlanId: {
+ label: 'Secondary Isolated VLAN ID'
+ },
+
+ scope: {
+ label: 'label.scope',
+ docID: 'helpGuestNetworkZoneScope',
+ select: function(args) {
+ var selectedZoneId = args.$form.find('.form-item[rel=zoneId]').find('select').val();
+ var selectedZoneObj = {};
+ if(addGuestNetworkDialog.zoneObjs != null && selectedZoneId != "") {
+ for(var i = 0; i < addGuestNetworkDialog.zoneObjs.length; i++) {
+ if(addGuestNetworkDialog.zoneObjs[i].id == selectedZoneId) {
+ selectedZoneObj = addGuestNetworkDialog.zoneObjs[i];
+ break;
+ }
+ }
+ }
+
+ var array1 = [];
+ if(selectedZoneObj.networktype == "Advanced" && selectedZoneObj.securitygroupsenabled == true) {
+ array1.push({id: 'zone-wide', description: 'All'});
+ }
+ else {
+ array1.push({id: 'zone-wide', description: 'All'});
+ array1.push({id: 'domain-specific', description: 'Domain'});
+ array1.push({id: 'account-specific', description: 'Account'});
+ array1.push({id: 'project-specific', description: 'Project'});
+ }
+ args.response.success({data: array1});
+
+ args.$select.change(function() {
+ var $form = $(this).closest('form');
+ if($(this).val() == "zone-wide") {
+ $form.find('.form-item[rel=domainId]').hide();
+ $form.find('.form-item[rel=subdomainaccess]').hide();
+ $form.find('.form-item[rel=account]').hide();
+ $form.find('.form-item[rel=projectId]').hide();
+ }
+ else if ($(this).val() == "domain-specific") {
+ $form.find('.form-item[rel=domainId]').css('display', 'inline-block');
+ $form.find('.form-item[rel=subdomainaccess]').css('display', 'inline-block');
+ $form.find('.form-item[rel=account]').hide();
+ $form.find('.form-item[rel=projectId]').hide();
+ }
+ else if($(this).val() == "account-specific") {
+ $form.find('.form-item[rel=domainId]').css('display', 'inline-block');
+ $form.find('.form-item[rel=subdomainaccess]').hide();
+ $form.find('.form-item[rel=account]').css('display', 'inline-block');
+ $form.find('.form-item[rel=projectId]').hide();
+ }
+ else if($(this).val() == "project-specific") {
+ $form.find('.form-item[rel=domainId]').css('display', 'inline-block');
+ $form.find('.form-item[rel=subdomainaccess]').hide();
+ $form.find('.form-item[rel=account]').hide();
+ $form.find('.form-item[rel=projectId]').css('display', 'inline-block');
+ }
+ });
+ }
+ },
+ domainId: {
+ label: 'label.domain',
+ validation: { required: true },
+ select: function(args) {
+ var items = [];
+ var selectedZoneId = args.$form.find('.form-item[rel=zoneId]').find('select').val();
+ var selectedZoneObj = {};
+ if(addGuestNetworkDialog.zoneObjs != null && selectedZoneId != "") {
+ for(var i = 0; i < addGuestNetworkDialog.zoneObjs.length; i++) {
+ if(addGuestNetworkDialog.zoneObjs[i].id == selectedZoneId) {
+ selectedZoneObj = addGuestNetworkDialog.zoneObjs[i];
+ break;
+ }
+ }
+ }
+ if(selectedZoneObj.domainid != null) { //list only domains under selectedZoneObj.domainid
+ $.ajax({
+ url: createURL("listDomainChildren&id=" + selectedZoneObj.domainid + "&isrecursive=true"),
+ dataType: "json",
+ async: false,
+ success: function(json) {
+ var domainObjs = json.listdomainchildrenresponse.domain;
+ $(domainObjs).each(function() {
+ items.push({id: this.id, description: this.path});
+ });
+ }
+ });
+ $.ajax({
+ url: createURL("listDomains&id=" + selectedZoneObj.domainid),
+ dataType: "json",
+ async: false,
+ success: function(json) {
+ var domainObjs = json.listdomainsresponse.domain;
+ $(domainObjs).each(function() {
+ items.push({id: this.id, description: this.path});
+ });
+ }
+ });
+ }
+ else { //list all domains
+ $.ajax({
+ url: createURL("listDomains&listAll=true"),
+ dataType: "json",
+ async: false,
+ success: function(json) {
+ var domainObjs = json.listdomainsresponse.domain;
+ $(domainObjs).each(function() {
+ items.push({id: this.id, description: this.path});
+ });
+ }
+ });
+ }
+ args.response.success({data: items});
+ }
+ },
+ subdomainaccess: {
+ label: 'label.subdomain.access', isBoolean: true, isHidden: true,
+ },
+ account: { label: 'label.account' },
+
+ projectId: {
+ label: 'label.project',
+ validation: { required: true },
+ select: function(args) {
+ var items = [];
+ $.ajax({
+ url: createURL("listProjects&listAll=true"),
+ dataType: "json",
+ async: false,
+ success: function(json) {
+ projectObjs = json.listprojectsresponse.project;
+ $(projectObjs).each(function() {
+ items.push({id: this.id, description: this.name});
+ });
+ }
+ });
+ args.response.success({data: items});
+ }
+ },
+
+ networkOfferingId: {
+ label: 'label.network.offering',
+ docID: 'helpGuestNetworkZoneNetworkOffering',
+ dependsOn: 'scope',
+ select: function(args) {
+ var data = {
+ state: 'Enabled',
+ zoneid: args.$form.find('.form-item[rel=zoneId]').find('select').val()
+ };
+
+ var selectedPhysicalNetworkObj = [];
+ var selectedPhysicalNetworkId = args.$form.find('.form-item[rel=physicalNetworkId]').find('select').val();
+ if(addGuestNetworkDialog.physicalNetworkObjs != null) {
+ for(var i = 0; i < addGuestNetworkDialog.physicalNetworkObjs.length; i++) {
+ if(addGuestNetworkDialog.physicalNetworkObjs[i].id == selectedPhysicalNetworkId) {
+ selectedPhysicalNetworkObj = addGuestNetworkDialog.physicalNetworkObjs[i];
+ break;
+ }
+ }
+ }
+ if(selectedPhysicalNetworkObj.tags != null && selectedPhysicalNetworkObj.tags.length > 0) {
+ $.extend(data, {
+ tags: selectedPhysicalNetworkObj.tags
+ });
+ }
+
+ //Network tab in Guest Traffic Type in Infrastructure menu is only available when it's under Advanced zone.
+ //zone dropdown in add guest network dialog includes only Advanced zones.
+ if(args.scope == "zone-wide" || args.scope == "domain-specific") {
+ $.extend(data, {
+ guestiptype: 'Shared'
+ });
+ }
+
+ var items= [];
+ $.ajax({
+ url: createURL('listNetworkOfferings'),
+ data: data,
+ async: false,
+ success: function(json) {
+ addGuestNetworkDialog.networkOfferingObjs = json.listnetworkofferingsresponse.networkoffering;
+ if (addGuestNetworkDialog.networkOfferingObjs != null && addGuestNetworkDialog.networkOfferingObjs.length > 0) {
+ var selectedZoneId = args.$form.find('.form-item[rel=zoneId]').find('select').val();
+ var selectedZoneObj = {};
+ if(addGuestNetworkDialog.zoneObjs != null && selectedZoneId != "") {
+ for(var i = 0; i < addGuestNetworkDialog.zoneObjs.length; i++) {
+ if(addGuestNetworkDialog.zoneObjs[i].id == selectedZoneId) {
+ selectedZoneObj = addGuestNetworkDialog.zoneObjs[i];
+ break;
+ }
+ }
+ }
+ for (var i = 0; i < addGuestNetworkDialog.networkOfferingObjs.length; i++) {
+ //for zone-wide network in Advanced SG-enabled zone, list only SG network offerings
+ if(selectedZoneObj.networktype == 'Advanced' && selectedZoneObj.securitygroupsenabled == true) {
+ if(args.scope == "zone-wide") {
+ var includingSecurityGroup = false;
+ var serviceObjArray = addGuestNetworkDialog.networkOfferingObjs[i].service;
+ for(var k = 0; k < serviceObjArray.length; k++) {
+ if(serviceObjArray[k].name == "SecurityGroup") {
+ includingSecurityGroup = true;
+ break;
+ }
+ }
+ if(includingSecurityGroup == false)
+ continue; //skip to next network offering
+ }
+ }
+ items.push({id: addGuestNetworkDialog.networkOfferingObjs[i].id, description: addGuestNetworkDialog.networkOfferingObjs[i].displaytext});
+ }
+ }
+ }
+ });
+ args.response.success({data: items});
+
+ args.$select.change(function(){
+ var $form = $(this).closest("form");
+ var selectedNetworkOfferingId = $(this).val();
+ $(addGuestNetworkDialog.networkOfferingObjs).each(function(){
+ if(this.id == selectedNetworkOfferingId) {
+ if(this.specifyvlan == false) {
+ $form.find('.form-item[rel=vlanId]').hide();
+ cloudStack.dialog.createFormField.validation.required.remove($form.find('.form-item[rel=vlanId]')); //make vlanId optional
+
+ $form.find('.form-item[rel=isolatedpvlanId]').hide();
+ }
+ else {
+ $form.find('.form-item[rel=vlanId]').css('display', 'inline-block');
+ cloudStack.dialog.createFormField.validation.required.add($form.find('.form-item[rel=vlanId]')); //make vlanId required
+
+ $form.find('.form-item[rel=isolatedpvlanId]').css('display', 'inline-block');
+ }
+ return false; //break each loop
+ }
+ });
+ });
+ }
+ },
+
+ //IPv4 (begin)
+ ip4gateway: {
+ label: 'IPv4 Gateway',
+ docID: 'helpGuestNetworkZoneGateway'
+ },
+ ip4Netmask: {
+ label: 'IPv4 Netmask',
+ docID: 'helpGuestNetworkZoneNetmask'
+ },
+ startipv4: {
+ label: 'IPv4 Start IP',
+ docID: 'helpGuestNetworkZoneStartIP'
+ },
+ endipv4: {
+ label: 'IPv4 End IP',
+ docID: 'helpGuestNetworkZoneEndIP'
+ },
+ //IPv4 (end)
+
+ //IPv6 (begin)
+ ip6gateway: {
+ label: 'IPv6 Gateway',
+ docID: 'helpGuestNetworkZoneGateway'
+ },
+ ip6cidr: {
+ label: 'IPv6 CIDR'
+ },
+ startipv6: {
+ label: 'IPv6 Start IP',
+ docID: 'helpGuestNetworkZoneStartIP'
+ },
+ endipv6: {
+ label: 'IPv6 End IP',
+ docID: 'helpGuestNetworkZoneEndIP'
+ },
+ //IPv6 (end)
+
+ networkdomain: {
+ label: 'label.network.domain',
+ docID: 'helpGuestNetworkZoneNetworkDomain'
+ }
+ }
+ },
+
+ action: function(args) { //Add guest network in advanced zone
+ if (
+ ((args.data.ip4gateway.length == 0) && (args.data.ip4Netmask.length == 0) && (args.data.startipv4.length == 0) && (args.data.endipv4.length == 0))
+ &&
+ ((args.data.ip6gateway.length == 0) && (args.data.ip6cidr.length == 0) && (args.data.startipv6.length == 0) && (args.data.endipv6.length == 0))
+ )
+ {
+ args.response.error("Either IPv4 fields or IPv6 fields need to be filled when adding a guest network");
+ return;
+ }
+
+ var $form = args.$form;
+
+ var array1 = [];
+ array1.push("&zoneId=" + args.data.zoneId);
+ array1.push("&networkOfferingId=" + args.data.networkOfferingId);
+
+ //Pass physical network ID to createNetwork API only when network offering's guestiptype is Shared.
+ var selectedNetworkOfferingObj;
+ if(addGuestNetworkDialog.networkOfferingObjs != null) {
+ for(var i = 0; i < addGuestNetworkDialog.networkOfferingObjs.length; i++) {
+ if(addGuestNetworkDialog.networkOfferingObjs[i].id == args.data.networkOfferingId) {
+ selectedNetworkOfferingObj = addGuestNetworkDialog.networkOfferingObjs[i]
+ break;
+ }
+ }
+ }
+
+ if(selectedNetworkOfferingObj.guestiptype == "Shared")
+ array1.push("&physicalnetworkid=" + args.data.physicalNetworkId);
+
+ array1.push("&name=" + todb(args.data.name));
+ array1.push("&displayText=" + todb(args.data.description));
+
+ if(($form.find('.form-item[rel=vlanId]').css("display") != "none") && (args.data.vlanId != null && args.data.vlanId.length > 0))
+ array1.push("&vlan=" + todb(args.data.vlanId));
+
+ if(($form.find('.form-item[rel=isolatedpvlanId]').css("display") != "none") && (args.data.isolatedpvlanId != null && args.data.isolatedpvlanId.length > 0))
+ array1.push("&isolatedpvlan=" + todb(args.data.isolatedpvlanId));
+
+ if($form.find('.form-item[rel=domainId]').css("display") != "none") {
+ array1.push("&domainId=" + args.data.domainId);
+
+ if($form.find('.form-item[rel=account]').css("display") != "none") { //account-specific
+ array1.push("&account=" + args.data.account);
+ array1.push("&acltype=account");
+ }
+ else if($form.find('.form-item[rel=projectId]').css("display") != "none") { //project-specific
+ array1.push("&projectid=" + args.data.projectId);
+ array1.push("&acltype=account");
+ }
+ else { //domain-specific
+ array1.push("&acltype=domain");
+
+ if ($form.find('.form-item[rel=subdomainaccess]:visible input:checked').size())
+ array1.push("&subdomainaccess=true");
+ else
+ array1.push("&subdomainaccess=false");
+ }
+ }
+ else { //zone-wide
+ array1.push("&acltype=domain"); //server-side will make it Root domain (i.e. domainid=1)
+ }
+
+ //IPv4 (begin)
+ if(args.data.ip4gateway != null && args.data.ip4gateway.length > 0)
+ array1.push("&gateway=" + args.data.ip4gateway);
+ if(args.data.ip4Netmask != null && args.data.ip4Netmask.length > 0)
+ array1.push("&netmask=" + args.data.ip4Netmask);
+ if(($form.find('.form-item[rel=startipv4]').css("display") != "none") && (args.data.startipv4 != null && args.data.startipv4.length > 0))
+ array1.push("&startip=" + args.data.startipv4);
+ if(($form.find('.form-item[rel=endipv4]').css("display") != "none") && (args.data.endipv4 != null && args.data.endipv4.length > 0))
+ array1.push("&endip=" + args.data.endipv4);
+ //IPv4 (end)
+
+ //IPv6 (begin)
+ if(args.data.ip6gateway != null && args.data.ip6gateway.length > 0)
+ array1.push("&ip6gateway=" + args.data.ip6gateway);
+ if(args.data.ip6cidr != null && args.data.ip6cidr.length > 0)
+ array1.push("&ip6cidr=" + args.data.ip6cidr);
+ if(($form.find('.form-item[rel=startipv6]').css("display") != "none") && (args.data.startipv6 != null && args.data.startipv6.length > 0))
+ array1.push("&startipv6=" + args.data.startipv6);
+ if(($form.find('.form-item[rel=endipv6]').css("display") != "none") && (args.data.endipv6 != null && args.data.endipv6.length > 0))
+ array1.push("&endipv6=" + args.data.endipv6);
+ //IPv6 (end)
+
+ if(args.data.networkdomain != null && args.data.networkdomain.length > 0)
+ array1.push("&networkdomain=" + todb(args.data.networkdomain));
+
+ $.ajax({
+ url: createURL("createNetwork" + array1.join("")),
+ dataType: "json",
+ success: function(json) {
+ var item = json.createnetworkresponse.network;
+ args.response.success({data:item});
+ },
+ error: function(XMLHttpResponse) {
+ var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
+ args.response.error(errorMsg);
+ }
+ });
+ },
+ notification: {
+ poll: function(args) {
+ args.complete();
+ }
+ }
+ }
+}
+
// Role Functions
function isAdmin() {
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/be0dedef/ui/scripts/system.js
----------------------------------------------------------------------
diff --git a/ui/scripts/system.js b/ui/scripts/system.js
index 18c3df4..3038a8a 100644
--- a/ui/scripts/system.js
+++ b/ui/scripts/system.js
@@ -1309,419 +1309,7 @@
//scope: { label: 'label.scope' }
},
actions: {
- add: {
- label: 'label.add.guest.network',
-
- messages: {
- confirm: function(args) {
- return 'message.add.guest.network';
- },
- notification: function(args) {
- return 'label.add.guest.network';
- }
- },
-
- createForm: {
- title: 'label.add.guest.network', //Add guest network in advanced zone
-
- fields: {
- name: {
- docID: 'helpGuestNetworkZoneName',
- label: 'label.name',
- validation: { required: true }
- },
- description: {
- label: 'label.description',
- docID: 'helpGuestNetworkZoneDescription',
- validation: { required: true }
- },
- vlanId: {
- label: 'label.vlan.id',
- docID: 'helpGuestNetworkZoneVLANID'
- },
- isolatedpvlanId: {
- label: 'Secondary Isolated VLAN ID'
- },
-
- scope: {
- label: 'label.scope',
- docID: 'helpGuestNetworkZoneScope',
- select: function(args) {
- var array1 = [];
- if(args.context.zones[0].networktype == "Advanced" && args.context.zones[0].securitygroupsenabled == true) {
- array1.push({id: 'zone-wide', description: 'All'});
- }
- else {
- array1.push({id: 'zone-wide', description: 'All'});
- array1.push({id: 'domain-specific', description: 'Domain'});
- array1.push({id: 'account-specific', description: 'Account'});
- array1.push({id: 'project-specific', description: 'Project'});
- }
- args.response.success({data: array1});
-
- args.$select.change(function() {
- var $form = $(this).closest('form');
- if($(this).val() == "zone-wide") {
- $form.find('.form-item[rel=domainId]').hide();
- $form.find('.form-item[rel=subdomainaccess]').hide();
- $form.find('.form-item[rel=account]').hide();
- $form.find('.form-item[rel=projectId]').hide();
- }
- else if ($(this).val() == "domain-specific") {
- $form.find('.form-item[rel=domainId]').css('display', 'inline-block');
- $form.find('.form-item[rel=subdomainaccess]').css('display', 'inline-block');
- $form.find('.form-item[rel=account]').hide();
- $form.find('.form-item[rel=projectId]').hide();
- }
- else if($(this).val() == "account-specific") {
- $form.find('.form-item[rel=domainId]').css('display', 'inline-block');
- $form.find('.form-item[rel=subdomainaccess]').hide();
- $form.find('.form-item[rel=account]').css('display', 'inline-block');
- $form.find('.form-item[rel=projectId]').hide();
- }
- else if($(this).val() == "project-specific") {
- $form.find('.form-item[rel=domainId]').css('display', 'inline-block');
- $form.find('.form-item[rel=subdomainaccess]').hide();
- $form.find('.form-item[rel=account]').hide();
- $form.find('.form-item[rel=projectId]').css('display', 'inline-block');
- }
- });
- }
- },
- domainId: {
- label: 'label.domain',
- validation: { required: true },
- select: function(args) {
- var items = [];
- if(selectedZoneObj.domainid != null) { //list only domains under selectedZoneObj.domainid
- $.ajax({
- url: createURL("listDomainChildren&id=" + selectedZoneObj.domainid + "&isrecursive=true"),
- dataType: "json",
- async: false,
- success: function(json) {
- var domainObjs = json.listdomainchildrenresponse.domain;
- $(domainObjs).each(function() {
- items.push({id: this.id, description: this.path});
- });
- }
- });
- $.ajax({
- url: createURL("listDomains&id=" + selectedZoneObj.domainid),
- dataType: "json",
- async: false,
- success: function(json) {
- var domainObjs = json.listdomainsresponse.domain;
- $(domainObjs).each(function() {
- items.push({id: this.id, description: this.path});
- });
- }
- });
- }
- else { //list all domains
- $.ajax({
- url: createURL("listDomains&listAll=true"),
- dataType: "json",
- async: false,
- success: function(json) {
- var domainObjs = json.listdomainsresponse.domain;
- $(domainObjs).each(function() {
- items.push({id: this.id, description: this.path});
- });
- }
- });
- }
- args.response.success({data: items});
- }
- },
- subdomainaccess: {
- label: 'label.subdomain.access', isBoolean: true, isHidden: true,
- },
- account: { label: 'label.account' },
-
- projectId: {
- label: 'label.project',
- validation: { required: true },
- select: function(args) {
- var items = [];
- $.ajax({
- url: createURL("listProjects&listAll=true"),
- dataType: "json",
- async: false,
- success: function(json) {
- projectObjs = json.listprojectsresponse.project;
- $(projectObjs).each(function() {
- items.push({id: this.id, description: this.name});
- });
- }
- });
- args.response.success({data: items});
- }
- },
-
- networkOfferingId: {
- label: 'label.network.offering',
- docID: 'helpGuestNetworkZoneNetworkOffering',
- dependsOn: 'scope',
- select: function(args) {
- $.ajax({
- url: createURL('listPhysicalNetworks'),
- data: {
- id: args.context.physicalNetworks[0].id
- },
- async: false,
- success: function(json) {
- args.context.physicalNetworks[0] = json.listphysicalnetworksresponse.physicalnetwork[0];
- }
- });
-
- var apiCmd = "listNetworkOfferings&state=Enabled&zoneid=" + selectedZoneObj.id;
- var array1 = [];
-
- if(physicalNetworkObjs.length > 1) { //multiple physical networks
- var guestTrafficTypeTotal = 0;
- for(var i = 0; i < physicalNetworkObjs.length; i++) {
- if(guestTrafficTypeTotal > 1) //as long as guestTrafficTypeTotal > 1, break for loop, don't need to continue to count. It doesn't matter whether guestTrafficTypeTotal is 2 or 3 or 4 or 5 or more. We only care whether guestTrafficTypeTotal is greater than 1.
- break;
- $.ajax({
- url: createURL("listTrafficTypes&physicalnetworkid=" + physicalNetworkObjs[i].id),
- dataType: "json",
- async: false,
- success: function(json) {
- var items = json.listtraffictypesresponse.traffictype;
- for(var k = 0; k < items.length; k++) {
- if(items[k].traffictype == "Guest") {
- guestTrafficTypeTotal++;
- break;
- }
- }
- }
- });
- }
-
- if(guestTrafficTypeTotal > 1) {
- if(args.context.physicalNetworks[0].tags != null && args.context.physicalNetworks[0].tags.length > 0) {
- array1.push("&tags=" + args.context.physicalNetworks[0].tags);
- }
- else {
- alert(dictionary['error.please.specify.physical.network.tags']);
- return;
- }
- }
- }
-
- //this tab (Network tab in guest network) only shows when it's under an Advanced zone
- if(args.scope == "zone-wide" || args.scope == "domain-specific") {
- array1.push("&guestiptype=Shared");
- }
-
- var networkOfferingArray = [];
-
- $.ajax({
- url: createURL(apiCmd + array1.join("")),
- dataType: "json",
- async: false,
- success: function(json) {
- networkOfferingObjs = json.listnetworkofferingsresponse.networkoffering;
- if (networkOfferingObjs != null && networkOfferingObjs.length > 0) {
- for (var i = 0; i < networkOfferingObjs.length; i++) {
- //for zone-wide network in Advanced SG-enabled zone, list only SG network offerings
- if(args.context.zones[0].networktype == 'Advanced' && args.context.zones[0].securitygroupsenabled == true) {
- if(args.scope == "zone-wide") {
- var includingSecurityGroup = false;
- var serviceObjArray = networkOfferingObjs[i].service;
- for(var k = 0; k < serviceObjArray.length; k++) {
- if(serviceObjArray[k].name == "SecurityGroup") {
- includingSecurityGroup = true;
- break;
- }
- }
- if(includingSecurityGroup == false)
- continue; //skip to next network offering
- }
- }
-
- networkOfferingArray.push({id: networkOfferingObjs[i].id, description: networkOfferingObjs[i].displaytext});
- }
- }
- }
- });
-
- args.response.success({data: networkOfferingArray});
-
-
- args.$select.change(function(){
- var $form = $(this).closest("form");
- var selectedNetworkOfferingId = $(this).val();
- $(networkOfferingObjs).each(function(){
- if(this.id == selectedNetworkOfferingId) {
- if(this.specifyvlan == false) {
- $form.find('.form-item[rel=vlanId]').hide();
- cloudStack.dialog.createFormField.validation.required.remove($form.find('.form-item[rel=vlanId]')); //make vlanId optional
-
- $form.find('.form-item[rel=isolatedpvlanId]').hide();
- }
- else {
- $form.find('.form-item[rel=vlanId]').css('display', 'inline-block');
- cloudStack.dialog.createFormField.validation.required.add($form.find('.form-item[rel=vlanId]')); //make vlanId required
-
- $form.find('.form-item[rel=isolatedpvlanId]').css('display', 'inline-block');
- }
- return false; //break each loop
- }
- });
- });
- }
- },
-
- //IPv4 (begin)
- ip4gateway: {
- label: 'IPv4 Gateway',
- docID: 'helpGuestNetworkZoneGateway'
- },
- ip4Netmask: {
- label: 'IPv4 Netmask',
- docID: 'helpGuestNetworkZoneNetmask'
- },
- startipv4: {
- label: 'IPv4 Start IP',
- docID: 'helpGuestNetworkZoneStartIP'
- },
- endipv4: {
- label: 'IPv4 End IP',
- docID: 'helpGuestNetworkZoneEndIP'
- },
- //IPv4 (end)
-
- //IPv6 (begin)
- ip6gateway: {
- label: 'IPv6 Gateway',
- docID: 'helpGuestNetworkZoneGateway'
- },
- ip6cidr: {
- label: 'IPv6 CIDR'
- },
- startipv6: {
- label: 'IPv6 Start IP',
- docID: 'helpGuestNetworkZoneStartIP'
- },
- endipv6: {
- label: 'IPv6 End IP',
- docID: 'helpGuestNetworkZoneEndIP'
- },
- //IPv6 (end)
-
- networkdomain: {
- label: 'label.network.domain',
- docID: 'helpGuestNetworkZoneNetworkDomain'
- }
- }
- },
-
- action: function(args) { //Add guest network in advanced zone
- if (
- ((args.data.ip4gateway.length == 0) && (args.data.ip4Netmask.length == 0) && (args.data.startipv4.length == 0) && (args.data.endipv4.length == 0))
- &&
- ((args.data.ip6gateway.length == 0) && (args.data.ip6cidr.length == 0) && (args.data.startipv6.length == 0) && (args.data.endipv6.length == 0))
- )
- {
- args.response.error("Either IPv4 fields or IPv6 fields need to be filled when adding a guest network");
- return;
- }
-
- var $form = args.$form;
-
- var array1 = [];
- array1.push("&zoneId=" + selectedZoneObj.id);
- array1.push("&networkOfferingId=" + args.data.networkOfferingId);
-
- //Pass physical network ID to createNetwork API only when network offering's guestiptype is Shared.
- var selectedNetworkOfferingObj;
- $(networkOfferingObjs).each(function(){
- if(this.id == args.data.networkOfferingId) {
- selectedNetworkOfferingObj = this;
- return false; //break each loop
- }
- });
- if(selectedNetworkOfferingObj.guestiptype == "Shared")
- array1.push("&physicalnetworkid=" + selectedPhysicalNetworkObj.id);
-
- array1.push("&name=" + todb(args.data.name));
- array1.push("&displayText=" + todb(args.data.description));
-
- if(($form.find('.form-item[rel=vlanId]').css("display") != "none") && (args.data.vlanId != null && args.data.vlanId.length > 0))
- array1.push("&vlan=" + todb(args.data.vlanId));
-
- if(($form.find('.form-item[rel=isolatedpvlanId]').css("display") != "none") && (args.data.isolatedpvlanId != null && args.data.isolatedpvlanId.length > 0))
- array1.push("&isolatedpvlan=" + todb(args.data.isolatedpvlanId));
-
- if($form.find('.form-item[rel=domainId]').css("display") != "none") {
- array1.push("&domainId=" + args.data.domainId);
-
- if($form.find('.form-item[rel=account]').css("display") != "none") { //account-specific
- array1.push("&account=" + args.data.account);
- array1.push("&acltype=account");
- }
- else if($form.find('.form-item[rel=projectId]').css("display") != "none") { //project-specific
- array1.push("&projectid=" + args.data.projectId);
- array1.push("&acltype=account");
- }
- else { //domain-specific
- array1.push("&acltype=domain");
-
- if ($form.find('.form-item[rel=subdomainaccess]:visible input:checked').size())
- array1.push("&subdomainaccess=true");
- else
- array1.push("&subdomainaccess=false");
- }
- }
- else { //zone-wide
- array1.push("&acltype=domain"); //server-side will make it Root domain (i.e. domainid=1)
- }
-
- //IPv4 (begin)
- if(args.data.ip4gateway != null && args.data.ip4gateway.length > 0)
- array1.push("&gateway=" + args.data.ip4gateway);
- if(args.data.ip4Netmask != null && args.data.ip4Netmask.length > 0)
- array1.push("&netmask=" + args.data.ip4Netmask);
- if(($form.find('.form-item[rel=startipv4]').css("display") != "none") && (args.data.startipv4 != null && args.data.startipv4.length > 0))
- array1.push("&startip=" + args.data.startipv4);
- if(($form.find('.form-item[rel=endipv4]').css("display") != "none") && (args.data.endipv4 != null && args.data.endipv4.length > 0))
- array1.push("&endip=" + args.data.endipv4);
- //IPv4 (end)
-
- //IPv6 (begin)
- if(args.data.ip6gateway != null && args.data.ip6gateway.length > 0)
- array1.push("&ip6gateway=" + args.data.ip6gateway);
- if(args.data.ip6cidr != null && args.data.ip6cidr.length > 0)
- array1.push("&ip6cidr=" + args.data.ip6cidr);
- if(($form.find('.form-item[rel=startipv6]').css("display") != "none") && (args.data.startipv6 != null && args.data.startipv6.length > 0))
- array1.push("&startipv6=" + args.data.startipv6);
- if(($form.find('.form-item[rel=endipv6]').css("display") != "none") && (args.data.endipv6 != null && args.data.endipv6.length > 0))
- array1.push("&endipv6=" + args.data.endipv6);
- //IPv6 (end)
-
- if(args.data.networkdomain != null && args.data.networkdomain.length > 0)
- array1.push("&networkdomain=" + todb(args.data.networkdomain));
-
- $.ajax({
- url: createURL("createNetwork" + array1.join("")),
- dataType: "json",
- success: function(json) {
- var item = json.createnetworkresponse.network;
- args.response.success({data:item});
- },
- error: function(XMLHttpResponse) {
- var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
- args.response.error(errorMsg);
- }
- });
- },
- notification: {
- poll: function(args) {
- args.complete();
- }
- }
- }
+ add: addGuestNetworkDialog.def
},
dataProvider: function(args) {