mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	While executing the find/replace, I found some blocks of duplicated code. Therefore, I extracted the duplicated part to an utils file, and then removed the duplicated blocks.
		
			
				
	
	
		
			4805 lines
		
	
	
		
			304 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			4805 lines
		
	
	
		
			304 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
| // Licensed to the Apache Software Foundation (ASF) under one
 | |
| // or more contributor license agreements.  See the NOTICE file
 | |
| // distributed with this work for additional information
 | |
| // regarding copyright ownership.  The ASF licenses this file
 | |
| // to you under the Apache License, Version 2.0 (the
 | |
| // "License"); you may not use this file except in compliance
 | |
| // with the License.  You may obtain a copy of the License at
 | |
| //
 | |
| //   http://www.apache.org/licenses/LICENSE-2.0
 | |
| //
 | |
| // Unless required by applicable law or agreed to in writing,
 | |
| // software distributed under the License is distributed on an
 | |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 | |
| // KIND, either express or implied.  See the License for the
 | |
| // specific language governing permissions and limitations
 | |
| // under the License.
 | |
| 
 | |
| (function(cloudStack, $) {
 | |
|     var selectedNetworkOfferingHavingSG = false;
 | |
|     var selectedNetworkOfferingHavingEIP = false;
 | |
|     var selectedNetworkOfferingHavingELB = false;
 | |
|     var selectedNetworkOfferingHavingNetscaler = false;
 | |
|     var returnedPublicVlanIpRanges = []; //public VlanIpRanges returned by API
 | |
|     var configurationUseLocalStorage = false;
 | |
|     var skipGuestTrafficStep = false;
 | |
|     var selectedNetworkOfferingObj = {};
 | |
|     var baremetalProviders = ["BaremetalDhcpProvider", "BaremetalPxeProvider", "BaremetalUserdataProvider"];
 | |
|     var selectedBaremetalProviders = [];
 | |
| 
 | |
|     // Makes URL string for traffic label
 | |
|     var trafficLabelParam = function(trafficTypeID, data, physicalNetworkID) {
 | |
|         var zoneType = data.zone.networkType;
 | |
|         var hypervisor = data.zone.hypervisor;
 | |
|         physicalNetworkID = zoneType == 'Advanced' ? physicalNetworkID : 0;
 | |
|         var physicalNetwork = data.physicalNetworks ? data.physicalNetworks[physicalNetworkID] : null;
 | |
|         var trafficConfig = physicalNetwork ? physicalNetwork.trafficTypeConfiguration[trafficTypeID] : null;
 | |
| 
 | |
|         var trafficLabel;
 | |
|         if (trafficConfig != null) {
 | |
|             if ('label' in trafficConfig) {
 | |
|                 trafficLabel = trafficConfig.label;
 | |
|             }
 | |
|             else {
 | |
|                 trafficLabel = '';
 | |
| 
 | |
|                 if ('vSwitchName' in trafficConfig) {
 | |
|                     trafficLabel += trafficConfig.vSwitchName;
 | |
|                 }
 | |
|                 if ('vlanId' in trafficConfig) {
 | |
|                     if (trafficLabel.length > 0)
 | |
|                         trafficLabel += ',';
 | |
|                     trafficLabel += trafficConfig.vlanId;
 | |
|                 }
 | |
|                 if ('vSwitchType' in trafficConfig) {
 | |
|                     if (trafficLabel.length > 0)
 | |
|                         trafficLabel += ',';
 | |
|                     trafficLabel += trafficConfig.vSwitchType;
 | |
|                 }
 | |
| 
 | |
|                 if (trafficLabel.length == 0) { //trafficLabel == ''
 | |
|                     trafficLabel = null;
 | |
|                 } else if (trafficLabel.length >= 1) {
 | |
|                     if (trafficLabel.charAt(trafficLabel.length-1) == ',') { //if last character is comma
 | |
|                         trafficLabel = trafficLabel.substring(0, trafficLabel.length - 1); //remove the last character (which is comma)
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         var hypervisorAttr, trafficLabelStr;
 | |
| 
 | |
|         switch (hypervisor) {
 | |
|             case 'XenServer':
 | |
|                 hypervisorAttr = 'xennetworklabel';
 | |
|                 break;
 | |
|             case 'KVM':
 | |
|                 hypervisorAttr = 'kvmnetworklabel';
 | |
|                 break;
 | |
|             case 'VMware':
 | |
|                 hypervisorAttr = 'vmwarenetworklabel';
 | |
|                 break;
 | |
|             case 'Hyperv':
 | |
|                 hypervisorAttr = 'hypervnetworklabel';
 | |
|                 break;
 | |
|             case 'BareMetal':
 | |
|                 hypervisorAttr = 'baremetalnetworklabel';
 | |
|                 break;
 | |
|             case 'Ovm':
 | |
|                 hypervisorAttr = 'ovmnetworklabel';
 | |
|                 break;
 | |
|             case 'LXC':
 | |
|                 hypervisorAttr = 'lxcnetworklabel';
 | |
|                 break;
 | |
|             case 'Ovm3':
 | |
|                 hypervisorAttr = 'ovm3networklabel';
 | |
|                 break;
 | |
|         }
 | |
| 
 | |
|         trafficLabelStr = trafficLabel ? '&' + hypervisorAttr + '=' + trafficLabel : '';
 | |
| 
 | |
|         return trafficLabelStr;
 | |
|     };
 | |
| 
 | |
|     cloudStack.zoneWizard = {
 | |
|         // Return required traffic types, for configure physical network screen
 | |
|         requiredTrafficTypes: function(args) {
 | |
|             if (args.data.zone.networkType == 'Basic') {
 | |
|                 if (selectedNetworkOfferingHavingEIP || selectedNetworkOfferingHavingELB) {
 | |
|                     return [
 | |
|                         'management',
 | |
|                         'guest',
 | |
|                         'public'
 | |
|                     ];
 | |
|                 } else {
 | |
|                     return [
 | |
|                         'management',
 | |
|                         'guest'
 | |
|                     ];
 | |
|                 }
 | |
|             } else { // args.data.zone.networkType == 'Advanced'
 | |
|                 if (args.data.zone.sgEnabled != true) {
 | |
|                     return [
 | |
|                         'management',
 | |
|                         'public',
 | |
|                         'guest'
 | |
|                     ];
 | |
|                 } else {
 | |
|                     return [
 | |
|                         'management',
 | |
|                         'guest'
 | |
|                     ];
 | |
|                 }
 | |
|             }
 | |
|         },
 | |
| 
 | |
|         disabledTrafficTypes: function(args) {
 | |
|             if (args.data.zone.networkType == 'Basic') {
 | |
|                 if (selectedNetworkOfferingHavingEIP || selectedNetworkOfferingHavingELB)
 | |
|                     return [];
 | |
|                 else
 | |
|                     return ['public'];
 | |
|             } else { // args.data.zone.networkType == 'Advanced'
 | |
|                 if (args.data.zone.sgEnabled != true) {
 | |
|                     return [];
 | |
|                 } else {
 | |
|                     return ['public'];
 | |
|                 }
 | |
|             }
 | |
|         },
 | |
| 
 | |
|         cloneTrafficTypes: function(args) {
 | |
|             if (args.data.zone.networkType == 'Advanced') {
 | |
|                 return ['guest'];
 | |
|             } else {
 | |
|                 return [];
 | |
|             }
 | |
|         },
 | |
| 
 | |
|         customUI: {
 | |
|             publicTrafficIPRange: function(args) {
 | |
|                 var multiEditData = [];
 | |
|                 var totalIndex = 0;
 | |
| 
 | |
|                 return $('<div>').multiEdit({
 | |
|                     context: args.context,
 | |
|                     noSelect: true,
 | |
|                     fields: {
 | |
|                         'gateway': {
 | |
|                             edit: true,
 | |
|                             label: 'label.gateway'
 | |
|                         },
 | |
|                         'netmask': {
 | |
|                             edit: true,
 | |
|                             label: 'label.netmask'
 | |
|                         },
 | |
|                         'vlanid': {
 | |
|                             edit: true,
 | |
|                             label: 'label.vlan',
 | |
|                             isOptional: true
 | |
|                         },
 | |
|                         'startip': {
 | |
|                             edit: true,
 | |
|                             label: 'label.start.IP',
 | |
|                             validation: {
 | |
|                                 ipv4: true
 | |
|                             }
 | |
|                         },
 | |
|                         'endip': {
 | |
|                             edit: true,
 | |
|                             label: 'label.end.IP',
 | |
|                             validation: {
 | |
|                                 ipv4: true
 | |
|                             }
 | |
|                         },
 | |
|                         'add-rule': {
 | |
|                             label: 'label.add',
 | |
|                             addButton: true
 | |
|                         }
 | |
|                     },
 | |
|                     add: {
 | |
|                         label: 'label.add',
 | |
|                         action: function(args) {
 | |
|                             multiEditData.push($.extend(args.data, {
 | |
|                                 index: totalIndex
 | |
|                             }));
 | |
| 
 | |
|                             totalIndex++;
 | |
|                             args.response.success();
 | |
|                         }
 | |
|                     },
 | |
|                     actions: {
 | |
|                         destroy: {
 | |
|                             label: 'label.remove.rule',
 | |
|                             action: function(args) {
 | |
|                                 multiEditData = $.grep(multiEditData, function(item) {
 | |
|                                     return item.index != args.context.multiRule[0].index;
 | |
|                                 });
 | |
|                                 args.response.success();
 | |
|                             }
 | |
|                         }
 | |
|                     },
 | |
|                     dataProvider: function(args) {
 | |
|                         args.response.success({
 | |
|                             data: multiEditData
 | |
|                         });
 | |
|                     }
 | |
|                 });
 | |
|             },
 | |
| 
 | |
|             storageTrafficIPRange: function(args) {
 | |
| 
 | |
|                 var multiEditData = [];
 | |
|                 var totalIndex = 0;
 | |
| 
 | |
|                 return $('<div>').multiEdit({
 | |
|                     context: args.context,
 | |
|                     noSelect: true,
 | |
|                     fields: {
 | |
|                         'gateway': {
 | |
|                             edit: true,
 | |
|                             label: 'label.gateway'
 | |
|                         },
 | |
|                         'netmask': {
 | |
|                             edit: true,
 | |
|                             label: 'label.netmask'
 | |
|                         },
 | |
|                         'vlan': {
 | |
|                             edit: true,
 | |
|                             label: 'label.vlan',
 | |
|                             isOptional: true
 | |
|                         },
 | |
|                         'startip': {
 | |
|                             edit: true,
 | |
|                             label: 'label.start.IP'
 | |
|                         },
 | |
|                         'endip': {
 | |
|                             edit: true,
 | |
|                             label: 'label.end.IP'
 | |
|                         },
 | |
|                         'add-rule': {
 | |
|                             label: 'label.add',
 | |
|                             addButton: true
 | |
|                         }
 | |
|                     },
 | |
|                     add: {
 | |
|                         label: 'label.add',
 | |
|                         action: function(args) {
 | |
|                             multiEditData.push($.extend(args.data, {
 | |
|                                 index: totalIndex
 | |
|                             }));
 | |
| 
 | |
|                             totalIndex++;
 | |
|                             args.response.success();
 | |
|                         }
 | |
|                     },
 | |
|                     actions: {
 | |
|                         destroy: {
 | |
|                             label: 'label.remove.rule',
 | |
|                             action: function(args) {
 | |
|                                 multiEditData = $.grep(multiEditData, function(item) {
 | |
|                                     return item.index != args.context.multiRule[0].index;
 | |
|                                 });
 | |
|                                 args.response.success();
 | |
|                             }
 | |
|                         }
 | |
|                     },
 | |
|                     dataProvider: function(args) {
 | |
|                         args.response.success({
 | |
|                             data: multiEditData
 | |
|                         });
 | |
|                     }
 | |
|                 });
 | |
|             }
 | |
|         },
 | |
| 
 | |
|         preFilters: {
 | |
|             addNetscalerDevice: function(args) { //add Netscaler
 | |
|                 var isShown;
 | |
|                 if (selectedNetworkOfferingHavingNetscaler == true) {
 | |
|                     isShown = true;
 | |
|                     $('.conditional.netscaler').show();
 | |
|                 } else {
 | |
|                     isShown = false;
 | |
|                     $('.conditional.netscaler').hide();
 | |
|                 }
 | |
|                 return isShown;
 | |
|             },
 | |
| 
 | |
|             addPublicNetwork: function(args) {
 | |
|                 var isShown;
 | |
|                 var $publicTrafficDesc = $('.zone-wizard:visible').find('#add_zone_public_traffic_desc');
 | |
|                 if (args.data['network-model'] == 'Basic') {
 | |
|                     if (selectedNetworkOfferingHavingSG == true && selectedNetworkOfferingHavingEIP == true && selectedNetworkOfferingHavingELB == true) {
 | |
|                         isShown = true;
 | |
|                     } else {
 | |
|                         isShown = false;
 | |
|                     }
 | |
| 
 | |
|                     $publicTrafficDesc.find('#for_basic_zone').css('display', 'inline');
 | |
|                     $publicTrafficDesc.find('#for_advanced_zone').hide();
 | |
|                 } else { //args.data['network-model'] == 'Advanced'
 | |
|                     if (args.data["zone-advanced-sg-enabled"] != "on")
 | |
|                         isShown = true;
 | |
|                     else
 | |
|                         isShown = false;
 | |
| 
 | |
|                     $publicTrafficDesc.find('#for_advanced_zone').css('display', 'inline');
 | |
|                     $publicTrafficDesc.find('#for_basic_zone').hide();
 | |
|                 }
 | |
|                 return isShown;
 | |
|             },
 | |
| 
 | |
|             setupPhysicalNetwork: function(args) {
 | |
|                 if (args.data['network-model'] == 'Basic' && !(selectedNetworkOfferingHavingELB && selectedNetworkOfferingHavingEIP)) {
 | |
|                     $('.setup-physical-network .info-desc.conditional.basic').show();
 | |
|                     $('.setup-physical-network .info-desc.conditional.advanced').hide();
 | |
|                     $('.subnav li.public-network').hide();
 | |
|                 } else {
 | |
|                     $('.setup-physical-network .info-desc.conditional.basic').hide();
 | |
|                     $('.setup-physical-network .info-desc.conditional.advanced').show();
 | |
|                     $('.subnav li.public-network').show();
 | |
|                 }
 | |
|                 return true; // Both basic & advanced zones show physical network UI
 | |
|             },
 | |
| 
 | |
|             configureGuestTraffic: function(args) {
 | |
|                 if ((args.data['network-model'] == 'Basic') || (args.data['network-model'] == 'Advanced' && args.data["zone-advanced-sg-enabled"] == "on")) {
 | |
|                     $('.setup-guest-traffic').addClass('basic');
 | |
|                     $('.setup-guest-traffic').removeClass('advanced');
 | |
|                     skipGuestTrafficStep = false; //set value
 | |
|                 } else { //args.data['network-model'] == 'Advanced' && args.data["zone-advanced-sg-enabled"] !=    "on"
 | |
|                     $('.setup-guest-traffic').removeClass('basic');
 | |
|                     $('.setup-guest-traffic').addClass('advanced');
 | |
| 
 | |
|                     //skip the step if OVS tunnel manager is enabled
 | |
|                     skipGuestTrafficStep = false; //reset it before ajax call
 | |
|                     $.ajax({
 | |
|                         url: createURL('listConfigurations'),
 | |
|                         data: {
 | |
|                             name: 'sdn.ovs.controller'
 | |
|                         },
 | |
|                         dataType: "json",
 | |
|                         async: false,
 | |
|                         success: function(json) {
 | |
|                             var items = json.listconfigurationsresponse.configuration; //2 entries returned: 'sdn.ovs.controller', 'sdn.ovs.controller.default.label'
 | |
|                             $(items).each(function() {
 | |
|                                 if (this.name == 'sdn.ovs.controller') {
 | |
|                                     if (this.value == 'true' || this.value == true) {
 | |
|                                         skipGuestTrafficStep = true;
 | |
|                                     }
 | |
|                                     return false; //break each loop
 | |
|                                 }
 | |
|                             });
 | |
|                         }
 | |
|                     });
 | |
|                 }
 | |
|                 return !skipGuestTrafficStep;
 | |
|             },
 | |
| 
 | |
|             configureStorageTraffic: function(args) {
 | |
|                 return $.grep(args.groupedData.physicalNetworks, function(network) {
 | |
|                     return $.inArray('storage', network.trafficTypes) > -1;
 | |
|                 }).length;
 | |
|             },
 | |
| 
 | |
|             addHost: function(args) {
 | |
|                 return (args.groupedData.zone.hypervisor != "VMware");
 | |
|             },
 | |
| 
 | |
|             addPrimaryStorage: function(args) {
 | |
|                 if(args.data.localstorageenabled == 'on' && args.data.localstorageenabledforsystemvm == 'on') {
 | |
|                     return false; //skip step only when both localstorage and localstorage for system vm are checked
 | |
|                 }
 | |
|                 return true;
 | |
|             }
 | |
|         },
 | |
| 
 | |
|         forms: {
 | |
|             zone: {
 | |
|                 preFilter: function(args) {
 | |
|                     var $form = args.$form;
 | |
| 
 | |
|                     if (args.data['network-model'] == 'Basic') { //Basic zone
 | |
|                         args.$form.find('[rel=networkOfferingId]').show(); //will be used to create a guest network during zone creation
 | |
|                         args.$form.find('[rel=guestcidraddress]').hide();
 | |
| 
 | |
|                         args.$form.find('[rel=ip6dns1]').hide();
 | |
|                         args.$form.find('[rel=ip6dns2]').hide();
 | |
|                     } else { //Advanced zone
 | |
|                         if (args.data["zone-advanced-sg-enabled"] != "on") { //Advanced SG-disabled zone
 | |
|                             args.$form.find('[rel=networkOfferingId]').hide();
 | |
|                             args.$form.find('[rel=guestcidraddress]').show();
 | |
| 
 | |
|                             args.$form.find('[rel=ip6dns1]').show();
 | |
|                             args.$form.find('[rel=ip6dns2]').show();
 | |
|                         } else { //Advanced SG-enabled zone
 | |
|                             args.$form.find('[rel=networkOfferingId]').show(); //will be used to create a guest network during zone creation
 | |
|                             args.$form.find('[rel=guestcidraddress]').hide();
 | |
| 
 | |
|                             args.$form.find('[rel=ip6dns1]').hide();
 | |
|                             args.$form.find('[rel=ip6dns2]').hide();
 | |
|                         }
 | |
|                     }
 | |
|                 },
 | |
|                 fields: {
 | |
|                     name: {
 | |
|                         label: 'label.name',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         desc: 'message.tooltip.zone.name'
 | |
|                     },
 | |
|                     ip4dns1: {
 | |
|                         label: 'label.ipv4.dns1',
 | |
|                         validation: {
 | |
|                             required: true,
 | |
|                             ipv4: true
 | |
|                         },
 | |
|                         desc: 'message.tooltip.dns.1'
 | |
|                     },
 | |
|                     ip4dns2: {
 | |
|                         label: 'label.ipv4.dns2',
 | |
|                         desc: 'message.tooltip.dns.2',
 | |
|                         validation: {
 | |
|                             ipv4: true
 | |
|                         }
 | |
|                     },
 | |
| 
 | |
|                     ip6dns1: {
 | |
|                         label: 'label.ipv6.dns1',
 | |
|                         desc: 'message.tooltip.dns.1',
 | |
|                         validation: {
 | |
|                             ipv6: true
 | |
|                         }
 | |
|                     },
 | |
|                     ip6dns2: {
 | |
|                         label: 'label.ipv6.dns2',
 | |
|                         desc: 'message.tooltip.dns.2',
 | |
|                         validation: {
 | |
|                             ipv6: true
 | |
|                         }
 | |
|                    },
 | |
| 
 | |
|                     internaldns1: {
 | |
|                         label: 'label.internal.dns.1',
 | |
|                         validation: {
 | |
|                             required: true,
 | |
|                             ipv4: true
 | |
|                         },
 | |
|                         desc: 'message.tooltip.internal.dns.1'
 | |
|                     },
 | |
|                     internaldns2: {
 | |
|                         label: 'label.internal.dns.2',
 | |
|                         desc: 'message.tooltip.internal.dns.2',
 | |
|                         validation: {
 | |
|                             ipv4: true
 | |
|                         }
 | |
|                     },
 | |
|                     hypervisor: {
 | |
|                         label: 'label.hypervisor',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         select: function(args) {
 | |
|                             $.ajax({
 | |
|                                 url: createURL('listHypervisors'),
 | |
|                                 async: false,
 | |
|                                 data: {
 | |
|                                     listAll: true
 | |
|                                 },
 | |
|                                 success: function(json) {
 | |
|                                     var items = json.listhypervisorsresponse.hypervisor;
 | |
|                                     var array1 = [];
 | |
| 
 | |
|                                     var firstOption = "XenServer";
 | |
|                                     var nonSupportedHypervisors = {};
 | |
|                                     if (args.context.zones[0]['network-model'] == "Advanced" && args.context.zones[0]['zone-advanced-sg-enabled'] == "on") {
 | |
|                                         firstOption = "KVM";
 | |
|                                         nonSupportedHypervisors["VMware"] = 1;
 | |
|                                         nonSupportedHypervisors["BareMetal"] = 1;
 | |
|                                         nonSupportedHypervisors["Hyperv"] = 1;
 | |
|                                         nonSupportedHypervisors["Ovm"] = 1;
 | |
|                                         nonSupportedHypervisors["Ovm3"] = 1;
 | |
|                                     }
 | |
| 
 | |
|                                     if (args.context.zones[0]['network-model'] == "Advanced") { //CLOUDSTACK-7681: UI > zone wizard > Advanced zone > hypervisor => do not support BareMetal
 | |
|                                         nonSupportedHypervisors["BareMetal"] = 1;
 | |
|                                     }
 | |
| 
 | |
|                                     if (items != null) {
 | |
|                                         for (var i = 0; i < items.length; i++) {
 | |
|                                             if (items[i].name in nonSupportedHypervisors)
 | |
|                                                 continue;
 | |
| 
 | |
|                                             if (items[i].name == firstOption)
 | |
|                                                 array1.unshift({
 | |
|                                                     id: items[i].name,
 | |
|                                                     description: items[i].name
 | |
|                                                 });
 | |
|                                             else
 | |
|                                                 array1.push({
 | |
|                                                     id: items[i].name,
 | |
|                                                     description: items[i].name
 | |
|                                                 });
 | |
|                                         }
 | |
|                                     }
 | |
|                                     args.response.success({
 | |
|                                         data: array1
 | |
|                                     });
 | |
|                                 }
 | |
|                             });
 | |
|                         }
 | |
|                     },
 | |
|                     networkOfferingId: {
 | |
|                         label: 'label.network.offering',
 | |
|                         dependsOn: 'hypervisor',
 | |
|                         select: function(args) {
 | |
|                             var selectedNetworkOfferingObj = {};
 | |
|                             var networkOfferingObjs = [];
 | |
| 
 | |
|                             args.$select.unbind("change").bind("change", function() {
 | |
|                                 //reset when different network offering is selected
 | |
|                                 selectedNetworkOfferingHavingSG = false;
 | |
|                                 selectedNetworkOfferingHavingEIP = false;
 | |
|                                 selectedNetworkOfferingHavingELB = false;
 | |
|                                 selectedNetworkOfferingHavingNetscaler = false;
 | |
| 
 | |
|                                 var selectedNetworkOfferingId = $(this).val();
 | |
|                                 $(networkOfferingObjs).each(function() {
 | |
|                                     if (this.id == selectedNetworkOfferingId) {
 | |
|                                         selectedNetworkOfferingObj = this;
 | |
|                                         return false; //break $.each() loop
 | |
|                                     }
 | |
|                                 });
 | |
| 
 | |
|                                 if (selectedNetworkOfferingObj.havingNetscaler == true)
 | |
|                                     selectedNetworkOfferingHavingNetscaler = true;
 | |
|                                 if (selectedNetworkOfferingObj.havingSG == true)
 | |
|                                     selectedNetworkOfferingHavingSG = true;
 | |
|                                 if (selectedNetworkOfferingObj.havingEIP == true)
 | |
|                                     selectedNetworkOfferingHavingEIP = true;
 | |
|                                 if (selectedNetworkOfferingObj.havingELB == true)
 | |
|                                     selectedNetworkOfferingHavingELB = true;
 | |
|                             });
 | |
| 
 | |
| 
 | |
|                             $.ajax({
 | |
|                                 url: createURL("listNetworkOfferings&state=Enabled&guestiptype=Shared"),
 | |
|                                 dataType: "json",
 | |
|                                 async: false,
 | |
|                                 success: function(json) {
 | |
|                                     networkOfferingObjs = json.listnetworkofferingsresponse.networkoffering;
 | |
|                                     var availableNetworkOfferingObjs = [];
 | |
|                                     $(networkOfferingObjs).each(function() {
 | |
|                                         var thisNetworkOffering = this;
 | |
|                                         $(this.service).each(function() {
 | |
|                                             var thisService = this;
 | |
| 
 | |
|                                             $(thisService.provider).each(function() {
 | |
|                                                 if (this.name == "Netscaler") {
 | |
|                                                     thisNetworkOffering.havingNetscaler = true;
 | |
|                                                 } else if ($.inArray(this.name, baremetalProviders) != -1) {
 | |
|                                                     selectedBaremetalProviders.push(this.name);
 | |
|                                                 }
 | |
|                                             });
 | |
| 
 | |
|                                             if (thisService.name == "SecurityGroup") {
 | |
|                                                 thisNetworkOffering.havingSG = true;
 | |
|                                             } else if (thisService.name == "StaticNat") {
 | |
|                                                 $(thisService.capability).each(function() {
 | |
|                                                     if (this.name == "ElasticIp" && this.value == "true") {
 | |
|                                                         thisNetworkOffering.havingEIP = true;
 | |
|                                                         return false; //break $.each() loop
 | |
|                                                     }
 | |
|                                                 });
 | |
|                                             } else if (thisService.name == "Lb") {
 | |
|                                                 $(thisService.capability).each(function() {
 | |
|                                                     if (this.name == "ElasticLb" && this.value == "true") {
 | |
|                                                         thisNetworkOffering.havingELB = true;
 | |
|                                                         return false; //break $.each() loop
 | |
|                                                     }
 | |
|                                                 });
 | |
|                                             }
 | |
|                                         });
 | |
| 
 | |
|                                         if (thisNetworkOffering.havingEIP == true && thisNetworkOffering.havingELB == true) { //EIP ELB
 | |
|                                             if (args.hypervisor == "VMware") { //VMware does not support EIP ELB
 | |
|                                                 return true; //move to next item in $.each() loop
 | |
|                                             }
 | |
|                                             if (args.context.zones[0]["network-model"] == "Advanced" && args.context.zones[0]["zone-advanced-sg-enabled"] == "on") { // Advanced SG-enabled zone doesn't support EIP ELB
 | |
|                                                 return true; //move to next item in $.each() loop
 | |
|                                             }
 | |
|                                         }
 | |
| 
 | |
|                                         if (args.context.zones[0]["network-model"] == "Advanced" && args.context.zones[0]["zone-advanced-sg-enabled"] == "on") { // Advanced SG-enabled zone
 | |
|                                             if (thisNetworkOffering.havingSG != true) {
 | |
|                                                 return true; //move to next item in $.each() loop
 | |
|                                             }
 | |
|                                         }
 | |
| 
 | |
|                                         availableNetworkOfferingObjs.push(thisNetworkOffering);
 | |
|                                     });
 | |
| 
 | |
|                                     args.response.success({
 | |
|                                         data: $.map(availableNetworkOfferingObjs, function(offering) {
 | |
|                                             return {
 | |
|                                                 id: offering.id,
 | |
|                                                 description: offering.name
 | |
|                                             };
 | |
|                                         })
 | |
|                                     });
 | |
| 
 | |
|                                 }
 | |
|                             });
 | |
|                         }
 | |
|                     },
 | |
|                     networkdomain: {
 | |
|                         label: 'label.network.domain',
 | |
|                         desc: 'message.tooltip.network.domain'
 | |
|                     },
 | |
|                     guestcidraddress: {
 | |
|                         label: 'label.guest.cidr',
 | |
|                         defaultValue: '10.1.1.0/24',
 | |
|                         validation: {
 | |
|                             required: false
 | |
|                         }
 | |
|                     },
 | |
|                     isdedicated: {
 | |
|                         isBoolean: true,
 | |
|                         label: 'label.dedicated',
 | |
|                         isChecked: false
 | |
|                     },
 | |
|                     domain: {
 | |
|                         label: 'label.domain',
 | |
|                         dependsOn: 'isdedicated',
 | |
|                         isHidden: true,
 | |
|                         select: function(args) {
 | |
|                             $.ajax({
 | |
|                                 url: createURL("listDomains&listAll=true"),
 | |
|                                 data: {
 | |
|                                     viewAll: true
 | |
|                                 },
 | |
|                                 dataType: "json",
 | |
|                                 async: false,
 | |
|                                 success: function(json) {
 | |
|                                     domainObjs = json.listdomainsresponse.domain;
 | |
|                                     args.response.success({
 | |
|                                         data: $.map(domainObjs, function(domain) {
 | |
|                                             return {
 | |
|                                                 id: domain.id,
 | |
|                                                 description: domain.path
 | |
|                                             };
 | |
|                                         })
 | |
|                                     });
 | |
|                                 }
 | |
|                             });
 | |
|                         }
 | |
|                     },
 | |
| 
 | |
|                     account: {
 | |
|                         label: 'label.account',
 | |
|                         isHidden: true,
 | |
|                         dependsOn: 'isdedicated',
 | |
|                         //docID:'helpAccountForDedication',
 | |
|                         validation: {
 | |
|                             required: false
 | |
|                         }
 | |
| 
 | |
|                     },
 | |
| 
 | |
|                     localstorageenabled: {
 | |
|                         label: 'label.local.storage.enabled',
 | |
|                         isBoolean: true,
 | |
|                         onChange: function(args) {
 | |
| 
 | |
|                         }
 | |
|                     },
 | |
| 
 | |
|                     localstorageenabledforsystemvm: {
 | |
|                         label: 'label.local.storage.enabled.system.vms',
 | |
|                         isBoolean: true,
 | |
|                         onChange: function(args) {
 | |
| 
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             },
 | |
| 
 | |
|             pod: {
 | |
|                 fields: {
 | |
|                     name: {
 | |
|                         label: 'label.pod.name',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         desc: 'message.tooltip.pod.name'
 | |
|                     },
 | |
|                     reservedSystemGateway: {
 | |
|                         label: 'label.reserved.system.gateway',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         desc: 'message.tooltip.reserved.system.gateway'
 | |
|                     },
 | |
|                     reservedSystemNetmask: {
 | |
|                         label: 'label.reserved.system.netmask',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         desc: 'message.tooltip.reserved.system.netmask'
 | |
|                     },
 | |
|                     reservedSystemStartIp: {
 | |
|                         label: 'label.start.reserved.system.IP',
 | |
|                         validation: {
 | |
|                             required: true,
 | |
|                             ipv4: true
 | |
|                         }
 | |
|                     },
 | |
|                     reservedSystemEndIp: {
 | |
|                         label: 'label.end.reserved.system.IP',
 | |
|                         validation: {
 | |
|                             required: false,
 | |
|                             ipv4: true
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             },
 | |
| 
 | |
|             basicPhysicalNetwork: { //"Netscaler" now
 | |
|                 preFilter: function(args) {
 | |
|                     if (args.data['network-model'] == 'Basic' && (selectedNetworkOfferingHavingELB || selectedNetworkOfferingHavingEIP)) {
 | |
|                         args.$form.find('[rel=dedicated]').hide();
 | |
|                     } else {
 | |
|                         args.$form.find('[rel=dedicated]').show();
 | |
|                     };
 | |
|                     cloudStack.preFilter.addLoadBalancerDevice
 | |
|                 },
 | |
|                 fields: {
 | |
|                     ip: {
 | |
|                         label: 'label.ip.address'
 | |
|                     },
 | |
|                     username: {
 | |
|                         label: 'label.username'
 | |
|                     },
 | |
|                     password: {
 | |
|                         label: 'label.password',
 | |
|                         isPassword: true
 | |
|                     },
 | |
|                     networkdevicetype: {
 | |
|                         label: 'label.type',
 | |
|                         select: function(args) {
 | |
|                             var items = [];
 | |
|                             items.push({
 | |
|                                 id: "NetscalerMPXLoadBalancer",
 | |
|                                 description: "NetScaler MPX LoadBalancer"
 | |
|                             });
 | |
|                             items.push({
 | |
|                                 id: "NetscalerVPXLoadBalancer",
 | |
|                                 description: "NetScaler VPX LoadBalancer"
 | |
|                             });
 | |
|                             items.push({
 | |
|                                 id: "NetscalerSDXLoadBalancer",
 | |
|                                 description: "NetScaler SDX LoadBalancer"
 | |
|                             });
 | |
|                             args.response.success({
 | |
|                                 data: items
 | |
|                             });
 | |
|                         }
 | |
|                     },
 | |
|                     publicinterface: {
 | |
|                         label: 'label.public.interface'
 | |
|                     },
 | |
|                     privateinterface: {
 | |
|                         label: 'label.private.interface'
 | |
|                     },
 | |
|                     gslbprovider: {
 | |
|                         label: 'label.gslb.service',
 | |
|                         isBoolean: true,
 | |
|                         isChecked: false
 | |
|                     },
 | |
|                     gslbproviderpublicip: {
 | |
|                         label: 'label.gslb.service.public.ip'
 | |
|                     },
 | |
|                     gslbproviderprivateip: {
 | |
|                         label: 'label.gslb.service.private.ip'
 | |
|                     },
 | |
|                     numretries: {
 | |
|                         label: 'label.numretries',
 | |
|                         defaultValue: '2'
 | |
|                     },
 | |
|                     dedicated: {
 | |
|                         label: 'label.dedicated',
 | |
|                         isBoolean: true,
 | |
|                         isChecked: false
 | |
|                     },
 | |
|                     capacity: {
 | |
|                         label: 'label.capacity',
 | |
|                         validation: {
 | |
|                             required: false,
 | |
|                             number: true
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             },
 | |
| 
 | |
|             guestTraffic: {
 | |
|                 preFilter: function(args) {
 | |
|                     var $guestTrafficDesc = $('.zone-wizard:visible').find('#add_zone_guest_traffic_desc');
 | |
|                     if ((args.data['network-model'] == 'Basic') || (args.data['network-model'] == 'Advanced' && args.data["zone-advanced-sg-enabled"] == "on")) {
 | |
|                         $guestTrafficDesc.find('#for_basic_zone').css('display', 'inline');
 | |
|                         $guestTrafficDesc.find('#for_advanced_zone').hide();
 | |
|                     } else { //args.data['network-model'] == 'Advanced' && args.data["zone-advanced-sg-enabled"] !=    "on"
 | |
|                         $guestTrafficDesc.find('#for_advanced_zone').css('display', 'inline');
 | |
|                         $guestTrafficDesc.find('#for_basic_zone').hide();
 | |
|                     }
 | |
| 
 | |
|                     var selectedZoneObj = {
 | |
|                         networktype: args.data['network-model']
 | |
|                     };
 | |
| 
 | |
|                     if (selectedZoneObj.networktype == 'Basic') {
 | |
|                         args.$form.find('[rel="guestGateway"]').show();
 | |
|                         args.$form.find('[rel="guestNetmask"]').show();
 | |
|                         args.$form.find('[rel="guestStartIp"]').show();
 | |
|                         args.$form.find('[rel="guestEndIp"]').show();
 | |
|                         args.$form.find('[rel="vlanId"]').hide();
 | |
|                         args.$form.find('[rel="vlanRange"]').hide();
 | |
|                     } else if (selectedZoneObj.networktype == 'Advanced' && args.data["zone-advanced-sg-enabled"] == "on") {
 | |
|                         args.$form.find('[rel="guestGateway"]').show();
 | |
|                         args.$form.find('[rel="guestNetmask"]').show();
 | |
|                         args.$form.find('[rel="guestStartIp"]').show();
 | |
|                         args.$form.find('[rel="guestEndIp"]').show();
 | |
|                         args.$form.find('[rel="vlanId"]').show();
 | |
|                         args.$form.find('[rel="vlanRange"]').hide();
 | |
|                     } else if (selectedZoneObj.networktype == 'Advanced' && args.data["zone-advanced-sg-enabled"] != "on") { //this conditional statement is useless because the div will be replaced with other div(multiple tabs in Advanced zone without SG) later
 | |
|                         args.$form.find('[rel="guestGateway"]').hide();
 | |
|                         args.$form.find('[rel="guestNetmask"]').hide();
 | |
|                         args.$form.find('[rel="guestStartIp"]').hide();
 | |
|                         args.$form.find('[rel="guestEndIp"]').hide();
 | |
|                         args.$form.find('[rel="vlanId"]').hide();
 | |
|                         args.$form.find('[rel="vlanRange"]').show();
 | |
|                     }
 | |
|                 },
 | |
| 
 | |
|                 fields: {
 | |
|                     guestGateway: {
 | |
|                         label: 'label.guest.gateway'
 | |
|                     }, //Basic, Advanced with SG
 | |
|                     guestNetmask: {
 | |
|                         label: 'label.guest.netmask'
 | |
|                     }, //Basic, Advanced with SG
 | |
|                     guestStartIp: {
 | |
|                         label: 'label.guest.start.ip'
 | |
|                     }, //Basic, Advanced with SG
 | |
|                     guestEndIp: {
 | |
|                         label: 'label.guest.end.ip'
 | |
|                     }, //Basic, Advanced with SG
 | |
|                     vlanId: {
 | |
|                         label: 'label.vlan.id'
 | |
|                     }, //Advanced with SG
 | |
| 
 | |
|                     vlanRange: { //in multiple tabs (tabs is as many as Guest Traffic types in multiple physical networks in Advanced Zone without SG)
 | |
|                         label: 'label.vlan.range',
 | |
|                         range: ['vlanRangeStart', 'vlanRangeEnd'],
 | |
|                         validation: {
 | |
|                             required: false,
 | |
|                             digits: true
 | |
|                         } //Bug 13517 - AddZone wizard->Configure guest traffic: Vlan Range is optional
 | |
|                     }
 | |
|                 }
 | |
|             },
 | |
|             cluster: {
 | |
|                 fields: {
 | |
|                     hypervisor: {
 | |
|                         label: 'label.hypervisor',
 | |
|                         select: function(args) {
 | |
|                             // Disable select -- selection is made on zone setup step
 | |
|                             args.$select.attr('disabled', 'disabled');
 | |
| 
 | |
|                             $.ajax({
 | |
|                                 url: createURL("listHypervisors"),
 | |
|                                 dataType: "json",
 | |
|                                 async: false,
 | |
|                                 success: function(json) {
 | |
|                                     var hypervisors = json.listhypervisorsresponse.hypervisor;
 | |
|                                     var items = [];
 | |
|                                     $(hypervisors).each(function() {
 | |
|                                         items.push({
 | |
|                                             id: this.name,
 | |
|                                             description: this.name
 | |
|                                         })
 | |
|                                     });
 | |
|                                     args.response.success({
 | |
|                                         data: items
 | |
|                                     });
 | |
|                                     args.$select.val(args.context.zones[0].hypervisor);
 | |
|                                     args.$select.change();
 | |
|                                 }
 | |
|                             });
 | |
| 
 | |
|                             var vSwitchEnabled = false;
 | |
|                             var dvSwitchEnabled = false;
 | |
|                             // Check whether vSwitch capability is enabled
 | |
|                             $.ajax({
 | |
|                                 url: createURL('listConfigurations'),
 | |
|                                 data: {
 | |
|                                     name: 'vmware.use.nexus.vswitch'
 | |
|                                 },
 | |
|                                 async: false,
 | |
|                                 success: function(json) {
 | |
|                                     if (json.listconfigurationsresponse.configuration[0].value == 'true') {
 | |
|                                         vSwitchEnabled = true;
 | |
|                                     }
 | |
|                                 }
 | |
|                             });
 | |
| 
 | |
|                             //Check whether dvSwitch is enabled or not
 | |
|                             $.ajax({
 | |
|                                 url: createURL('listConfigurations'),
 | |
|                                 data: {
 | |
|                                     name: 'vmware.use.dvswitch'
 | |
|                                 },
 | |
|                                 async: false,
 | |
|                                 success: function(json) {
 | |
|                                     if (json.listconfigurationsresponse.configuration[0].value == 'true') {
 | |
|                                         dvSwitchEnabled = true;
 | |
|                                     }
 | |
|                                 }
 | |
|                             });
 | |
| 
 | |
|                             args.$select.bind("change", function(event) {
 | |
|                                 var $form = $(this).closest('form');
 | |
|                                 var $vsmFields = $form.find('[rel]').filter(function() {
 | |
|                                     var vsmFields = [
 | |
|                                         'vsmipaddress',
 | |
|                                         'vsmusername',
 | |
|                                         'vsmpassword'
 | |
|                                     ];
 | |
| 
 | |
|                                     return $.inArray($(this).attr('rel'), vsmFields) > -1;
 | |
|                                 });
 | |
| 
 | |
|                                 if ($(this).val() == "VMware") {
 | |
|                                     if (dvSwitchEnabled) {
 | |
|                                         $form.find('.form-item[rel=overridepublictraffic]').css('display', 'inline-block');
 | |
|                                         $form.find('.form-item[rel=overridepublictraffic]').find('input[type=checkbox]').removeAttr('checked');
 | |
| 
 | |
|                                         $form.find('.form-item[rel=overrideguesttraffic]').css('display', 'inline-block');
 | |
|                                         $form.find('.form-item[rel=overrideguesttraffic]').find('input[type=checkbox]').removeAttr('checked');
 | |
|                                     } else {
 | |
|                                         $form.find('.form-item[rel=overridepublictraffic]').css('display', 'none');
 | |
|                                         $form.find('.form-item[rel=overrideguesttraffic]').css('display', 'none');
 | |
|                                     }
 | |
| 
 | |
|                                     $form.find('[rel=vCenterHost]').css('display', 'block');
 | |
|                                     $form.find('[rel=vCenterUsername]').css('display', 'block');
 | |
|                                     $form.find('[rel=vCenterPassword]').css('display', 'block');
 | |
|                                     $form.find('[rel=vCenterDatacenter]').css('display', 'block');
 | |
| 
 | |
|                                     if (vSwitchEnabled) {
 | |
|                                         $vsmFields.css('display', 'block');
 | |
|                                     } else {
 | |
|                                         $vsmFields.css('display', 'none');
 | |
|                                     }
 | |
|                                 } else if ($(this).val() == "Ovm3") {
 | |
|                                     $form.find('.form-item[rel=ovm3pool]').css('display', 'inline-block');
 | |
|                                     $form.find('.form-item[rel=ovm3pool]').find('input[type=checkbox]').removeAttr('checked');
 | |
| 
 | |
|                                     $form.find('.form-item[rel=ovm3cluster]').css('display', 'inline-block');
 | |
|                                     $form.find('.form-item[rel=ovm3cluster]').find('input[type=checkbox]').removeAttr('checked');
 | |
|                                     $form.find('[rel=ovm3vip]').css('display', 'block');
 | |
|                                 } else {
 | |
|                                     $form.find('.form-item[rel=overridepublictraffic]').css('display', 'none');
 | |
|                                     $form.find('.form-item[rel=overrideguesttraffic]').css('display', 'none');
 | |
| 
 | |
|                                     $form.find('[rel=vCenterHost]').css('display', 'none');
 | |
|                                     $form.find('[rel=vCenterUsername]').css('display', 'none');
 | |
|                                     $form.find('[rel=vCenterPassword]').css('display', 'none');
 | |
|                                     $form.find('[rel=vCenterDatacenter]').css('display', 'none');
 | |
|                                 }
 | |
|                             });
 | |
|                         }
 | |
|                     },
 | |
|                     name: {
 | |
|                         label: 'label.cluster.name',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         }
 | |
|                     },
 | |
| 
 | |
|                     //hypervisor==VMWare begins here
 | |
| 
 | |
|                     vCenterHost: {
 | |
|                         label: 'label.vcenter.host',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         } //required, for firing addVmwareDc API
 | |
|                     },
 | |
|                     vCenterUsername: {
 | |
|                         label: 'label.vcenter.username',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         } //required, for firing addVmwareDc API
 | |
|                     },
 | |
|                     vCenterPassword: {
 | |
|                         label: 'label.vcenter.password',
 | |
|                         isPassword: true,
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         } //required, for firing addVmwareDc API
 | |
|                     },
 | |
|                     vCenterDatacenter: {
 | |
|                         label: 'label.vcenter.datacenter',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         } //required, for firing addVmwareDc API
 | |
|                     },
 | |
| 
 | |
|                     overridepublictraffic: {
 | |
|                         label: 'label.override.public.traffic',
 | |
|                         isBoolean: true,
 | |
|                         isHidden: true
 | |
| 
 | |
|                     },
 | |
| 
 | |
|                     overrideguesttraffic: {
 | |
|                         label: 'label.override.guest.traffic',
 | |
|                         isBoolean: true,
 | |
|                         isHidden: true
 | |
| 
 | |
|                     },
 | |
| 
 | |
|                     //Cisco Nexus Vswitch
 | |
|                     vsmipaddress: {
 | |
|                         label: 'label.cisco.nexus1000v.ip.address',
 | |
|                         validation: {
 | |
|                             required: false
 | |
|                         },
 | |
|                         isHidden: true
 | |
|                     },
 | |
|                     vsmusername: {
 | |
|                         label: 'label.cisco.nexus1000v.username',
 | |
|                         validation: {
 | |
|                             required: false
 | |
|                         },
 | |
|                         isHidden: true
 | |
|                     },
 | |
|                     vsmpassword: {
 | |
|                         label: 'label.cisco.nexus1000v.password',
 | |
|                         validation: {
 | |
|                             required: false
 | |
|                         },
 | |
|                         isPassword: true,
 | |
|                         isHidden: true
 | |
|                     }
 | |
|                     //hypervisor==VMWare ends here
 | |
|                 }
 | |
|             },
 | |
|             host: {
 | |
|                 preFilter: function(args) {
 | |
|                     var selectedClusterObj = {
 | |
|                         hypervisortype: args.data.hypervisor
 | |
|                     };
 | |
| 
 | |
|                     var $form = args.$form;
 | |
| 
 | |
|                     if (selectedClusterObj.hypervisortype == "VMware") {
 | |
|                         $form.find('[rel=hostname]').hide();
 | |
|                         $form.find('[rel=username]').hide();
 | |
|                         $form.find('[rel=password]').hide();
 | |
| 
 | |
|                         $form.find('[rel=vcenterHost]').css('display', 'block');
 | |
| 
 | |
|                         $form.find('[rel=baremetalCpuCores]').hide();
 | |
|                         $form.find('[rel=baremetalCpu]').hide();
 | |
|                         $form.find('[rel=baremetalMemory]').hide();
 | |
|                         $form.find('[rel=baremetalMAC]').hide();
 | |
| 
 | |
|                         $form.find('[rel=agentUsername]').hide();
 | |
|                         $form.find('[rel=agentPassword]').hide();
 | |
| 
 | |
|                         $form.find('.form-item[rel=agentUsername]').hide();
 | |
|                         $form.find('.form-item[rel=agentPassword]').hide();
 | |
|                         $form.find('.form-item[rel=agentPort]').hide();
 | |
|                         $form.find('.form-item[rel=ovm3vip]').hide();
 | |
|                         $form.find('.form-item[rel=ovm3pool]').hide();
 | |
|                         $form.find('.form-item[rel=ovm3cluster]').hide();
 | |
|                     } else if (selectedClusterObj.hypervisortype == "BareMetal") {
 | |
|                         $form.find('[rel=hostname]').css('display', 'block');
 | |
|                         $form.find('[rel=username]').css('display', 'block');
 | |
|                         $form.find('[rel=password]').css('display', 'block');
 | |
| 
 | |
|                         $form.find('[rel=baremetalCpuCores]').css('display', 'block');
 | |
|                         $form.find('[rel=baremetalCpu]').css('display', 'block');
 | |
|                         $form.find('[rel=baremetalMemory]').css('display', 'block');
 | |
|                         $form.find('[rel=baremetalMAC]').css('display', 'block');
 | |
| 
 | |
|                         $form.find('[rel=vcenterHost]').hide();
 | |
| 
 | |
|                         $form.find('[rel=agentUsername]').hide();
 | |
|                         $form.find('[rel=agentPassword]').hide();
 | |
| 
 | |
|                         $form.find('.form-item[rel=agentUsername]').hide();
 | |
|                         $form.find('.form-item[rel=agentPassword]').hide();
 | |
|                         $form.find('.form-item[rel=agentPort]').hide();
 | |
|                         $form.find('.form-item[rel=ovm3vip]').hide();
 | |
|                         $form.find('.form-item[rel=ovm3pool]').hide();
 | |
|                         $form.find('.form-item[rel=ovm3cluster]').hide();
 | |
|                     } else if (selectedClusterObj.hypervisortype == "Ovm") {
 | |
|                         $form.find('[rel=hostname]').css('display', 'block');
 | |
|                         $form.find('[rel=username]').css('display', 'block');
 | |
|                         $form.find('[rel=password]').css('display', 'block');
 | |
| 
 | |
|                         $form.find('[rel=vcenterHost]').hide();
 | |
| 
 | |
|                         $form.find('[rel=baremetalCpuCores]').hide();
 | |
|                         $form.find('[rel=baremetalCpu]').hide();
 | |
|                         $form.find('[rel=baremetalMemory]').hide();
 | |
|                         $form.find('[rel=baremetalMAC]').hide();
 | |
| 
 | |
|                         $form.find('[rel=agentUsername]').css('display', 'block');
 | |
|                         $form.find('[rel=agentUsername]').find('input').val("oracle");
 | |
|                         $form.find('[rel=agentPassword]').css('display', 'block');
 | |
| 
 | |
|                         $form.find('.form-item[rel=agentPort]').hide();
 | |
|                         $form.find('.form-item[rel=ovm3vip]').hide();
 | |
|                         $form.find('.form-item[rel=ovm3pool]').hide();
 | |
|                         $form.find('.form-item[rel=ovm3cluster]').hide();
 | |
|                    } else if (selectedClusterObj.hypervisortype == "Ovm3") {
 | |
|                         $form.find('.form-item[rel=hostname]').css('display', 'inline-block');
 | |
|                         $form.find('.form-item[rel=username]').css('display', 'inline-block');
 | |
|                         $form.find('.form-item[rel=password]').css('display', 'inline-block');
 | |
| 
 | |
|                         $form.find('.form-item[rel=vcenterHost]').hide();
 | |
| 
 | |
|                         $form.find('.form-item[rel=baremetalCpuCores]').hide();
 | |
|                         $form.find('.form-item[rel=baremetalCpu]').hide();
 | |
|                         $form.find('.form-item[rel=baremetalMemory]').hide();
 | |
|                         $form.find('.form-item[rel=baremetalMAC]').hide();
 | |
| 
 | |
|                         $form.find('.form-item[rel=agentUsername]').css('display', 'inline-block');
 | |
|                         $form.find('.form-item[rel=agentUsername]').find('input').val("oracle");
 | |
|                         $form.find('.form-item[rel=agentPassword]').css('display', 'inline-block');
 | |
|                         $form.find('.form-item[rel=agentPort]').css('display', 'inline-block');
 | |
|                         $form.find('.form-item[rel=agentPort]').find('input').val("8899");
 | |
|                         $form.find('.form-item[rel=ovm3vip]').css('display', 'inline-block');
 | |
|                         $form.find('.form-item[rel=ovm3pool]').css('display', 'inline-block');
 | |
|                         $form.find('.form-item[rel=ovm3cluster]').css('display', 'inline-block');
 | |
|                     } else {
 | |
|                         $form.find('[rel=hostname]').css('display', 'block');
 | |
|                         $form.find('[rel=username]').css('display', 'block');
 | |
|                         $form.find('[rel=password]').css('display', 'block');
 | |
| 
 | |
|                         $form.find('[rel=vcenterHost]').hide();
 | |
| 
 | |
|                         $form.find('[rel=baremetalCpuCores]').hide();
 | |
|                         $form.find('[rel=baremetalCpu]').hide();
 | |
|                         $form.find('[rel=baremetalMemory]').hide();
 | |
|                         $form.find('[rel=baremetalMAC]').hide();
 | |
| 
 | |
|                         $form.find('[rel=agentUsername]').hide();
 | |
|                         $form.find('[rel=agentPassword]').hide();
 | |
| 
 | |
|                         $form.find('.form-item[rel=agentPort]').hide();
 | |
|                         $form.find('.form-item[rel=ovm3vip]').hide();
 | |
|                         $form.find('.form-item[rel=ovm3pool]').hide();
 | |
|                         $form.find('.form-item[rel=ovm3cluster]').hide();
 | |
|                     }
 | |
|                 },
 | |
|                 fields: {
 | |
|                     hostname: {
 | |
|                         label: 'label.host.name',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         isHidden: true
 | |
|                     },
 | |
| 
 | |
|                     username: {
 | |
|                         label: 'label.username',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         isHidden: true
 | |
|                     },
 | |
| 
 | |
|                     password: {
 | |
|                         label: 'label.password',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         isHidden: true,
 | |
|                         isPassword: true
 | |
|                     },
 | |
|                     //input_group="general" ends here
 | |
| 
 | |
|                     //input_group="VMWare" starts here
 | |
|                     vcenterHost: {
 | |
|                         label: 'label.esx.host',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         isHidden: true
 | |
|                     },
 | |
|                     //input_group="VMWare" ends here
 | |
| 
 | |
|                     //input_group="BareMetal" starts here
 | |
|                     baremetalCpuCores: {
 | |
|                         label: 'label.num.cpu.cores',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         isHidden: true
 | |
|                     },
 | |
|                     baremetalCpu: {
 | |
|                         label: 'label.cpu.mhz',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         isHidden: true
 | |
|                     },
 | |
|                     baremetalMemory: {
 | |
|                         label: 'label.memory.mb',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         isHidden: true
 | |
|                     },
 | |
|                     baremetalMAC: {
 | |
|                         label: 'label.host.MAC',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         isHidden: true
 | |
|                     },
 | |
|                     //input_group="BareMetal" ends here
 | |
| 
 | |
|                     //input_group="OVM" starts here
 | |
|                     agentUsername: {
 | |
|                         label: 'label.agent.username',
 | |
|                         validation: {
 | |
|                             required: false
 | |
|                         },
 | |
|                         isHidden: true
 | |
|                     },
 | |
|                     agentPassword: {
 | |
|                         label: 'label.agent.password',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         isHidden: true,
 | |
|                         isPassword: true
 | |
|                     },
 | |
|                     //input_group="OVM" ends here
 | |
| 
 | |
|                     //input_group="OVM3" starts here
 | |
|                     agentPort: {
 | |
|                         label: 'label.agent.port',
 | |
|                         validation: {
 | |
|                             required: false
 | |
|                         },
 | |
|                         isHidden: true
 | |
|                     },
 | |
|                     //input_group="OVM3" ends here
 | |
| 
 | |
|                     //always appear (begin)
 | |
|                     hosttags: {
 | |
|                         label: 'label.host.tags',
 | |
|                         validation: {
 | |
|                             required: false
 | |
|                         }
 | |
|                     }
 | |
|                     //always appear (end)
 | |
|                 }
 | |
|             },
 | |
|             primaryStorage: {
 | |
|                 preFilter: function(args) {},
 | |
| 
 | |
|                 fields: {
 | |
|                     name: {
 | |
|                         label: 'label.name',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         }
 | |
|                     },
 | |
| 
 | |
|                     scope: {
 | |
|                         label: 'label.scope',
 | |
|                         select: function(args) {
 | |
| 
 | |
|                             var selectedHypervisorObj = {
 | |
|                                 hypervisortype: $.isArray(args.context.zones[0].hypervisor) ?
 | |
|                                 // We want the cluster's hypervisor type
 | |
|                                 args.context.zones[0].hypervisor[1] : args.context.zones[0].hypervisor
 | |
|                             };
 | |
| 
 | |
|                             if (selectedHypervisorObj == null) {
 | |
|                                 return;
 | |
|                             }
 | |
| 
 | |
|                             //zone-wide-primary-storage is supported only for KVM and VMWare and Hyperv
 | |
|                             if (selectedHypervisorObj.hypervisortype == "KVM" || selectedHypervisorObj.hypervisortype == "VMware" || selectedHypervisorObj.hypervisortype == "Hyperv") {
 | |
|                                 var scope = [];
 | |
|                                 scope.push({
 | |
|                                     id: 'zone',
 | |
|                                     description: _l('label.zone.wide')
 | |
|                                 });
 | |
|                                 scope.push({
 | |
|                                     id: 'cluster',
 | |
|                                     description: _l('label.cluster')
 | |
|                                 });
 | |
|                                 args.response.success({
 | |
|                                     data: scope
 | |
|                                 });
 | |
|                             } else {
 | |
|                                 var scope = [];
 | |
|                                 scope.push({
 | |
|                                     id: 'cluster',
 | |
|                                     description: _l('label.cluster')
 | |
|                                 });
 | |
|                                 args.response.success({
 | |
|                                     data: scope
 | |
|                                 });
 | |
|                             }
 | |
|                         }
 | |
|                     },
 | |
| 
 | |
|                     protocol: {
 | |
|                         label: 'label.protocol',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         select: function(args) {
 | |
|                             var selectedClusterObj = {
 | |
|                                 hypervisortype: $.isArray(args.context.zones[0].hypervisor) ?
 | |
|                                 // We want the cluster's hypervisor type
 | |
|                                 args.context.zones[0].hypervisor[1] : args.context.zones[0].hypervisor
 | |
|                             };
 | |
| 
 | |
|                             if (selectedClusterObj == null) {
 | |
|                                 return;
 | |
|                             }
 | |
| 
 | |
|                             if (selectedClusterObj.hypervisortype == "KVM") {
 | |
|                                 var items = [];
 | |
|                                 items.push({
 | |
|                                     id: "nfs",
 | |
|                                     description: "nfs"
 | |
|                                 });
 | |
|                                 items.push({
 | |
|                                     id: "SharedMountPoint",
 | |
|                                     description: "SharedMountPoint"
 | |
|                                 });
 | |
|                                 items.push({
 | |
|                                     id: "rbd",
 | |
|                                     description: "RBD"
 | |
|                                 });
 | |
|                                 items.push({
 | |
|                                     id: "clvm",
 | |
|                                     description: "CLVM"
 | |
|                                 });
 | |
|                                 items.push({
 | |
|                                     id: "gluster",
 | |
|                                     description: "Gluster"
 | |
|                                 });
 | |
|                                 args.response.success({
 | |
|                                     data: items
 | |
|                                 });
 | |
|                             } else if (selectedClusterObj.hypervisortype == "XenServer") {
 | |
|                                 var items = [];
 | |
|                                 items.push({
 | |
|                                     id: "nfs",
 | |
|                                     description: "nfs"
 | |
|                                 });
 | |
|                                 items.push({
 | |
|                                     id: "PreSetup",
 | |
|                                     description: "PreSetup"
 | |
|                                 });
 | |
|                                 items.push({
 | |
|                                     id: "iscsi",
 | |
|                                     description: "iscsi"
 | |
|                                 });
 | |
|                                 args.response.success({
 | |
|                                     data: items
 | |
|                                 });
 | |
|                             } else if (selectedClusterObj.hypervisortype == "VMware") {
 | |
|                                 var items = [];
 | |
|                                 items.push({
 | |
|                                     id: "nfs",
 | |
|                                     description: "nfs"
 | |
|                                 });
 | |
|                                 items.push({
 | |
|                                     id: "vmfs",
 | |
|                                     description: "vmfs"
 | |
|                                 });
 | |
|                                 args.response.success({
 | |
|                                     data: items
 | |
|                                 });
 | |
|                             } else if (selectedClusterObj.hypervisortype == "Hyperv") {
 | |
|                                 var items = [];
 | |
|                                 items.push({
 | |
|                                     id: "SMB",
 | |
|                                     description: "SMB/CIFS"
 | |
|                                 });
 | |
|                                 args.response.success({
 | |
|                                     data: items
 | |
|                                 });
 | |
|                             } else if (selectedClusterObj.hypervisortype == "Ovm") {
 | |
|                                 var items = [];
 | |
|                                 items.push({
 | |
|                                     id: "nfs",
 | |
|                                     description: "nfs"
 | |
|                                 });
 | |
|                                 items.push({
 | |
|                                     id: "ocfs2",
 | |
|                                     description: "ocfs2"
 | |
|                                 });
 | |
|                                 args.response.success({
 | |
|                                     data: items
 | |
|                                 });
 | |
|                             } else if (selectedClusterObj.hypervisortype == "LXC") {
 | |
|                                 var items = [];
 | |
|                                 items.push({
 | |
|                                     id: "nfs",
 | |
|                                     description: "nfs"
 | |
|                                 });
 | |
|                                 items.push({
 | |
|                                     id: "SharedMountPoint",
 | |
|                                     description: "SharedMountPoint"
 | |
|                                 });
 | |
|                                 items.push({
 | |
|                                     id: "rbd",
 | |
|                                     description: "RBD"
 | |
|                                 });
 | |
|                                 args.response.success({
 | |
|                                     data: items
 | |
|                                 });
 | |
|                             } else if (selectedClusterObj.hypervisortype == "Ovm3") {
 | |
|                                 var items = [];
 | |
|                                 items.push({
 | |
|                                     id: "nfs",
 | |
|                                     description: "nfs"
 | |
|                                 });
 | |
|                                 args.response.success({
 | |
|                                     data: items
 | |
|                                 });
 | |
|                             } else {
 | |
|                                 args.response.success({
 | |
|                                     data: []
 | |
|                                 });
 | |
|                             }
 | |
| 
 | |
|                             args.$select.change(function() {
 | |
|                                 var $form = $(this).closest('form');
 | |
| 
 | |
|                                 var protocol = $(this).val();
 | |
| 
 | |
|                                 $form.find('[rel=path]').find(".name").find("label").html('<span class=\"field-required\">*</span>' + _l('label.path') + ':');
 | |
| 
 | |
|                                 if (protocol == null)
 | |
|                                     return;
 | |
| 
 | |
|                                 if (protocol == "nfs") {
 | |
|                                     $form.find('[rel=server]').css('display', 'block');
 | |
|                                     $form.find('[rel=server]').find(".value").find("input").val("");
 | |
| 
 | |
|                                     $form.find('[rel=path]').css('display', 'block');
 | |
| 
 | |
|                                     $form.find('[rel=smbUsername]').hide();
 | |
|                                     $form.find('[rel=smbPassword]').hide();
 | |
|                                     $form.find('[rel=smbDomain]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=iqn]').hide();
 | |
|                                     $form.find('[rel=lun]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=volumegroup]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=vCenterDataCenter]').hide();
 | |
|                                     $form.find('[rel=vCenterDataStore]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=rbdmonitor]').hide();
 | |
|                                     $form.find('[rel=rbdpool]').hide();
 | |
|                                     $form.find('[rel=rbdid]').hide();
 | |
|                                     $form.find('[rel=rbdsecret]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=glustervolume]').hide();
 | |
|                                 } else if (protocol == "SMB") { //"SMB" show almost the same fields as "nfs" does, except 3 more SMB-specific fields.
 | |
|                                     $form.find('[rel=server]').css('display', 'block');
 | |
|                                     $form.find('[rel=server]').find(".value").find("input").val("");
 | |
| 
 | |
|                                     $form.find('[rel=path]').css('display', 'block');
 | |
| 
 | |
|                                     $form.find('[rel=smbUsername]').css('display', 'block');
 | |
|                                     $form.find('[rel=smbPassword]').css('display', 'block');
 | |
|                                     $form.find('[rel=smbDomain]').css('display', 'block');
 | |
| 
 | |
|                                     $form.find('[rel=iqn]').hide();
 | |
|                                     $form.find('[rel=lun]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=volumegroup]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=vCenterDataCenter]').hide();
 | |
|                                     $form.find('[rel=vCenterDataStore]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=rbdmonitor]').hide();
 | |
|                                     $form.find('[rel=rbdpool]').hide();
 | |
|                                     $form.find('[rel=rbdid]').hide();
 | |
|                                     $form.find('[rel=rbdsecret]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=glustervolume]').hide();
 | |
|                                 } else if (protocol == "ocfs2") { //ocfs2 is the same as nfs, except no server field.
 | |
|                                     $form.find('[rel=server]').hide();
 | |
|                                     $form.find('[rel=server]').find(".value").find("input").val("");
 | |
| 
 | |
|                                     $form.find('[rel=path]').css('display', 'block');
 | |
| 
 | |
|                                     $form.find('[rel=smbUsername]').hide();
 | |
|                                     $form.find('[rel=smbPassword]').hide();
 | |
|                                     $form.find('[rel=smbDomain]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=iqn]').hide();
 | |
|                                     $form.find('[rel=lun]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=volumegroup]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=vCenterDataCenter]').hide();
 | |
|                                     $form.find('[rel=vCenterDataStore]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=rbdmonitor]').hide();
 | |
|                                     $form.find('[rel=rbdpool]').hide();
 | |
|                                     $form.find('[rel=rbdid]').hide();
 | |
|                                     $form.find('[rel=rbdsecret]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=glustervolume]').hide();
 | |
|                                 } else if (protocol == "PreSetup") {
 | |
|                                     $form.find('[rel=server]').hide();
 | |
|                                     $form.find('[rel=server]').find(".value").find("input").val("localhost");
 | |
| 
 | |
|                                     $form.find('[rel=path]').css('display', 'block');
 | |
|                                     $form.find('[rel=path]').find(".name").find("label").html('<span class=\"field-required\">*</span>'+_l('label.SR.name')+':');
 | |
| 
 | |
|                                     $form.find('[rel=smbUsername]').hide();
 | |
|                                     $form.find('[rel=smbPassword]').hide();
 | |
|                                     $form.find('[rel=smbDomain]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=iqn]').hide();
 | |
|                                     $form.find('[rel=lun]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=volumegroup]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=vCenterDataCenter]').hide();
 | |
|                                     $form.find('[rel=vCenterDataStore]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=rbdmonitor]').hide();
 | |
|                                     $form.find('[rel=rbdpool]').hide();
 | |
|                                     $form.find('[rel=rbdid]').hide();
 | |
|                                     $form.find('[rel=rbdsecret]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=glustervolume]').hide();
 | |
|                                 } else if (protocol == "iscsi") {
 | |
|                                     $form.find('[rel=server]').css('display', 'block');
 | |
|                                     $form.find('[rel=server]').find(".value").find("input").val("");
 | |
| 
 | |
|                                     $form.find('[rel=path]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=smbUsername]').hide();
 | |
|                                     $form.find('[rel=smbPassword]').hide();
 | |
|                                     $form.find('[rel=smbDomain]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=iqn]').css('display', 'block');
 | |
|                                     $form.find('[rel=lun]').css('display', 'block');
 | |
| 
 | |
|                                     $form.find('[rel=volumegroup]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=vCenterDataCenter]').hide();
 | |
|                                     $form.find('[rel=vCenterDataStore]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=rbdmonitor]').hide();
 | |
|                                     $form.find('[rel=rbdpool]').hide();
 | |
|                                     $form.find('[rel=rbdid]').hide();
 | |
|                                     $form.find('[rel=rbdsecret]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=glustervolume]').hide();
 | |
|                                 } else if ($(this).val() == "clvm") {
 | |
|                                     $form.find('[rel=server]').hide();
 | |
|                                     $form.find('[rel=server]').find(".value").find("input").val("localhost");
 | |
| 
 | |
|                                     $form.find('[rel=path]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=smbUsername]').hide();
 | |
|                                     $form.find('[rel=smbPassword]').hide();
 | |
|                                     $form.find('[rel=smbDomain]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=iqn]').hide();
 | |
|                                     $form.find('[rel=lun]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=volumegroup]').css('display', 'inline-block');
 | |
| 
 | |
|                                     $form.find('[rel=vCenterDataCenter]').hide();
 | |
|                                     $form.find('[rel=vCenterDataStore]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=rbdmonitor]').hide();
 | |
|                                     $form.find('[rel=rbdpool]').hide();
 | |
|                                     $form.find('[rel=rbdid]').hide();
 | |
|                                     $form.find('[rel=rbdsecret]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=glustervolume]').hide();
 | |
|                                 } else if (protocol == "vmfs") {
 | |
|                                     $form.find('[rel=server]').css('display', 'block');
 | |
|                                     $form.find('[rel=server]').find(".value").find("input").val("");
 | |
| 
 | |
|                                     $form.find('[rel=path]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=smbUsername]').hide();
 | |
|                                     $form.find('[rel=smbPassword]').hide();
 | |
|                                     $form.find('[rel=smbDomain]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=iqn]').hide();
 | |
|                                     $form.find('[rel=lun]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=volumegroup]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=vCenterDataCenter]').css('display', 'block');
 | |
|                                     $form.find('[rel=vCenterDataStore]').css('display', 'block');
 | |
| 
 | |
|                                     $form.find('[rel=rbdmonitor]').hide();
 | |
|                                     $form.find('[rel=rbdpool]').hide();
 | |
|                                     $form.find('[rel=rbdid]').hide();
 | |
|                                     $form.find('[rel=rbdsecret]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=glustervolume]').hide();
 | |
|                                 } else if (protocol == "SharedMountPoint") { //"SharedMountPoint" show the same fields as "nfs" does.
 | |
|                                     $form.find('[rel=server]').hide();
 | |
|                                     $form.find('[rel=server]').find(".value").find("input").val("localhost");
 | |
| 
 | |
|                                     $form.find('[rel=path]').css('display', 'block');
 | |
| 
 | |
|                                     $form.find('[rel=smbUsername]').hide();
 | |
|                                     $form.find('[rel=smbPassword]').hide();
 | |
|                                     $form.find('[rel=smbDomain]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=iqn]').hide();
 | |
|                                     $form.find('[rel=lun]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=volumegroup]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=vCenterDataCenter]').hide();
 | |
|                                     $form.find('[rel=vCenterDataStore]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=rbdmonitor]').hide();
 | |
|                                     $form.find('[rel=rbdpool]').hide();
 | |
|                                     $form.find('[rel=rbdid]').hide();
 | |
|                                     $form.find('[rel=rbdsecret]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=glustervolume]').hide();
 | |
|                                 } else if (protocol == "gluster") {
 | |
|                                     $form.find('[rel=server]').css('display', 'block');
 | |
|                                     $form.find('[rel=server]').find(".value").find("input").val("");
 | |
| 
 | |
|                                     $form.find('[rel=path]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=smbUsername]').hide();
 | |
|                                     $form.find('[rel=smbPassword]').hide();
 | |
|                                     $form.find('[rel=smbDomain]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=iqn]').hide();
 | |
|                                     $form.find('[rel=lun]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=volumegroup]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=vCenterDataCenter]').hide();
 | |
|                                     $form.find('[rel=vCenterDataStore]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=rbdmonitor]').hide();
 | |
|                                     $form.find('[rel=rbdpool]').hide();
 | |
|                                     $form.find('[rel=rbdid]').hide();
 | |
|                                     $form.find('[rel=rbdsecret]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=glustervolume]').css('display', 'block');
 | |
|                                 } else if (protocol == "rbd") {
 | |
|                                     $form.find('[rel=rbdmonitor]').css('display', 'inline-block');
 | |
|                                     $form.find('[rel=rbdmonitor]').find(".name").find("label").text("RADOS Monitor:");
 | |
| 
 | |
|                                     $form.find('[rel=rbdpool]').css('display', 'inline-block');
 | |
|                                     $form.find('[rel=rbdpool]').find(".name").find("label").text("RADOS Pool:");
 | |
| 
 | |
|                                     $form.find('[rel=rbdid]').css('display', 'inline-block');
 | |
|                                     $form.find('[rel=rbdid]').find(".name").find("label").text("RADOS User:");
 | |
| 
 | |
|                                     $form.find('[rel=rbdsecret]').css('display', 'inline-block');
 | |
|                                     $form.find('[rel=rbdsecret]').find(".name").find("label").text("RADOS Secret:");
 | |
| 
 | |
|                                     $form.find('[rel=server]').hide();
 | |
|                                     $form.find('[rel=iqn]').hide();
 | |
|                                     $form.find('[rel=lun]').hide();
 | |
|                                     $form.find('[rel=volumegroup]').hide();
 | |
|                                     $form.find('[rel=path]').hide();
 | |
|                                     $form.find('[rel=vCenterDataCenter]').hide();
 | |
|                                     $form.find('[rel=vCenterDataStore]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=smbUsername]').hide();
 | |
|                                     $form.find('[rel=smbPassword]').hide();
 | |
|                                     $form.find('[rel=smbDomain]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=glustervolume]').hide();
 | |
|                                 } else {
 | |
|                                     $form.find('[rel=server]').css('display', 'block');
 | |
|                                     $form.find('[rel=server]').find(".value").find("input").val("");
 | |
| 
 | |
|                                     $form.find('[rel=smbUsername]').hide();
 | |
|                                     $form.find('[rel=smbPassword]').hide();
 | |
|                                     $form.find('[rel=smbDomain]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=iqn]').hide();
 | |
|                                     $form.find('[rel=lun]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=volumegroup]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=vCenterDataCenter]').hide();
 | |
|                                     $form.find('[rel=vCenterDataStore]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=rbdmonitor]').hide();
 | |
|                                     $form.find('[rel=rbdpool]').hide();
 | |
|                                     $form.find('[rel=rbdid]').hide();
 | |
|                                     $form.find('[rel=rbdsecret]').hide();
 | |
| 
 | |
|                                     $form.find('[rel=glustervolume]').hide();
 | |
|                                 }
 | |
|                             });
 | |
| 
 | |
|                             args.$select.trigger("change");
 | |
|                         }
 | |
|                     },
 | |
|                     server: {
 | |
|                         label: 'label.server',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         isHidden: true
 | |
|                     },
 | |
| 
 | |
|                     //nfs
 | |
|                     path: {
 | |
|                         label: 'label.path',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         isHidden: true
 | |
|                     },
 | |
| 
 | |
|                     //SMB
 | |
|                     smbDomain: {
 | |
|                         label: 'label.smb.domain',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         isHidden: true
 | |
|                     },
 | |
|                     smbUsername: {
 | |
|                         label: 'label.smb.username',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         isHidden: true
 | |
|                     },
 | |
|                     smbPassword: {
 | |
|                         label: 'label.smb.password',
 | |
|                         isPassword: true,
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         isHidden: true
 | |
|                     },
 | |
| 
 | |
| 
 | |
|                     //iscsi
 | |
|                     iqn: {
 | |
|                         label: 'label.target.iqn',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         isHidden: true
 | |
|                     },
 | |
|                     lun: {
 | |
|                         label: 'label.LUN.number',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         isHidden: true
 | |
|                     },
 | |
| 
 | |
|                     //clvm
 | |
|                     volumegroup: {
 | |
|                         label: 'label.volgroup',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         isHidden: true
 | |
|                     },
 | |
| 
 | |
|                     //vmfs
 | |
|                     vCenterDataCenter: {
 | |
|                         label: 'label.vcenter.datacenter',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         isHidden: true
 | |
|                     },
 | |
|                     vCenterDataStore: {
 | |
|                         label: 'label.vcenter.datastore',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         isHidden: true
 | |
|                     },
 | |
| 
 | |
|                     //gluster
 | |
|                     glustervolume: {
 | |
|                         label: 'label.gluster.volume',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         isHidden: true
 | |
|                     },
 | |
| 
 | |
|                     // RBD
 | |
|                     rbdmonitor: {
 | |
|                         label: 'label.rbd.monitor',
 | |
|                         docID: 'helpPrimaryStorageRBDMonitor',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         isHidden: true
 | |
|                     },
 | |
|                     rbdpool: {
 | |
|                         label: 'label.rbd.pool',
 | |
|                         docID: 'helpPrimaryStorageRBDPool',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         isHidden: true
 | |
|                     },
 | |
|                     rbdid: {
 | |
|                         label: 'label.rbd.id',
 | |
|                         docID: 'helpPrimaryStorageRBDId',
 | |
|                         validation: {
 | |
|                             required: false
 | |
|                         },
 | |
|                         isHidden: true
 | |
|                     },
 | |
|                     rbdsecret: {
 | |
|                         label: 'label.rbd.secret',
 | |
|                         docID: 'helpPrimaryStorageRBDSecret',
 | |
|                         validation: {
 | |
|                             required: false
 | |
|                         },
 | |
|                         isHidden: true
 | |
|                     },
 | |
| 
 | |
|                     //always appear (begin)
 | |
|                     storageTags: {
 | |
|                         label: 'label.storage.tags',
 | |
|                         validation: {
 | |
|                             required: false
 | |
|                         }
 | |
|                     }
 | |
|                     //always appear (end)
 | |
|                 }
 | |
|             },
 | |
|             secondaryStorage: {
 | |
|                 fields: {
 | |
|                     provider: {
 | |
|                         label: 'label.provider',
 | |
|                         select: function(args) {
 | |
|                             var storageproviders = [];
 | |
|                             storageproviders.push({ id: '', description: ''});
 | |
| 
 | |
|                             $.ajax({
 | |
|                                 url: createURL('listImageStores'),
 | |
|                                 data: {
 | |
|                                     provider: 'S3'
 | |
|                                 },
 | |
|                                 async: true,
 | |
|                                 success: function(json) {
 | |
|                                     var s3stores = json.listimagestoresresponse.imagestore;
 | |
|                                     if(s3stores != null && s3stores.length > 0) {
 | |
|                                         storageproviders.push({ id: 'S3', description: 'S3'}); //if (region-wide) S3 store exists already, only "S3" option should be included here. Any other type of store is not allowed to be created since cloudstack doesn't support multiple types of store at this point.
 | |
|                                     } else {
 | |
|                                         /*
 | |
|                                         UI no longer gets providers from "listStorageProviders&type=image" because:
 | |
|                                         (1) Not all of returned values are handled by UI (e.g. Provider "NetApp" is not handled by UI).
 | |
|                                         (2) Provider "SMB" which is handled by UI is not returned from "listStorageProviders&type=image"
 | |
|                                         */
 | |
|                                         storageproviders.push({ id: 'NFS', description: 'NFS'});
 | |
|                                         storageproviders.push({ id: 'SMB', description: 'SMB/CIFS'});
 | |
|                                         storageproviders.push({ id: 'S3', description: 'S3'});
 | |
|                                         storageproviders.push({ id: 'Swift', description: 'Swift'});
 | |
|                                     }
 | |
|                                     args.response.success({
 | |
|                                         data: storageproviders
 | |
|                                     });
 | |
| 
 | |
|                                     args.$select.change(function() {
 | |
|                                         var $form = $(this).closest('form');
 | |
|                                         var $fields = $form.find('.field');
 | |
| 
 | |
|                                         if ($(this).val() == "") {
 | |
|                                             $fields.filter('[rel=name]').hide();
 | |
| 
 | |
|                                             //NFS
 | |
|                                             $fields.filter('[rel=zoneid]').hide();
 | |
|                                             $fields.filter('[rel=nfsServer]').hide();
 | |
|                                             $fields.filter('[rel=path]').hide();
 | |
| 
 | |
|                                             //SMB
 | |
|                                             $fields.filter('[rel=smbUsername]').hide();
 | |
|                                             $fields.filter('[rel=smbPassword]').hide();
 | |
|                                             $fields.filter('[rel=smbDomain]').hide();
 | |
| 
 | |
|                                             //S3
 | |
|                                             $fields.filter('[rel=accesskey]').hide();
 | |
|                                             $fields.filter('[rel=secretkey]').hide();
 | |
|                                             $fields.filter('[rel=bucket]').hide();
 | |
|                                             $fields.filter('[rel=endpoint]').hide();
 | |
|                                             $fields.filter('[rel=usehttps]').hide();
 | |
|                                             $fields.filter('[rel=connectiontimeout]').hide();
 | |
|                                             $fields.filter('[rel=maxerrorretry]').hide();
 | |
|                                             $fields.filter('[rel=sockettimeout]').hide();
 | |
| 
 | |
|                                             $fields.filter('[rel=createNfsCache]').hide();
 | |
|                                             $fields.filter('[rel=createNfsCache]').find('input').removeAttr('checked');
 | |
|                                             $fields.filter('[rel=nfsCacheNfsServer]').hide();
 | |
|                                             $fields.filter('[rel=nfsCachePath]').hide();
 | |
| 
 | |
|                                             //Swift
 | |
|                                             $fields.filter('[rel=url]').hide();
 | |
|                                             $fields.filter('[rel=account]').hide();
 | |
|                                             $fields.filter('[rel=username]').hide();
 | |
|                                             $fields.filter('[rel=key]').hide();
 | |
|                                         } else if ($(this).val() == "NFS") {
 | |
|                                             $fields.filter('[rel=name]').css('display', 'inline-block');
 | |
| 
 | |
|                                             //NFS
 | |
|                                             $fields.filter('[rel=zoneid]').css('display', 'inline-block');
 | |
|                                             $fields.filter('[rel=nfsServer]').css('display', 'inline-block');
 | |
|                                             $fields.filter('[rel=path]').css('display', 'inline-block');
 | |
| 
 | |
|                                             //SMB
 | |
|                                             $fields.filter('[rel=smbUsername]').hide();
 | |
|                                             $fields.filter('[rel=smbPassword]').hide();
 | |
|                                             $fields.filter('[rel=smbDomain]').hide();
 | |
| 
 | |
|                                             //S3
 | |
|                                             $fields.filter('[rel=accesskey]').hide();
 | |
|                                             $fields.filter('[rel=secretkey]').hide();
 | |
|                                             $fields.filter('[rel=bucket]').hide();
 | |
|                                             $fields.filter('[rel=endpoint]').hide();
 | |
|                                             $fields.filter('[rel=usehttps]').hide();
 | |
|                                             $fields.filter('[rel=connectiontimeout]').hide();
 | |
|                                             $fields.filter('[rel=maxerrorretry]').hide();
 | |
|                                             $fields.filter('[rel=sockettimeout]').hide();
 | |
| 
 | |
|                                             $fields.filter('[rel=createNfsCache]').hide();
 | |
|                                             $fields.filter('[rel=createNfsCache]').find('input').removeAttr('checked');
 | |
|                                             $fields.filter('[rel=nfsCacheNfsServer]').hide();
 | |
|                                             $fields.filter('[rel=nfsCachePath]').hide();
 | |
| 
 | |
|                                             //Swift
 | |
|                                             $fields.filter('[rel=url]').hide();
 | |
|                                             $fields.filter('[rel=account]').hide();
 | |
|                                             $fields.filter('[rel=username]').hide();
 | |
|                                             $fields.filter('[rel=key]').hide();
 | |
|                                         } else if ($(this).val() == "SMB") {
 | |
|                                             $fields.filter('[rel=name]').css('display', 'inline-block');
 | |
| 
 | |
|                                             //NFS
 | |
|                                             $fields.filter('[rel=zoneid]').css('display', 'inline-block');
 | |
|                                             $fields.filter('[rel=nfsServer]').css('display', 'inline-block');
 | |
|                                             $fields.filter('[rel=path]').css('display', 'inline-block');
 | |
| 
 | |
|                                             //SMB
 | |
|                                             $fields.filter('[rel=smbUsername]').css('display', 'inline-block');
 | |
|                                             $fields.filter('[rel=smbPassword]').css('display', 'inline-block');
 | |
|                                             $fields.filter('[rel=smbDomain]').css('display', 'inline-block');
 | |
| 
 | |
|                                             //S3
 | |
|                                             $fields.filter('[rel=accesskey]').hide();
 | |
|                                             $fields.filter('[rel=secretkey]').hide();
 | |
|                                             $fields.filter('[rel=bucket]').hide();
 | |
|                                             $fields.filter('[rel=endpoint]').hide();
 | |
|                                             $fields.filter('[rel=usehttps]').hide();
 | |
|                                             $fields.filter('[rel=connectiontimeout]').hide();
 | |
|                                             $fields.filter('[rel=maxerrorretry]').hide();
 | |
|                                             $fields.filter('[rel=sockettimeout]').hide();
 | |
| 
 | |
|                                             $fields.filter('[rel=createNfsCache]').hide();
 | |
|                                             $fields.filter('[rel=createNfsCache]').find('input').removeAttr('checked');
 | |
|                                             $fields.filter('[rel=nfsCacheNfsServer]').hide();
 | |
|                                             $fields.filter('[rel=nfsCachePath]').hide();
 | |
| 
 | |
|                                             //Swift
 | |
|                                             $fields.filter('[rel=url]').hide();
 | |
|                                             $fields.filter('[rel=account]').hide();
 | |
|                                             $fields.filter('[rel=username]').hide();
 | |
|                                             $fields.filter('[rel=key]').hide();
 | |
|                                         } else if ($(this).val() == "S3") {
 | |
|                                             $fields.filter('[rel=name]').css('display', 'inline-block');
 | |
| 
 | |
|                                             if(s3stores != null && s3stores.length > 0) {
 | |
|                                                 $fields.filter('[rel=name]').find('input').val(s3stores[0].name);
 | |
|                                                 $fields.filter('[rel=name]').find('input').attr("disabled", "disabled");
 | |
|                                             } else {
 | |
|                                                 //$fields.filter('[rel=name]').find('input').val("");
 | |
|                                                 $fields.filter('[rel=name]').find('input').removeAttr("disabled");
 | |
|                                             }
 | |
| 
 | |
|                                             //NFS
 | |
|                                             $fields.filter('[rel=zoneid]').hide();
 | |
|                                             $fields.filter('[rel=nfsServer]').hide();
 | |
|                                             $fields.filter('[rel=path]').hide();
 | |
| 
 | |
|                                             //SMB
 | |
|                                             $fields.filter('[rel=smbUsername]').hide();
 | |
|                                             $fields.filter('[rel=smbPassword]').hide();
 | |
|                                             $fields.filter('[rel=smbDomain]').hide();
 | |
| 
 | |
|                                             //S3
 | |
|                                             if(s3stores != null && s3stores.length > 0) {
 | |
|                                                  $fields.filter('[rel=accesskey]').hide();
 | |
|                                                  $fields.filter('[rel=secretkey]').hide();
 | |
|                                                  $fields.filter('[rel=bucket]').hide();
 | |
|                                                  $fields.filter('[rel=endpoint]').hide();
 | |
|                                                  $fields.filter('[rel=usehttps]').hide();
 | |
|                                                  $fields.filter('[rel=connectiontimeout]').hide();
 | |
|                                                  $fields.filter('[rel=maxerrorretry]').hide();
 | |
|                                                  $fields.filter('[rel=sockettimeout]').hide();
 | |
|                                             } else {
 | |
|                                                  $fields.filter('[rel=accesskey]').css('display', 'inline-block');
 | |
|                                                  $fields.filter('[rel=secretkey]').css('display', 'inline-block');
 | |
|                                                  $fields.filter('[rel=bucket]').css('display', 'inline-block');
 | |
|                                                  $fields.filter('[rel=endpoint]').css('display', 'inline-block');
 | |
|                                                  $fields.filter('[rel=usehttps]').css('display', 'inline-block');
 | |
|                                                  $fields.filter('[rel=connectiontimeout]').css('display', 'inline-block');
 | |
|                                                  $fields.filter('[rel=maxerrorretry]').css('display', 'inline-block');
 | |
|                                                  $fields.filter('[rel=sockettimeout]').css('display', 'inline-block');
 | |
|                                             }
 | |
|                                             $fields.filter('[rel=createNfsCache]').find('input').attr('checked', 'checked');
 | |
|                                             $fields.filter('[rel=createNfsCache]').find('input').attr("disabled", "disabled");  //Create NFS staging is required for S3 at this moment. So, disallow user to uncheck "Create NFS Secondary Staging" checkbox
 | |
|                                             $fields.filter('[rel=createNfsCache]').css('display', 'inline-block');
 | |
|                                             $fields.filter('[rel=nfsCacheNfsServer]').css('display', 'inline-block');
 | |
|                                             $fields.filter('[rel=nfsCachePath]').css('display', 'inline-block');
 | |
| 
 | |
|                                             //Swift
 | |
|                                             $fields.filter('[rel=url]').hide();
 | |
|                                             $fields.filter('[rel=account]').hide();
 | |
|                                             $fields.filter('[rel=username]').hide();
 | |
|                                             $fields.filter('[rel=key]').hide();
 | |
|                                         } else if ($(this).val() == "Swift") {
 | |
|                                             $fields.filter('[rel=name]').css('display', 'inline-block');
 | |
| 
 | |
|                                             //NFS
 | |
|                                             $fields.filter('[rel=zoneid]').hide();
 | |
|                                             $fields.filter('[rel=nfsServer]').hide();
 | |
|                                             $fields.filter('[rel=path]').hide();
 | |
| 
 | |
|                                             //SMB
 | |
|                                             $fields.filter('[rel=smbUsername]').hide();
 | |
|                                             $fields.filter('[rel=smbPassword]').hide();
 | |
|                                             $fields.filter('[rel=smbDomain]').hide();
 | |
| 
 | |
|                                             //S3
 | |
|                                             $fields.filter('[rel=accesskey]').hide();
 | |
|                                             $fields.filter('[rel=secretkey]').hide();
 | |
|                                             $fields.filter('[rel=bucket]').hide();
 | |
|                                             $fields.filter('[rel=endpoint]').hide();
 | |
|                                             $fields.filter('[rel=usehttps]').hide();
 | |
|                                             $fields.filter('[rel=connectiontimeout]').hide();
 | |
|                                             $fields.filter('[rel=maxerrorretry]').hide();
 | |
|                                             $fields.filter('[rel=sockettimeout]').hide();
 | |
| 
 | |
|                                             $fields.filter('[rel=createNfsCache]').hide();
 | |
|                                             $fields.filter('[rel=createNfsCache]').find('input').removeAttr('checked');
 | |
|                                             $fields.filter('[rel=nfsCacheNfsServer]').hide();
 | |
|                                             $fields.filter('[rel=nfsCachePath]').hide();
 | |
| 
 | |
|                                             //Swift
 | |
|                                             $fields.filter('[rel=url]').css('display', 'inline-block');
 | |
|                                             $fields.filter('[rel=account]').css('display', 'inline-block');
 | |
|                                             $fields.filter('[rel=username]').css('display', 'inline-block');
 | |
|                                             $fields.filter('[rel=key]').css('display', 'inline-block');
 | |
|                                         }
 | |
|                                     });
 | |
|                                     args.$select.change();
 | |
|                                 }
 | |
|                             });
 | |
|                         }
 | |
|                     },
 | |
| 
 | |
|                     name: {
 | |
|                         label: 'label.name',
 | |
|                         isHidden: true
 | |
|                     },
 | |
| 
 | |
|                     //NFS, SMB (begin)
 | |
|                     nfsServer: {
 | |
|                         label: 'label.server', //change label from "NFS Server" to "Server" since this field is also shown when provider "SMB/CIFS" is elected.
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         isHidden: true
 | |
|                     },
 | |
|                     path: {
 | |
|                         label: 'label.path',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         isHidden: true
 | |
|                     },
 | |
|                     //NFS, SMB (end)
 | |
| 
 | |
|                     //SMB (begin)
 | |
|                     smbDomain: {
 | |
|                         label: 'label.smb.domain',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         }
 | |
|                     },
 | |
|                     smbUsername: {
 | |
|                         label: 'label.smb.username',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         }
 | |
|                     },
 | |
|                     smbPassword: {
 | |
|                         label: 'label.smb.password',
 | |
|                         isPassword: true,
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         }
 | |
|                     },
 | |
|                     //SMB (end)
 | |
| 
 | |
|                     //S3 (begin)
 | |
|                     accesskey: {
 | |
|                         label: 'label.s3.access_key',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         isHidden: true
 | |
|                     },
 | |
|                     secretkey: {
 | |
|                         label: 'label.s3.secret_key',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         isHidden: true
 | |
|                     },
 | |
|                     bucket: {
 | |
|                         label: 'label.s3.bucket',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         isHidden: true
 | |
|                     },
 | |
|                     endpoint: {
 | |
|                         label: 'label.s3.endpoint',
 | |
|                         isHidden: true
 | |
|                     },
 | |
|                     usehttps: {
 | |
|                         label: 'label.s3.use_https',
 | |
|                         isBoolean: true,
 | |
|                         isChecked: true,
 | |
|                         isHidden: true
 | |
|                     },
 | |
|                     connectiontimeout: {
 | |
|                         label: 'label.s3.connection_timeout',
 | |
|                         isHidden: true
 | |
|                     },
 | |
|                     maxerrorretry: {
 | |
|                         label: 'label.s3.max_error_retry',
 | |
|                         isHidden: true
 | |
|                     },
 | |
|                     sockettimeout: {
 | |
|                         label: 'label.s3.socket_timeout',
 | |
|                         isHidden: true
 | |
|                     },
 | |
| 
 | |
|                     createNfsCache: {
 | |
|                         label: 'label.create.nfs.secondary.staging.storage',
 | |
|                         isBoolean: true,
 | |
|                         isChecked: true,
 | |
|                         isHidden: true
 | |
|                     },
 | |
|                     nfsCacheNfsServer: {
 | |
|                         dependsOn: 'createNfsCache',
 | |
|                         label: 'label.s3.nfs.server',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         isHidden: true
 | |
|                     },
 | |
|                     nfsCachePath: {
 | |
|                         dependsOn: 'createNfsCache',
 | |
|                         label: 'label.s3.nfs.path',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         isHidden: true
 | |
|                     },
 | |
|                     //S3 (end)
 | |
| 
 | |
|                     //Swift (begin)
 | |
|                     url: {
 | |
|                         label: 'label.url',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         },
 | |
|                         isHidden: true
 | |
|                     },
 | |
|                     account: {
 | |
|                         label: 'label.account',
 | |
|                         isHidden: true
 | |
|                     },
 | |
|                     username: {
 | |
|                         label: 'label.username',
 | |
|                         isHidden: true
 | |
|                     },
 | |
|                     key: {
 | |
|                         label: 'label.key',
 | |
|                         isHidden: true
 | |
|                     }
 | |
|                     //Swift (end)
 | |
|                 }
 | |
|             }
 | |
|         },
 | |
| 
 | |
|         action: function(args) {
 | |
|             var $wizard = args.wizard;
 | |
|             var formData = args.data;
 | |
|             var advZoneConfiguredVirtualRouterCount = 0; //for multiple physical networks in advanced zone. Each physical network has 2 virtual routers: regular one and VPC one.
 | |
| 
 | |
|             var success = args.response.success;
 | |
|             var error = args.response.error;
 | |
|             var message = args.response.message;
 | |
|             //var data = args.data;
 | |
|             var startFn = args.startFn;
 | |
|             var data = args.data;
 | |
| 
 | |
|             var stepFns = {
 | |
|                 addZone: function() {
 | |
|                     message(dictionary['message.creating.zone']);
 | |
| 
 | |
|                     var array1 = [];
 | |
|                     var networkType = args.data.zone.networkType; //"Basic", "Advanced"
 | |
|                     array1.push("&networktype=" + encodeURIComponent(networkType));
 | |
| 
 | |
|                     if (networkType == "Basic") {
 | |
|                         if (selectedNetworkOfferingHavingSG == true)
 | |
|                             array1.push("&securitygroupenabled=true");
 | |
|                         else
 | |
|                             array1.push("&securitygroupenabled=false");
 | |
|                     } else { // networkType == "Advanced"
 | |
|                         if (args.data.zone.sgEnabled != true) {
 | |
|                             array1.push("&securitygroupenabled=false");
 | |
| 
 | |
|                             if (args.data.zone.guestcidraddress != null && args.data.zone.guestcidraddress.length > 0)
 | |
|                                 array1.push("&guestcidraddress=" + encodeURIComponent(args.data.zone.guestcidraddress));
 | |
|                         } else { // args.data.zone.sgEnabled    == true
 | |
|                             array1.push("&securitygroupenabled=true");
 | |
|                         }
 | |
|                     }
 | |
| 
 | |
|                     array1.push("&name=" + encodeURIComponent(args.data.zone.name));
 | |
| 
 | |
|                     if (args.data.zone.localstorageenabled == 'on') {
 | |
|                         array1.push("&localstorageenabled=true");
 | |
|                     }
 | |
| 
 | |
|                     //IPv4
 | |
|                     if (args.data.zone.ip4dns1 != null && args.data.zone.ip4dns1.length > 0)
 | |
|                         array1.push("&dns1=" + encodeURIComponent(args.data.zone.ip4dns1));
 | |
|                     if (args.data.zone.ip4dns2 != null && args.data.zone.ip4dns2.length > 0)
 | |
|                         array1.push("&dns2=" + encodeURIComponent(args.data.zone.ip4dns2));
 | |
| 
 | |
|                     //IPv6
 | |
|                     if (args.data.zone.ip6dns1 != null && args.data.zone.ip6dns1.length > 0)
 | |
|                         array1.push("&ip6dns1=" + encodeURIComponent(args.data.zone.ip6dns1));
 | |
|                     if (args.data.zone.ip6dns2 != null && args.data.zone.ip6dns2.length > 0)
 | |
|                         array1.push("&ip6dns2=" + encodeURIComponent(args.data.zone.ip6dns2));
 | |
| 
 | |
| 
 | |
|                     array1.push("&internaldns1=" + encodeURIComponent(args.data.zone.internaldns1));
 | |
| 
 | |
|                     var internaldns2 = args.data.zone.internaldns2;
 | |
|                     if (internaldns2 != null && internaldns2.length > 0)
 | |
|                         array1.push("&internaldns2=" + encodeURIComponent(internaldns2));
 | |
| 
 | |
|                     if (args.data.zone.networkdomain != null && args.data.zone.networkdomain.length > 0)
 | |
|                         array1.push("&domain=" + encodeURIComponent(args.data.zone.networkdomain));
 | |
| 
 | |
|                     $.ajax({
 | |
|                         url: createURL("createZone" + array1.join("")),
 | |
|                         dataType: "json",
 | |
|                         async: false,
 | |
|                         success: function(json) {
 | |
|                             if (args.data.pluginFrom == null) { //from zone wizard, not from quick instsaller(args.data.pluginFrom != null && args.data.pluginFrom.name == 'installWizard') who doesn't have public checkbox
 | |
|                                 if(args.data.zone.isdedicated == 'on'){ //dedicated checkbox in zone wizard is checked
 | |
|                                     message(dictionary['message.dedicate.zone']);
 | |
|                                     var data = {
 | |
|                                         zoneid: json.createzoneresponse.zone.id
 | |
|                                     };
 | |
|                                     if (args.data.zone.domain != null)
 | |
|                                         $.extend(data, {
 | |
|                                             domainid: args.data.zone.domain
 | |
|                                         });
 | |
|                                     if (args.data.zone.account != "")
 | |
|                                         $.extend(data, {
 | |
|                                             account: args.data.zone.account
 | |
|                                         });
 | |
|                                     $.ajax({
 | |
|                                         url: createURL('dedicateZone'),
 | |
|                                         data: data,
 | |
|                                         success: function(json) {}
 | |
|                                     });
 | |
|                                 }
 | |
|                             }
 | |
| 
 | |
|                             stepFns.addPhysicalNetworks({
 | |
|                                 data: $.extend(args.data, {
 | |
|                                     returnedZone: json.createzoneresponse.zone
 | |
|                                 })
 | |
|                             });
 | |
|                         },
 | |
|                         error: function(XMLHttpResponse) {
 | |
|                             var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                             error('addZone', errorMsg, {
 | |
|                                 fn: 'addZone',
 | |
|                                 args: args
 | |
|                             });
 | |
|                         }
 | |
|                     });
 | |
|                 },
 | |
| 
 | |
|                 addPhysicalNetworks: function(args) {
 | |
|                     message(_l('message.creating.physical.networks'));
 | |
| 
 | |
|                     var returnedPhysicalNetworks = [];
 | |
| 
 | |
|                     if (args.data.zone.networkType == "Basic") { //Basic zone ***
 | |
|                         var requestedTrafficTypeCount = 2; //request guest traffic type, management traffic type
 | |
|                         if (selectedNetworkOfferingHavingSG == true && selectedNetworkOfferingHavingEIP == true && selectedNetworkOfferingHavingELB == true)
 | |
|                             requestedTrafficTypeCount++; //request public traffic type
 | |
| 
 | |
|                         //Basic zone has only one physical network
 | |
|                         var array1 = [];
 | |
|                         if ("physicalNetworks" in args.data) { //from add-zone-wizard
 | |
|                             array1.push("&name=" + encodeURIComponent(args.data.physicalNetworks[0].name));
 | |
|                         } else { //from quick-install-wizard
 | |
|                             array1.push("&name=PhysicalNetworkInBasicZone");
 | |
|                         }
 | |
| 
 | |
|                         $.ajax({
 | |
|                             url: createURL("createPhysicalNetwork&zoneid=" + args.data.returnedZone.id + array1.join("")),
 | |
|                             dataType: "json",
 | |
|                             success: function(json) {
 | |
|                                 var jobId = json.createphysicalnetworkresponse.jobid;
 | |
|                                 var createPhysicalNetworkIntervalID = setInterval(function() {
 | |
|                                     $.ajax({
 | |
|                                         url: createURL("queryAsyncJobResult&jobid=" + jobId),
 | |
|                                         dataType: "json",
 | |
|                                         success: function(json) {
 | |
|                                             var result = json.queryasyncjobresultresponse;
 | |
|                                             if (result.jobstatus == 0) {
 | |
|                                                 return; //Job has not completed
 | |
|                                             } else {
 | |
|                                                 clearInterval(createPhysicalNetworkIntervalID);
 | |
| 
 | |
|                                                 if (result.jobstatus == 1) {
 | |
|                                                     var returnedBasicPhysicalNetwork = result.jobresult.physicalnetwork;
 | |
|                                                     var label = returnedBasicPhysicalNetwork.id + trafficLabelParam('guest', data);
 | |
|                                                     var returnedTrafficTypes = [];
 | |
| 
 | |
|                                                     $.ajax({
 | |
|                                                         url: createURL("addTrafficType&trafficType=Guest&physicalnetworkid=" + label),
 | |
|                                                         dataType: "json",
 | |
|                                                         success: function(json) {
 | |
|                                                             var jobId = json.addtraffictyperesponse.jobid;
 | |
|                                                             var addGuestTrafficTypeIntervalID = setInterval(function() {
 | |
|                                                                 $.ajax({
 | |
|                                                                     url: createURL("queryAsyncJobResult&jobid=" + jobId),
 | |
|                                                                     dataType: "json",
 | |
|                                                                     success: function(json) {
 | |
|                                                                         var result = json.queryasyncjobresultresponse;
 | |
|                                                                         if (result.jobstatus == 0) {
 | |
|                                                                             return; //Job has not completed
 | |
|                                                                         } else {
 | |
|                                                                             clearInterval(addGuestTrafficTypeIntervalID);
 | |
| 
 | |
|                                                                             if (result.jobstatus == 1) {
 | |
|                                                                                 returnedTrafficTypes.push(result.jobresult.traffictype);
 | |
| 
 | |
|                                                                                 if (returnedTrafficTypes.length == requestedTrafficTypeCount) { //all requested traffic types have been added
 | |
|                                                                                     returnedBasicPhysicalNetwork.returnedTrafficTypes = returnedTrafficTypes;
 | |
| 
 | |
|                                                                                     stepFns.configurePhysicalNetwork({
 | |
|                                                                                         data: $.extend(args.data, {
 | |
|                                                                                             returnedBasicPhysicalNetwork: returnedBasicPhysicalNetwork
 | |
|                                                                                         })
 | |
|                                                                                     });
 | |
|                                                                                 }
 | |
|                                                                             } else if (result.jobstatus == 2) {
 | |
|                                                                                 alert("Failed to add Guest traffic type to basic zone. Error: " + _s(result.jobresult.errortext));
 | |
|                                                                             }
 | |
|                                                                         }
 | |
|                                                                     },
 | |
|                                                                     error: function(XMLHttpResponse) {
 | |
|                                                                         var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                                                         alert("Failed to add Guest traffic type to basic zone. Error: " + errorMsg);
 | |
|                                                                     }
 | |
|                                                                 });
 | |
|                                                             }, g_queryAsyncJobResultInterval);
 | |
|                                                         }
 | |
|                                                     });
 | |
| 
 | |
|                                                     label = trafficLabelParam('management', data);
 | |
| 
 | |
|                                                     $.ajax({
 | |
|                                                         url: createURL("addTrafficType&trafficType=Management&physicalnetworkid=" + returnedBasicPhysicalNetwork.id + label),
 | |
|                                                         dataType: "json",
 | |
|                                                         success: function(json) {
 | |
|                                                             var jobId = json.addtraffictyperesponse.jobid;
 | |
|                                                             var addManagementTrafficTypeIntervalID = setInterval(function() {
 | |
|                                                                 $.ajax({
 | |
|                                                                     url: createURL("queryAsyncJobResult&jobid=" + jobId),
 | |
|                                                                     dataType: "json",
 | |
|                                                                     success: function(json) {
 | |
|                                                                         var result = json.queryasyncjobresultresponse;
 | |
|                                                                         if (result.jobstatus == 0) {
 | |
|                                                                             return; //Job has not completed
 | |
|                                                                         } else {
 | |
|                                                                             clearInterval(addManagementTrafficTypeIntervalID);
 | |
| 
 | |
|                                                                             if (result.jobstatus == 1) {
 | |
|                                                                                 returnedTrafficTypes.push(result.jobresult.traffictype);
 | |
| 
 | |
|                                                                                 if (returnedTrafficTypes.length == requestedTrafficTypeCount) { //all requested traffic types have been added
 | |
|                                                                                     returnedBasicPhysicalNetwork.returnedTrafficTypes = returnedTrafficTypes;
 | |
| 
 | |
|                                                                                     stepFns.configurePhysicalNetwork({
 | |
|                                                                                         data: $.extend(args.data, {
 | |
|                                                                                             returnedBasicPhysicalNetwork: returnedBasicPhysicalNetwork
 | |
|                                                                                         })
 | |
|                                                                                     });
 | |
|                                                                                 }
 | |
|                                                                             } else if (result.jobstatus == 2) {
 | |
|                                                                                 alert("Failed to add Management traffic type to basic zone. Error: " + _s(result.jobresult.errortext));
 | |
|                                                                             }
 | |
|                                                                         }
 | |
|                                                                     },
 | |
|                                                                     error: function(XMLHttpResponse) {
 | |
|                                                                         var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                                                         alert("Failed to add Management traffic type to basic zone. Error: " + errorMsg);
 | |
|                                                                     }
 | |
|                                                                 });
 | |
|                                                             }, g_queryAsyncJobResultInterval);
 | |
|                                                         }
 | |
|                                                     });
 | |
| 
 | |
|                                                     // Storage traffic
 | |
|                                                     if (data.physicalNetworks &&
 | |
|                                                         $.inArray('storage', data.physicalNetworks[0].trafficTypes) > -1) {
 | |
|                                                         label = trafficLabelParam('storage', data);
 | |
|                                                         $.ajax({
 | |
|                                                             url: createURL('addTrafficType&physicalnetworkid=' + returnedBasicPhysicalNetwork.id + '&trafficType=Storage' + label),
 | |
|                                                             dataType: "json",
 | |
|                                                             success: function(json) {
 | |
|                                                                 var jobId = json.addtraffictyperesponse.jobid;
 | |
|                                                                 var addStorageTrafficTypeIntervalID = setInterval(function() {
 | |
|                                                                     $.ajax({
 | |
|                                                                         url: createURL("queryAsyncJobResult&jobid=" + jobId),
 | |
|                                                                         dataType: "json",
 | |
|                                                                         success: function(json) {
 | |
|                                                                             var result = json.queryasyncjobresultresponse;
 | |
|                                                                             if (result.jobstatus == 0) {
 | |
|                                                                                 return; //Job has not completed
 | |
|                                                                             } else {
 | |
|                                                                                 clearInterval(addStorageTrafficTypeIntervalID);
 | |
| 
 | |
|                                                                                 if (result.jobstatus == 1) {
 | |
|                                                                                     returnedTrafficTypes.push(result.jobresult.traffictype);
 | |
| 
 | |
|                                                                                     if (returnedTrafficTypes.length == requestedTrafficTypeCount) { //all requested traffic types have been added
 | |
|                                                                                         returnedBasicPhysicalNetwork.returnedTrafficTypes = returnedTrafficTypes;
 | |
| 
 | |
|                                                                                         stepFns.configurePhysicalNetwork({
 | |
|                                                                                             data: $.extend(args.data, {
 | |
|                                                                                                 returnedBasicPhysicalNetwork: returnedBasicPhysicalNetwork
 | |
|                                                                                             })
 | |
|                                                                                         });
 | |
|                                                                                     }
 | |
|                                                                                 } else if (result.jobstatus == 2) {
 | |
|                                                                                     alert("Failed to add Management traffic type to basic zone. Error: " + _s(result.jobresult.errortext));
 | |
|                                                                                 }
 | |
|                                                                             }
 | |
|                                                                         },
 | |
|                                                                         error: function(XMLHttpResponse) {
 | |
|                                                                             var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                                                             alert("Failed to add Management traffic type to basic zone. Error: " + errorMsg);
 | |
|                                                                         }
 | |
|                                                                     });
 | |
|                                                                 }, g_queryAsyncJobResultInterval);
 | |
|                                                             }
 | |
|                                                         });
 | |
|                                                     }
 | |
| 
 | |
|                                                     if (selectedNetworkOfferingHavingSG == true && selectedNetworkOfferingHavingEIP == true && selectedNetworkOfferingHavingELB == true) {
 | |
|                                                         label = trafficLabelParam('public', data);
 | |
|                                                         $.ajax({
 | |
|                                                             url: createURL("addTrafficType&trafficType=Public&physicalnetworkid=" + returnedBasicPhysicalNetwork.id + label),
 | |
|                                                             dataType: "json",
 | |
|                                                             success: function(json) {
 | |
|                                                                 var jobId = json.addtraffictyperesponse.jobid;
 | |
|                                                                 var addPublicTrafficTypeIntervalID = setInterval(function() {
 | |
|                                                                     $.ajax({
 | |
|                                                                         url: createURL("queryAsyncJobResult&jobid=" + jobId),
 | |
|                                                                         dataType: "json",
 | |
|                                                                         success: function(json) {
 | |
|                                                                             var result = json.queryasyncjobresultresponse;
 | |
|                                                                             if (result.jobstatus == 0) {
 | |
|                                                                                 return; //Job has not completed
 | |
|                                                                             } else {
 | |
|                                                                                 clearInterval(addPublicTrafficTypeIntervalID);
 | |
| 
 | |
|                                                                                 if (result.jobstatus == 1) {
 | |
|                                                                                     returnedTrafficTypes.push(result.jobresult.traffictype);
 | |
| 
 | |
|                                                                                     if (returnedTrafficTypes.length == requestedTrafficTypeCount) { //all requested traffic types have been added
 | |
|                                                                                         returnedBasicPhysicalNetwork.returnedTrafficTypes = returnedTrafficTypes;
 | |
| 
 | |
|                                                                                         stepFns.configurePhysicalNetwork({
 | |
|                                                                                             data: $.extend(args.data, {
 | |
|                                                                                                 returnedBasicPhysicalNetwork: returnedBasicPhysicalNetwork
 | |
|                                                                                             })
 | |
|                                                                                         });
 | |
|                                                                                     }
 | |
|                                                                                 } else if (result.jobstatus == 2) {
 | |
|                                                                                     alert("Failed to add Public traffic type to basic zone. Error: " + _s(result.jobresult.errortext));
 | |
|                                                                                 }
 | |
|                                                                             }
 | |
|                                                                         },
 | |
|                                                                         error: function(XMLHttpResponse) {
 | |
|                                                                             var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                                                             alert("Failed to add Public traffic type to basic zone. Error: " + errorMsg);
 | |
|                                                                         }
 | |
|                                                                     });
 | |
|                                                                 }, g_queryAsyncJobResultInterval);
 | |
|                                                             }
 | |
|                                                         });
 | |
|                                                     }
 | |
|                                                 } else if (result.jobstatus == 2) {
 | |
|                                                     alert("createPhysicalNetwork failed. Error: " + _s(result.jobresult.errortext));
 | |
|                                                 }
 | |
|                                             }
 | |
|                                         },
 | |
|                                         error: function(XMLHttpResponse) {
 | |
|                                             var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                             alert("createPhysicalNetwork failed. Error: " + errorMsg);
 | |
|                                         }
 | |
|                                     });
 | |
|                                 }, g_queryAsyncJobResultInterval);
 | |
| 
 | |
|                             }
 | |
|                         });
 | |
|                     } else if (args.data.zone.networkType == "Advanced") {
 | |
|                         $(args.data.physicalNetworks).each(function(index) {
 | |
|                             var thisPhysicalNetwork = this;
 | |
|                             var array1 = [];
 | |
|                             array1.push("&name=" + encodeURIComponent(thisPhysicalNetwork.name));
 | |
|                             if (thisPhysicalNetwork.isolationMethod != null && thisPhysicalNetwork.isolationMethod.length > 0)
 | |
|                                 array1.push("&isolationmethods=" + encodeURIComponent(thisPhysicalNetwork.isolationMethod));
 | |
|                             $.ajax({
 | |
|                                 url: createURL("createPhysicalNetwork&zoneid=" + args.data.returnedZone.id + array1.join("")),
 | |
|                                 dataType: "json",
 | |
|                                 success: function(json) {
 | |
|                                     var jobId = json.createphysicalnetworkresponse.jobid;
 | |
|                                     var createPhysicalNetworkIntervalID = setInterval(function() {
 | |
|                                         $.ajax({
 | |
|                                             url: createURL("queryAsyncJobResult&jobid=" + jobId),
 | |
|                                             dataType: "json",
 | |
|                                             success: function(json) {
 | |
|                                                 var result = json.queryasyncjobresultresponse;
 | |
|                                                 if (result.jobstatus == 0) {
 | |
|                                                     return; //Job has not completed
 | |
|                                                 } else {
 | |
|                                                     clearInterval(createPhysicalNetworkIntervalID);
 | |
| 
 | |
|                                                     if (result.jobstatus == 1) {
 | |
|                                                         var returnedPhysicalNetwork = result.jobresult.physicalnetwork;
 | |
|                                                         returnedPhysicalNetwork.originalId = thisPhysicalNetwork.id;
 | |
| 
 | |
|                                                         var returnedTrafficTypes = [];
 | |
|                                                         var label; // Traffic type label
 | |
|                                                         $(thisPhysicalNetwork.trafficTypes).each(function() {
 | |
|                                                             var thisTrafficType = this;
 | |
|                                                             var apiCmd = "addTrafficType&physicalnetworkid=" + returnedPhysicalNetwork.id;
 | |
|                                                             if (thisTrafficType == "public") {
 | |
|                                                                 apiCmd += "&trafficType=Public";
 | |
|                                                                 label = trafficLabelParam('public', data, index);
 | |
|                                                             } else if (thisTrafficType == "management") {
 | |
|                                                                 apiCmd += "&trafficType=Management";
 | |
|                                                                 label = trafficLabelParam('management', data, index);
 | |
|                                                             } else if (thisTrafficType == "guest") {
 | |
|                                                                 apiCmd += "&trafficType=Guest";
 | |
|                                                                 label = trafficLabelParam('guest', data, index);
 | |
|                                                             } else if (thisTrafficType == "storage") {
 | |
|                                                                 apiCmd += "&trafficType=Storage";
 | |
|                                                                 label = trafficLabelParam('storage', data, index);
 | |
|                                                             }
 | |
| 
 | |
|                                                             $.ajax({
 | |
|                                                                 url: createURL(apiCmd + label),
 | |
|                                                                 dataType: "json",
 | |
|                                                                 success: function(json) {
 | |
|                                                                     var jobId = json.addtraffictyperesponse.jobid;
 | |
|                                                                     var addTrafficTypeIntervalID = setInterval(function() {
 | |
|                                                                         $.ajax({
 | |
|                                                                             url: createURL("queryAsyncJobResult&jobid=" + jobId),
 | |
|                                                                             dataType: "json",
 | |
|                                                                             success: function(json) {
 | |
|                                                                                 var result = json.queryasyncjobresultresponse;
 | |
|                                                                                 if (result.jobstatus == 0) {
 | |
|                                                                                     return; //Job has not completed
 | |
|                                                                                 } else {
 | |
|                                                                                     clearInterval(addTrafficTypeIntervalID);
 | |
| 
 | |
|                                                                                     if (result.jobstatus == 1) {
 | |
|                                                                                         returnedTrafficTypes.push(result.jobresult.traffictype);
 | |
| 
 | |
|                                                                                         if (returnedTrafficTypes.length == thisPhysicalNetwork.trafficTypes.length) { //this physical network is complete (specified traffic types are added)
 | |
|                                                                                             returnedPhysicalNetwork.returnedTrafficTypes = returnedTrafficTypes;
 | |
|                                                                                             returnedPhysicalNetworks.push(returnedPhysicalNetwork);
 | |
| 
 | |
|                                                                                             if (returnedPhysicalNetworks.length == args.data.physicalNetworks.length) { //all physical networks are complete
 | |
|                                                                                                 stepFns.configurePhysicalNetwork({
 | |
|                                                                                                     data: $.extend(args.data, {
 | |
|                                                                                                         returnedPhysicalNetworks: returnedPhysicalNetworks
 | |
|                                                                                                     })
 | |
|                                                                                                 });
 | |
|                                                                                             }
 | |
|                                                                                         }
 | |
|                                                                                     } else if (result.jobstatus == 2) {
 | |
|                                                                                         alert(apiCmd + " failed. Error: " + _s(result.jobresult.errortext));
 | |
|                                                                                     }
 | |
|                                                                                 }
 | |
|                                                                             },
 | |
|                                                                             error: function(XMLHttpResponse) {
 | |
|                                                                                 var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                                                                 alert(apiCmd + " failed. Error: " + errorMsg);
 | |
|                                                                             }
 | |
|                                                                         });
 | |
|                                                                     }, g_queryAsyncJobResultInterval);
 | |
|                                                                 }
 | |
|                                                             });
 | |
|                                                         });
 | |
|                                                     } else if (result.jobstatus == 2) {
 | |
|                                                         alert("createPhysicalNetwork failed. Error: " + _s(result.jobresult.errortext));
 | |
|                                                     }
 | |
|                                                 }
 | |
|                                             },
 | |
|                                             error: function(XMLHttpResponse) {
 | |
|                                                 var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                                 alert("createPhysicalNetwork failed. Error: " + errorMsg);
 | |
|                                             }
 | |
|                                         });
 | |
|                                     }, g_queryAsyncJobResultInterval);
 | |
|                                 }
 | |
|                             });
 | |
|                         });
 | |
|                     }
 | |
|                 },
 | |
| 
 | |
|                 //afterCreateZonePhysicalNetworkTrafficTypes: enable physical network, enable virtual router element, enable network service provider
 | |
|                 configurePhysicalNetwork: function(args) {
 | |
|                     message(_l('message.configuring.physical.networks'));
 | |
| 
 | |
|                     if (args.data.zone.networkType == "Basic") {
 | |
|                         $.ajax({
 | |
|                             url: createURL("updatePhysicalNetwork&state=Enabled&id=" + args.data.returnedBasicPhysicalNetwork.id),
 | |
|                             dataType: "json",
 | |
|                             success: function(json) {
 | |
|                                 var enablePhysicalNetworkIntervalID = setInterval(function() {
 | |
|                                     $.ajax({
 | |
|                                         url: createURL("queryAsyncJobResult&jobId=" + json.updatephysicalnetworkresponse.jobid),
 | |
|                                         dataType: "json",
 | |
|                                         success: function(json) {
 | |
|                                             var result = json.queryasyncjobresultresponse;
 | |
|                                             if (result.jobstatus == 0) {
 | |
|                                                 return; //Job has not completed
 | |
|                                             } else {
 | |
|                                                 clearInterval(enablePhysicalNetworkIntervalID);
 | |
| 
 | |
|                                                 if (result.jobstatus == 1) {
 | |
|                                                     //alert("updatePhysicalNetwork succeeded.");
 | |
| 
 | |
|                                                     // get network service provider ID of Virtual Router
 | |
|                                                     var virtualRouterProviderId;
 | |
|                                                     $.ajax({
 | |
|                                                         url: createURL("listNetworkServiceProviders&name=VirtualRouter&physicalNetworkId=" + args.data.returnedBasicPhysicalNetwork.id),
 | |
|                                                         dataType: "json",
 | |
|                                                         async: false,
 | |
|                                                         success: function(json) {
 | |
|                                                             var items = json.listnetworkserviceprovidersresponse.networkserviceprovider;
 | |
|                                                             if (items != null && items.length > 0) {
 | |
|                                                                 virtualRouterProviderId = items[0].id;
 | |
|                                                             }
 | |
|                                                         }
 | |
|                                                     });
 | |
|                                                     if (virtualRouterProviderId == null) {
 | |
|                                                         alert("error: listNetworkServiceProviders API doesn't return VirtualRouter provider ID");
 | |
|                                                         return;
 | |
|                                                     }
 | |
| 
 | |
|                                                     var virtualRouterElementId;
 | |
|                                                     $.ajax({
 | |
|                                                         url: createURL("listVirtualRouterElements&nspid=" + virtualRouterProviderId),
 | |
|                                                         dataType: "json",
 | |
|                                                         async: false,
 | |
|                                                         success: function(json) {
 | |
|                                                             var items = json.listvirtualrouterelementsresponse.virtualrouterelement;
 | |
|                                                             if (items != null && items.length > 0) {
 | |
|                                                                 virtualRouterElementId = items[0].id;
 | |
|                                                             }
 | |
|                                                         }
 | |
|                                                     });
 | |
|                                                     if (virtualRouterElementId == null) {
 | |
|                                                         alert("error: listVirtualRouterElements API doesn't return Virtual Router Element Id");
 | |
|                                                         return;
 | |
|                                                     }
 | |
| 
 | |
|                                                     $.ajax({
 | |
|                                                         url: createURL("configureVirtualRouterElement&enabled=true&id=" + virtualRouterElementId),
 | |
|                                                         dataType: "json",
 | |
|                                                         async: false,
 | |
|                                                         success: function(json) {
 | |
|                                                             var enableVirtualRouterElementIntervalID = setInterval(function() {
 | |
|                                                                 $.ajax({
 | |
|                                                                     url: createURL("queryAsyncJobResult&jobId=" + json.configurevirtualrouterelementresponse.jobid),
 | |
|                                                                     dataType: "json",
 | |
|                                                                     success: function(json) {
 | |
|                                                                         var result = json.queryasyncjobresultresponse;
 | |
|                                                                         if (result.jobstatus == 0) {
 | |
|                                                                             return; //Job has not completed
 | |
|                                                                         } else {
 | |
|                                                                             clearInterval(enableVirtualRouterElementIntervalID);
 | |
| 
 | |
|                                                                             if (result.jobstatus == 1) {
 | |
|                                                                                 //alert("configureVirtualRouterElement succeeded.");
 | |
| 
 | |
|                                                                                 if (args.data.pluginFrom != null && args.data.pluginFrom.name == "installWizard") {
 | |
|                                                                                     selectedNetworkOfferingObj = args.data.pluginFrom.selectedNetworkOffering;
 | |
|                                                                                 }
 | |
| 
 | |
|                                                                                 var data = {
 | |
|                                                                                     id: virtualRouterProviderId,
 | |
|                                                                                     state: 'Enabled'
 | |
|                                                                                 };
 | |
| 
 | |
|                                                                                 $.ajax({
 | |
|                                                                                     url: createURL("updateNetworkServiceProvider"),
 | |
|                                                                                     data: data,
 | |
|                                                                                     async: false,
 | |
|                                                                                     success: function(json) {
 | |
|                                                                                         var enableVirtualRouterProviderIntervalID = setInterval(function() {
 | |
|                                                                                             $.ajax({
 | |
|                                                                                                 url: createURL("queryAsyncJobResult&jobId=" + json.updatenetworkserviceproviderresponse.jobid),
 | |
|                                                                                                 dataType: "json",
 | |
|                                                                                                 success: function(json) {
 | |
|                                                                                                     var result = json.queryasyncjobresultresponse;
 | |
|                                                                                                     if (result.jobstatus == 0) {
 | |
|                                                                                                         return; //Job has not completed
 | |
|                                                                                                     } else {
 | |
|                                                                                                         clearInterval(enableVirtualRouterProviderIntervalID);
 | |
| 
 | |
|                                                                                                         if (result.jobstatus == 1) {
 | |
|                                                                                                             //alert("Virtual Router Provider is enabled");
 | |
|                                                                                                             for (var i = 0; i < selectedBaremetalProviders.length; i++) {
 | |
|                                                                                                                 $.ajax({
 | |
|                                                                                                                     url: createURL("listNetworkServiceProviders"),
 | |
|                                                                                                                     data: {
 | |
|                                                                                                                         name: selectedBaremetalProviders[i],
 | |
|                                                                                                                         physicalNetworkId: args.data.returnedBasicPhysicalNetwork.id
 | |
|                                                                                                                     },
 | |
|                                                                                                                     async: false,
 | |
|                                                                                                                     success: function(json) {
 | |
|                                                                                                                         var items = json.listnetworkserviceprovidersresponse.networkserviceprovider;
 | |
|                                                                                                                         if (items != null && items.length > 0) {
 | |
|                                                                                                                             var providerId = items[0].id;
 | |
|                                                                                                                             $.ajax({
 | |
|                                                                                                                                 url: createURL("updateNetworkServiceProvider"),
 | |
|                                                                                                                                 data: {
 | |
|                                                                                                                                     id: providerId,
 | |
|                                                                                                                                     state: 'Enabled'
 | |
|                                                                                                                                 },
 | |
|                                                                                                                                 async: false,
 | |
|                                                                                                                                 success: function(json) {
 | |
|                                                                                                                                     var updateNetworkServiceProviderIntervalID = setInterval(function() {
 | |
|                                                                                                                                         $.ajax({
 | |
|                                                                                                                                             url: createURL("queryAsyncJobResult&jobId=" + json.updatenetworkserviceproviderresponse.jobid),
 | |
|                                                                                                                                             dataType: "json",
 | |
|                                                                                                                                             success: function(json) {
 | |
|                                                                                                                                                 var result = json.queryasyncjobresultresponse;
 | |
|                                                                                                                                                 if (result.jobstatus == 0) {
 | |
|                                                                                                                                                     return; //Job has not completed
 | |
|                                                                                                                                                 } else {
 | |
|                                                                                                                                                     clearInterval(updateNetworkServiceProviderIntervalID);
 | |
|                                                                                                                                                     if (result.jobstatus == 1) { //baremetal provider has been enabled successfully
 | |
| 
 | |
|                                                                                                                                                     } else if (result.jobstatus == 2) {
 | |
|                                                                                                                                                         alert(_s(result.jobresult.errortext));
 | |
|                                                                                                                                                     }
 | |
|                                                                                                                                                 }
 | |
|                                                                                                                                             },
 | |
|                                                                                                                                             error: function(XMLHttpResponse) {
 | |
|                                                                                                                                                 alert(parseXMLHttpResponse(XMLHttpResponse));
 | |
|                                                                                                                                             }
 | |
|                                                                                                                                         });
 | |
|                                                                                                                                     }, g_queryAsyncJobResultInterval);
 | |
|                                                                                                                                 }
 | |
|                                                                                                                             });
 | |
|                                                                                                                         }
 | |
|                                                                                                                     }
 | |
|                                                                                                                 });
 | |
|                                                                                                             }
 | |
| 
 | |
|                                                                                                             if (args.data.pluginFrom != null && args.data.pluginFrom.name == "installWizard") {
 | |
|                                                                                                                 selectedNetworkOfferingHavingSG = args.data.pluginFrom.selectedNetworkOfferingHavingSG;
 | |
|                                                                                                             }
 | |
|                                                                                                             if (selectedNetworkOfferingHavingSG == true) { //need to Enable security group provider first
 | |
|                                                                                                                 message(_l('message.enabling.security.group.provider'));
 | |
| 
 | |
|                                                                                                                 // get network service provider ID of Security Group
 | |
|                                                                                                                 var securityGroupProviderId;
 | |
|                                                                                                                 $.ajax({
 | |
|                                                                                                                     url: createURL("listNetworkServiceProviders&name=SecurityGroupProvider&physicalNetworkId=" + args.data.returnedBasicPhysicalNetwork.id),
 | |
|                                                                                                                     dataType: "json",
 | |
|                                                                                                                     async: false,
 | |
|                                                                                                                     success: function(json) {
 | |
|                                                                                                                         var items = json.listnetworkserviceprovidersresponse.networkserviceprovider;
 | |
|                                                                                                                         if (items != null && items.length > 0) {
 | |
|                                                                                                                             securityGroupProviderId = items[0].id;
 | |
|                                                                                                                         }
 | |
|                                                                                                                     }
 | |
|                                                                                                                 });
 | |
|                                                                                                                 if (securityGroupProviderId == null) {
 | |
|                                                                                                                     alert("error: listNetworkServiceProviders API doesn't return security group provider ID");
 | |
|                                                                                                                     return;
 | |
|                                                                                                                 }
 | |
| 
 | |
|                                                                                                                 $.ajax({
 | |
|                                                                                                                     url: createURL("updateNetworkServiceProvider&state=Enabled&id=" + securityGroupProviderId),
 | |
|                                                                                                                     dataType: "json",
 | |
|                                                                                                                     async: false,
 | |
|                                                                                                                     success: function(json) {
 | |
|                                                                                                                         var enableSecurityGroupProviderIntervalID = setInterval(function() {
 | |
|                                                                                                                             $.ajax({
 | |
|                                                                                                                                 url: createURL("queryAsyncJobResult&jobId=" + json.updatenetworkserviceproviderresponse.jobid),
 | |
|                                                                                                                                 dataType: "json",
 | |
|                                                                                                                                 success: function(json) {
 | |
|                                                                                                                                     var result = json.queryasyncjobresultresponse;
 | |
|                                                                                                                                     if (result.jobstatus == 0) {
 | |
|                                                                                                                                         return; //Job has not completed
 | |
|                                                                                                                                     } else {
 | |
|                                                                                                                                         clearInterval(enableSecurityGroupProviderIntervalID);
 | |
| 
 | |
|                                                                                                                                         if (result.jobstatus == 1) { //Security group provider has been enabled successfully
 | |
|                                                                                                                                             stepFns.addNetscalerProvider({
 | |
|                                                                                                                                                 data: args.data
 | |
|                                                                                                                                             });
 | |
|                                                                                                                                         } else if (result.jobstatus == 2) {
 | |
|                                                                                                                                             alert("failed to enable security group provider. Error: " + _s(result.jobresult.errortext));
 | |
|                                                                                                                                         }
 | |
|                                                                                                                                     }
 | |
|                                                                                                                                 },
 | |
|                                                                                                                                 error: function(XMLHttpResponse) {
 | |
|                                                                                                                                     var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                                                                                                                     alert("failed to enable security group provider. Error: " + errorMsg);
 | |
|                                                                                                                                 }
 | |
|                                                                                                                             });
 | |
|                                                                                                                         }, g_queryAsyncJobResultInterval);
 | |
|                                                                                                                     }
 | |
|                                                                                                                 });
 | |
|                                                                                                             } else { //selectedNetworkOfferingHavingSG == false
 | |
|                                                                                                                 stepFns.addNetscalerProvider({
 | |
|                                                                                                                     data: args.data
 | |
|                                                                                                                 });
 | |
|                                                                                                             }
 | |
|                                                                                                         } else if (result.jobstatus == 2) {
 | |
|                                                                                                             alert("failed to enable Virtual Router Provider. Error: " + _s(result.jobresult.errortext));
 | |
|                                                                                                         }
 | |
|                                                                                                     }
 | |
|                                                                                                 },
 | |
|                                                                                                 error: function(XMLHttpResponse) {
 | |
|                                                                                                     var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                                                                                     alert("failed to enable Virtual Router Provider. Error: " + errorMsg);
 | |
|                                                                                                 }
 | |
|                                                                                             });
 | |
|                                                                                         }, g_queryAsyncJobResultInterval);
 | |
|                                                                                     }
 | |
|                                                                                 });
 | |
|                                                                             } else if (result.jobstatus == 2) {
 | |
|                                                                                 alert("configureVirtualRouterElement failed. Error: " + _s(result.jobresult.errortext));
 | |
|                                                                             }
 | |
|                                                                         }
 | |
|                                                                     },
 | |
|                                                                     error: function(XMLHttpResponse) {
 | |
|                                                                         var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                                                         alert("configureVirtualRouterElement failed. Error: " + errorMsg);
 | |
|                                                                     }
 | |
|                                                                 });
 | |
|                                                             }, g_queryAsyncJobResultInterval);
 | |
|                                                         }
 | |
|                                                     });
 | |
|                                                 } else if (result.jobstatus == 2) {
 | |
|                                                     alert("updatePhysicalNetwork failed. Error: " + _s(result.jobresult.errortext));
 | |
|                                                 }
 | |
|                                             }
 | |
|                                         },
 | |
|                                         error: function(XMLHttpResponse) {
 | |
|                                             var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                             alert("updatePhysicalNetwork failed. Error: " + errorMsg);
 | |
|                                         }
 | |
|                                     });
 | |
|                                 }, g_queryAsyncJobResultInterval);
 | |
|                             }
 | |
|                         });
 | |
|                     } else if (args.data.zone.networkType == "Advanced") {
 | |
|                         $(args.data.returnedPhysicalNetworks).each(function() {
 | |
|                             var thisPhysicalNetwork = this;
 | |
|                             $.ajax({
 | |
|                                 url: createURL("updatePhysicalNetwork&state=Enabled&id=" + thisPhysicalNetwork.id),
 | |
|                                 dataType: "json",
 | |
|                                 success: function(json) {
 | |
|                                     var jobId = json.updatephysicalnetworkresponse.jobid;
 | |
|                                     var enablePhysicalNetworkIntervalID = setInterval(function() {
 | |
|                                         $.ajax({
 | |
|                                             url: createURL("queryAsyncJobResult&jobId=" + jobId),
 | |
|                                             dataType: "json",
 | |
|                                             success: function(json) {
 | |
|                                                 var result = json.queryasyncjobresultresponse;
 | |
|                                                 if (result.jobstatus == 0) {
 | |
|                                                     return; //Job has not completed
 | |
|                                                 } else {
 | |
|                                                     clearInterval(enablePhysicalNetworkIntervalID);
 | |
| 
 | |
|                                                     if (result.jobstatus == 1) {
 | |
|                                                         //alert("enable physical network succeeded.");
 | |
| 
 | |
|                                                         // ***** Virtual Router ***** (begin) *****
 | |
|                                                         var virtualRouterProviderId;
 | |
|                                                         $.ajax({
 | |
|                                                             url: createURL("listNetworkServiceProviders&name=VirtualRouter&physicalNetworkId=" + thisPhysicalNetwork.id),
 | |
|                                                             dataType: "json",
 | |
|                                                             async: false,
 | |
|                                                             success: function(json) {
 | |
|                                                                 var items = json.listnetworkserviceprovidersresponse.networkserviceprovider;
 | |
|                                                                 if (items != null && items.length > 0) {
 | |
|                                                                     virtualRouterProviderId = items[0].id;
 | |
|                                                                 }
 | |
|                                                             }
 | |
|                                                         });
 | |
|                                                         if (virtualRouterProviderId == null) {
 | |
|                                                             alert("error: listNetworkServiceProviders API doesn't return VirtualRouter provider ID");
 | |
|                                                             return;
 | |
|                                                         }
 | |
| 
 | |
|                                                         var virtualRouterElementId;
 | |
|                                                         $.ajax({
 | |
|                                                             url: createURL("listVirtualRouterElements&nspid=" + virtualRouterProviderId),
 | |
|                                                             dataType: "json",
 | |
|                                                             async: false,
 | |
|                                                             success: function(json) {
 | |
|                                                                 var items = json.listvirtualrouterelementsresponse.virtualrouterelement;
 | |
|                                                                 if (items != null && items.length > 0) {
 | |
|                                                                     virtualRouterElementId = items[0].id;
 | |
|                                                                 }
 | |
|                                                             }
 | |
|                                                         });
 | |
|                                                         if (virtualRouterElementId == null) {
 | |
|                                                             alert("error: listVirtualRouterElements API doesn't return Virtual Router Element Id");
 | |
|                                                             return;
 | |
|                                                         }
 | |
| 
 | |
|                                                         $.ajax({
 | |
|                                                             url: createURL("configureVirtualRouterElement&enabled=true&id=" + virtualRouterElementId),
 | |
|                                                             dataType: "json",
 | |
|                                                             async: false,
 | |
|                                                             success: function(json) {
 | |
|                                                                 var jobId = json.configurevirtualrouterelementresponse.jobid;
 | |
|                                                                 var enableVirtualRouterElementIntervalID = setInterval(function() {
 | |
|                                                                     $.ajax({
 | |
|                                                                         url: createURL("queryAsyncJobResult&jobId=" + jobId),
 | |
|                                                                         dataType: "json",
 | |
|                                                                         success: function(json) {
 | |
|                                                                             var result = json.queryasyncjobresultresponse;
 | |
|                                                                             if (result.jobstatus == 0) {
 | |
|                                                                                 return; //Job has not completed
 | |
|                                                                             } else {
 | |
|                                                                                 clearInterval(enableVirtualRouterElementIntervalID);
 | |
| 
 | |
|                                                                                 if (result.jobstatus == 1) { //configureVirtualRouterElement succeeded
 | |
|                                                                                     $.ajax({
 | |
|                                                                                         url: createURL("updateNetworkServiceProvider&state=Enabled&id=" + virtualRouterProviderId),
 | |
|                                                                                         dataType: "json",
 | |
|                                                                                         async: false,
 | |
|                                                                                         success: function(json) {
 | |
|                                                                                             var jobId = json.updatenetworkserviceproviderresponse.jobid;
 | |
|                                                                                             var enableVirtualRouterProviderIntervalID = setInterval(function() {
 | |
|                                                                                                 $.ajax({
 | |
|                                                                                                     url: createURL("queryAsyncJobResult&jobId=" + jobId),
 | |
|                                                                                                     dataType: "json",
 | |
|                                                                                                     success: function(json) {
 | |
|                                                                                                         var result = json.queryasyncjobresultresponse;
 | |
|                                                                                                         if (result.jobstatus == 0) {
 | |
|                                                                                                             return; //Job has not completed
 | |
|                                                                                                         } else {
 | |
|                                                                                                             clearInterval(enableVirtualRouterProviderIntervalID);
 | |
| 
 | |
|                                                                                                             if (result.jobstatus == 1) { //Virtual Router Provider has been enabled successfully
 | |
|                                                                                                                 advZoneConfiguredVirtualRouterCount++;
 | |
| 
 | |
|                                                                                                                 if (advZoneConfiguredVirtualRouterCount == args.data.returnedPhysicalNetworks.length) { //not call next stepFns.addXXX() until virtualRouter of all physical networks get configured
 | |
|                                                                                                                     if (args.data.zone.sgEnabled != true) { //Advanced SG-disabled zone
 | |
|                                                                                                                         stepFns.addPod({
 | |
|                                                                                                                             data: args.data
 | |
|                                                                                                                         });
 | |
|                                                                                                                     } else { //args.data.zone.sgEnabled    == true  //Advanced SG-enabled zone
 | |
|                                                                                                                         stepFns.addGuestNetwork({
 | |
|                                                                                                                             data: args.data
 | |
|                                                                                                                         });
 | |
|                                                                                                                     }
 | |
|                                                                                                                 }
 | |
|                                                                                                             } else if (result.jobstatus == 2) {
 | |
|                                                                                                                 alert("failed to enable Virtual Router Provider. Error: " + _s(result.jobresult.errortext));
 | |
|                                                                                                             }
 | |
|                                                                                                         }
 | |
|                                                                                                     },
 | |
|                                                                                                     error: function(XMLHttpResponse) {
 | |
|                                                                                                         var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                                                                                         alert("updateNetworkServiceProvider failed. Error: " + errorMsg);
 | |
|                                                                                                     }
 | |
|                                                                                                 });
 | |
|                                                                                             }, g_queryAsyncJobResultInterval);
 | |
|                                                                                         }
 | |
|                                                                                     });
 | |
|                                                                                 } else if (result.jobstatus == 2) {
 | |
|                                                                                     alert("configureVirtualRouterElement failed. Error: " + _s(result.jobresult.errortext));
 | |
|                                                                                 }
 | |
|                                                                             }
 | |
|                                                                         },
 | |
|                                                                         error: function(XMLHttpResponse) {
 | |
|                                                                             var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                                                             alert("configureVirtualRouterElement failed. Error: " + errorMsg);
 | |
|                                                                         }
 | |
|                                                                     });
 | |
|                                                                 }, g_queryAsyncJobResultInterval);
 | |
|                                                             }
 | |
|                                                         });
 | |
|                                                         // ***** Virtual Router ***** (end) *****
 | |
| 
 | |
|                                                          // ***** Ovs ***** (begin) *****
 | |
|                                                         var ovsProviderId =  null;
 | |
|                                                         $.ajax({
 | |
|                                                             url: createURL("listNetworkServiceProviders&name=Ovs&physicalNetworkId=" + thisPhysicalNetwork.id),
 | |
|                                                             dataType: "json",
 | |
|                                                             async: false,
 | |
|                                                             success: function (json) {
 | |
|                                                                 var items = json.listnetworkserviceprovidersresponse.networkserviceprovider;
 | |
|                                                                 if (items != null && items.length > 0) {
 | |
|                                                                     ovsProviderId = items[0].id;
 | |
|                                                                 }
 | |
|                                                             }
 | |
|                                                         });
 | |
|                                                         if (ovsProviderId != null) {
 | |
|                                                             var ovsElementId = null;
 | |
|                                                             $.ajax({
 | |
|                                                                 url: createURL("listOvsElements&nspid=" + ovsProviderId),
 | |
|                                                                 dataType: "json",
 | |
|                                                                 async: false,
 | |
|                                                                 success: function (json) {
 | |
|                                                                     var items = json.listovselementsresponse.ovselement;
 | |
|                                                                     if (items != null && items.length > 0) {
 | |
|                                                                         ovsElementId = items[0].id;
 | |
|                                                                     }
 | |
|                                                                 }
 | |
|                                                             });
 | |
|                                                             if (ovsElementId != null) {
 | |
|                                                                 $.ajax({
 | |
|                                                                     url: createURL("configureOvsElement&enabled=true&id=" + ovsElementId),
 | |
|                                                                     dataType: "json",
 | |
|                                                                     async: false,
 | |
|                                                                     success: function (json) {
 | |
|                                                                         var jobId = json.configureovselementresponse.jobid;
 | |
|                                                                         var enableOvsElementIntervalID = setInterval(function () {
 | |
|                                                                             $.ajax({
 | |
|                                                                                 url: createURL("queryAsyncJobResult&jobId=" + jobId),
 | |
|                                                                                 dataType: "json",
 | |
|                                                                                 success: function (json) {
 | |
|                                                                                     var result = json.queryasyncjobresultresponse;
 | |
|                                                                                     if (result.jobstatus == 0) {
 | |
|                                                                                         return; //Job has not completed
 | |
|                                                                                     } else {
 | |
|                                                                                         clearInterval(enableOvsElementIntervalID);
 | |
| 
 | |
|                                                                                         if (result.jobstatus == 1) { //configureOvsElement succeeded
 | |
|                                                                                             $.ajax({
 | |
|                                                                                                 url: createURL("updateNetworkServiceProvider&state=Enabled&id=" + ovsProviderId),
 | |
|                                                                                                 dataType: "json",
 | |
|                                                                                                 async: false,
 | |
|                                                                                                 success: function (json) {
 | |
|                                                                                                     var jobId = json.updatenetworkserviceproviderresponse.jobid;
 | |
|                                                                                                     var enableOvsProviderIntervalID = setInterval(function () {
 | |
|                                                                                                         $.ajax({
 | |
|                                                                                                             url: createURL("queryAsyncJobResult&jobId=" + jobId),
 | |
|                                                                                                             dataType: "json",
 | |
|                                                                                                             success: function (json) {
 | |
|                                                                                                                 var result = json.queryasyncjobresultresponse;
 | |
|                                                                                                                 if (result.jobstatus == 0) {
 | |
|                                                                                                                     return; //Job has not completed
 | |
|                                                                                                                 } else {
 | |
|                                                                                                                     clearInterval(enableOvsProviderIntervalID);
 | |
| 
 | |
|                                                                                                                     if (result.jobstatus == 2) {
 | |
|                                                                                                                         alert("failed to enable Ovs Provider. Error: " + _s(result.jobresult.errortext));
 | |
|                                                                                                                     }
 | |
|                                                                                                                 }
 | |
|                                                                                                             },
 | |
|                                                                                                             error: function (XMLHttpResponse) {
 | |
|                                                                                                                 var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                                                                                                 alert("updateNetworkServiceProvider failed. Error: " + errorMsg);
 | |
|                                                                                                             }
 | |
|                                                                                                         });
 | |
|                                                                                                     }, g_queryAsyncJobResultInterval);
 | |
|                                                                                                 }
 | |
|                                                                                             });
 | |
|                                                                                         } else if (result.jobstatus == 2) {
 | |
|                                                                                             alert("configureOvsElement failed. Error: " + _s(result.jobresult.errortext));
 | |
|                                                                                         }
 | |
|                                                                                     }
 | |
|                                                                                 },
 | |
|                                                                                 error: function (XMLHttpResponse) {
 | |
|                                                                                     var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                                                                     alert("configureOvsElement failed. Error: " + errorMsg);
 | |
|                                                                                 }
 | |
|                                                                             });
 | |
|                                                                         }, g_queryAsyncJobResultInterval);
 | |
|                                                                     }
 | |
|                                                                 });
 | |
|                                                             }
 | |
| 
 | |
| 
 | |
|                                                         }
 | |
|                                                         // ***** Ovs ***** (end) *****
 | |
| 
 | |
|                                                         // ***** Internal LB ***** (begin) *****
 | |
|                                                         var internalLbProviderId;
 | |
|                                                         $.ajax({
 | |
|                                                             url: createURL("listNetworkServiceProviders&name=Internallbvm&physicalNetworkId=" + thisPhysicalNetwork.id),
 | |
|                                                             dataType: "json",
 | |
|                                                             async: false,
 | |
|                                                             success: function(json) {
 | |
|                                                                 var items = json.listnetworkserviceprovidersresponse.networkserviceprovider;
 | |
|                                                                 if (items != null && items.length > 0) {
 | |
|                                                                     internalLbProviderId = items[0].id;
 | |
|                                                                 }
 | |
|                                                             }
 | |
|                                                         });
 | |
|                                                         if (internalLbProviderId == null) {
 | |
|                                                             alert("error: listNetworkServiceProviders API doesn't return internalLb provider ID");
 | |
|                                                             return;
 | |
|                                                         }
 | |
| 
 | |
|                                                         var internalLbElementId;
 | |
|                                                         $.ajax({
 | |
|                                                             url: createURL("listInternalLoadBalancerElements&nspid=" + internalLbProviderId),
 | |
|                                                             dataType: "json",
 | |
|                                                             async: false,
 | |
|                                                             success: function(json) {
 | |
|                                                                 var items = json.listinternalloadbalancerelementsresponse.internalloadbalancerelement;
 | |
|                                                                 if (items != null && items.length > 0) {
 | |
|                                                                     internalLbElementId = items[0].id;
 | |
|                                                                 }
 | |
|                                                             }
 | |
|                                                         });
 | |
|                                                         if (internalLbElementId == null) {
 | |
|                                                             alert("error: listInternalLoadBalancerElements API doesn't return Internal LB Element Id");
 | |
|                                                             return;
 | |
|                                                         }
 | |
| 
 | |
|                                                         var virtualRouterElementId;
 | |
|                                                         $.ajax({
 | |
|                                                             url: createURL("configureInternalLoadBalancerElement&enabled=true&id=" + internalLbElementId),
 | |
|                                                             dataType: "json",
 | |
|                                                             async: false,
 | |
|                                                             success: function(json) {
 | |
|                                                                 var jobId = json.configureinternalloadbalancerelementresponse.jobid;
 | |
|                                                                 var enableInternalLbElementIntervalID = setInterval(function() {
 | |
|                                                                     $.ajax({
 | |
|                                                                         url: createURL("queryAsyncJobResult&jobId=" + jobId),
 | |
|                                                                         dataType: "json",
 | |
|                                                                         success: function(json) {
 | |
|                                                                             var result = json.queryasyncjobresultresponse;
 | |
|                                                                             if (result.jobstatus == 0) {
 | |
|                                                                                 return; //Job has not completed
 | |
|                                                                             } else {
 | |
|                                                                                 clearInterval(enableInternalLbElementIntervalID);
 | |
| 
 | |
|                                                                                 if (result.jobstatus == 1) { //configureVirtualRouterElement succeeded
 | |
|                                                                                     $.ajax({
 | |
|                                                                                         url: createURL("updateNetworkServiceProvider&state=Enabled&id=" + internalLbProviderId),
 | |
|                                                                                         dataType: "json",
 | |
|                                                                                         async: false,
 | |
|                                                                                         success: function(json) {
 | |
|                                                                                             var jobId = json.updatenetworkserviceproviderresponse.jobid;
 | |
|                                                                                             var enableInternalLbProviderIntervalID = setInterval(function() {
 | |
|                                                                                                 $.ajax({
 | |
|                                                                                                     url: createURL("queryAsyncJobResult&jobId=" + jobId),
 | |
|                                                                                                     dataType: "json",
 | |
|                                                                                                     success: function(json) {
 | |
|                                                                                                         var result = json.queryasyncjobresultresponse;
 | |
|                                                                                                         if (result.jobstatus == 0) {
 | |
|                                                                                                             return; //Job has not completed
 | |
|                                                                                                         } else {
 | |
|                                                                                                             clearInterval(enableInternalLbProviderIntervalID);
 | |
| 
 | |
|                                                                                                             if (result.jobstatus == 1) { //Internal LB has been enabled successfully
 | |
|                                                                                                                 //don't need to do anything here
 | |
|                                                                                                             } else if (result.jobstatus == 2) {
 | |
|                                                                                                                 alert("failed to enable Internal LB Provider. Error: " + _s(result.jobresult.errortext));
 | |
|                                                                                                             }
 | |
|                                                                                                         }
 | |
|                                                                                                     },
 | |
|                                                                                                     error: function(XMLHttpResponse) {
 | |
|                                                                                                         var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                                                                                         alert("failed to enable Internal LB Provider. Error: " + errorMsg);
 | |
|                                                                                                     }
 | |
|                                                                                                 });
 | |
|                                                                                             }, g_queryAsyncJobResultInterval);
 | |
|                                                                                         }
 | |
|                                                                                     });
 | |
|                                                                                 } else if (result.jobstatus == 2) {
 | |
|                                                                                     alert("configureVirtualRouterElement failed. Error: " + _s(result.jobresult.errortext));
 | |
|                                                                                 }
 | |
|                                                                             }
 | |
|                                                                         },
 | |
|                                                                         error: function(XMLHttpResponse) {
 | |
|                                                                             var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                                                             alert("configureVirtualRouterElement failed. Error: " + errorMsg);
 | |
|                                                                         }
 | |
|                                                                     });
 | |
|                                                                 }, g_queryAsyncJobResultInterval);
 | |
|                                                             }
 | |
|                                                         });
 | |
|                                                         // ***** Virtual Router ***** (end) *****
 | |
| 
 | |
|                                                         // ***** Ovs ***** (begin) *****
 | |
|                                                         var ovsProviderId =  null;
 | |
|                                                         $.ajax({
 | |
|                                                             url: createURL("listNetworkServiceProviders&name=Ovs&physicalNetworkId=" + thisPhysicalNetwork.id),
 | |
|                                                             dataType: "json",
 | |
|                                                             async: false,
 | |
|                                                             success: function (json) {
 | |
|                                                                 var items = json.listnetworkserviceprovidersresponse.networkserviceprovider;
 | |
|                                                                 if (items != null && items.length > 0) {
 | |
|                                                                     ovsProviderId = items[0].id;
 | |
|                                                                 }
 | |
|                                                             }
 | |
|                                                         });
 | |
|                                                         if (ovsProviderId != null) {
 | |
|                                                             var ovsElementId = null;
 | |
|                                                             $.ajax({
 | |
|                                                                 url: createURL("listOvsElements&nspid=" + ovsProviderId),
 | |
|                                                                 dataType: "json",
 | |
|                                                                 async: false,
 | |
|                                                                 success: function (json) {
 | |
|                                                                     var items = json.listovselementsresponse.ovselement;
 | |
|                                                                     if (items != null && items.length > 0) {
 | |
|                                                                         ovsElementId = items[0].id;
 | |
|                                                                     }
 | |
|                                                                 }
 | |
|                                                             });
 | |
|                                                             if (ovsElementId != null) {
 | |
|                                                                 $.ajax({
 | |
|                                                                     url: createURL("configureOvsElement&enabled=true&id=" + ovsElementId),
 | |
|                                                                     dataType: "json",
 | |
|                                                                     async: false,
 | |
|                                                                     success: function (json) {
 | |
|                                                                         var jobId = json.configureovselementresponse.jobid;
 | |
|                                                                         var enableOvsElementIntervalID = setInterval(function () {
 | |
|                                                                             $.ajax({
 | |
|                                                                                 url: createURL("queryAsyncJobResult&jobId=" + jobId),
 | |
|                                                                                 dataType: "json",
 | |
|                                                                                 success: function (json) {
 | |
|                                                                                     var result = json.queryasyncjobresultresponse;
 | |
|                                                                                     if (result.jobstatus == 0) {
 | |
|                                                                                         return; //Job has not completed
 | |
|                                                                                     } else {
 | |
|                                                                                         clearInterval(enableOvsElementIntervalID);
 | |
| 
 | |
|                                                                                         if (result.jobstatus == 1) { //configureOvsElement succeeded
 | |
|                                                                                             $.ajax({
 | |
|                                                                                                 url: createURL("updateNetworkServiceProvider&state=Enabled&id=" + ovsProviderId),
 | |
|                                                                                                 dataType: "json",
 | |
|                                                                                                 async: false,
 | |
|                                                                                                 success: function (json) {
 | |
|                                                                                                     var jobId = json.updatenetworkserviceproviderresponse.jobid;
 | |
|                                                                                                     var enableOvsProviderIntervalID = setInterval(function () {
 | |
|                                                                                                         $.ajax({
 | |
|                                                                                                             url: createURL("queryAsyncJobResult&jobId=" + jobId),
 | |
|                                                                                                             dataType: "json",
 | |
|                                                                                                             success: function (json) {
 | |
|                                                                                                                 var result = json.queryasyncjobresultresponse;
 | |
|                                                                                                                 if (result.jobstatus == 0) {
 | |
|                                                                                                                     return; //Job has not completed
 | |
|                                                                                                                 } else {
 | |
|                                                                                                                     clearInterval(enableOvsProviderIntervalID);
 | |
| 
 | |
|                                                                                                                     if (result.jobstatus == 2) {
 | |
|                                                                                                                         alert("failed to enable Ovs Provider. Error: " + _s(result.jobresult.errortext));
 | |
|                                                                                                                     }
 | |
|                                                                                                                 }
 | |
|                                                                                                             },
 | |
|                                                                                                             error: function (XMLHttpResponse) {
 | |
|                                                                                                                 var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                                                                                                 alert("updateNetworkServiceProvider failed. Error: " + errorMsg);
 | |
|                                                                                                             }
 | |
|                                                                                                         });
 | |
|                                                                                                     }, g_queryAsyncJobResultInterval);
 | |
|                                                                                                 }
 | |
|                                                                                             });
 | |
|                                                                                         } else if (result.jobstatus == 2) {
 | |
|                                                                                             alert("configureOvsElement failed. Error: " + _s(result.jobresult.errortext));
 | |
|                                                                                         }
 | |
|                                                                                     }
 | |
|                                                                                 },
 | |
|                                                                                 error: function (XMLHttpResponse) {
 | |
|                                                                                     var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                                                                     alert("configureOvsElement failed. Error: " + errorMsg);
 | |
|                                                                                 }
 | |
|                                                                             });
 | |
|                                                                         }, g_queryAsyncJobResultInterval);
 | |
|                                                                     }
 | |
|                                                                 });
 | |
|                                                             }
 | |
| 
 | |
| 
 | |
|                                                         }
 | |
| 
 | |
| 
 | |
|                                                         // ***** Ovs ***** (end) *****
 | |
| 
 | |
|                                                         // ***** Internal LB ***** (begin) *****
 | |
|                                                         var internalLbProviderId;
 | |
|                                                         $.ajax({
 | |
|                                                             url: createURL("listNetworkServiceProviders&name=Internallbvm&physicalNetworkId=" + thisPhysicalNetwork.id),
 | |
|                                                             dataType: "json",
 | |
|                                                             async: false,
 | |
|                                                             success: function (json) {
 | |
|                                                                 var items = json.listnetworkserviceprovidersresponse.networkserviceprovider;
 | |
|                                                                 if (items != null && items.length > 0) {
 | |
|                                                                     internalLbProviderId = items[0].id;
 | |
|                                                                 }
 | |
|                                                             }
 | |
|                                                         });
 | |
|                                                         if (internalLbProviderId == null) {
 | |
|                                                             alert("error: listNetworkServiceProviders API doesn't return internalLb provider ID");
 | |
|                                                             return;
 | |
|                                                         }
 | |
| 
 | |
|                                                         var internalLbElementId;
 | |
|                                                         $.ajax({
 | |
|                                                             url: createURL("listInternalLoadBalancerElements&nspid=" + internalLbProviderId),
 | |
|                                                             dataType: "json",
 | |
|                                                             async: false,
 | |
|                                                             success: function (json) {
 | |
|                                                                 var items = json.listinternalloadbalancerelementsresponse.internalloadbalancerelement;
 | |
|                                                                 if (items != null && items.length > 0) {
 | |
|                                                                     internalLbElementId = items[0].id;
 | |
|                                                                 }
 | |
|                                                             }
 | |
|                                                         });
 | |
|                                                         if (internalLbElementId == null) {
 | |
|                                                             alert("error: listInternalLoadBalancerElements API doesn't return Internal LB Element Id");
 | |
|                                                             return;
 | |
|                                                         }
 | |
| 
 | |
|                                                         $.ajax({
 | |
|                                                             url: createURL("configureInternalLoadBalancerElement&enabled=true&id=" + internalLbElementId),
 | |
|                                                             dataType: "json",
 | |
|                                                             async: false,
 | |
|                                                             success: function (json) {
 | |
|                                                                 var jobId = json.configureinternalloadbalancerelementresponse.jobid;
 | |
|                                                                 var enableInternalLbElementIntervalID = setInterval(function () {
 | |
|                                                                     $.ajax({
 | |
|                                                                         url: createURL("queryAsyncJobResult&jobId=" + jobId),
 | |
|                                                                         dataType: "json",
 | |
|                                                                         success: function (json) {
 | |
|                                                                             var result = json.queryasyncjobresultresponse;
 | |
|                                                                             if (result.jobstatus == 0) {
 | |
|                                                                                 return; //Job has not completed
 | |
|                                                                             } else {
 | |
|                                                                                 clearInterval(enableInternalLbElementIntervalID);
 | |
| 
 | |
|                                                                                 if (result.jobstatus == 1) { //configureVirtualRouterElement succeeded
 | |
|                                                                                     $.ajax({
 | |
|                                                                                         url: createURL("updateNetworkServiceProvider&state=Enabled&id=" + internalLbProviderId),
 | |
|                                                                                         dataType: "json",
 | |
|                                                                                         async: false,
 | |
|                                                                                         success: function (json) {
 | |
|                                                                                             var jobId = json.updatenetworkserviceproviderresponse.jobid;
 | |
|                                                                                             var enableInternalLbProviderIntervalID = setInterval(function () {
 | |
|                                                                                                 $.ajax({
 | |
|                                                                                                     url: createURL("queryAsyncJobResult&jobId=" + jobId),
 | |
|                                                                                                     dataType: "json",
 | |
|                                                                                                     success: function (json) {
 | |
|                                                                                                         var result = json.queryasyncjobresultresponse;
 | |
|                                                                                                         if (result.jobstatus == 0) {
 | |
|                                                                                                             return; //Job has not completed
 | |
|                                                                                                         } else {
 | |
|                                                                                                             clearInterval(enableInternalLbProviderIntervalID);
 | |
| 
 | |
|                                                                                                             if (result.jobstatus == 1) { //Internal LB has been enabled successfully
 | |
|                                                                                                                 //don't need to do anything here
 | |
|                                                                                                             } else if (result.jobstatus == 2) {
 | |
|                                                                                                                 alert("failed to enable Internal LB Provider. Error: " + _s(result.jobresult.errortext));
 | |
|                                                                                                             }
 | |
|                                                                                                         }
 | |
|                                                                                                     },
 | |
|                                                                                                     error: function (XMLHttpResponse) {
 | |
|                                                                                                         var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                                                                                         alert("failed to enable Internal LB Provider. Error: " + errorMsg);
 | |
|                                                                                                     }
 | |
|                                                                                                 });
 | |
|                                                                                             }, g_queryAsyncJobResultInterval);
 | |
|                                                                                         }
 | |
|                                                                                     });
 | |
|                                                                                 } else if (result.jobstatus == 2) {
 | |
|                                                                                     alert("configureVirtualRouterElement failed. Error: " + _s(result.jobresult.errortext));
 | |
|                                                                                 }
 | |
|                                                                             }
 | |
|                                                                         },
 | |
|                                                                         error: function (XMLHttpResponse) {
 | |
|                                                                             var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                                                             alert("configureVirtualRouterElement failed. Error: " + errorMsg);
 | |
|                                                                         }
 | |
|                                                                     });
 | |
|                                                                 }, g_queryAsyncJobResultInterval);
 | |
|                                                             }
 | |
|                                                         });
 | |
|                                                         // ***** Internal LB ***** (end) *****
 | |
| 
 | |
|                                                         if (args.data.zone.sgEnabled != true) { //Advanced SG-disabled zone
 | |
|                                                             // ***** VPC Virtual Router ***** (begin) *****
 | |
|                                                             var vpcVirtualRouterProviderId;
 | |
|                                                             $.ajax({
 | |
|                                                                 url: createURL("listNetworkServiceProviders&name=VpcVirtualRouter&physicalNetworkId=" + thisPhysicalNetwork.id),
 | |
|                                                                 dataType: "json",
 | |
|                                                                 async: false,
 | |
|                                                                 success: function (json) {
 | |
|                                                                     var items = json.listnetworkserviceprovidersresponse.networkserviceprovider;
 | |
|                                                                     if (items != null && items.length > 0) {
 | |
|                                                                         vpcVirtualRouterProviderId = items[0].id;
 | |
|                                                                     }
 | |
|                                                                 }
 | |
|                                                             });
 | |
|                                                             if (vpcVirtualRouterProviderId == null) {
 | |
|                                                                 alert("error: listNetworkServiceProviders API doesn't return VpcVirtualRouter provider ID");
 | |
|                                                                 return;
 | |
|                                                             }
 | |
| 
 | |
|                                                             var vpcVirtualRouterElementId;
 | |
|                                                             $.ajax({
 | |
|                                                                 url: createURL("listVirtualRouterElements&nspid=" + vpcVirtualRouterProviderId),
 | |
|                                                                 dataType: "json",
 | |
|                                                                 async: false,
 | |
|                                                                 success: function (json) {
 | |
|                                                                     var items = json.listvirtualrouterelementsresponse.virtualrouterelement;
 | |
|                                                                     if (items != null && items.length > 0) {
 | |
|                                                                         vpcVirtualRouterElementId = items[0].id;
 | |
|                                                                     }
 | |
|                                                                 }
 | |
|                                                             });
 | |
|                                                             if (vpcVirtualRouterElementId == null) {
 | |
|                                                                 alert("error: listVirtualRouterElements API doesn't return VPC Virtual Router Element Id");
 | |
|                                                                 return;
 | |
|                                                             }
 | |
| 
 | |
|                                                             $.ajax({
 | |
|                                                                 url: createURL("configureVirtualRouterElement&enabled=true&id=" + vpcVirtualRouterElementId),
 | |
|                                                                 dataType: "json",
 | |
|                                                                 async: false,
 | |
|                                                                 success: function (json) {
 | |
|                                                                     var jobId = json.configurevirtualrouterelementresponse.jobid;
 | |
|                                                                     var enableVpcVirtualRouterElementIntervalID = setInterval(function () {
 | |
|                                                                         $.ajax({
 | |
|                                                                             url: createURL("queryAsyncJobResult&jobId=" + jobId),
 | |
|                                                                             dataType: "json",
 | |
|                                                                             success: function (json) {
 | |
|                                                                                 var result = json.queryasyncjobresultresponse;
 | |
|                                                                                 if (result.jobstatus == 0) {
 | |
|                                                                                     return; //Job has not completed
 | |
|                                                                                 } else {
 | |
|                                                                                     clearInterval(enableVpcVirtualRouterElementIntervalID);
 | |
| 
 | |
|                                                                                     if (result.jobstatus == 1) { //configureVirtualRouterElement succeeded
 | |
|                                                                                         $.ajax({
 | |
|                                                                                             url: createURL("updateNetworkServiceProvider&state=Enabled&id=" + vpcVirtualRouterProviderId),
 | |
|                                                                                             dataType: "json",
 | |
|                                                                                             async: false,
 | |
|                                                                                             success: function (json) {
 | |
|                                                                                                 var jobId = json.updatenetworkserviceproviderresponse.jobid;
 | |
|                                                                                                 var enableVpcVirtualRouterProviderIntervalID = setInterval(function () {
 | |
|                                                                                                     $.ajax({
 | |
|                                                                                                         url: createURL("queryAsyncJobResult&jobId=" + jobId),
 | |
|                                                                                                         dataType: "json",
 | |
|                                                                                                         success: function (json) {
 | |
|                                                                                                             var result = json.queryasyncjobresultresponse;
 | |
|                                                                                                             if (result.jobstatus == 0) {
 | |
|                                                                                                                 return; //Job has not completed
 | |
|                                                                                                             } else {
 | |
|                                                                                                                 clearInterval(enableVpcVirtualRouterProviderIntervalID);
 | |
| 
 | |
|                                                                                                                 if (result.jobstatus == 1) { //VPC Virtual Router has been enabled successfully
 | |
|                                                                                                                     //don't need to do anything here
 | |
|                                                                                                                 } else if (result.jobstatus == 2) {
 | |
|                                                                                                                     alert("failed to enable VPC Virtual Router Provider. Error: " + _s(result.jobresult.errortext));
 | |
|                                                                                                                 }
 | |
|                                                                                                             }
 | |
|                                                                                                         },
 | |
|                                                                                                         error: function (XMLHttpResponse) {
 | |
|                                                                                                             var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                                                                                             alert("failed to enable VPC Virtual Router Provider. Error: " + errorMsg);
 | |
|                                                                                                         }
 | |
|                                                                                                     });
 | |
|                                                                                                 }, g_queryAsyncJobResultInterval);
 | |
|                                                                                             }
 | |
|                                                                                         });
 | |
|                                                                                     } else if (result.jobstatus == 2) {
 | |
|                                                                                         alert("configureVirtualRouterElement failed. Error: " + _s(result.jobresult.errortext));
 | |
|                                                                                     }
 | |
|                                                                                 }
 | |
|                                                                             },
 | |
|                                                                             error: function (XMLHttpResponse) {
 | |
|                                                                                 var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                                                                 alert("configureVirtualRouterElement failed. Error: " + errorMsg);
 | |
|                                                                             }
 | |
|                                                                         });
 | |
|                                                                     }, g_queryAsyncJobResultInterval);
 | |
|                                                                 }
 | |
|                                                             });
 | |
|                                                             // ***** VPC Virtual Router ***** (end) *****
 | |
|                                                         } else { //args.data.zone.sgEnabled == true  //Advanced SG-enabled zone
 | |
|                                                             message(_l('message.enabling.security.group.provider'));
 | |
| 
 | |
|                                                             // get network service provider ID of Security Group
 | |
|                                                             var securityGroupProviderId;
 | |
|                                                             $.ajax({
 | |
|                                                                 url: createURL("listNetworkServiceProviders&name=SecurityGroupProvider&physicalNetworkId=" + thisPhysicalNetwork.id),
 | |
|                                                                 dataType: "json",
 | |
|                                                                 async: false,
 | |
|                                                                 success: function (json) {
 | |
|                                                                     var items = json.listnetworkserviceprovidersresponse.networkserviceprovider;
 | |
|                                                                     if (items != null && items.length > 0) {
 | |
|                                                                         securityGroupProviderId = items[0].id;
 | |
|                                                                     }
 | |
|                                                                 }
 | |
|                                                             });
 | |
|                                                             if (securityGroupProviderId == null) {
 | |
|                                                                 alert("error: listNetworkServiceProviders API doesn't return security group provider ID");
 | |
|                                                                 return;
 | |
|                                                             }
 | |
| 
 | |
|                                                             $.ajax({
 | |
|                                                                 url: createURL("updateNetworkServiceProvider&state=Enabled&id=" + securityGroupProviderId),
 | |
|                                                                 dataType: "json",
 | |
|                                                                 async: false,
 | |
|                                                                 success: function(json) {
 | |
|                                                                     var enableSecurityGroupProviderIntervalID = setInterval(function() {
 | |
|                                                                         $.ajax({
 | |
|                                                                             url: createURL("queryAsyncJobResult&jobId=" + json.updatenetworkserviceproviderresponse.jobid),
 | |
|                                                                             dataType: "json",
 | |
|                                                                             success: function(json) {
 | |
|                                                                                 var result = json.queryasyncjobresultresponse;
 | |
|                                                                                 if (result.jobstatus == 0) {
 | |
|                                                                                     return; //Job has not completed
 | |
|                                                                                 } else {
 | |
|                                                                                     clearInterval(enableSecurityGroupProviderIntervalID);
 | |
| 
 | |
|                                                                                     if (result.jobstatus == 1) { //Security group provider has been enabled successfully
 | |
|                                                                                         //don't need to do anything here
 | |
|                                                                                     } else if (result.jobstatus == 2) {
 | |
|                                                                                         alert("failed to enable security group provider. Error: " + _s(result.jobresult.errortext));
 | |
|                                                                                     }
 | |
|                                                                                 }
 | |
|                                                                             },
 | |
|                                                                             error: function(XMLHttpResponse) {
 | |
|                                                                                 var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                                                                 alert("failed to enable security group provider. Error: " + errorMsg);
 | |
|                                                                             }
 | |
|                                                                         });
 | |
|                                                                     }, g_queryAsyncJobResultInterval);
 | |
|                                                                 }
 | |
|                                                             });
 | |
|                                                         }
 | |
|                                                     } else if (result.jobstatus == 2) {
 | |
|                                                         alert("failed to enable physical network. Error: " + _s(result.jobresult.errortext));
 | |
|                                                     }
 | |
|                                                 }
 | |
|                                             },
 | |
|                                             error: function(XMLHttpResponse) {
 | |
|                                                 alert("failed to enable physical network. Error: " + parseXMLHttpResponse(XMLHttpResponse));
 | |
|                                             }
 | |
|                                         });
 | |
|                                     }, g_queryAsyncJobResultInterval);
 | |
|                                 }
 | |
|                             });
 | |
|                         });
 | |
|                     }
 | |
|                 },
 | |
| 
 | |
|                 addNetscalerProvider: function(args) {
 | |
| 
 | |
|                     if (selectedNetworkOfferingHavingNetscaler == true) {
 | |
|                         message(_l('message.adding.Netscaler.provider'));
 | |
| 
 | |
|                         $.ajax({
 | |
|                             url: createURL("addNetworkServiceProvider&name=Netscaler&physicalnetworkid=" + args.data.returnedBasicPhysicalNetwork.id),
 | |
|                             dataType: "json",
 | |
|                             async: false,
 | |
|                             success: function(json) {
 | |
|                                 var addNetscalerProviderIntervalID = setInterval(function() {
 | |
|                                     $.ajax({
 | |
|                                         url: createURL("queryAsyncJobResult&jobId=" + json.addnetworkserviceproviderresponse.jobid),
 | |
|                                         dataType: "json",
 | |
|                                         success: function(json) {
 | |
|                                             var result = json.queryasyncjobresultresponse;
 | |
|                                             if (result.jobstatus == 0) {
 | |
|                                                 return; //Job has not completed
 | |
|                                             } else {
 | |
|                                                 clearInterval(addNetscalerProviderIntervalID);
 | |
| 
 | |
|                                                 if (result.jobstatus == 1) {
 | |
|                                                     args.data.returnedNetscalerProvider = result.jobresult.networkserviceprovider;
 | |
|                                                     stepFns.addNetscalerDevice({
 | |
|                                                         data: args.data
 | |
|                                                     });
 | |
|                                                 } else if (result.jobstatus == 2) {
 | |
|                                                     alert("addNetworkServiceProvider&name=Netscaler failed. Error: " + _s(result.jobresult.errortext));
 | |
|                                                 }
 | |
|                                             }
 | |
|                                         },
 | |
|                                         error: function(XMLHttpResponse) {
 | |
|                                             var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                             alert("addNetworkServiceProvider&name=Netscaler failed. Error: " + errorMsg);
 | |
|                                         }
 | |
|                                     });
 | |
|                                 }, g_queryAsyncJobResultInterval);
 | |
|                             }
 | |
|                         });
 | |
|                         //add netscaler provider (end)
 | |
|                     } else { //selectedNetworkOfferingHavingNetscaler == false
 | |
|                         //create a guest network for basic zone
 | |
|                         stepFns.addGuestNetwork({
 | |
|                             data: args.data
 | |
|                         });
 | |
|                     }
 | |
|                 },
 | |
| 
 | |
| 
 | |
|                 addNetscalerDevice: function(args) {
 | |
|                     message(_l('message.adding.Netscaler.device'));
 | |
| 
 | |
|                     var array1 = [];
 | |
|                     array1.push("&physicalnetworkid=" + args.data.returnedBasicPhysicalNetwork.id);
 | |
|                     cloudStack.addUsernameAndPasswordToCommandUrlParameterArrayIfItIsNotNullAndNotEmpty(array1, args.data.basicPhysicalNetwork.username, args.data.basicPhysicalNetwork.password);
 | |
|                     array1.push("&networkdevicetype=" + encodeURIComponent(args.data.basicPhysicalNetwork.networkdevicetype));
 | |
|                     array1.push("&gslbprovider=" + (args.data.basicPhysicalNetwork.gslbprovider == "on"));
 | |
|                     array1.push("&gslbproviderpublicip=" + encodeURIComponent(args.data.basicPhysicalNetwork.gslbproviderpublicip));
 | |
|                     array1.push("&gslbproviderprivateip=" + encodeURIComponent(args.data.basicPhysicalNetwork.gslbproviderprivateip));
 | |
| 
 | |
|                     //construct URL starts here
 | |
|                     var url = [];
 | |
| 
 | |
|                     var ip = args.data.basicPhysicalNetwork.ip;
 | |
|                     url.push("https://" + ip);
 | |
| 
 | |
|                     var isQuestionMarkAdded = false;
 | |
| 
 | |
|                     var publicInterface = args.data.basicPhysicalNetwork.publicinterface;
 | |
|                     if (publicInterface != null && publicInterface.length > 0) {
 | |
|                         if (isQuestionMarkAdded == false) {
 | |
|                             url.push("?");
 | |
|                             isQuestionMarkAdded = true;
 | |
|                         } else {
 | |
|                             url.push("&");
 | |
|                         }
 | |
|                         url.push("publicinterface=" + publicInterface);
 | |
|                     }
 | |
| 
 | |
|                     var privateInterface = args.data.basicPhysicalNetwork.privateinterface;
 | |
|                     if (privateInterface != null && privateInterface.length > 0) {
 | |
|                         if (isQuestionMarkAdded == false) {
 | |
|                             url.push("?");
 | |
|                             isQuestionMarkAdded = true;
 | |
|                         } else {
 | |
|                             url.push("&");
 | |
|                         }
 | |
|                         url.push("privateinterface=" + privateInterface);
 | |
|                     }
 | |
| 
 | |
|                     var numretries = args.data.basicPhysicalNetwork.numretries;
 | |
|                     if (numretries != null && numretries.length > 0) {
 | |
|                         if (isQuestionMarkAdded == false) {
 | |
|                             url.push("?");
 | |
|                             isQuestionMarkAdded = true;
 | |
|                         } else {
 | |
|                             url.push("&");
 | |
|                         }
 | |
|                         url.push("numretries=" + numretries);
 | |
|                     }
 | |
| 
 | |
|                     var isInline = args.data.basicPhysicalNetwork.inline;
 | |
|                     if (isInline != null && isInline.length > 0) {
 | |
|                         if (isQuestionMarkAdded == false) {
 | |
|                             url.push("?");
 | |
|                             isQuestionMarkAdded = true;
 | |
|                         } else {
 | |
|                             url.push("&");
 | |
|                         }
 | |
|                         url.push("inline=" + isInline);
 | |
|                     }
 | |
| 
 | |
|                     var capacity = args.data.basicPhysicalNetwork.capacity;
 | |
|                     if (capacity != null && capacity.length > 0) {
 | |
|                         if (isQuestionMarkAdded == false) {
 | |
|                             url.push("?");
 | |
|                             isQuestionMarkAdded = true;
 | |
|                         } else {
 | |
|                             url.push("&");
 | |
|                         }
 | |
|                         url.push("lbdevicecapacity=" + capacity);
 | |
|                     }
 | |
| 
 | |
|                     var dedicated = (args.data.basicPhysicalNetwork.dedicated == "on"); //boolean    (true/false)
 | |
|                     if (isQuestionMarkAdded == false) {
 | |
|                         url.push("?");
 | |
|                         isQuestionMarkAdded = true;
 | |
|                     } else {
 | |
|                         url.push("&");
 | |
|                     }
 | |
|                     url.push("lbdevicededicated=" + dedicated.toString());
 | |
| 
 | |
| 
 | |
|                     array1.push("&url=" + encodeURIComponent(url.join("")));
 | |
|                     //construct URL ends here
 | |
| 
 | |
|                     $.ajax({
 | |
|                         url: createURL("addNetscalerLoadBalancer" + array1.join("")),
 | |
|                         type: "POST",
 | |
|                         dataType: "json",
 | |
|                         success: function(json) {
 | |
|                             var addNetscalerLoadBalancerIntervalID = setInterval(function() {
 | |
|                                 $.ajax({
 | |
|                                     url: createURL("queryAsyncJobResult&jobid=" + json.addnetscalerloadbalancerresponse.jobid),
 | |
|                                     dataType: "json",
 | |
|                                     success: function(json) {
 | |
|                                         var result = json.queryasyncjobresultresponse;
 | |
|                                         if (result.jobstatus == 0) {
 | |
|                                             return;
 | |
|                                         } else {
 | |
|                                             clearInterval(addNetscalerLoadBalancerIntervalID);
 | |
| 
 | |
|                                             if (result.jobstatus == 1) {
 | |
|                                                 args.data.returnedNetscalerProvider.returnedNetscalerloadbalancer = result.jobresult.netscalerloadbalancer;
 | |
| 
 | |
|                                                 $.ajax({
 | |
|                                                     url: createURL("updateNetworkServiceProvider&state=Enabled&id=" + args.data.returnedNetscalerProvider.id),
 | |
|                                                     dataType: "json",
 | |
|                                                     success: function(json) {
 | |
|                                                         var enableNetscalerProviderIntervalID = setInterval(function() {
 | |
|                                                             $.ajax({
 | |
|                                                                 url: createURL("queryAsyncJobResult&jobid=" + json.updatenetworkserviceproviderresponse.jobid),
 | |
|                                                                 dataType: "json",
 | |
|                                                                 success: function(json) {
 | |
|                                                                     var result = json.queryasyncjobresultresponse;
 | |
|                                                                     if (result.jobstatus == 0) {
 | |
|                                                                         return;
 | |
|                                                                     } else {
 | |
|                                                                         clearInterval(enableNetscalerProviderIntervalID);
 | |
| 
 | |
|                                                                         if (result.jobstatus == 1) {
 | |
|                                                                             stepFns.addGuestNetwork({
 | |
|                                                                                 data: args.data
 | |
|                                                                             });
 | |
|                                                                         } else if (result.jobstatus == 2) {
 | |
|                                                                             alert("failed to enable Netscaler provider. Error: " + _s(result.jobresult.errortext));
 | |
|                                                                         }
 | |
|                                                                     }
 | |
|                                                                 }
 | |
|                                                             });
 | |
|                                                         }, g_queryAsyncJobResultInterval);
 | |
|                                                     },
 | |
|                                                     error: function(XMLHttpResponse) {
 | |
|                                                         var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                                         alert("failed to enable Netscaler provider. Error: " + errorMsg);
 | |
|                                                     }
 | |
|                                                 });
 | |
|                                             } else if (result.jobstatus == 2) { //addNetscalerLoadBalancer failed
 | |
|                                                 error('addNetscalerDevice', _s(result.jobresult.errortext), {
 | |
|                                                     fn: 'addNetscalerDevice',
 | |
|                                                     args: args
 | |
|                                                 });
 | |
|                                             }
 | |
|                                         }
 | |
|                                     }
 | |
|                                 });
 | |
|                             }, g_queryAsyncJobResultInterval);
 | |
|                         },
 | |
|                         error: function(XMLHttpResponse) {
 | |
|                             var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                             error('addNetscalerDevice', errorMsg, {
 | |
|                                 fn: 'addNetscalerDevice',
 | |
|                                 args: args
 | |
|                             });
 | |
|                         }
 | |
|                     });
 | |
|                 },
 | |
| 
 | |
|                 addGuestNetwork: function(args) { //create a guest network for Basic zone or Advanced zone with SG
 | |
|                     message(_l('message.creating.guest.network'));
 | |
| 
 | |
|                     var data = {
 | |
|                         zoneid: args.data.returnedZone.id,
 | |
|                         name: 'defaultGuestNetwork',
 | |
|                         displaytext: 'defaultGuestNetwork',
 | |
|                         networkofferingid: args.data.zone.networkOfferingId
 | |
|                     };
 | |
| 
 | |
|                     //Advanced zone with SG
 | |
|                     if (args.data.zone.networkType == "Advanced" && args.data.zone.sgEnabled == true) {
 | |
|                         $.extend(data, {
 | |
|                             gateway: args.data.guestTraffic.guestGateway,
 | |
|                             netmask: args.data.guestTraffic.guestNetmask,
 | |
|                             startip: args.data.guestTraffic.guestStartIp,
 | |
|                             vlan: args.data.guestTraffic.vlanId
 | |
|                         });
 | |
|                         if (args.data.guestTraffic.guestEndIp != null && args.data.guestTraffic.guestEndIp.length > 0) {
 | |
|                             $.extend(data, {
 | |
|                                 endip: args.data.guestTraffic.guestEndIp
 | |
|                             });
 | |
|                         }
 | |
|                     }
 | |
| 
 | |
|                     $.ajax({
 | |
|                         url: createURL('createNetwork'),
 | |
|                         data: data,
 | |
|                         async: false,
 | |
|                         success: function(json) {
 | |
|                             //basic zone has only one physical network => addPod() will be called only once => so don't need to double-check before calling addPod()
 | |
|                             stepFns.addPod({
 | |
|                                 data: $.extend(args.data, {
 | |
|                                     returnedGuestNetwork: json.createnetworkresponse.network
 | |
|                                 })
 | |
|                             });
 | |
|                         },
 | |
|                         error: function(XMLHttpResponse) {
 | |
|                             var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                             alert("failed to create a guest network for basic zone. Error: " + errorMsg);
 | |
|                         }
 | |
|                     });
 | |
|                 },
 | |
| 
 | |
|                 addPod: function(args) {
 | |
|                     message(_l('message.creating.pod'));
 | |
| 
 | |
|                     var array3 = [];
 | |
|                     array3.push("&zoneId=" + args.data.returnedZone.id);
 | |
|                     array3.push("&name=" + encodeURIComponent(args.data.pod.name));
 | |
|                     array3.push("&gateway=" + encodeURIComponent(args.data.pod.reservedSystemGateway));
 | |
|                     array3.push("&netmask=" + encodeURIComponent(args.data.pod.reservedSystemNetmask));
 | |
|                     array3.push("&startIp=" + encodeURIComponent(args.data.pod.reservedSystemStartIp));
 | |
| 
 | |
|                     var endip = args.data.pod.reservedSystemEndIp; //optional
 | |
|                     if (endip != null && endip.length > 0)
 | |
|                         array3.push("&endIp=" + encodeURIComponent(endip));
 | |
| 
 | |
|                     $.ajax({
 | |
|                         url: createURL("createPod" + array3.join("")),
 | |
|                         dataType: "json",
 | |
|                         async: false,
 | |
|                         success: function(json) {
 | |
|                             stepFns.configurePublicTraffic({
 | |
|                                 data: $.extend(args.data, {
 | |
|                                     returnedPod: json.createpodresponse.pod
 | |
|                                 })
 | |
|                             });
 | |
|                         },
 | |
|                         error: function(XMLHttpResponse) {
 | |
|                             var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                             error('addPod', errorMsg, {
 | |
|                                 fn: 'addPod',
 | |
|                                 args: args
 | |
|                             });
 | |
|                         }
 | |
|                     });
 | |
|                 },
 | |
| 
 | |
|                 configurePublicTraffic: function(args) {
 | |
|                     if ((args.data.zone.networkType == "Basic" && (selectedNetworkOfferingHavingSG == true && selectedNetworkOfferingHavingEIP == true && selectedNetworkOfferingHavingELB == true)) || (args.data.zone.networkType == "Advanced" && args.data.zone.sgEnabled != true)) {
 | |
| 
 | |
|                         message(_l('message.configuring.public.traffic'));
 | |
| 
 | |
|                         var stopNow = false;
 | |
| 
 | |
|                         $(args.data.publicTraffic).each(function() {
 | |
|                             var thisPublicVlanIpRange = this;
 | |
| 
 | |
|                             //check whether the VlanIpRange exists or not (begin)
 | |
|                             var isExisting = false;
 | |
|                             $(returnedPublicVlanIpRanges).each(function() {
 | |
|                                 if (this.vlan == thisPublicVlanIpRange.vlanid && this.startip == thisPublicVlanIpRange.startip && this.netmask == thisPublicVlanIpRange.netmask && this.gateway == thisPublicVlanIpRange.gateway) {
 | |
|                                     isExisting = true;
 | |
|                                     return false; //break each loop
 | |
|                                 }
 | |
|                             });
 | |
|                             if (isExisting == true)
 | |
|                                 return; //skip current item to next item (continue each loop)
 | |
| 
 | |
|                             //check whether the VlanIpRange exists or not (end)
 | |
| 
 | |
|                             var array1 = [];
 | |
|                             array1.push("&zoneId=" + args.data.returnedZone.id);
 | |
| 
 | |
|                             if (this.vlanid != null && this.vlanid.length > 0)
 | |
|                                 array1.push("&vlan=" + encodeURIComponent(this.vlanid));
 | |
|                             else
 | |
|                                 array1.push("&vlan=untagged");
 | |
| 
 | |
|                             array1.push("&gateway=" + this.gateway);
 | |
|                             array1.push("&netmask=" + this.netmask);
 | |
|                             array1.push("&startip=" + this.startip);
 | |
|                             if (this.endip != null && this.endip.length > 0)
 | |
|                                 array1.push("&endip=" + this.endip);
 | |
| 
 | |
|                             if (args.data.zone.networkType == "Basic") {
 | |
|                                 array1.push("&forVirtualNetwork=true");
 | |
|                             } else if (args.data.zone.networkType == "Advanced") {
 | |
|                                 if (args.data.zone.sgEnabled != true) {
 | |
|                                     array1.push("&forVirtualNetwork=true");
 | |
|                                 } else { //args.data.zone.sgEnabled    == true
 | |
|                                     array1.push("&forVirtualNetwork=false");
 | |
|                                 }
 | |
|                             }
 | |
| 
 | |
|                             $.ajax({
 | |
|                                 url: createURL("createVlanIpRange" + array1.join("")),
 | |
|                                 dataType: "json",
 | |
|                                 async: false,
 | |
|                                 success: function(json) {
 | |
|                                     var item = json.createvlaniprangeresponse.vlan;
 | |
|                                     returnedPublicVlanIpRanges.push(item);
 | |
|                                 },
 | |
|                                 error: function(XMLHttpResponse) {
 | |
|                                     var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                     error('configurePublicTraffic', errorMsg, {
 | |
|                                         fn: 'configurePublicTraffic',
 | |
|                                         args: args
 | |
|                                     });
 | |
|                                     stopNow = true;
 | |
|                                 }
 | |
|                             });
 | |
| 
 | |
|                             if (stopNow == true)
 | |
|                                 return false; //break each loop, don't create next VlanIpRange
 | |
|                         });
 | |
| 
 | |
|                         if (stopNow == true)
 | |
|                             return; //stop the whole process
 | |
| 
 | |
|                         stepFns.configureStorageTraffic({
 | |
|                             data: $.extend(args.data, {
 | |
|                                 returnedPublicTraffic: returnedPublicVlanIpRanges
 | |
|                             })
 | |
|                         });
 | |
|                     } else if (args.data.zone.networkType == "Advanced" && args.data.zone.sgEnabled == true) { // Advanced SG-enabled zone doesn't have public traffic type
 | |
|                         stepFns.configureStorageTraffic({
 | |
|                             data: args.data
 | |
|                         });
 | |
|                     } else { //basic zone without public traffic type , skip to next step
 | |
|                         if (data.physicalNetworks && $.inArray('storage', data.physicalNetworks[0].trafficTypes) > -1) {
 | |
|                             stepFns.configureStorageTraffic({
 | |
|                                 data: args.data
 | |
|                             });
 | |
|                         } else {
 | |
|                             stepFns.configureGuestTraffic({
 | |
|                                 data: args.data
 | |
|                             });
 | |
|                         }
 | |
|                     }
 | |
|                 },
 | |
| 
 | |
|                 configureStorageTraffic: function(args) {
 | |
|                     var complete = function(data) {
 | |
|                         stepFns.configureGuestTraffic({
 | |
|                             data: $.extend(args.data, data)
 | |
|                         });
 | |
|                     };
 | |
| 
 | |
|                     var targetNetwork = $.grep(args.data.physicalNetworks, function(net) {
 | |
|                         return $.inArray('storage', net.trafficTypes) > -1;
 | |
|                     });
 | |
| 
 | |
|                     if (!targetNetwork.length) {
 | |
|                         return complete({});
 | |
|                     }
 | |
| 
 | |
|                     message(_l('message.configuring.storage.traffic'));
 | |
| 
 | |
|                     var storageIPRanges = args.data.storageTraffic;
 | |
|                     var tasks = [];
 | |
|                     var taskTimer;
 | |
| 
 | |
|                     $(storageIPRanges).each(function() {
 | |
|                         var item = this;
 | |
|                         if ('vlan' in item && (item.vlan == null || item.vlan.length == 0))
 | |
|                             delete item.vlan;
 | |
|                         $.ajax({
 | |
|                             url: createURL('createStorageNetworkIpRange'),
 | |
|                             data: $.extend(true, {}, item, {
 | |
|                                 zoneid: args.data.returnedZone.id,
 | |
|                                 podid: args.data.returnedPod.id
 | |
|                             }),
 | |
|                             success: function(json) {
 | |
|                                 tasks.push({
 | |
|                                     jobid: json.createstoragenetworkiprangeresponse.jobid,
 | |
|                                     complete: false
 | |
|                                 });
 | |
|                             },
 | |
|                             error: function(json) {
 | |
|                                 tasks.push({
 | |
|                                     error: true,
 | |
|                                     message: parseXMLHttpResponse(json)
 | |
|                                 });
 | |
|                             }
 | |
|                         });
 | |
|                     });
 | |
| 
 | |
|                     taskTimer = setInterval(function() {
 | |
|                         var completedTasks = $.grep(tasks, function(task) {
 | |
|                             return task.complete || task.error;
 | |
|                         });
 | |
| 
 | |
|                         var errorTasks = $.grep(tasks, function(task) {
 | |
|                             return task.error;
 | |
|                         });
 | |
| 
 | |
|                         if (completedTasks.length == storageIPRanges.length) {
 | |
|                             clearInterval(taskTimer);
 | |
| 
 | |
|                             if (errorTasks.length) {
 | |
|                                 return error('configureStorageTraffic', errorTasks[0].message, {
 | |
|                                     fn: 'configureStorageTraffic',
 | |
|                                     args: args
 | |
|                                 });
 | |
|                             }
 | |
| 
 | |
|                             return complete({});
 | |
|                         }
 | |
| 
 | |
|                         if (tasks.length == storageIPRanges.length) {
 | |
|                             $(tasks).each(function() {
 | |
|                                 var task = this;
 | |
| 
 | |
|                                 if (task.error) return true;
 | |
| 
 | |
|                                 pollAsyncJobResult({
 | |
|                                     _custom: {
 | |
|                                         jobId: task.jobid
 | |
|                                     },
 | |
|                                     complete: function() {
 | |
|                                         task.complete = true;
 | |
|                                     },
 | |
|                                     error: function(args) {
 | |
|                                         task.error = true;
 | |
|                                         task.message = args.message;
 | |
|                                     }
 | |
|                                 });
 | |
| 
 | |
|                                 return true;
 | |
|                             });
 | |
|                         }
 | |
| 
 | |
|                         return true;
 | |
|                     }, 1000);
 | |
| 
 | |
|                     return true;
 | |
|                 },
 | |
| 
 | |
|                 configureGuestTraffic: function(args) {
 | |
|                     if (skipGuestTrafficStep == true) {
 | |
|                         stepFns.addCluster({
 | |
|                             data: args.data
 | |
|                         });
 | |
|                         return;
 | |
|                     }
 | |
| 
 | |
|                     message(_l('message.configuring.guest.traffic'));
 | |
| 
 | |
|                     if (args.data.returnedZone.networktype == "Basic") { //create an VlanIpRange for guest network in basic zone
 | |
|                         var array1 = [];
 | |
|                         array1.push("&podid=" + args.data.returnedPod.id);
 | |
|                         array1.push("&networkid=" + args.data.returnedGuestNetwork.id);
 | |
|                         array1.push("&gateway=" + args.data.guestTraffic.guestGateway);
 | |
|                         array1.push("&netmask=" + args.data.guestTraffic.guestNetmask);
 | |
|                         array1.push("&startip=" + args.data.guestTraffic.guestStartIp);
 | |
|                         if (args.data.guestTraffic.guestEndIp != null && args.data.guestTraffic.guestEndIp.length > 0)
 | |
|                             array1.push("&endip=" + args.data.guestTraffic.guestEndIp);
 | |
|                         array1.push("&forVirtualNetwork=false"); //indicates this new IP range is for guest network, not public network
 | |
| 
 | |
|                         $.ajax({
 | |
|                             url: createURL("createVlanIpRange" + array1.join("")),
 | |
|                             dataType: "json",
 | |
|                             success: function(json) {
 | |
|                                 args.data.returnedGuestNetwork.returnedVlanIpRange = json.createvlaniprangeresponse.vlan;
 | |
| 
 | |
|                                 if (args.data.zone.hypervisor == "BareMetal") { //if hypervisor is BareMetal, zone creation is completed at this point.
 | |
|                                     complete({
 | |
|                                         data: args.data
 | |
|                                     });
 | |
|                                 } else {
 | |
|                                     stepFns.addCluster({
 | |
|                                         data: args.data
 | |
|                                     });
 | |
|                                 }
 | |
|                             },
 | |
|                             error: function(XMLHttpResponse) {
 | |
|                                 var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                 error('configureGuestTraffic', errorMsg, {
 | |
|                                     fn: 'configureGuestTraffic',
 | |
|                                     args: args
 | |
|                                 });
 | |
|                             }
 | |
|                         });
 | |
|                     } else if (args.data.returnedZone.networktype == "Advanced") { //update VLAN in physical network(s) in advanced zone
 | |
|                         var physicalNetworksHavingGuestIncludingVlan = [];
 | |
|                         $(args.data.physicalNetworks).each(function() {
 | |
|                             if (this.guestConfiguration != null && this.guestConfiguration.vlanRangeStart != null && this.guestConfiguration.vlanRangeStart.length > 0) {
 | |
|                                 physicalNetworksHavingGuestIncludingVlan.push(this);
 | |
|                             }
 | |
|                         });
 | |
| 
 | |
|                         if (physicalNetworksHavingGuestIncludingVlan.length == 0) {
 | |
|                             stepFns.addCluster({
 | |
|                                 data: args.data
 | |
|                             });
 | |
|                         } else {
 | |
|                             var updatedCount = 0;
 | |
|                             $(physicalNetworksHavingGuestIncludingVlan).each(function() {
 | |
|                                 var vlan;
 | |
|                                 if (this.guestConfiguration.vlanRangeEnd == null || this.guestConfiguration.vlanRangeEnd.length == 0)
 | |
|                                     vlan = this.guestConfiguration.vlanRangeStart;
 | |
|                                 else
 | |
|                                     vlan = this.guestConfiguration.vlanRangeStart + "-" + this.guestConfiguration.vlanRangeEnd;
 | |
| 
 | |
|                                 var originalId = this.id;
 | |
|                                 var returnedId;
 | |
|                                 $(args.data.returnedPhysicalNetworks).each(function() {
 | |
|                                     if (this.originalId == originalId) {
 | |
|                                         returnedId = this.id;
 | |
|                                         return false; //break the loop
 | |
|                                     }
 | |
|                                 });
 | |
| 
 | |
|                                 $.ajax({
 | |
|                                     url: createURL("updatePhysicalNetwork&id=" + returnedId + "&vlan=" + encodeURIComponent(vlan)),
 | |
|                                     dataType: "json",
 | |
|                                     success: function(json) {
 | |
|                                         var jobId = json.updatephysicalnetworkresponse.jobid;
 | |
|                                         var updatePhysicalNetworkVlanIntervalID = setInterval(function() {
 | |
|                                             $.ajax({
 | |
|                                                 url: createURL("queryAsyncJobResult&jobid=" + jobId),
 | |
|                                                 dataType: "json",
 | |
|                                                 success: function(json) {
 | |
|                                                     var result = json.queryasyncjobresultresponse;
 | |
|                                                     if (result.jobstatus == 0) {
 | |
|                                                         return;
 | |
|                                                     } else {
 | |
|                                                         clearInterval(updatePhysicalNetworkVlanIntervalID);
 | |
| 
 | |
|                                                         if (result.jobstatus == 1) {
 | |
|                                                             updatedCount++;
 | |
|                                                             if (updatedCount == physicalNetworksHavingGuestIncludingVlan.length) {
 | |
|                                                                 stepFns.addCluster({
 | |
|                                                                     data: args.data
 | |
|                                                                 });
 | |
|                                                             }
 | |
|                                                         } else if (result.jobstatus == 2) {
 | |
|                                                             alert("error: " + _s(result.jobresult.errortext));
 | |
|                                                             error('configureGuestTraffic', result.jobresult.errortext, {
 | |
|                                                                 fn: 'configureGuestTraffic',
 | |
|                                                                 args: args
 | |
|                                                             });
 | |
| 
 | |
|                                                         }
 | |
|                                                     }
 | |
|                                                 },
 | |
|                                                 error: function(XMLHttpResponse) {
 | |
|                                                     var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                                     error('configureGuestTraffic', errorMsg, {
 | |
|                                                         fn: 'configureGuestTraffic',
 | |
|                                                         args: args
 | |
|                                                     });
 | |
|                                                 }
 | |
|                                             });
 | |
|                                         }, g_queryAsyncJobResultInterval);
 | |
|                                     }
 | |
|                                 });
 | |
|                             });
 | |
|                         }
 | |
|                     }
 | |
|                 },
 | |
| 
 | |
|                 addCluster: function(args) {
 | |
|                     message(_l('message.creating.cluster'));
 | |
| 
 | |
|                     // Have cluster use zone's hypervisor
 | |
|                     args.data.cluster.hypervisor = args.data.zone.hypervisor ?
 | |
|                         args.data.zone.hypervisor : args.data.cluster.hypervisor;
 | |
| 
 | |
|                     var array1 = [];
 | |
|                     array1.push("&zoneId=" + args.data.returnedZone.id);
 | |
|                     array1.push("&hypervisor=" + args.data.cluster.hypervisor);
 | |
| 
 | |
|                     var clusterType;
 | |
|                     if (args.data.cluster.hypervisor == "VMware")
 | |
|                         clusterType = "ExternalManaged";
 | |
|                     else
 | |
|                         clusterType = "CloudManaged";
 | |
|                     array1.push("&clustertype=" + clusterType);
 | |
| 
 | |
|                     array1.push("&podId=" + args.data.returnedPod.id);
 | |
| 
 | |
|                     var clusterName = args.data.cluster.name;
 | |
| 
 | |
|                     if (args.data.cluster.hypervisor == "VMware") {
 | |
|                         cloudStack.addUsernameAndPasswordToCommandUrlParameterArrayIfItIsNotNullAndNotEmpty(array1, args.data.cluster.vCenterUsername, args.data.cluster.vCenterPassword);
 | |
| 
 | |
|                         if (args.data.cluster.vsmipaddress != null && args.data.cluster.vsmipaddress.length > 0) {
 | |
|                             array1.push('&vsmipaddress=' + args.data.cluster.vsmipaddress);
 | |
|                         }
 | |
| 
 | |
|                         if(args.data.cluster.vsmusername != null && args.data.cluster.vsmusername.length > 0) {
 | |
|                             array1.push('&vsmusername=' + args.data.cluster.vsmusername);
 | |
|                         }
 | |
| 
 | |
|                         if(args.data.cluster.vsmpassword != null && args.data.cluster.vsmpassword.length > 0) {
 | |
|                             array1.push('&vsmpassword=' + args.data.cluster.vsmpassword);
 | |
|                         }
 | |
| 
 | |
|                         var hostname = args.data.cluster.vCenterHost;
 | |
|                         var dcName = args.data.cluster.vCenterDatacenter;
 | |
| 
 | |
|                         var url;
 | |
|                         if (hostname.indexOf("http://") == -1)
 | |
|                             url = "http://" + hostname;
 | |
|                         else
 | |
|                             url = hostname;
 | |
|                         url += "/" + dcName + "/" + clusterName;
 | |
|                         array1.push("&url=" + encodeURIComponent(url));
 | |
|                         clusterName = hostname + "/" + dcName + "/" + clusterName; //override clusterName
 | |
|                     }
 | |
|                     array1.push("&clustername=" + encodeURIComponent(clusterName));
 | |
| 
 | |
|                     if (args.data.cluster.hypervisor == "VMware") {
 | |
|                         var vmwareData = {
 | |
|                             zoneId: args.data.returnedZone.id,
 | |
|                             username: args.data.cluster.vCenterUsername,
 | |
|                             password: args.data.cluster.vCenterPassword,
 | |
|                             name: args.data.cluster.vCenterDatacenter,
 | |
|                             vcenter: args.data.cluster.vCenterHost
 | |
|                         };
 | |
|                         $.ajax({
 | |
|                             url: createURL('addVmwareDc'),
 | |
|                             data: vmwareData,
 | |
|                             type: "POST",
 | |
|                             success: function(json) {
 | |
|                                 var item = json.addvmwaredcresponse.vmwaredc;
 | |
|                                 if (item.id != null) {
 | |
|                                     $.ajax({
 | |
|                                         url: createURL("addCluster" + array1.join("")),
 | |
|                                         dataType: "json",
 | |
|                                         async: true,
 | |
|                                         success: function(json) {
 | |
|                                             stepFns.addPrimaryStorage({ //skip "add host step" when hypervisor is VMware
 | |
|                                                 data: $.extend(args.data, {
 | |
|                                                     returnedCluster: json.addclusterresponse.cluster[0]
 | |
|                                                 })
 | |
|                                             });
 | |
|                                         },
 | |
|                                         error: function(XMLHttpResponse) {
 | |
|                                             var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                             error('addCluster', errorMsg, {
 | |
|                                                 fn: 'addCluster',
 | |
|                                                 args: args
 | |
|                                             });
 | |
|                                         }
 | |
|                                     });
 | |
|                                 }
 | |
|                             },
 | |
| 
 | |
|                             error: function(XMLHttpResponse) {
 | |
|                                 var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                 error('addCluster', errorMsg, {
 | |
|                                     fn: 'addCluster',
 | |
|                                     args: args
 | |
|                                 });
 | |
|                             }
 | |
| 
 | |
|                         });
 | |
|                     } else {
 | |
|                         $.ajax({
 | |
|                             url: createURL("addCluster" + array1.join("")),
 | |
|                             dataType: "json",
 | |
|                             type: "POST",
 | |
|                             success: function(json) {
 | |
|                                 stepFns.addHost({
 | |
|                                     data: $.extend(args.data, {
 | |
|                                         returnedCluster: json.addclusterresponse.cluster[0]
 | |
|                                     })
 | |
|                                 });
 | |
|                             },
 | |
|                             error: function(XMLHttpResponse) {
 | |
|                                 var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                 error('addCluster', errorMsg, {
 | |
|                                     fn: 'addCluster',
 | |
|                                     args: args
 | |
|                                 });
 | |
|                             }
 | |
|                         });
 | |
|                     }
 | |
|                 },
 | |
| 
 | |
|                 addHost: function(args) {
 | |
|                     message(_l('message.adding.host'));
 | |
| 
 | |
|                     var data = {
 | |
|                         zoneid: args.data.returnedZone.id,
 | |
|                         podid: args.data.returnedPod.id,
 | |
|                         clusterid: args.data.returnedCluster.id,
 | |
|                         hypervisor: args.data.returnedCluster.hypervisortype,
 | |
|                         clustertype: args.data.returnedCluster.clustertype,
 | |
|                         hosttags: args.data.host.hosttags,
 | |
|                         username: args.data.host.username,
 | |
|                         password: args.data.host.password
 | |
|                     };
 | |
| 
 | |
|                     var hostname = args.data.host.hostname;
 | |
|                     var url;
 | |
|                     if (hostname.indexOf("http://") == -1) {
 | |
|                         url = "http://" + hostname;
 | |
|                     } else {
 | |
|                         url = hostname;
 | |
|                     }
 | |
|                     $.extend(data, {
 | |
|                         url: url
 | |
|                     });
 | |
| 
 | |
|                     if (args.data.cluster.hypervisor == "BareMetal") {
 | |
|                         $.extend(data, {
 | |
|                             cpunumber: args.data.host.baremetalCpuCores,
 | |
|                             cpuspeed: args.data.host.baremetalCpu,
 | |
|                             memory: args.data.host.baremetalMemory,
 | |
|                             hostmac: args.data.host.baremetalMAC
 | |
|                         });
 | |
|                     } else if (args.data.cluster.hypervisor == "Ovm") {
 | |
|                         $.extend(data, {
 | |
|                             agentusername: args.data.host.agentUsername,
 | |
|                             agentpassword: args.data.host.agentPassword
 | |
|                         });
 | |
|                     }
 | |
| 
 | |
|                     var addHostAjax = function() {
 | |
|                         $.ajax({
 | |
|                             url: createURL("addHost"),
 | |
|                             type: "POST",
 | |
|                             data: data,
 | |
|                             success: function(json) {
 | |
|                                 stepFns.addPrimaryStorage({
 | |
|                                     data: $.extend(args.data, {
 | |
|                                         returnedHost: json.addhostresponse.host[0]
 | |
|                                     })
 | |
|                                 });
 | |
|                             },
 | |
|                             error: function(XMLHttpResponse) {
 | |
|                                 var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                 error('addHost', errorMsg, {
 | |
|                                     fn: 'addHost',
 | |
|                                     args: args
 | |
|                                 });
 | |
|                             }
 | |
|                         });
 | |
|                     };
 | |
| 
 | |
|                     if(args.data.zone.localstorageenabledforsystemvm == 'on') {
 | |
|                         $.ajax({
 | |
|                             url: createURL("updateConfiguration&name=system.vm.use.local.storage&value=true&zoneid=" + args.data.returnedZone.id),
 | |
|                             dataType: "json",
 | |
|                             success: function(json) {
 | |
|                                 addHostAjax();
 | |
|                             },
 | |
|                             error: function(XMLHttpResponse) {
 | |
|                                var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                error('addHost', errorMsg, {
 | |
|                                    fn: 'addHost',
 | |
|                                    args: args
 | |
|                                });
 | |
|                             }
 | |
|                         });
 | |
|                     } else {
 | |
|                         addHostAjax();
 | |
|                     }
 | |
|                 },
 | |
| 
 | |
|                 addPrimaryStorage: function(args) {
 | |
|                     if (args.data.zone.localstorageenabled == 'on' && args.data.zone.localstorageenabledforsystemvm == 'on') { //use local storage, don't need primary storage. So, skip this step.
 | |
|                         stepFns.addSecondaryStorage({
 | |
|                             data: args.data
 | |
|                         });
 | |
|                         return;
 | |
|                     }
 | |
| 
 | |
|                     message(_l('message.creating.primary.storage'));
 | |
| 
 | |
|                     var array1 = [];
 | |
|                     array1.push("&zoneid=" + args.data.returnedZone.id);
 | |
|                     array1.push("&podId=" + args.data.returnedPod.id);
 | |
|                     array1.push("&clusterid=" + args.data.returnedCluster.id);
 | |
|                     array1.push("&name=" + encodeURIComponent(args.data.primaryStorage.name));
 | |
|                     array1.push("&scope=" + encodeURIComponent(args.data.primaryStorage.scope));
 | |
| 
 | |
|                     //zone-wide-primary-storage is supported only for KVM and VMWare
 | |
|                     if (args.data.primaryStorage.scope == "zone") { //hypervisor type of the hosts in zone that will be attached to this storage pool. KVM, VMware supported as of now.
 | |
|                         if(args.data.cluster.hypervisor != undefined) {
 | |
|                             array1.push("&hypervisor=" + encodeURIComponent(args.data.cluster.hypervisor));
 | |
|                         } else if(args.data.returnedCluster.hypervisortype != undefined) {
 | |
|                             array1.push("&hypervisor=" + encodeURIComponent(args.data.returnedCluster.hypervisortype));
 | |
|                         } else {
 | |
|                             cloudStack.dialog.notice({
 | |
|                                 message: "Error: args.data.cluster.hypervisor is undefined. So is args.data.returnedCluster.hypervisortype (zone-wide-primary-storage)"
 | |
|                             });
 | |
|                         }
 | |
|                     }
 | |
| 
 | |
|                     var server = args.data.primaryStorage.server;
 | |
|                     var url = null;
 | |
|                     if (args.data.primaryStorage.protocol == "nfs") {
 | |
|                         var path = args.data.primaryStorage.path;
 | |
|                         if (path.substring(0, 1) != "/")
 | |
|                             path = "/" + path;
 | |
|                         url = nfsURL(server, path);
 | |
|                     } else if (args.data.primaryStorage.protocol == "SMB") {
 | |
|                         var path = args.data.primaryStorage.path;
 | |
|                         if (path.substring(0, 1) != "/")
 | |
|                             path = "/" + path;
 | |
|                         url = smbURL(server, path);
 | |
|                         array1.push("&details[0].user=" + args.data.primaryStorage.smbUsername);
 | |
|                         array1.push("&details[1].password=" + encodeURIComponent(args.data.primaryStorage.smbPassword));
 | |
|                         array1.push("&details[2].domain=" + args.data.primaryStorage.smbDomain);
 | |
|                     } else if (args.data.primaryStorage.protocol == "PreSetup") {
 | |
|                         var path = args.data.primaryStorage.path;
 | |
|                         if (path.substring(0, 1) != "/")
 | |
|                             path = "/" + path;
 | |
|                         url = presetupURL(server, path);
 | |
|                     } else if (args.data.primaryStorage.protocol == "ocfs2") {
 | |
|                         var path = args.data.primaryStorage.path;
 | |
|                         if (path.substring(0, 1) != "/")
 | |
|                             path = "/" + path;
 | |
|                         url = ocfs2URL(server, path);
 | |
|                     } else if (args.data.primaryStorage.protocol == "SharedMountPoint") {
 | |
|                         var path = args.data.primaryStorage.path;
 | |
|                         if (path.substring(0, 1) != "/")
 | |
|                             path = "/" + path;
 | |
|                         url = SharedMountPointURL(server, path);
 | |
|                     } else if (args.data.primaryStorage.protocol == "clvm") {
 | |
|                         var vg = args.data.primaryStorage.volumegroup;
 | |
|                         if (vg.substring(0, 1) != "/")
 | |
|                             vg = "/" + vg;
 | |
|                         url = clvmURL(vg);
 | |
|                     } else if (args.data.primaryStorage.protocol == "rbd") {
 | |
|                         var rbdmonitor = args.data.primaryStorage.rbdmonitor;
 | |
|                         var rbdpool = args.data.primaryStorage.rbdpool;
 | |
|                         var rbdid = args.data.primaryStorage.rbdid;
 | |
|                         var rbdsecret = args.data.primaryStorage.rbdsecret;
 | |
|                         url = rbdURL(rbdmonitor, rbdpool, rbdid, rbdsecret);
 | |
|                     } else if (args.data.primaryStorage.protocol == "vmfs") {
 | |
|                         var path = args.data.primaryStorage.vCenterDataCenter;
 | |
|                         if (path.substring(0, 1) != "/")
 | |
|                             path = "/" + path;
 | |
|                         path += "/" + args.data.primaryStorage.vCenterDataStore;
 | |
|                         url = vmfsURL("dummy", path);
 | |
|                     } else {
 | |
|                         var iqn = args.data.primaryStorage.iqn;
 | |
|                         if (iqn.substring(0, 1) != "/")
 | |
|                             iqn = "/" + iqn;
 | |
|                         var lun = args.data.primaryStorage.lun;
 | |
|                         url = iscsiURL(server, iqn, lun);
 | |
|                     }
 | |
|                     array1.push("&url=" + encodeURIComponent(url));
 | |
| 
 | |
|                     if (args.data.primaryStorage.storageTags != null && args.data.primaryStorage.storageTags.length > 0)
 | |
|                         array1.push("&tags=" + encodeURIComponent(args.data.primaryStorage.storageTags));
 | |
| 
 | |
|                     $.ajax({
 | |
|                         url: createURL("createStoragePool" + array1.join("")),
 | |
|                         dataType: "json",
 | |
|                         success: function(json) {
 | |
|                             stepFns.addSecondaryStorage({
 | |
|                                 data: $.extend(args.data, {
 | |
|                                     returnedPrimaryStorage: json.createstoragepoolresponse.storagepool
 | |
|                                 })
 | |
|                             });
 | |
|                         },
 | |
|                         error: function(XMLHttpResponse) {
 | |
|                             var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                             error('addPrimaryStorage', errorMsg, {
 | |
|                                 fn: 'addPrimaryStorage',
 | |
|                                 args: args
 | |
|                             });
 | |
|                         }
 | |
|                     });
 | |
|                 },
 | |
| 
 | |
|                 addSecondaryStorage: function(args) {
 | |
|                     if (args.data.secondaryStorage.provider == '') {
 | |
|                         complete({
 | |
|                             data: args.data
 | |
|                         });
 | |
|                         return; //skip addSecondaryStorage if provider dropdown is blank
 | |
|                     }
 | |
| 
 | |
| 
 | |
|                     message(_l('message.creating.secondary.storage'));
 | |
| 
 | |
|                     var data = {};
 | |
|                     if (args.data.secondaryStorage.name != null && args.data.secondaryStorage.name.length > 0) {
 | |
|                         $.extend(data, {
 | |
|                             name: args.data.secondaryStorage.name
 | |
|                         });
 | |
|                     }
 | |
| 
 | |
|                     if (args.data.secondaryStorage.provider == 'NFS') {
 | |
|                         var nfs_server = args.data.secondaryStorage.nfsServer;
 | |
|                         var path = args.data.secondaryStorage.path;
 | |
|                         var url = nfsURL(nfs_server, path);
 | |
| 
 | |
|                         $.extend(data, {
 | |
|                             provider: args.data.secondaryStorage.provider,
 | |
|                             zoneid: args.data.returnedZone.id,
 | |
|                             url: url
 | |
|                         });
 | |
| 
 | |
|                         $.ajax({
 | |
|                             url: createURL('addImageStore'),
 | |
|                             data: data,
 | |
|                             success: function(json) {
 | |
|                                 complete({
 | |
|                                     data: $.extend(args.data, {
 | |
|                                         returnedSecondaryStorage: json.addimagestoreresponse.secondarystorage
 | |
|                                     })
 | |
|                                 });
 | |
|                             },
 | |
|                             error: function(XMLHttpResponse) {
 | |
|                                 var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                 error('addSecondaryStorage', errorMsg, {
 | |
|                                     fn: 'addSecondaryStorage',
 | |
|                                     args: args
 | |
|                                 });
 | |
|                             }
 | |
|                         });
 | |
|                     } else if (args.data.secondaryStorage.provider == 'SMB') {
 | |
|                         var nfs_server = args.data.secondaryStorage.nfsServer;
 | |
|                         var path = args.data.secondaryStorage.path;
 | |
|                         var url = smbURL(nfs_server, path);
 | |
| 
 | |
|                         $.extend(data, {
 | |
|                             provider: args.data.secondaryStorage.provider,
 | |
|                             zoneid: args.data.returnedZone.id,
 | |
|                             url: url,
 | |
|                             'details[0].key': 'user',
 | |
|                             'details[0].value': args.data.secondaryStorage.smbUsername,
 | |
|                             'details[1].key': 'password',
 | |
|                             'details[1].value': args.data.secondaryStorage.smbPassword,
 | |
|                             'details[2].key': 'domain',
 | |
|                             'details[2].value': args.data.secondaryStorage.smbDomain
 | |
|                         });
 | |
| 
 | |
|                         $.ajax({
 | |
|                             url: createURL('addImageStore'),
 | |
|                             data: data,
 | |
|                             success: function(json) {
 | |
|                                 complete({
 | |
|                                     data: $.extend(args.data, {
 | |
|                                         returnedSecondaryStorage: json.addimagestoreresponse.secondarystorage
 | |
|                                     })
 | |
|                                 });
 | |
|                             },
 | |
|                             error: function(XMLHttpResponse) {
 | |
|                                 var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                 error('addSecondaryStorage', errorMsg, {
 | |
|                                     fn: 'addSecondaryStorage',
 | |
|                                     args: args
 | |
|                                 });
 | |
|                             }
 | |
|                         });
 | |
|                     } else if (args.data.secondaryStorage.provider == 'S3') {
 | |
|                         if($wizard.find('form[rel=secondaryStorage]').find('div[rel=name]').find('input').attr("disabled") == "disabled") { //Name textbox is disabled (and populated with S3 image setore name) when S3 image store exists. In this case, do not call addImageStore to create S3 image store.
 | |
|                             complete({
 | |
|                                 data: args.data
 | |
|                             });
 | |
|                         } else { //Name textbox is not disabled when S3 image store does not exist. In this case, call addImageStore to create S3 image store.
 | |
|                             $.extend(data, {
 | |
|                                 provider: args.data.secondaryStorage.provider,
 | |
|                                 'details[0].key': 'accesskey',
 | |
|                                 'details[0].value': args.data.secondaryStorage.accesskey,
 | |
|                                 'details[1].key': 'secretkey',
 | |
|                                 'details[1].value': args.data.secondaryStorage.secretkey,
 | |
|                                 'details[2].key': 'bucket',
 | |
|                                 'details[2].value': args.data.secondaryStorage.bucket,
 | |
|                                 'details[3].key': 'usehttps',
 | |
|                                 'details[3].value': (args.data.secondaryStorage.usehttps != null && args.data.secondaryStorage.usehttps == 'on' ? 'true' : 'false')
 | |
|                             });
 | |
| 
 | |
|                             var index = 4;
 | |
|                             if (args.data.secondaryStorage.endpoint != null && args.data.secondaryStorage.endpoint.length > 0) {
 | |
|                                 data['details[' + index.toString() + '].key'] = 'endpoint';
 | |
|                                 data['details[' + index.toString() + '].value'] = args.data.secondaryStorage.endpoint;
 | |
|                                 index++;
 | |
|                             }
 | |
|                             if (args.data.secondaryStorage.connectiontimeout != null && args.data.secondaryStorage.connectiontimeout.length > 0) {
 | |
|                                 data['details[' + index.toString() + '].key'] = 'connectiontimeout';
 | |
|                                 data['details[' + index.toString() + '].value'] = args.data.secondaryStorage.connectiontimeout;
 | |
|                                 index++;
 | |
|                             }
 | |
|                             if (args.data.secondaryStorage.maxerrorretry != null && args.data.secondaryStorage.maxerrorretry.length > 0) {
 | |
|                                 data['details[' + index.toString() + '].key'] = 'maxerrorretry';
 | |
|                                 data['details[' + index.toString() + '].value'] = args.data.secondaryStorage.maxerrorretry;
 | |
|                                 index++;
 | |
|                             }
 | |
|                             if (args.data.secondaryStorage.sockettimeout != null && args.data.secondaryStorage.sockettimeout.length > 0) {
 | |
|                                 data['details[' + index.toString() + '].key'] = 'sockettimeout';
 | |
|                                 data['details[' + index.toString() + '].value'] = args.data.secondaryStorage.sockettimeout;
 | |
|                                 index++;
 | |
|                             }
 | |
|                             $.ajax({
 | |
|                                 url: createURL('addImageStore'),
 | |
|                                 data: data,
 | |
|                                 success: function(json) {
 | |
|                                     g_regionsecondaryenabled = true;
 | |
| 
 | |
|                                     complete({
 | |
|                                         data: $.extend(args.data, {
 | |
|                                             returnedSecondaryStorage: json.addimagestoreresponse.secondarystorage
 | |
|                                         })
 | |
|                                     });
 | |
|                                 },
 | |
|                                 error: function(XMLHttpResponse) {
 | |
|                                     var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                     error('addSecondaryStorage', errorMsg, {
 | |
|                                         fn: 'addSecondaryStorage',
 | |
|                                         args: args
 | |
|                                     });
 | |
|                                 }
 | |
|                             });
 | |
|                         }
 | |
| 
 | |
|                         //NFS Cache
 | |
|                         if ($wizard.find('form[rel=secondaryStorage]').find('div[rel=createNfsCache]').find("input[type=checkbox]").is(':checked') == true) {
 | |
|                             var zoneid = args.data.secondaryStorage.nfsCacheZoneid;
 | |
|                             var nfs_server = args.data.secondaryStorage.nfsCacheNfsServer;
 | |
|                             var path = args.data.secondaryStorage.nfsCachePath;
 | |
|                             var url = nfsURL(nfs_server, path);
 | |
| 
 | |
|                             var nfsCacheData = {
 | |
|                                 provider: 'NFS',
 | |
|                                 zoneid: args.data.returnedZone.id,
 | |
|                                 url: url
 | |
|                             };
 | |
| 
 | |
|                             $.ajax({
 | |
|                                 url: createURL('createSecondaryStagingStore'),
 | |
|                                 data: nfsCacheData,
 | |
|                                 success: function(json) {
 | |
|                                     //do nothing
 | |
|                                 },
 | |
|                                 error: function(XMLHttpResponse) {
 | |
|                                     var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                     error('addSecondaryStorage', errorMsg, {
 | |
|                                         fn: 'addSecondaryStorage',
 | |
|                                         args: args
 | |
|                                     });
 | |
|                                 }
 | |
|                             });
 | |
|                         }
 | |
|                     } else if (args.data.secondaryStorage.provider == 'Swift') {
 | |
|                         $.extend(data, {
 | |
|                             provider: args.data.secondaryStorage.provider,
 | |
|                             url: args.data.secondaryStorage.url
 | |
|                         });
 | |
| 
 | |
|                         var index = 0;
 | |
|                         if (args.data.secondaryStorage.account != null && args.data.secondaryStorage.account.length > 0) {
 | |
|                             data['details[' + index.toString() + '].key'] = 'account';
 | |
|                             data['details[' + index.toString() + '].value'] = args.data.secondaryStorage.account;
 | |
|                             index++;
 | |
|                         }
 | |
|                         if (args.data.secondaryStorage.username != null && args.data.secondaryStorage.username.length > 0) {
 | |
|                             data['details[' + index.toString() + '].key'] = 'username';
 | |
|                             data['details[' + index.toString() + '].value'] = args.data.secondaryStorage.username;
 | |
|                             index++;
 | |
|                         }
 | |
|                         if (args.data.secondaryStorage.key != null && args.data.secondaryStorage.key.length > 0) {
 | |
|                             data['details[' + index.toString() + '].key'] = 'key';
 | |
|                             data['details[' + index.toString() + '].value'] = args.data.secondaryStorage.key;
 | |
|                             index++;
 | |
|                         }
 | |
|                         $.ajax({
 | |
|                             url: createURL('addImageStore'),
 | |
|                             data: data,
 | |
|                             success: function(json) {
 | |
|                                 g_regionsecondaryenabled = true;
 | |
| 
 | |
|                                 complete({
 | |
|                                     data: $.extend(args.data, {
 | |
|                                         returnedSecondaryStorage: json.addimagestoreresponse.secondarystorage
 | |
|                                     })
 | |
|                                 });
 | |
|                             },
 | |
|                             error: function(XMLHttpResponse) {
 | |
|                                 var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | |
|                                 error('addSecondaryStorage', errorMsg, {
 | |
|                                     fn: 'addSecondaryStorage',
 | |
|                                     args: args
 | |
|                                 });
 | |
|                             }
 | |
|                         });
 | |
|                     }
 | |
|                 }
 | |
|             };
 | |
| 
 | |
|             var complete = function(args) {
 | |
|                 message(_l('message.Zone.creation.complete'));
 | |
|                 success(args);
 | |
|             };
 | |
| 
 | |
|             if (startFn) {
 | |
|                 stepFns[startFn.fn]({
 | |
|                     data: $.extend(startFn.args.data, data)
 | |
|                 });
 | |
|             } else {
 | |
|                 stepFns.addZone({});
 | |
|             }
 | |
|         },
 | |
| 
 | |
|         enableZoneAction: function(args) {
 | |
|             $.ajax({
 | |
|                 url: createURL("updateZone&allocationstate=Enabled&id=" + args.launchData.returnedZone.id),
 | |
|                 dataType: "json",
 | |
|                 success: function(json) {
 | |
|                     args.formData.returnedZone = json.updatezoneresponse.zone;
 | |
|                     args.response.success();
 | |
|                 }
 | |
|             });
 | |
|         }
 | |
|     };
 | |
| }(cloudStack, jQuery));
 |