From dfdfc3b85ad39bf377e7c189cae4eee1abe361b0 Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Thu, 26 Jan 2012 17:07:10 -0800 Subject: [PATCH] Add zone wizard - configure public - fix a bug that configureGuestTraffic() was being called more than once when multiple public VLAN IP Ranges are entered in configure public screen. --- ui/scripts/zoneWizard.js | 52 ++++++++++++++++++++++++++++++---------- 1 file changed, 39 insertions(+), 13 deletions(-) diff --git a/ui/scripts/zoneWizard.js b/ui/scripts/zoneWizard.js index 54b8ada0635..d2296827245 100644 --- a/ui/scripts/zoneWizard.js +++ b/ui/scripts/zoneWizard.js @@ -4,7 +4,8 @@ var selectedNetworkOfferingHavingSG = false; var selectedNetworkOfferingHavingEIP = false; var selectedNetworkOfferingHavingELB = false; - + var returnedPublicVlanIpRanges = []; //public VlanIpRanges returned by API + cloudStack.zoneWizard = { customUI: { publicTrafficIPRange: function(args) { @@ -879,6 +880,7 @@ action: function(args) { //debugger; var advZoneConfiguredPhysicalNetworkCount = 0; //for multiple physical networks in advanced zone + var success = args.response.success; var error = args.response.error; var message = args.response.message; @@ -1863,9 +1865,25 @@ ||(args.data.zone.networkType == "Advanced")) { message('Configuring public traffic'); - - var returnedPublicTraffic = []; - $(args.data.publicTraffic).each(function(){ + + 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); @@ -1886,22 +1904,30 @@ url: createURL("createVlanIpRange" + array1.join("")), dataType: "json", async: false, - success: function(json) { + success: function(json) { var item = json.createvlaniprangeresponse.vlan; - returnedPublicTraffic.push(item); - stepFns.configureGuestTraffic({ - data: $.extend(args.data, { - returnedPublicTraffic: returnedPublicTraffic - }) - }); + returnedPublicVlanIpRanges.push(item); }, - error: function(XMLHttpResponse) { + 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.configureGuestTraffic({ + data: $.extend(args.data, { + returnedPublicTraffic: returnedPublicVlanIpRanges + }) + }); } else { //basic zone without public traffic type , skip to next step stepFns.configureGuestTraffic({