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",