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