diff --git a/ui/index.jsp b/ui/index.jsp index 7d918e1e1b4..2b1f52ecd88 100644 --- a/ui/index.jsp +++ b/ui/index.jsp @@ -251,6 +251,16 @@ + + - \ No newline at end of file + + + + + \ No newline at end of file diff --git a/ui/scripts/cloud.core.js b/ui/scripts/cloud.core.js index 724f3aafe8a..9acd3fa41ee 100644 --- a/ui/scripts/cloud.core.js +++ b/ui/scripts/cloud.core.js @@ -570,6 +570,7 @@ function clearAddButtonsOnTop() { $("#midmenu_add_secondarystorage_button").unbind("click").hide(); $("#midmenu_add_pod_button").unbind("click").hide(); $("#midmenu_add_vlan_button").unbind("click").hide(); + $("#midmenu_add_network_button").unbind("click").hide(); $("#midmenu_add_directIpRange_button").unbind("click").hide(); $("#midmenu_Update_SSL_Certificate_button").unbind("click").hide(); diff --git a/ui/scripts/cloud.core.network.js b/ui/scripts/cloud.core.network.js index 821acf2dd1b..326494349e1 100644 --- a/ui/scripts/cloud.core.network.js +++ b/ui/scripts/cloud.core.network.js @@ -24,6 +24,8 @@ function afterLoadNetworkJSP($leftmenuItem1) { showMiddleMenu(); disableMultipleSelectionInMidMenu(); + initAddNetworkButton($("#midmenu_add_network_button"), $leftmenuItem1); + //switch between different tabs - Public Network page var $publicNetworkPage = $("#public_network_page"); var tabArray = [$publicNetworkPage.find("#tab_details"), $publicNetworkPage.find("#tab_ipallocation"), $publicNetworkPage.find("#tab_firewall"), $publicNetworkPage.find("#tab_loadbalancer")]; @@ -81,6 +83,280 @@ function afterLoadNetworkJSP($leftmenuItem1) { }); } +function initAddNetworkButton($button, $leftmenuItem1) { + var zoneObj = $leftmenuItem1.data("jsonObj"); + + initDialog("dialog_add_network_for_zone"); + + var $dialogAddNetworkForZone = $("#dialog_add_network_for_zone"); + + //***** binding Event Handler (begin) ****** + //direct VLAN shows only "tagged" option while public VLAN shows both "tagged" and "untagged" option. + $dialogAddNetworkForZone.find("#add_publicip_vlan_type").change(function(event) { + var addPublicipVlanTagged = $dialogAddNetworkForZone.find("#add_publicip_vlan_tagged").empty(); + + if ($(this).val() == "false") { //direct VLAN (only tagged option) + addPublicipVlanTagged.append(''); + $dialogAddNetworkForZone.find("#add_publicip_vlan_network_name_container").show(); + $dialogAddNetworkForZone.find("#add_publicip_vlan_network_desc_container").show(); + $dialogAddNetworkForZone.find("#add_publicip_vlan_vlan_container").show(); + $dialogAddNetworkForZone.find("#add_publicip_vlan_pod_container").hide(); + + } + else if ($(this).val() == "true") { //public VLAN + $dialogAddNetworkForZone.find("#add_publicip_vlan_network_name_container").hide(); + $dialogAddNetworkForZone.find("#add_publicip_vlan_network_desc_container").hide(); + $dialogAddNetworkForZone.find("#add_publicip_vlan_cidr_container").hide(); + addPublicipVlanTagged.append('').append(''); + } + + $dialogAddNetworkForZone.find("#add_publicip_vlan_tagged").change(); + + // default value of "#add_publicip_vlan_scope" is "zone-wide". Calling change() will hide "#add_publicip_vlan_domain_container", "#add_publicip_vlan_account_container". + $dialogAddNetworkForZone.find("#add_publicip_vlan_scope").change(); + + return false; + }); + + if (zoneObj.networktype == "Advanced") { + $dialogAddNetworkForZone.find("#add_publicip_vlan_tagged").change(function(event) { + if ($(this).val() == "tagged") { + $dialogAddNetworkForZone.find("#add_publicip_vlan_vlan_container").show(); + $dialogAddNetworkForZone.find("#add_publicip_vlan_pod_container").hide(); + + $dialogAddNetworkForZone.find("#add_publicip_vlan_scope").empty().append('').append(''); + } + else if($(this).val() == "untagged") { + $dialogAddNetworkForZone.find("#add_publicip_vlan_vlan_container").hide(); + $dialogAddNetworkForZone.find("#add_publicip_vlan_pod_container").hide(); + + $dialogAddNetworkForZone.find("#add_publicip_vlan_scope").empty().append(''); + } + + // default value of "#add_publicip_vlan_scope" is "zone-wide". Calling change() will hide "#add_publicip_vlan_domain_container", "#add_publicip_vlan_account_container". + $dialogAddNetworkForZone.find("#add_publicip_vlan_scope").change(); + + return false; + }); + + $dialogAddNetworkForZone.find("#add_publicip_vlan_tagged").change(); + } + else { + $dialogAddNetworkForZone.find("#add_publicip_vlan_container").hide(); + } + + $dialogAddNetworkForZone.find("#add_publicip_vlan_scope").change(function(event) { + if($(this).val() == "zone-wide") { + $dialogAddNetworkForZone.find("#add_publicip_vlan_domain_container").hide(); + $dialogAddNetworkForZone.find("#add_publicip_vlan_account_container").hide(); + } + else if($(this).val() == "account-specific") { + $dialogAddNetworkForZone.find("#add_publicip_vlan_domain_container").show(); + $dialogAddNetworkForZone.find("#add_publicip_vlan_account_container").show(); + } + return false; + }); + //***** binding Event Handler (end) ****** + + $button.show(); + $button.unbind("click").bind("click", function(event) { + $dialogAddNetworkForZone.find("#info_container").hide(); + $dialogAddNetworkForZone.find("#zone_name").text(fromdb(zoneObj.name)); + $dialogAddNetworkForZone.find("#add_publicip_vlan_vlan_container, #add_publicip_vlan_domain_container, #add_publicip_vlan_account_container").hide(); + $dialogAddNetworkForZone.find("#add_publicip_vlan_tagged, #add_publicip_vlan_vlan, #add_publicip_vlan_gateway, #add_publicip_vlan_netmask, #add_publicip_vlan_startip, #add_publicip_vlan_endip, #add_publicip_vlan_account").val(""); + + if (zoneObj.networktype == 'Basic') { + $dialogAddNetworkForZone.find("#add_publicip_vlan_type_container").hide(); + } else { + $dialogAddNetworkForZone.find("#add_publicip_vlan_pod_container").show(); + $dialogAddNetworkForZone.find("#add_publicip_vlan_type").change(); + $dialogAddNetworkForZone.find("#add_publicip_vlan_type_container").show(); + var podSelect = $dialogAddNetworkForZone.find("#add_publicip_vlan_pod").empty(); + $.ajax({ + data: createURL("command=listPods&zoneId="+zoneObj.id), + dataType: "json", + async: false, + success: function(json) { + var pods = json.listpodsresponse.pod; + if (pods != null && pods.length > 0) { + for (var i = 0; i < pods.length; i++) { + podSelect.append(""); + } + } else { + podSelect.append(""); + } + } + }); + + var domainSelect = $dialogAddNetworkForZone.find("#add_publicip_vlan_domain").empty(); + if(zoneObj.domainid != null) { //list only domains under zoneObj.domainid + domainSelect.append(""); + + function populateDomainDropdown(id) { + $.ajax({ + data: createURL("command=listDomainChildren&id="+id), + dataType: "json", + async: false, + success: function(json) { + var domains = json.listdomainchildrenresponse.domain; + if (domains != null && domains.length > 0) { + for (var i = 0; i < domains.length; i++) { + domainSelect.append(""); + if(domains[i].haschild == true) + populateDomainDropdown(domains[i].id); + } + } + } + }); + } + + populateDomainDropdown(zoneObj.domainid); + } + else { //list all domains + $.ajax({ + data: createURL("command=listDomains"), + dataType: "json", + success: function(json) { + var items = json.listdomainsresponse.domain; + if(items != null && items.length > 0) { + for(var i=0; i" + fromdb(items[i].name) + ""); + } + } + } + }); + } + } + + $dialogAddNetworkForZone + .dialog('option', 'buttons', { + "Add": function() { + var $thisDialog = $(this); + + // validate values + var isValid = true; + var isTagged = $thisDialog.find("#add_publicip_vlan_tagged").val() == "tagged"; + var isDirect = $thisDialog.find("#add_publicip_vlan_type").val() == "false"; + + isValid &= validateString("Account", $thisDialog.find("#add_publicip_vlan_account"), $thisDialog.find("#add_publicip_vlan_account_errormsg"), true); //optional + + if (isTagged) { + isValid &= validateNumber("VLAN", $thisDialog.find("#add_publicip_vlan_vlan"), $thisDialog.find("#add_publicip_vlan_vlan_errormsg"), 2, 4095); + } + if (isDirect) { + isValid &= validateString("Network Name", $thisDialog.find("#add_publicip_vlan_network_name"), $thisDialog.find("#add_publicip_vlan_network_name_errormsg")); + isValid &= validateString("Network Description", $thisDialog.find("#add_publicip_vlan_network_desc"), $thisDialog.find("#add_publicip_vlan_network_desc_errormsg")); + } + isValid &= validateIp("Gateway", $thisDialog.find("#add_publicip_vlan_gateway"), $thisDialog.find("#add_publicip_vlan_gateway_errormsg")); + isValid &= validateIp("Netmask", $thisDialog.find("#add_publicip_vlan_netmask"), $thisDialog.find("#add_publicip_vlan_netmask_errormsg")); + isValid &= validateIp("Start IP Range", $thisDialog.find("#add_publicip_vlan_startip"), $thisDialog.find("#add_publicip_vlan_startip_errormsg")); //required + isValid &= validateIp("End IP Range", $thisDialog.find("#add_publicip_vlan_endip"), $thisDialog.find("#add_publicip_vlan_endip_errormsg"), true); //optional + if (!isValid) + return; + + //$thisDialog.dialog("close"); //only close dialog when this action succeeds + $thisDialog.find("#spinning_wheel").show() + + var vlan = trim($thisDialog.find("#add_publicip_vlan_vlan").val()); + if (isTagged) { + vlan = "&vlan="+vlan; + } else { + vlan = "&vlan=untagged"; + } + + var scopeParams = ""; + if($dialogAddNetworkForZone.find("#add_publicip_vlan_scope").val()=="account-specific") { + scopeParams = "&domainId="+trim($thisDialog.find("#add_publicip_vlan_domain").val())+"&account="+trim($thisDialog.find("#add_publicip_vlan_account").val()); + } else if (isDirect) { + scopeParams = "&isshared=true"; + } + + var type = trim($thisDialog.find("#add_publicip_vlan_type").val()); + var gateway = trim($thisDialog.find("#add_publicip_vlan_gateway").val()); + var netmask = trim($thisDialog.find("#add_publicip_vlan_netmask").val()); + var startip = trim($thisDialog.find("#add_publicip_vlan_startip").val()); + var endip = trim($thisDialog.find("#add_publicip_vlan_endip").val()); + + debugger; + if (!isDirect) { + // Allocating ip ranges on a vlan for virtual networking + $.ajax({ + data: createURL("command=createVlanIpRange&forVirtualNetwork="+type+"&zoneId="+zoneObj.id+vlan+scopeParams+"&gateway="+todb(gateway)+"&netmask="+todb(netmask)+"&startip="+todb(startip)+"&endip="+todb(endip)), + dataType: "json", + success: function(json) { + $thisDialog.find("#spinning_wheel").hide(); + $thisDialog.dialog("close"); + + /* + var $template1 = $("#vlan_template").clone(); + $template1.find("#vlan_type_icon").removeClass("direct").addClass("virtual"); + + var item = json.createvlaniprangeresponse.vlan; + vlanJsonToTemplate(item, $template1, false); + $vlanContainer.prepend($template1); + $template1.fadeIn("slow"); + */ + }, + error: function(XMLHttpResponse) { + handleError(XMLHttpResponse, function() { + handleErrorInDialog(XMLHttpResponse, $thisDialog); + }); + } + }); + } + else { + // Creating network for the direct networking + var name = todb($thisDialog.find("#add_publicip_vlan_network_name").val()); + var desc = todb($thisDialog.find("#add_publicip_vlan_network_desc").val()); + $.ajax({ + data: createURL("command=listNetworkOfferings"), + dataType: "json", + async: false, + success: function(json) { + var networkOfferings = json.listnetworkofferingsresponse.networkoffering; + if (networkOfferings != null && networkOfferings.length > 0) { + for (var i = 0; i < networkOfferings.length; i++) { + if (networkOfferings[i].type == "Direct" && networkOfferings[i].isdefault) { + // Create a network from this. + $.ajax({ + data: createURL("command=createNetwork&name="+name+"&displayText="+desc+"&networkOfferingId="+networkOfferings[i].id+"&zoneId="+zoneObj.id+vlan+scopeParams+"&gateway="+todb(gateway)+"&netmask="+todb(netmask)+"&startip="+todb(startip)+"&endip="+todb(endip)), + dataType: "json", + success: function(json) { + $thisDialog.find("#spinning_wheel").hide(); + $thisDialog.dialog("close"); + + /* + var $template1 = $("#vlan_template").clone(); + $template1.find("#vlan_type_icon").removeClass("virtual").addClass("direct"); + + var item = json.createnetworkresponse.network; + vlanJsonToTemplate(item, $template1, true); + $vlanContainer.prepend($template1); + $template1.fadeIn("slow"); + */ + }, + error: function(XMLHttpResponse) { + handleError(XMLHttpResponse, function() { + handleErrorInDialog(XMLHttpResponse, $thisDialog); + }); + } + }); + } + } + } + } + }); + } + + }, + "Cancel": function() { + $(this).dialog("close"); + } + }).dialog("open"); + return false; + }); +} + //***** Public Network (begin) ****************************************************************************************************** function publicNetworkGetMidmenuId(jsonObj) { return "midmenuItem_publicnetework_" + jsonObj.id;