diff --git a/ui/jsp/ipaddress.jsp b/ui/jsp/ipaddress.jsp index 68c67ced797..50343808e39 100644 --- a/ui/jsp/ipaddress.jsp +++ b/ui/jsp/ipaddress.jsp @@ -643,4 +643,23 @@ + + + + + diff --git a/ui/scripts/cloud.core.ipaddress.js b/ui/scripts/cloud.core.ipaddress.js index fe0b4b26ab8..0113e466363 100644 --- a/ui/scripts/cloud.core.ipaddress.js +++ b/ui/scripts/cloud.core.ipaddress.js @@ -31,6 +31,7 @@ function afterLoadIpJSP() { initDialog("dialog_disable_vpn"); initDialog("dialog_add_vpnuser"); initDialog("dialog_confirmation_remove_vpnuser"); + initDialog("dialog_enable_static_NAT"); //*** Acquire New IP (begin) *** $.ajax({ @@ -93,7 +94,8 @@ function afterLoadIpJSP() { isValid &= validateDropDownBox("Instance", $createPortForwardingRow.find("#vm"), $createPortForwardingRow.find("#vm_errormsg")); isValid &= validateNumber("Public Port", $createPortForwardingRow.find("#public_port"), $createPortForwardingRow.find("#public_port_errormsg"), 1, 65535); isValid &= validateNumber("Private Port", $createPortForwardingRow.find("#private_port"), $createPortForwardingRow.find("#private_port_errormsg"), 1, 65535); - if (!isValid) return; + if (!isValid) + return; var $template = $("#port_forwarding_template").clone(); $("#tab_content_port_forwarding #grid_content").append($template.show()); @@ -732,16 +734,29 @@ function ipJsonToDetailsTab() { var $actionMenu = $("#right_panel_content #tab_content_details #action_link #action_menu"); $actionMenu.find("#action_list").empty(); var noAvailableActions = true; - - if(isIpManageable(ipObj.domainid, ipObj.account) == true && ipObj.issourcenat != true) { - buildActionLinkForTab("Release IP", ipActionMap, $actionMenu, $midmenuItem1, $thisTab); - noAvailableActions = false; - } + if(ipObj.isstaticnat == true) { + + } + else { //ipObj.isstaticnat == false + buildActionLinkForTab("Enable Static NAT", ipActionMap, $actionMenu, $midmenuItem1, $thisTab); + noAvailableActions = false; + + if(isIpManageable(ipObj.domainid, ipObj.account) == true && ipObj.issourcenat != true) { + buildActionLinkForTab("Release IP", ipActionMap, $actionMenu, $midmenuItem1, $thisTab); + } + } + // no available actions if(noAvailableActions == true) { $actionMenu.find("#action_list").append($("#no_available_actions").clone().show()); } + + //populate dropdown + var IpDomainid = ipObj.domainid; + var IpAccount = ipObj.account; + var $vmSelect = $("#dialog_enable_static_NAT").find("#vm_dropdown").empty(); + ipPopulateVMDropdown($vmSelect, IpDomainid, IpAccount); $thisTab.find("#tab_spinning_wheel").hide(); $thisTab.find("#tab_container").show(); @@ -765,17 +780,6 @@ function ipClearDetailsTab() { $actionMenu.find("#action_list").append($("#no_available_actions").clone().show()); } -/* -function setSourceNatField(value, $field) { - if(value == true) - $field.text("Yes"); - else if(value == false) - $field.text("No"); - else - $field.text(""); -} -*/ - function setNetworkTypeField(value, $field) { if(value == true) $field.text("Public"); @@ -797,6 +801,19 @@ var ipActionMap = { clearRightPanel(); ipClearRightPanel(); } + }, + "Enable Static NAT": { + isAsyncJob: true, + asyncJobResponse: "createipforwardingruleresponse", + dialogBeforeActionFn: doEnableStaticNAT, + inProcessText: "Enabling Static NAT....", + afterActionSeccessFn: function(json, $midmenuItem1, id){ + //var item = json.queryasyncjobresultresponse.jobresult.portforwardingrule; + var $midmenuItem1 = $("#right_panel_content").data("$midmenuItem1"); + var ipObj = $midmenuItem1.data("jsonObj"); + ipObj.isstaticnat = true; + setBooleanReadField(ipObj.isstaticnat, $("#right_panel_content #tab_content_details").find("#static_nat")); + } } } @@ -817,6 +834,32 @@ function doReleaseIp($actionLink, $detailsTab, $midmenuItem1) { } }).dialog("open"); } + +function doEnableStaticNAT($actionLink, $detailsTab, $midmenuItem1) { + var $detailsTab = $("#right_panel_content #tab_content_details"); + var jsonObj = $detailsTab.data("jsonObj"); + var ipaddress = jsonObj.ipaddress; + + $("#dialog_enable_static_NAT") + .dialog('option', 'buttons', { + "Confirm": function() { + var $thisDialog = $(this); + + //validate + var vmId = $thisDialog.find("#vm_dropdown").val(); + if(vmId == null || vmId.length == 0) + return; + + $thisDialog.dialog("close"); + + var apiCommand = "command=createIpForwardingRule&ipaddress="+ipaddress+"&virtualmachineid="+vmId; + doActionToTab(ipaddress, $actionLink, apiCommand, $midmenuItem1, $detailsTab); + }, + "Cancel": function() { + $(this).dialog("close"); + } + }).dialog("open"); +} //***** Details tab (end) ****************************************************************************************************************** //***** Port Forwarding tab (begin) ******************************************************************************************************** @@ -848,7 +891,7 @@ function portForwardingJsonToTemplate(jsonObj, $template) { var IpAccount = fromdb(ipObj.account); var $vmSelect = $template.find("#row_container_edit #vm").empty(); - ipPortFowardingPopulateVMDropdown($vmSelect, IpDomainid, IpAccount); + ipPopulateVMDropdown($vmSelect, IpDomainid, IpAccount); $vmSelect.val(virtualMachineId); var $rowContainer = $template.find("#row_container"); @@ -958,15 +1001,15 @@ function refreshCreatePortForwardingRow() { $createPortForwardingRow.find("#protocol").val("TCP"); var $detailsTab = $("#right_panel_content #tab_content_details"); - var jsonObj = $detailsTab.data("jsonObj"); - var IpDomainid = jsonObj.domainid; - var IpAccount = jsonObj.account; + var ipObj = $detailsTab.data("jsonObj"); + var IpDomainid = ipObj.domainid; + var IpAccount = ipObj.account; var $vmSelect = $createPortForwardingRow.find("#vm").empty(); - ipPortFowardingPopulateVMDropdown($vmSelect, IpDomainid, IpAccount); + ipPopulateVMDropdown($vmSelect, IpDomainid, IpAccount); } -function ipPortFowardingPopulateVMDropdown($vmSelect, IpDomainid, IpAccount) { +function ipPopulateVMDropdown($vmSelect, IpDomainid, IpAccount) { $.ajax({ data: createURL("command=listVirtualMachines&domainid="+IpDomainid+"&account="+IpAccount+"&state=Running"), dataType: "json",