mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-11-04 00:02:37 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			3104 lines
		
	
	
		
			137 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			3104 lines
		
	
	
		
			137 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;
 | 
						|
 | 
						|
  // 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 = trafficConfig ? trafficConfig.label : null;
 | 
						|
    var hypervisorAttr, trafficLabelStr;
 | 
						|
 | 
						|
    switch(hypervisor) {
 | 
						|
      case 'XenServer':
 | 
						|
        hypervisorAttr = 'xennetworklabel';
 | 
						|
        break;
 | 
						|
      case 'KVM':
 | 
						|
        hypervisorAttr = 'kvmnetworklabel';
 | 
						|
        break;
 | 
						|
      case 'VMware':
 | 
						|
        hypervisorAttr = 'vmwarenetworklabel';
 | 
						|
        break;
 | 
						|
      case 'BareMetal':
 | 
						|
        hypervisorAttr = 'baremetalnetworklabel';
 | 
						|
        break;
 | 
						|
      case 'Ovm':
 | 
						|
        hypervisorAttr = 'ovmnetworklabel';
 | 
						|
        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' },
 | 
						|
            '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
 | 
						|
            });
 | 
						|
          }
 | 
						|
        });
 | 
						|
      },
 | 
						|
 | 
						|
      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) {
 | 
						|
        return args.data.localstorageenabled != 'on';
 | 
						|
      }	
 | 
						|
    },
 | 
						|
 | 
						|
    forms: {
 | 
						|
      zone: {
 | 
						|
        preFilter: function(args) {
 | 
						|
          var $form = args.$form;
 | 
						|
 | 
						|
          if (args.data['network-model'] == 'Basic') {
 | 
						|
            args.$form.find('[rel=networkOfferingId]').show();
 | 
						|
            args.$form.find('[rel=guestcidraddress]').hide();
 | 
						|
          }
 | 
						|
          else { //args.data['network-model'] == 'Advanced'
 | 
						|
            args.$form.find('[rel=networkOfferingId]').hide();
 | 
						|
						
 | 
						|
						if(args.data["zone-advanced-sg-enabled"] !=	"on")
 | 
						|
              args.$form.find('[rel=guestcidraddress]').show();
 | 
						|
						else //args.data["zone-advanced-sg-enabled"] ==	"on
 | 
						|
						  args.$form.find('[rel=guestcidraddress]').hide();
 | 
						|
          }													
 | 
						|
										
 | 
						|
          setTimeout(function() {
 | 
						|
            if ($form.find('input[name=ispublic]').is(':checked')) {
 | 
						|
              $form.find('[rel=domain]').hide();
 | 
						|
            }
 | 
						|
          });
 | 
						|
        },
 | 
						|
        fields: {
 | 
						|
          name: {
 | 
						|
            label: 'label.name', validation: { required: true },
 | 
						|
            desc: 'message.tooltip.zone.name'
 | 
						|
          },
 | 
						|
          dns1: {
 | 
						|
            label: 'label.dns.1', validation: { required: true },
 | 
						|
            desc: 'message.tooltip.dns.1'
 | 
						|
          },
 | 
						|
          dns2: {
 | 
						|
            label: 'label.dns.2',
 | 
						|
            desc: 'message.tooltip.dns.2'
 | 
						|
          },
 | 
						|
          internaldns1: {
 | 
						|
            label: 'label.internal.dns.1', validation: { required: true },
 | 
						|
            desc: 'message.tooltip.internal.dns.1'
 | 
						|
          },
 | 
						|
          internaldns2: {
 | 
						|
            label: 'label.internal.dns.2',
 | 
						|
            desc: 'message.tooltip.internal.dns.2'
 | 
						|
          },
 | 
						|
          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["XenServer"] = 1;  //to developers: comment this line if you need to test Advanced SG-enabled zone with XenServer hypervisor
 | 
						|
										nonSupportedHypervisors["VMware"] = 1;
 | 
						|
										nonSupportedHypervisors["BareMetal"] = 1;
 | 
						|
										nonSupportedHypervisors["Ovm"] = 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;
 | 
						|
													return false; //break each loop
 | 
						|
												}
 | 
						|
											});			
 | 
						|
											
 | 
						|
											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" || args.hypervisor == "BareMetal") { //VMware, BareMetal don'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 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 }
 | 
						|
          },
 | 
						|
          ispublic: {
 | 
						|
            isReverse: true,
 | 
						|
            isBoolean: true,
 | 
						|
            label: 'label.public',
 | 
						|
            isChecked: true //checked by default (public zone)
 | 
						|
          },
 | 
						|
          domain: {
 | 
						|
            label: 'label.domain',
 | 
						|
            dependsOn: 'ispublic',
 | 
						|
            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
 | 
						|
                      };
 | 
						|
                    })
 | 
						|
                  });
 | 
						|
                }
 | 
						|
              });
 | 
						|
            }
 | 
						|
          },
 | 
						|
          localstorageenabled: {
 | 
						|
            label: 'label.local.storage.enabled',
 | 
						|
            isBoolean: true,
 | 
						|
            onChange: function(args) {
 | 
						|
              var $checkbox = args.$checkbox;
 | 
						|
 | 
						|
              if ($checkbox.is(':checked')) {
 | 
						|
                cloudStack.dialog.confirm({
 | 
						|
                  message: 'message.zoneWizard.enable.local.storage',
 | 
						|
                  action: function() {
 | 
						|
                    $checkbox.attr('checked', true);
 | 
						|
                  },
 | 
						|
                  cancelAction: function() {
 | 
						|
                    $checkbox.attr('checked', false);
 | 
						|
                  }
 | 
						|
                });
 | 
						|
 | 
						|
                return false;
 | 
						|
              }
 | 
						|
 | 
						|
              return true;
 | 
						|
            }
 | 
						|
          }
 | 
						|
        }
 | 
						|
      },
 | 
						|
 | 
						|
      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 }
 | 
						|
          },
 | 
						|
          reservedSystemEndIp: {
 | 
						|
            label: 'label.end.reserved.system.IP',
 | 
						|
            validation: { required: false }
 | 
						|
          }
 | 
						|
        }
 | 
						|
      },
 | 
						|
 | 
						|
      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'
 | 
						|
          },
 | 
						|
          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: '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;
 | 
						|
 | 
						|
              // 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;
 | 
						|
                  }
 | 
						|
                }
 | 
						|
              });
 | 
						|
 | 
						|
              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") {
 | 
						|
                  //$('li[input_sub_group="external"]', $dialogAddCluster).show();
 | 
						|
                  $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'); 
 | 
						|
                  } 
 | 
						|
                  //$("#cluster_name_label", $dialogAddCluster).text("vCenter Cluster:");
 | 
						|
                }
 | 
						|
                else {
 | 
						|
                  //$('li[input_group="vmware"]', $dialogAddCluster).hide();
 | 
						|
                  $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');
 | 
						|
 | 
						|
                  //$("#cluster_name_label", $dialogAddCluster).text("Cluster:");
 | 
						|
                }
 | 
						|
              });
 | 
						|
            }
 | 
						|
          },
 | 
						|
          name: {
 | 
						|
            label: 'label.cluster.name',
 | 
						|
            validation: { required: true }
 | 
						|
          },
 | 
						|
 | 
						|
          //hypervisor==VMWare begins here
 | 
						|
          vCenterHost: {
 | 
						|
            label: 'label.vcenter.host',
 | 
						|
            validation: { required: true }
 | 
						|
          },
 | 
						|
          vCenterUsername: {
 | 
						|
            label: 'label.vcenter.username',
 | 
						|
            validation: { required: true }
 | 
						|
          },
 | 
						|
          vCenterPassword: {
 | 
						|
            label: 'label.vcenter.password',
 | 
						|
            validation: { required: true },
 | 
						|
            isPassword: true
 | 
						|
          },
 | 
						|
          vCenterDatacenter: {
 | 
						|
            label: 'label.vcenter.datacenter',
 | 
						|
            validation: { required: true }
 | 
						|
          },
 | 
						|
          vsmipaddress: {
 | 
						|
            label: 'Nexus 1000v IP Address',
 | 
						|
            validation: { required: true },
 | 
						|
            isHidden: true
 | 
						|
          },
 | 
						|
          vsmusername: {
 | 
						|
            label: 'Nexus 1000v Username',
 | 
						|
            validation: { required: true },
 | 
						|
            isHidden: true
 | 
						|
          },
 | 
						|
          vsmpassword: {
 | 
						|
            label: 'Nexus 1000v Password',
 | 
						|
            validation: { required: true },
 | 
						|
            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") {
 | 
						|
            //$('li[input_group="general"]', $dialogAddHost).hide();
 | 
						|
            $form.find('[rel=hostname]').hide();
 | 
						|
            $form.find('[rel=username]').hide();
 | 
						|
            $form.find('[rel=password]').hide();
 | 
						|
 | 
						|
            //$('li[input_group="vmware"]', $dialogAddHost).show();
 | 
						|
            $form.find('[rel=vcenterHost]').css('display', 'block');
 | 
						|
 | 
						|
            //$('li[input_group="baremetal"]', $dialogAddHost).hide();
 | 
						|
            $form.find('[rel=baremetalCpuCores]').hide();
 | 
						|
            $form.find('[rel=baremetalCpu]').hide();
 | 
						|
            $form.find('[rel=baremetalMemory]').hide();
 | 
						|
            $form.find('[rel=baremetalMAC]').hide();
 | 
						|
 | 
						|
            //$('li[input_group="Ovm"]', $dialogAddHost).hide();
 | 
						|
            $form.find('[rel=agentUsername]').hide();
 | 
						|
            $form.find('[rel=agentPassword]').hide();
 | 
						|
          }
 | 
						|
          else if (selectedClusterObj.hypervisortype == "BareMetal") {
 | 
						|
            //$('li[input_group="general"]', $dialogAddHost).show();
 | 
						|
            $form.find('[rel=hostname]').css('display', 'block');
 | 
						|
            $form.find('[rel=username]').css('display', 'block');
 | 
						|
            $form.find('[rel=password]').css('display', 'block');
 | 
						|
 | 
						|
            //$('li[input_group="baremetal"]', $dialogAddHost).show();
 | 
						|
            $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');
 | 
						|
 | 
						|
            //$('li[input_group="vmware"]', $dialogAddHost).hide();
 | 
						|
            $form.find('[rel=vcenterHost]').hide();
 | 
						|
 | 
						|
            //$('li[input_group="Ovm"]', $dialogAddHost).hide();
 | 
						|
            $form.find('[rel=agentUsername]').hide();
 | 
						|
            $form.find('[rel=agentPassword]').hide();
 | 
						|
          }
 | 
						|
          else if (selectedClusterObj.hypervisortype == "Ovm") {
 | 
						|
            //$('li[input_group="general"]', $dialogAddHost).show();
 | 
						|
            $form.find('[rel=hostname]').css('display', 'block');
 | 
						|
            $form.find('[rel=username]').css('display', 'block');
 | 
						|
            $form.find('[rel=password]').css('display', 'block');
 | 
						|
 | 
						|
            //$('li[input_group="vmware"]', $dialogAddHost).hide();
 | 
						|
            $form.find('[rel=vcenterHost]').hide();
 | 
						|
 | 
						|
            //$('li[input_group="baremetal"]', $dialogAddHost).hide();
 | 
						|
            $form.find('[rel=baremetalCpuCores]').hide();
 | 
						|
            $form.find('[rel=baremetalCpu]').hide();
 | 
						|
            $form.find('[rel=baremetalMemory]').hide();
 | 
						|
            $form.find('[rel=baremetalMAC]').hide();
 | 
						|
 | 
						|
            //$('li[input_group="Ovm"]', $dialogAddHost).show();
 | 
						|
            $form.find('[rel=agentUsername]').css('display', 'block');
 | 
						|
            $form.find('[rel=agentUsername]').find('input').val("oracle");
 | 
						|
            $form.find('[rel=agentPassword]').css('display', 'block');
 | 
						|
          }
 | 
						|
          else {
 | 
						|
            //$('li[input_group="general"]', $dialogAddHost).show();
 | 
						|
            $form.find('[rel=hostname]').css('display', 'block');
 | 
						|
            $form.find('[rel=username]').css('display', 'block');
 | 
						|
            $form.find('[rel=password]').css('display', 'block');
 | 
						|
 | 
						|
            //$('li[input_group="vmware"]', $dialogAddHost).hide();
 | 
						|
            $form.find('[rel=vcenterHost]').hide();
 | 
						|
 | 
						|
            //$('li[input_group="baremetal"]', $dialogAddHost).hide();
 | 
						|
            $form.find('[rel=baremetalCpuCores]').hide();
 | 
						|
            $form.find('[rel=baremetalCpu]').hide();
 | 
						|
            $form.find('[rel=baremetalMemory]').hide();
 | 
						|
            $form.find('[rel=baremetalMAC]').hide();
 | 
						|
 | 
						|
            //$('li[input_group="Ovm"]', $dialogAddHost).hide();
 | 
						|
            $form.find('[rel=agentUsername]').hide();
 | 
						|
            $form.find('[rel=agentPassword]').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
 | 
						|
 | 
						|
          //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 }  
 | 
						|
					},
 | 
						|
 | 
						|
          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: "clvm", description: "CLVM"});
 | 
						|
                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 == "Ovm") {
 | 
						|
                var items = [];
 | 
						|
                items.push({id: "nfs", description: "nfs"});
 | 
						|
                items.push({id: "ocfs2", description: "ocfs2"});
 | 
						|
                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>Path:');
 | 
						|
                
 | 
						|
                if(protocol == null)
 | 
						|
                  return;
 | 
						|
 | 
						|
                if(protocol == "nfs") {
 | 
						|
                  //$("#add_pool_server_container", $dialogAddPool).show();
 | 
						|
                  $form.find('[rel=server]').css('display', 'block');
 | 
						|
                  //$dialogAddPool.find("#add_pool_nfs_server").val("");
 | 
						|
                  $form.find('[rel=server]').find(".value").find("input").val("");
 | 
						|
 | 
						|
                  //$('li[input_group="nfs"]', $dialogAddPool).show();
 | 
						|
                  $form.find('[rel=path]').css('display', 'block');
 | 
						|
                  //$dialogAddPool.find("#add_pool_path_container").find("label").text(g_dictionary["label.path"]+":");
 | 
						|
                  //$form.find('[rel=path]').find(".name").find("label").text("Path:");
 | 
						|
 | 
						|
                  //$('li[input_group="iscsi"]', $dialogAddPool).hide();
 | 
						|
                  $form.find('[rel=iqn]').hide();
 | 
						|
                  $form.find('[rel=lun]').hide();
 | 
						|
 | 
						|
                  //$('li[input_group="clvm"]', $dialogAddPool).hide();
 | 
						|
                  $form.find('[rel=volumegroup]').hide();
 | 
						|
 | 
						|
                  //$('li[input_group="vmfs"]', $dialogAddPool).hide();
 | 
						|
                  $form.find('[rel=vCenterDataCenter]').hide();
 | 
						|
                  $form.find('[rel=vCenterDataStore]').hide();
 | 
						|
                }
 | 
						|
                else if(protocol == "ocfs2") {//ocfs2 is the same as nfs, except no server field.
 | 
						|
                  //$dialogAddPool.find("#add_pool_server_container").hide();
 | 
						|
                  $form.find('[rel=server]').hide();
 | 
						|
                  //$dialogAddPool.find("#add_pool_nfs_server").val("");
 | 
						|
                  $form.find('[rel=server]').find(".value").find("input").val("");
 | 
						|
 | 
						|
                  //$('li[input_group="nfs"]', $dialogAddPool).show();
 | 
						|
                  $form.find('[rel=path]').css('display', 'block');
 | 
						|
                  //$dialogAddPool.find("#add_pool_path_container").find("label").text(g_dictionary["label.path"]+":");
 | 
						|
                  //$form.find('[rel=path]').find(".name").find("label").text("Path:");
 | 
						|
 | 
						|
                  //$('li[input_group="iscsi"]', $dialogAddPool).hide();
 | 
						|
                  $form.find('[rel=iqn]').hide();
 | 
						|
                  $form.find('[rel=lun]').hide();
 | 
						|
 | 
						|
                  //$('li[input_group="clvm"]', $dialogAddPool).hide();
 | 
						|
                  $form.find('[rel=volumegroup]').hide();
 | 
						|
 | 
						|
                  //$('li[input_group="vmfs"]', $dialogAddPool).hide();
 | 
						|
                  $form.find('[rel=vCenterDataCenter]').hide();
 | 
						|
                  $form.find('[rel=vCenterDataStore]').hide();
 | 
						|
                }
 | 
						|
                else if(protocol == "PreSetup") {
 | 
						|
                  //$dialogAddPool.find("#add_pool_server_container").hide();
 | 
						|
                  $form.find('[rel=server]').hide();
 | 
						|
                  //$dialogAddPool.find("#add_pool_nfs_server").val("localhost");
 | 
						|
                  $form.find('[rel=server]').find(".value").find("input").val("localhost");
 | 
						|
 | 
						|
                  //$('li[input_group="nfs"]', $dialogAddPool).show();
 | 
						|
                  $form.find('[rel=path]').css('display', 'block');
 | 
						|
                  //$dialogAddPool.find("#add_pool_path_container").find("label").text(g_dictionary["label.SR.name"]+":");
 | 
						|
                  $form.find('[rel=path]').find(".name").find("label").html("<span class=\"field-required\">*</span>SR Name-Label:");
 | 
						|
 | 
						|
                  //$('li[input_group="iscsi"]', $dialogAddPool).hide();
 | 
						|
                  $form.find('[rel=iqn]').hide();
 | 
						|
                  $form.find('[rel=lun]').hide();
 | 
						|
 | 
						|
                  //$('li[input_group="clvm"]', $dialogAddPool).hide();
 | 
						|
                  $form.find('[rel=volumegroup]').hide();
 | 
						|
 | 
						|
                  //$('li[input_group="vmfs"]', $dialogAddPool).hide();
 | 
						|
                  $form.find('[rel=vCenterDataCenter]').hide();
 | 
						|
                  $form.find('[rel=vCenterDataStore]').hide();
 | 
						|
                }
 | 
						|
                else if(protocol == "iscsi") {
 | 
						|
                  //$dialogAddPool.find("#add_pool_server_container").show();
 | 
						|
                  $form.find('[rel=server]').css('display', 'block');
 | 
						|
                  //$dialogAddPool.find("#add_pool_nfs_server").val("");
 | 
						|
                  $form.find('[rel=server]').find(".value").find("input").val("");
 | 
						|
 | 
						|
                  //$('li[input_group="nfs"]', $dialogAddPool).hide();
 | 
						|
                  $form.find('[rel=path]').hide();
 | 
						|
 | 
						|
                  //$('li[input_group="iscsi"]', $dialogAddPool).show();
 | 
						|
                  $form.find('[rel=iqn]').css('display', 'block');
 | 
						|
                  $form.find('[rel=lun]').css('display', 'block');
 | 
						|
 | 
						|
                  //$('li[input_group="clvm"]', $dialogAddPool).hide();
 | 
						|
                  $form.find('[rel=volumegroup]').hide();
 | 
						|
 | 
						|
                  //$('li[input_group="vmfs"]', $dialogAddPool).hide();
 | 
						|
                  $form.find('[rel=vCenterDataCenter]').hide();
 | 
						|
                  $form.find('[rel=vCenterDataStore]').hide();
 | 
						|
                }
 | 
						|
                else if($(this).val() == "clvm") {
 | 
						|
                  //$("#add_pool_server_container", $dialogAddPool).hide();
 | 
						|
                  $form.find('[rel=server]').hide();
 | 
						|
                  //$dialogAddPool.find("#add_pool_nfs_server").val("localhost");
 | 
						|
                  $form.find('[rel=server]').find(".value").find("input").val("localhost");
 | 
						|
 | 
						|
                  //$('li[input_group="nfs"]', $dialogAddPool).hide();
 | 
						|
                  $form.find('[rel=path]').hide();
 | 
						|
 | 
						|
                  //$('li[input_group="iscsi"]', $dialogAddPool).hide();
 | 
						|
                   $form.find('[rel=iqn]').hide();
 | 
						|
                  $form.find('[rel=lun]').hide();
 | 
						|
 | 
						|
                  //$('li[input_group="clvm"]', $dialogAddPool).show();
 | 
						|
                  $form.find('[rel=volumegroup]').css('display', 'inline-block');
 | 
						|
 | 
						|
                  //$('li[input_group="vmfs"]', $dialogAddPool).hide();
 | 
						|
                  $form.find('[rel=vCenterDataCenter]').hide();
 | 
						|
                  $form.find('[rel=vCenterDataStore]').hide();
 | 
						|
                }
 | 
						|
                else if(protocol == "vmfs") {
 | 
						|
                  //$dialogAddPool.find("#add_pool_server_container").show();
 | 
						|
                  $form.find('[rel=server]').css('display', 'block');
 | 
						|
                  //$dialogAddPool.find("#add_pool_nfs_server").val("");
 | 
						|
                  $form.find('[rel=server]').find(".value").find("input").val("");
 | 
						|
 | 
						|
                  //$('li[input_group="nfs"]', $dialogAddPool).hide();
 | 
						|
                  $form.find('[rel=path]').hide();
 | 
						|
 | 
						|
                  //$('li[input_group="iscsi"]', $dialogAddPool).hide();
 | 
						|
                  $form.find('[rel=iqn]').hide();
 | 
						|
                  $form.find('[rel=lun]').hide();
 | 
						|
 | 
						|
                  //$('li[input_group="clvm"]', $dialogAddPool).hide();
 | 
						|
                  $form.find('[rel=volumegroup]').hide();
 | 
						|
 | 
						|
                  //$('li[input_group="vmfs"]', $dialogAddPool).show();
 | 
						|
                  $form.find('[rel=vCenterDataCenter]').css('display', 'block');
 | 
						|
                  $form.find('[rel=vCenterDataStore]').css('display', 'block');
 | 
						|
                }
 | 
						|
                else if(protocol == "SharedMountPoint") {  //"SharedMountPoint" show the same fields as "nfs" does.
 | 
						|
                  //$dialogAddPool.find("#add_pool_server_container").hide();
 | 
						|
                  $form.find('[rel=server]').hide();
 | 
						|
                  //$dialogAddPool.find("#add_pool_nfs_server").val("localhost");
 | 
						|
                  $form.find('[rel=server]').find(".value").find("input").val("localhost");
 | 
						|
 | 
						|
                  //$('li[input_group="nfs"]', $dialogAddPool).show();
 | 
						|
                  $form.find('[rel=path]').css('display', 'block');
 | 
						|
                  //$form.find('[rel=path]').find(".name").find("label").text("Path:");
 | 
						|
 | 
						|
                  //$('li[input_group="iscsi"]', $dialogAddPool).hide();
 | 
						|
                  $form.find('[rel=iqn]').hide();
 | 
						|
                  $form.find('[rel=lun]').hide();
 | 
						|
 | 
						|
                  //$('li[input_group="clvm"]', $dialogAddPool).hide();
 | 
						|
                  $form.find('[rel=volumegroup]').hide();
 | 
						|
 | 
						|
                  //$('li[input_group="vmfs"]', $dialogAddPool).hide();
 | 
						|
                  $form.find('[rel=vCenterDataCenter]').hide();
 | 
						|
                  $form.find('[rel=vCenterDataStore]').hide();
 | 
						|
                }
 | 
						|
                else {
 | 
						|
                  //$dialogAddPool.find("#add_pool_server_container").show();
 | 
						|
                  $form.find('[rel=server]').css('display', 'block');
 | 
						|
                  //$dialogAddPool.find("#add_pool_nfs_server").val("");
 | 
						|
                  $form.find('[rel=server]').find(".value").find("input").val("");
 | 
						|
 | 
						|
                  //$('li[input_group="iscsi"]', $dialogAddPool).hide();
 | 
						|
                  $form.find('[rel=iqn]').hide();
 | 
						|
                  $form.find('[rel=lun]').hide();
 | 
						|
 | 
						|
                  //$('li[input_group="clvm"]', $dialogAddPool).hide();
 | 
						|
                  $form.find('[rel=volumegroup]').hide();
 | 
						|
 | 
						|
                  //$('li[input_group="vmfs"]', $dialogAddPool).hide();
 | 
						|
                  $form.find('[rel=vCenterDataCenter]').hide();
 | 
						|
                  $form.find('[rel=vCenterDataStore]').hide();
 | 
						|
                }
 | 
						|
              });
 | 
						|
 | 
						|
              args.$select.trigger("change");
 | 
						|
            }
 | 
						|
          },
 | 
						|
          server: {
 | 
						|
            label: 'label.server',
 | 
						|
            validation: { required: true },  
 | 
						|
						isHidden: true
 | 
						|
          },
 | 
						|
 | 
						|
          //nfs
 | 
						|
          path: {
 | 
						|
            label: 'label.path',
 | 
						|
            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
 | 
						|
          },
 | 
						|
 | 
						|
          //always appear (begin)
 | 
						|
          storageTags: {
 | 
						|
            label: 'label.storage.tags',
 | 
						|
            validation: { required: false }   
 | 
						|
					}
 | 
						|
          //always appear (end)
 | 
						|
        }
 | 
						|
      },
 | 
						|
      secondaryStorage: {
 | 
						|
        fields: {
 | 
						|
          nfsServer: {
 | 
						|
            label: 'label.nfs.server',
 | 
						|
            validation: { required: true }
 | 
						|
          },
 | 
						|
          path: {
 | 
						|
            label: 'label.path',
 | 
						|
            validation: { required: true }
 | 
						|
          }
 | 
						|
        }
 | 
						|
      }
 | 
						|
    },
 | 
						|
 | 
						|
    action: function(args) {
 | 
						|
      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=" + todb(networkType));
 | 
						|
          if(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=" + todb(args.data.zone.guestcidraddress));								
 | 
						|
						}
 | 
						|
						else { // args.data.zone.sgEnabled	== true
 | 
						|
							array1.push("&securitygroupenabled=true");   	
 | 
						|
						}								
 | 
						|
          }
 | 
						|
 | 
						|
          array1.push("&name=" + todb(args.data.zone.name));
 | 
						|
 | 
						|
          if (args.data.zone.localstorageenabled == 'on') {
 | 
						|
            array1.push("&localstorageenabled=true");
 | 
						|
          }
 | 
						|
          array1.push("&dns1=" + todb(args.data.zone.dns1));
 | 
						|
 | 
						|
          var dns2 = args.data.zone.dns2;
 | 
						|
          if (dns2 != null && dns2.length > 0)
 | 
						|
            array1.push("&dns2=" + todb(dns2));
 | 
						|
 | 
						|
          array1.push("&internaldns1="+todb(args.data.zone.internaldns1));
 | 
						|
 | 
						|
          var internaldns2 = args.data.zone.internaldns2;
 | 
						|
          if (internaldns2 != null && internaldns2.length > 0)
 | 
						|
            array1.push("&internaldns2=" + todb(internaldns2));
 | 
						|
 | 
						|
					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.ispublic == null) //public checkbox in zone wizard is unchecked 
 | 
						|
							array1.push("&domainid=" + args.data.zone.domain);
 | 
						|
          }
 | 
						|
					
 | 
						|
          if(args.data.zone.networkdomain != null && args.data.zone.networkdomain.length > 0)
 | 
						|
            array1.push("&domain=" + todb(args.data.zone.networkdomain));
 | 
						|
 | 
						|
          $.ajax({
 | 
						|
            url: createURL("createZone" + array1.join("")),
 | 
						|
            dataType: "json",
 | 
						|
            async: false,
 | 
						|
            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(dictionary['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=" + todb(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);
 | 
						|
                                  }
 | 
						|
                                });                              
 | 
						|
															}, 3000); 																
 | 
						|
                            }
 | 
						|
                          });
 | 
						|
 | 
						|
                          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);
 | 
						|
                                  }
 | 
						|
                                });                              
 | 
						|
															}, 3000); 	
 | 
						|
                            }
 | 
						|
                          });
 | 
						|
 | 
						|
                          // 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);
 | 
						|
                                    }
 | 
						|
                                  });                                
 | 
						|
																}, 3000); 	
 | 
						|
                              }
 | 
						|
                            });
 | 
						|
                          }
 | 
						|
 | 
						|
                          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);
 | 
						|
                                    }
 | 
						|
                                  });                                
 | 
						|
																}, 3000); 	
 | 
						|
                              }
 | 
						|
                            });
 | 
						|
                          }
 | 
						|
                        }
 | 
						|
                        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);
 | 
						|
                    }
 | 
						|
                  });                
 | 
						|
								}, 3000); 	
 | 
						|
								
 | 
						|
              }
 | 
						|
            });
 | 
						|
          }
 | 
						|
          else if(args.data.zone.networkType == "Advanced") {
 | 
						|
            $(args.data.physicalNetworks).each(function(index) {
 | 
						|
              var thisPhysicalNetwork = this;							
 | 
						|
							var array1 = [];
 | 
						|
							array1.push("&name=" + todb(thisPhysicalNetwork.name));
 | 
						|
							if(thisPhysicalNetwork.isolationMethod != null && thisPhysicalNetwork.isolationMethod.length > 0)
 | 
						|
							  array1.push("&isolationmethods=" + todb(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);
 | 
						|
                                      }
 | 
						|
                                    });                                  
 | 
						|
																	}, 3000); 																		
 | 
						|
                                }
 | 
						|
                              });
 | 
						|
                            });
 | 
						|
                          }
 | 
						|
                          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);
 | 
						|
                      }
 | 
						|
                    });                  
 | 
						|
									}, 3000); 	
 | 
						|
                }
 | 
						|
              });
 | 
						|
            });
 | 
						|
          }
 | 
						|
        },
 | 
						|
 | 
						|
        //afterCreateZonePhysicalNetworkTrafficTypes: enable physical network, enable virtual router element, enable network service provider
 | 
						|
        configurePhysicalNetwork: function(args) {
 | 
						|
          message(dictionary['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.");
 | 
						|
 | 
						|
                                        $.ajax({
 | 
						|
                                          url: createURL("updateNetworkServiceProvider&state=Enabled&id=" + virtualRouterProviderId),
 | 
						|
                                          dataType: "json",
 | 
						|
                                          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");
 | 
						|
																											
 | 
						|
																											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(dictionary['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);
 | 
						|
                                                                }
 | 
						|
                                                              });                                                            
 | 
						|
																														}, 3000); 	
 | 
						|
                                                          }
 | 
						|
                                                        });
 | 
						|
                                                      }
 | 
						|
                                                      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);
 | 
						|
                                                }
 | 
						|
                                              });                                            
 | 
						|
																						}, 3000); 	
 | 
						|
                                          }
 | 
						|
                                        });
 | 
						|
                                      }
 | 
						|
                                      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);
 | 
						|
                                  }
 | 
						|
                                });                              
 | 
						|
															}, 3000); 	
 | 
						|
                            }
 | 
						|
                          });
 | 
						|
                        }
 | 
						|
                        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);
 | 
						|
                    }
 | 
						|
                  });                
 | 
						|
								}, 3000); 	
 | 
						|
              }
 | 
						|
            });
 | 
						|
          }
 | 
						|
          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);
 | 
						|
                                                  }
 | 
						|
                                                });                                              
 | 
						|
																							}, 3000); 	
 | 
						|
                                            }
 | 
						|
                                          });
 | 
						|
                                        }
 | 
						|
                                        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);
 | 
						|
                                    }
 | 
						|
                                  });                                
 | 
						|
																}, 3000); 	
 | 
						|
                              }
 | 
						|
                            });
 | 
						|
														// ***** Virtual Router ***** (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);
 | 
						|
																										}
 | 
						|
																									});                                              
 | 
						|
																								}, 3000); 	
 | 
						|
																							}
 | 
						|
																						});
 | 
						|
																					}
 | 
						|
																					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);
 | 
						|
																			}
 | 
						|
																		});                                
 | 
						|
																	}, 3000); 	
 | 
						|
																}
 | 
						|
															});
 | 
						|
															// ***** VPC Virtual Router ***** (end) *****
 | 
						|
														}
 | 
						|
														else { //args.data.zone.sgEnabled == true  //Advanced SG-enabled zone														  														
 | 
						|
															message(dictionary['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);
 | 
						|
																			}
 | 
						|
																		});                                                            
 | 
						|
																	}, 3000); 	
 | 
						|
																}
 | 
						|
															});		
 | 
						|
														}
 | 
						|
                          }
 | 
						|
                          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));
 | 
						|
                      }
 | 
						|
                    });                  
 | 
						|
									}, 3000); 		
 | 
						|
                }
 | 
						|
              });
 | 
						|
            });
 | 
						|
          }
 | 
						|
        },
 | 
						|
				
 | 
						|
				addNetscalerProvider: function(args) {   	
 | 
						|
					if(selectedNetworkOfferingHavingNetscaler == true) {					  
 | 
						|
					  message(dictionary['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);
 | 
						|
										}
 | 
						|
									});							
 | 
						|
								}, 3000); 
 | 
						|
							}		
 | 
						|
            });		
 | 
						|
						//add netscaler provider (end)
 | 
						|
					}
 | 
						|
					else { //selectedNetworkOfferingHavingNetscaler == false
 | 
						|
						//create a guest network for basic zone						
 | 
						|
						stepFns.addGuestNetwork({
 | 
						|
							data: args.data
 | 
						|
						});							
 | 
						|
					}		
 | 
						|
        },
 | 
						|
				
 | 
						|
				
 | 
						|
        addNetscalerDevice: function(args) {
 | 
						|
          message(dictionary['message.adding.Netscaler.device']); 
 | 
						|
 | 
						|
          var array1 = [];
 | 
						|
          array1.push("&physicalnetworkid=" + args.data.returnedBasicPhysicalNetwork.id);
 | 
						|
          array1.push("&username=" + todb(args.data.basicPhysicalNetwork.username));
 | 
						|
          array1.push("&password=" + todb(args.data.basicPhysicalNetwork.password));
 | 
						|
          array1.push("&networkdevicetype=" + todb(args.data.basicPhysicalNetwork.networkdevicetype));
 | 
						|
 | 
						|
          //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=" + todb(url.join("")));
 | 
						|
          //construct URL ends here
 | 
						|
 | 
						|
          $.ajax({
 | 
						|
            url: createURL("addNetscalerLoadBalancer" + array1.join("")),
 | 
						|
            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));
 | 
						|
                                    }
 | 
						|
                                  }
 | 
						|
                                }
 | 
						|
                              });                            
 | 
						|
														}, 3000); 															
 | 
						|
                          },
 | 
						|
                          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 });
 | 
						|
                      }
 | 
						|
                    }
 | 
						|
                  }
 | 
						|
                });              
 | 
						|
							}, 3000); 								
 | 
						|
            },
 | 
						|
            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(dictionary['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(dictionary['message.creating.pod']); 
 | 
						|
 | 
						|
          var array3 = [];
 | 
						|
          array3.push("&zoneId=" + args.data.returnedZone.id);
 | 
						|
          array3.push("&name=" + todb(args.data.pod.name));
 | 
						|
          array3.push("&gateway=" + todb(args.data.pod.reservedSystemGateway));
 | 
						|
          array3.push("&netmask=" + todb(args.data.pod.reservedSystemNetmask));
 | 
						|
          array3.push("&startIp=" + todb(args.data.pod.reservedSystemStartIp));
 | 
						|
 | 
						|
          var endip = args.data.pod.reservedSystemEndIp;      //optional
 | 
						|
          if (endip != null && endip.length > 0)
 | 
						|
            array3.push("&endIp=" + todb(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(dictionary['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=" + todb(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(dictionary['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(dictionary['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;
 | 
						|
                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=" + todb(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: function(XMLHttpResponse) {
 | 
						|
                          var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | 
						|
                          error('configureGuestTraffic', errorMsg, { fn: 'configureGuestTraffic', args: args });
 | 
						|
                        }
 | 
						|
                      });                    
 | 
						|
										}, 3000); 	
 | 
						|
                  }
 | 
						|
                });
 | 
						|
              });
 | 
						|
            }
 | 
						|
          }
 | 
						|
        },
 | 
						|
 | 
						|
        addCluster: function(args) {
 | 
						|
          message(dictionary['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") {
 | 
						|
            array1.push("&username=" + todb(args.data.cluster.vCenterUsername));
 | 
						|
            array1.push("&password=" + todb(args.data.cluster.vCenterPassword));
 | 
						|
 | 
						|
            if (args.data.cluster.vsmipaddress) { // vSwitch is enabled
 | 
						|
              array1.push('&vsmipaddress=' + args.data.cluster.vsmipaddress);
 | 
						|
              array1.push('&vsmusername=' + args.data.cluster.vsmusername);
 | 
						|
              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=" + todb(url));
 | 
						|
 | 
						|
            clusterName = hostname + "/" + dcName + "/" + clusterName; //override clusterName
 | 
						|
          }
 | 
						|
          array1.push("&clustername=" + todb(clusterName));
 | 
						|
 | 
						|
          $.ajax({
 | 
						|
            url: createURL("addCluster" + array1.join("")),
 | 
						|
            dataType: "json",
 | 
						|
            async: true,
 | 
						|
            success: function(json) {
 | 
						|
              if(args.data.cluster.hypervisor != "VMware") {
 | 
						|
                stepFns.addHost({
 | 
						|
                  data: $.extend(args.data, {
 | 
						|
                    returnedCluster: json.addclusterresponse.cluster[0]
 | 
						|
                  })
 | 
						|
                });
 | 
						|
              }
 | 
						|
              else { 
 | 
						|
                stepFns.addPrimaryStorage({
 | 
						|
                  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(dictionary['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
 | 
						|
						});					
 | 
						|
					}
 | 
						|
          
 | 
						|
          $.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 });
 | 
						|
            }
 | 
						|
          });
 | 
						|
        },
 | 
						|
 | 
						|
        addPrimaryStorage: function(args) {
 | 
						|
					if(args.data.zone.localstorageenabled == 'on') { //use local storage, don't need primary storage. So, skip this step.
 | 
						|
            stepFns.addSecondaryStorage({
 | 
						|
              data: args.data
 | 
						|
            });
 | 
						|
            return;
 | 
						|
          }
 | 
						|
 | 
						|
          message(dictionary['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=" + todb(args.data.primaryStorage.name));
 | 
						|
 | 
						|
					var server = args.data.primaryStorage.server;
 | 
						|
          var url = null;
 | 
						|
          if (args.data.primaryStorage.protocol == "nfs") {
 | 
						|
            //var path = trim($thisDialog.find("#add_pool_path").val());
 | 
						|
            var path = args.data.primaryStorage.path;
 | 
						|
 | 
						|
            if(path.substring(0,1) != "/")
 | 
						|
              path = "/" + path;
 | 
						|
            url = nfsURL(server, path);
 | 
						|
          }
 | 
						|
          else if (args.data.primaryStorage.protocol == "PreSetup") {
 | 
						|
            //var path = trim($thisDialog.find("#add_pool_path").val());
 | 
						|
            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 = trim($thisDialog.find("#add_pool_path").val());
 | 
						|
            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 = trim($thisDialog.find("#add_pool_path").val());
 | 
						|
            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 = trim($thisDialog.find("#add_pool_clvm_vg").val());
 | 
						|
            var vg = args.data.primaryStorage.volumegroup;
 | 
						|
 | 
						|
            if(vg.substring(0,1) != "/")
 | 
						|
              vg = "/" + vg;
 | 
						|
            url = clvmURL(vg);
 | 
						|
          }
 | 
						|
          else if (args.data.primaryStorage.protocol == "vmfs") {
 | 
						|
            //var path = trim($thisDialog.find("#add_pool_vmfs_dc").val());
 | 
						|
            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 = trim($thisDialog.find("#add_pool_iqn").val());
 | 
						|
            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=" + todb(url));
 | 
						|
 | 
						|
          if(args.data.primaryStorage.storageTags != null && args.data.primaryStorage.storageTags.length > 0)
 | 
						|
            array1.push("&tags=" + todb(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) {
 | 
						|
          message(dictionary['message.creating.secondary.storage']);
 | 
						|
 | 
						|
          var nfs_server = args.data.secondaryStorage.nfsServer;
 | 
						|
          var path = args.data.secondaryStorage.path;
 | 
						|
          var url = nfsURL(nfs_server, path);
 | 
						|
 | 
						|
          $.ajax({
 | 
						|
            url: createURL("addSecondaryStorage&zoneId=" + args.data.returnedZone.id + "&url=" + todb(url)),
 | 
						|
            dataType: "json",
 | 
						|
            success: function(json) {
 | 
						|
              complete({
 | 
						|
                data: $.extend(args.data, {
 | 
						|
                  returnedSecondaryStorage: json.addsecondarystorageresponse.secondarystorage
 | 
						|
                })
 | 
						|
              });
 | 
						|
            },
 | 
						|
            error: function(XMLHttpResponse) {
 | 
						|
              var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
 | 
						|
              error('addSecondaryStorage', errorMsg, { fn: 'addSecondaryStorage', args: args });
 | 
						|
            }
 | 
						|
          });
 | 
						|
        }
 | 
						|
      };
 | 
						|
 | 
						|
      var complete = function(args) {
 | 
						|
        message(dictionary['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));
 |