mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
1760 lines
86 KiB
JavaScript
1760 lines
86 KiB
JavaScript
/**
|
|
* Copyright (C) 2010 Cloud.com, Inc. All rights reserved.
|
|
*
|
|
* This software is licensed under the GNU General Public License v3 or later.
|
|
*
|
|
* It is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or any later version.
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
*/
|
|
|
|
// Version: @VERSION@
|
|
|
|
function showNetworkingTab(p_domainId, p_account) {
|
|
//*** Network (begin) ****************************************************************************
|
|
activateDialog($("#dialog_acquire_public_ip").dialog({
|
|
width: 325,
|
|
autoOpen: false,
|
|
modal: true,
|
|
zIndex: 2000
|
|
}));
|
|
|
|
//*** Acquire New IP (begin) ***
|
|
$.ajax({
|
|
data: createURL("command=listZones&available=true&response=json"+maxPageSize),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var zones = json.listzonesresponse.zone;
|
|
var zoneSelect = $("#dialog_acquire_public_ip #acquire_zone").empty();
|
|
if (zones != null && zones.length > 0) {
|
|
for (var i = 0; i < zones.length; i++) {
|
|
zoneSelect.append("<option value='" + zones[i].id + "'>" + sanitizeXSS(zones[i].name) + "</option>");
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
$(".add_publicipbutton").bind("click", function(event) {
|
|
var submenuContent = $("#submenu_content_network");
|
|
$("#dialog_acquire_public_ip").dialog('option', 'buttons', {
|
|
"Acquire": function() {
|
|
$("#submenu_content_network #overlay_white").show();
|
|
$("#submenu_content_network #loading_gridtable").find("#message").text("Acquiring New IP....");
|
|
$("#submenu_content_network #loading_gridtable").show();
|
|
|
|
var thisDialog = $(this);
|
|
var zoneid = thisDialog.find("#acquire_zone").val();
|
|
thisDialog.dialog("close");
|
|
|
|
$.ajax({
|
|
data: createURL("command=associateIpAddress&zoneid="+zoneid+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var items = json.associateipaddressresponse.publicipaddress;
|
|
$("#dialog_info").html("<p>The IP address <b>"+items[0].ipaddress+"</b> has been assigned to your account</p>").dialog("open");
|
|
|
|
$("#submenu_content_network #overlay_white").hide();
|
|
$("#submenu_content_network #loading_gridtable").hide();
|
|
|
|
if(isAdmin() || isDomainAdmin()) {
|
|
ipListContainer.empty(); //clear search result if there is.
|
|
var template = ipTemplate.clone();
|
|
ipJsonToPanel(items[0], template);
|
|
ipListContainer.append(template.show());
|
|
showPfLbArea(items[0].ipaddress, items[0].domainid, items[0].account);
|
|
} else {
|
|
RefreshIpDropDown(items[0].ipaddress);
|
|
}
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
handleError(XMLHttpResponse);
|
|
$("#submenu_content_network #overlay_white").hide();
|
|
$("#submenu_content_network #loading_gridtable").hide();
|
|
}
|
|
});
|
|
},
|
|
"Cancel": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
});
|
|
$("#dialog_acquire_public_ip").dialog("open");
|
|
return false;
|
|
});
|
|
|
|
var ipListContainer = $("#submenu_content_network #ip_list_container");
|
|
var ipTemplate = $("#ip_template");
|
|
|
|
function refreshIpListContainer(strCmd) {
|
|
$("#pf_lb_area").hide();
|
|
$("#pf_lb_area_blank").hide();
|
|
$("#show_last_search").hide();
|
|
ipListContainer.empty();
|
|
$.ajax({
|
|
data: createURL(strCmd),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var items = json.listpublicipaddressesresponse.publicipaddress;
|
|
if(items != null && items.length > 0) {
|
|
if (items.length > 1) {
|
|
for(var i=0; i < items.length; i++) {
|
|
var template = ipTemplate.clone();
|
|
ipJsonToPanel(items[i], template);
|
|
ipListContainer.append(template.show());
|
|
}
|
|
} else {
|
|
var template = ipTemplate.clone();
|
|
ipJsonToPanel(items[0], template);
|
|
ipListContainer.append(template.show());
|
|
template.find("#ip_manage").hide();
|
|
|
|
if(isIpManageable(items[0].domainid, items[0].account) == true) {
|
|
showPfLbArea(items[0].ipaddress, items[0].domainid, items[0].account);
|
|
listLoadBalancerRules();
|
|
refreshCreateLoadBalancerRow();
|
|
listPortForwardingRules();
|
|
refreshCreatePortForwardingRow();
|
|
$("#create_port_forwarding_row #add_link").data("ip", items[0].ipaddress);
|
|
$("#create_load_balancer_row #add_link").data("ip", items[0].ipaddress);
|
|
} else {
|
|
$("#pf_lb_area_blank p").text("This IP address is managed by the CloudStack for use with System VMs.");
|
|
$("#pf_lb_area_blank").show();
|
|
}
|
|
}
|
|
} else {
|
|
$("#pf_lb_area_blank p").text("Unable to find any IP Addresses. Please try again.");
|
|
$("#pf_lb_area_blank").show();
|
|
}
|
|
},
|
|
error : function(XMLHttpResponse) {
|
|
$("#pf_lb_area_blank p").text("Unable to find any IP Addresses. Please try again.");
|
|
$("#pf_lb_area_blank").show();
|
|
}
|
|
});
|
|
}
|
|
|
|
function refreshIpListContainerByInputBox() {
|
|
var ip = $("#submenu_content_network #admin_ip_search").val();
|
|
$("#submenu_content_network #admin_ip_search").autocomplete("close");
|
|
if(ip != null && ip.length >0) {
|
|
refreshIpListContainer("command=listPublicIpAddresses&response=json&forvirtualnetwork=true&ipaddress=" + ip);
|
|
}
|
|
}
|
|
|
|
$("#submenu_content_network #admin_ip_search").autocomplete({
|
|
source: function(request, response) {
|
|
$.ajax({
|
|
data: createURL("command=listPublicIpAddresses&response=json&forvirtualnetwork=true&ipaddress=" + request.term),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var items = json.listpublicipaddressesresponse.publicipaddress;
|
|
var ipArray = [];
|
|
if(items != null && items.length > 0) {
|
|
for(var i=0; i < items.length; i++)
|
|
ipArray.push(items[i].ipaddress);
|
|
}
|
|
response(ipArray);
|
|
}
|
|
});
|
|
},
|
|
minLength: 2
|
|
|
|
});
|
|
|
|
$("#submenu_content_network #admin_ip_search").bind("keypress", function(event) {
|
|
if(event.keyCode == keycode_Enter) {
|
|
$("#submenu_content_network #ip_searchbutton1").click();
|
|
return false;
|
|
}
|
|
});
|
|
|
|
$("#submenu_content_network #search_by_account").bind("keypress", function(event) {
|
|
if(event.keyCode == keycode_Enter) {
|
|
$("#submenu_content_network #ip_searchbutton2").click();
|
|
return false;
|
|
}
|
|
});
|
|
|
|
//watermark (begin)
|
|
$("#submenu_content_network #admin_ip_search").bind('focus', function(event){
|
|
if($(this).val() == "By Public IP Address") {
|
|
$(this).val("");
|
|
$(this).removeClass("ipwatermark_text");
|
|
}
|
|
});
|
|
$("#submenu_content_network #admin_ip_search").bind('blur', function(event){
|
|
if($(this).val() == "") {
|
|
$(this).val("By Public IP Address");
|
|
$(this).addClass("ipwatermark_text");
|
|
}
|
|
});
|
|
|
|
$("#submenu_content_network #search_by_account").bind('focus', function(event){
|
|
if($(this).val() == "By Account") {
|
|
$(this).val("");
|
|
$(this).removeClass("ipwatermark_text");
|
|
}
|
|
});
|
|
$("#submenu_content_network #search_by_account").bind('blur', function(event){
|
|
if($(this).val() == "") {
|
|
$(this).val("By Account");
|
|
$(this).addClass("ipwatermark_text");
|
|
}
|
|
});
|
|
//watermark (end)
|
|
|
|
$("#submenu_content_network #ip_searchbutton1").bind("click", refreshIpListContainerByInputBox);
|
|
|
|
function populateDomainDropdown() {
|
|
var domainSelect = $("#submenu_content_network #search_by_domain").empty();
|
|
$.ajax({
|
|
data: createURL("command=listDomains&available=true&response=json"+maxPageSize),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var domains = json.listdomainsresponse.domain;
|
|
if (domains != null && domains.length > 0) {
|
|
for (var i = 0; i < domains.length; i++) {
|
|
domainSelect.append("<option value='" + domains[i].id + "'>" + sanitizeXSS(domains[i].name) + "</option>");
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
$("#submenu_content_network #ip_searchbutton2").bind("click", function(event){
|
|
var array1 = [];
|
|
var account = $("#submenu_content_network #search_by_account").val();
|
|
if(account != null && account.length > 0)
|
|
array1.push("&account=" + account);
|
|
var domainId = $("#submenu_content_network #search_by_domain").val();
|
|
array1.push("&domainid=" + domainId);
|
|
refreshIpListContainer("command=listPublicIpAddresses&response=json&forvirtualnetwork=true" + array1.join(""));
|
|
return false;
|
|
});
|
|
|
|
function RefreshIpDropDown(ipAddress) {
|
|
var array1 = [];
|
|
// "p_domainId!=null" and "p_account!=null" means redirected from "IPs" link in Accounts tab to here(new Network tab)
|
|
if (p_domainId!=null && p_domainId.length > 0)
|
|
array1.push("&domainid="+p_domainId);
|
|
if (p_account!=null && p_account.length > 0)
|
|
array1.push("&account="+p_account);
|
|
|
|
$.ajax({
|
|
data: createURL("command=listPublicIpAddresses&response=json&forvirtualnetwork=true" + array1.join("")),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var items = json.listpublicipaddressesresponse.publicipaddress;
|
|
if(items != null && items.length > 0) {
|
|
var ipSelect = $("#submenu_content_network #ip_select").empty();
|
|
for(var i=0; i < items.length; i++) {
|
|
ipSelect.append("<option value='" + items[i].ipaddress + "'>" + items[i].ipaddress + "</option>");
|
|
}
|
|
if(ipAddress != null)
|
|
ipSelect.val(ipAddress);
|
|
ipSelect.change();
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
function ipJsonToPanel(json, panel) {
|
|
panel.find("#ip_release").show();
|
|
panel.attr("id", "ip"+json.ipaddress).data("ip", json.ipaddress).data("domainid", json.domainid).data("account", json.account);
|
|
panel.find("#ip_manage").data("ip", json.ipaddress).data("domainid", json.domainid).data("account", json.account);
|
|
panel.data("ip_domainid", json.domainid).data("ip_account", json.account);
|
|
panel.find("#ipaddress").text(json.ipaddress);
|
|
panel.find("#zonename").text(json.zonename);
|
|
panel.find("#allocated").text(json.allocated);
|
|
panel.find("#vlanname").text(json.vlanname);
|
|
panel.find("#source_nat").text((json.issourcenat=="true")?"Yes":"No");
|
|
panel.find("#network_type").text((json.forvirtualnetwork=="true")? "Public":"Direct");
|
|
panel.find("#domain").text(json.domain);
|
|
panel.find("#account").text(json.account);
|
|
|
|
var ipAddress = json.ipaddress;
|
|
if (json.issourcenat != "true" && json.forvirtualnetwork =="true") {
|
|
panel.find("#ip_release").data("ip", json.ipaddress).show();
|
|
} else {
|
|
panel.find("#ip_release").hide();
|
|
}
|
|
|
|
if(isIpManageable(json.domainid, json.account) == true && !isUser())
|
|
panel.find("#ip_manage").show();
|
|
}
|
|
|
|
var ipPanel = $("#submenu_content_network #network_container");
|
|
$("#submenu_content_network #ip_select").bind("change", function(event) {
|
|
var ipAddress = $(this).val();
|
|
if(ipAddress != null && ipAddress.length > 0) {
|
|
$.ajax({
|
|
data: createURL("command=listPublicIpAddresses&ipaddress="+ipAddress+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var items = json.listpublicipaddressesresponse.publicipaddress;
|
|
if(items != null && items.length > 0) {
|
|
var item = items[0];
|
|
ipJsonToPanel(item, ipPanel);
|
|
showPfLbArea(ipAddress, item.domainid, item.account);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
return false;
|
|
});
|
|
|
|
function isIpManageable(domainid, account) {
|
|
if((g_domainid == domainid && g_account == account) || (isAdmin() && account!="system"))
|
|
return true;
|
|
else
|
|
return false;
|
|
}
|
|
|
|
function showPfLbArea(ipAddress, domainid, account) {
|
|
//show portForwarding/loadBalancer if Ip is manageable
|
|
if(isIpManageable(domainid, account) == true) {
|
|
ipPanel.data("ip_domainid", domainid).data("ip_account", account).data("ip_address", ipAddress);
|
|
listLoadBalancerRules();
|
|
refreshCreateLoadBalancerRow();
|
|
listPortForwardingRules();
|
|
refreshCreatePortForwardingRow();
|
|
$("#create_port_forwarding_row #add_link").data("ip", ipAddress);
|
|
$("#create_load_balancer_row #add_link").data("ip", ipAddress);
|
|
$("#pf_lb_area").show();
|
|
$("#pf_lb_area_blank").hide();
|
|
}
|
|
//hide portForwarding/loadBalancer if IP is not manageable
|
|
else {
|
|
$("#pf_lb_area").hide();
|
|
$("#pf_lb_area_blank p").text("This IP address is managed by the CloudStack for use with System VMs.");
|
|
$("#pf_lb_area_blank").show();
|
|
}
|
|
}
|
|
|
|
function hidePfLbArea() {
|
|
$("#pf_lb_area").hide();
|
|
$("#pf_lb_area_blank").hide();
|
|
}
|
|
|
|
//*** Acquire New IP (end) ***
|
|
|
|
//*** Port Forwarding (begin) ***
|
|
var createPortForwardingRow = $("#submenu_content_network #port_forwarding_panel #create_port_forwarding_row");
|
|
var portForwardingGrid = $("#submenu_content_network #port_forwarding_panel #grid_content");
|
|
|
|
function listPortForwardingRules() {
|
|
var ipSelected = $("#submenu_content_network #ip_select").val();
|
|
if (!isUser()) {
|
|
ipSelected = ipPanel.data("ip_address");
|
|
}
|
|
if(ipSelected == null || ipSelected.length == 0)
|
|
return;
|
|
$.ajax({
|
|
data: createURL("command=listPortForwardingRules&ipaddress=" + ipSelected + "&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var items = json.listportforwardingrulesresponse.portforwardingrule;
|
|
portForwardingGrid.empty();
|
|
if (items != null && items.length > 0) {
|
|
for (var i = 0; i < items.length; i++) {
|
|
var template = $("#port_forwarding_template").clone(true);
|
|
portForwardingJsonToTemplate(items[i], template);
|
|
portForwardingGrid.append(template.show());
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
function refreshCreatePortForwardingRow() {
|
|
createPortForwardingRow.find("#public_port").val("");
|
|
createPortForwardingRow.find("#private_port").val("");
|
|
createPortForwardingRow.find("#protocol").val("TCP");
|
|
|
|
$.ajax({
|
|
data: createURL("command=listVirtualMachines&response=json&domainid="+ipPanel.data("ip_domainid")+"&account="+ipPanel.data("ip_account")+maxPageSize),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var instances = json.listvirtualmachinesresponse.virtualmachine;
|
|
var vmSelect = createPortForwardingRow.find("#vm").empty();
|
|
if (instances != null && instances.length > 0) {
|
|
for (var i = 0; i < instances.length; i++) {
|
|
var html = $("<option value='" + instances[i].id + "'>" + getVmName(instances[i].name, instances[i].displayname) + "</option>");
|
|
vmSelect.append(html);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
var portForwardingIndex = 0;
|
|
function portForwardingJsonToTemplate(json, template) {
|
|
(portForwardingIndex++ % 2 == 0)? template.find("#row_container").addClass("smallrow_even"): template.find("#row_container").addClass("smallrow_odd");
|
|
|
|
template.attr("id", "portForwarding_" + json.id).data("portForwardingId", json.id);
|
|
|
|
template.find("#row_container #public_port").text(json.publicport);
|
|
template.find("#row_container_edit #public_port").text(json.publicport);
|
|
|
|
template.find("#row_container #private_port").text(json.privateport);
|
|
template.find("#row_container_edit #private_port").val(json.privateport);
|
|
|
|
template.find("#row_container #protocol").text(json.protocol);
|
|
template.find("#row_container_edit #protocol").text(json.protocol);
|
|
|
|
template.find("#row_container #vm_name").text(json.vmname);
|
|
var virtualMachineId = json.virtualmachineid;
|
|
|
|
$.ajax({
|
|
data: createURL("command=listVirtualMachines&response=json&domainid="+ipPanel.data("ip_domainid")+"&account="+ipPanel.data("ip_account")+maxPageSize),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var instances = json.listvirtualmachinesresponse.virtualmachine;
|
|
var vmSelect = template.find("#row_container_edit #vm").empty();
|
|
if (instances != null && instances.length > 0) {
|
|
for (var i = 0; i < instances.length; i++) {
|
|
var html = $("<option value='" + instances[i].id + "'>" + getVmName(instances[i].name, instances[i].displayname) + "</option>");
|
|
vmSelect.append(html);
|
|
}
|
|
vmSelect.val(virtualMachineId);
|
|
}
|
|
}
|
|
});
|
|
|
|
var loadingImg = template.find(".adding_loading");
|
|
var rowContainer = template.find("#row_container");
|
|
var rowContainerEdit = template.find("#row_container_edit");
|
|
|
|
template.find("#delete_link").unbind("click").bind("click", function(event){
|
|
loadingImg.find(".adding_text").text("Deleting....");
|
|
loadingImg.show();
|
|
rowContainer.hide();
|
|
|
|
$.ajax({
|
|
data: createURL("command=deletePortForwardingRule&response=json&id="+json.id),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
template.slideUp("slow", function(){
|
|
$(this).remove();
|
|
});
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
handleError(XMLHttpResponse);
|
|
loadingImg.hide();
|
|
rowContainer.show();
|
|
}
|
|
});
|
|
return false;
|
|
});
|
|
|
|
template.find("#edit_link").unbind("click").bind("click", function(event){
|
|
rowContainer.hide();
|
|
rowContainerEdit.show();
|
|
});
|
|
|
|
template.find("#cancel_link").unbind("click").bind("click", function(event){
|
|
rowContainer.show();
|
|
rowContainerEdit.hide();
|
|
});
|
|
|
|
template.find("#save_link").unbind("click").bind("click", function(event){
|
|
// validate values
|
|
var isValid = true;
|
|
isValid &= validateNumber("Private Port", rowContainerEdit.find("#private_port"), rowContainerEdit.find("#private_port_errormsg"), 1, 65535);
|
|
if (!isValid) return;
|
|
|
|
var loadingImg = template.find(".adding_loading");
|
|
loadingImg.find(".adding_text").text("Saving....");
|
|
loadingImg.show();
|
|
rowContainerEdit.hide();
|
|
|
|
var ipAddress = $("#submenu_content_network #ip_select").val();
|
|
if (!isUser()) {
|
|
ipAddress = ipPanel.data("ip_address");
|
|
}
|
|
var publicPort = rowContainerEdit.find("#public_port").text();
|
|
var privatePort = rowContainerEdit.find("#private_port").val();
|
|
var protocol = rowContainerEdit.find("#protocol").text();
|
|
var virtualMachineId = rowContainerEdit.find("#vm").val();
|
|
|
|
var array1 = [];
|
|
array1.push("&publicip="+ipAddress);
|
|
array1.push("&privateport="+privatePort);
|
|
array1.push("&publicport="+publicPort);
|
|
array1.push("&protocol="+protocol);
|
|
array1.push("&virtualmachineid=" + virtualMachineId);
|
|
|
|
$.ajax({
|
|
data: createURL("command=updatePortForwardingRule&response=json"+array1.join("")),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var jobId = json.updateportforwardingruleresponse.jobid;
|
|
var timerKey = "updateportforwardingruleJob"+jobId;
|
|
|
|
$("body").everyTime(2000, timerKey, function() {
|
|
$.ajax({
|
|
data: createURL("command=queryAsyncJobResult&jobId="+jobId+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var result = json.queryasyncjobresultresponse;
|
|
if (result.jobstatus == 0) {
|
|
return; //Job has not completed
|
|
} else {
|
|
$("body").stopTime(timerKey);
|
|
if (result.jobstatus == 1) { // Succeeded
|
|
var items = result.portforwardingrule;
|
|
portForwardingJsonToTemplate(items[0],template);
|
|
loadingImg.hide();
|
|
rowContainer.show();
|
|
} else if (result.jobstatus == 2) { //Fail
|
|
loadingImg.hide();
|
|
rowContainer.show();
|
|
$("#dialog_alert").html("<p>" + sanitizeXSS(result.jobresult) + "</p>").dialog("open");
|
|
}
|
|
}
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
handleError(XMLHttpResponse);
|
|
$("body").stopTime(timerKey);
|
|
loadingImg.hide();
|
|
rowContainer.show();
|
|
}
|
|
});
|
|
}, 0);
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
handleError(XMLHttpResponse);
|
|
loadingImg.hide();
|
|
rowContainer.show();
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
createPortForwardingRow.find("#add_link").bind("click", function(event){
|
|
// validate values
|
|
var isValid = true;
|
|
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;
|
|
|
|
var template = $("#port_forwarding_template").clone();
|
|
portForwardingGrid.append(template.show());
|
|
|
|
var loadingImg = template.find(".adding_loading");
|
|
var rowContainer = template.find("#row_container");
|
|
loadingImg.find(".adding_text").text("Adding....");
|
|
loadingImg.show();
|
|
rowContainer.hide();
|
|
|
|
var ipAddress = $(this).data("ip");
|
|
var publicPort = createPortForwardingRow.find("#public_port").val();
|
|
var privatePort = createPortForwardingRow.find("#private_port").val();
|
|
var protocol = createPortForwardingRow.find("#protocol").val();
|
|
var virtualMachineId = createPortForwardingRow.find("#vm").val();
|
|
|
|
var array1 = [];
|
|
array1.push("&ipaddress="+ipAddress);
|
|
array1.push("&privateport="+privatePort);
|
|
array1.push("&publicport="+publicPort);
|
|
array1.push("&protocol="+protocol);
|
|
array1.push("&virtualmachineid=" + virtualMachineId);
|
|
$.ajax({
|
|
data: createURL("command=createPortForwardingRule&response=json"+array1.join("")),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var items = json.createportforwardingruleresponse.portforwardingrule;
|
|
portForwardingJsonToTemplate(items[0],template);
|
|
loadingImg.hide();
|
|
rowContainer.show();
|
|
refreshCreatePortForwardingRow();
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
handleError(XMLHttpResponse);
|
|
template.slideUp("slow", function() {
|
|
$(this).remove();
|
|
});
|
|
}
|
|
});
|
|
|
|
return false;
|
|
});
|
|
//*** Port Forwarding (end) ***
|
|
|
|
//*** Load Balancer (begin) ***
|
|
var createLoadBalancerRow = $("#submenu_content_network #load_balancer_panel #create_load_balancer_row");
|
|
var loadBalancerGrid = $("#submenu_content_network #load_balancer_panel #grid_content");
|
|
|
|
function listLoadBalancerRules() {
|
|
var ipSelected = $("#submenu_content_network #ip_select").val();
|
|
if (!isUser()) {
|
|
ipSelected = ipPanel.data("ip_address");
|
|
}
|
|
if(ipSelected == null || ipSelected.length == 0)
|
|
return;
|
|
$.ajax({
|
|
data: createURL("command=listLoadBalancerRules&publicip=" + ipSelected + "&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var items = json.listloadbalancerrulesresponse.loadbalancerrule;
|
|
loadBalancerGrid.empty();
|
|
if (items != null && items.length > 0) {
|
|
for (var i = 0; i < items.length; i++) {
|
|
var template = $("#load_balancer_template").clone(true);
|
|
loadBalancerJsonToTemplate(items[i], template);
|
|
loadBalancerGrid.append(template.show());
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
function refreshCreateLoadBalancerRow() {
|
|
createLoadBalancerRow.find("#name").val("");
|
|
createLoadBalancerRow.find("#public_port").val("");
|
|
createLoadBalancerRow.find("#private_port").val("");
|
|
createLoadBalancerRow.find("#algorithm_select").val("roundrobin");
|
|
}
|
|
|
|
var loadBalancerIndex = 0;
|
|
function loadBalancerJsonToTemplate(json, template) {
|
|
(loadBalancerIndex++ % 2 == 0)? template.find("#row_container").addClass("smallrow_even"): template.find("#row_container").addClass("smallrow_odd");
|
|
|
|
var loadBalancerId = json.id;
|
|
template.attr("id", "loadBalancer_" + loadBalancerId).data("loadBalancerId", loadBalancerId);
|
|
|
|
template.find("#row_container #name").text(json.name);
|
|
template.find("#row_container_edit #name").val(json.name);
|
|
|
|
template.find("#row_container #public_port").text(json.publicport);
|
|
template.find("#row_container_edit #public_port").text(json.publicport);
|
|
|
|
template.find("#row_container #private_port").text(json.privateport);
|
|
template.find("#row_container_edit #private_port").val(json.privateport);
|
|
|
|
template.find("#row_container #algorithm").text(json.algorithm);
|
|
template.find("#row_container_edit #algorithm").val(json.algorithm);
|
|
|
|
template.find("#manage_link").unbind("click").bind("click", function(event){
|
|
var vmSubgrid = template.find("#vm_subgrid");
|
|
if(vmSubgrid.css("display") == "none") {
|
|
vmSubgrid.empty();
|
|
$.ajax({
|
|
cache: false,
|
|
data: createURL("command=listLoadBalancerRuleInstances&id="+loadBalancerId+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var instances = json.listloadbalancerruleinstancesresponse.loadbalancerruleinstance;
|
|
if (instances != null && instances.length > 0) {
|
|
for (var i = 0; i < instances.length; i++) {
|
|
var lbVmTemplate = $("#load_balancer_vm_template").clone();
|
|
var obj = {"loadBalancerId": loadBalancerId, "vmId": instances[i].id, "vmName": getVmName(instances[i].name, instances[i].displayname), "vmPrivateIp": instances[i].privateip};
|
|
lbVmObjToTemplate(obj, lbVmTemplate);
|
|
template.find("#vm_subgrid").append(lbVmTemplate.show());
|
|
}
|
|
}
|
|
}
|
|
});
|
|
vmSubgrid.show();
|
|
}
|
|
else {
|
|
vmSubgrid.hide();
|
|
}
|
|
|
|
var addVmToLbRow = template.find("#add_vm_to_lb_row");
|
|
(addVmToLbRow.css("display") == "none")?addVmToLbRow.show():addVmToLbRow.hide();
|
|
|
|
return false;
|
|
});
|
|
|
|
var loadingContainer = template.find("#loading_container");
|
|
var rowContainer = template.find("#row_container");
|
|
var rowContainerEdit = template.find("#row_container_edit");
|
|
|
|
template.find("#delete_link").unbind("click").bind("click", function(event){
|
|
loadingContainer.find(".adding_text").text("Deleting....");
|
|
loadingContainer.show();
|
|
rowContainer.hide();
|
|
$.ajax({
|
|
data: createURL("command=deleteLoadBalancerRule&id="+loadBalancerId+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var lbJSON = json.deleteloadbalancerruleresponse;
|
|
var timerKey = "deleteLoadBalancerRuleJob_"+lbJSON.jobid;
|
|
$("body").everyTime(
|
|
5000,
|
|
timerKey,
|
|
function() {
|
|
$.ajax({
|
|
data: createURL("command=queryAsyncJobResult&jobId="+lbJSON.jobid+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var result = json.queryasyncjobresultresponse;
|
|
if (result.jobstatus == 0) {
|
|
return; //Job has not completed
|
|
} else {
|
|
$("body").stopTime(timerKey);
|
|
if (result.jobstatus == 1) { // Succeeded
|
|
template.slideUp("slow", function() {
|
|
$(this).remove();
|
|
});
|
|
} else if (result.jobstatus == 2) { // Failed
|
|
loadingContainer.hide();
|
|
rowContainer.show();
|
|
}
|
|
}
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
handleError(XMLHttpResponse);
|
|
$("body").stopTime(timerKey);
|
|
loadingContainer.hide();
|
|
rowContainer.show();
|
|
}
|
|
});
|
|
},
|
|
0
|
|
);
|
|
}
|
|
});
|
|
return false;
|
|
});
|
|
|
|
template.find("#edit_link").unbind("click").bind("click", function(event){
|
|
rowContainer.hide();
|
|
rowContainerEdit.show();
|
|
});
|
|
|
|
template.find("#cancel_link").unbind("click").bind("click", function(event){
|
|
rowContainer.show();
|
|
rowContainerEdit.hide();
|
|
});
|
|
|
|
template.find("#save_link").unbind("click").bind("click", function(event){
|
|
// validate values
|
|
var isValid = true;
|
|
isValid &= validateString("Name", rowContainerEdit.find("#name"), rowContainerEdit.find("#name_errormsg"));
|
|
isValid &= validateNumber("Private Port", rowContainerEdit.find("#private_port"), rowContainerEdit.find("#private_port_errormsg"), 1, 65535);
|
|
if (!isValid) return;
|
|
|
|
var loadingContainer = template.find(".adding_loading");
|
|
loadingContainer.find(".adding_text").text("Saving....");
|
|
loadingContainer.show();
|
|
rowContainerEdit.hide();
|
|
|
|
var name = rowContainerEdit.find("#name").val();
|
|
var privatePort = rowContainerEdit.find("#private_port").val();
|
|
var algorithm = rowContainerEdit.find("#algorithm_select").val();
|
|
|
|
var array1 = [];
|
|
array1.push("&id=" + loadBalancerId);
|
|
array1.push("&name=" + name);
|
|
array1.push("&privateport=" + privatePort);
|
|
array1.push("&algorithm=" + algorithm);
|
|
|
|
$.ajax({
|
|
data: createURL("command=updateLoadBalancerRule&response=json"+array1.join("")),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var jobId = json.updateloadbalancerruleresponse.jobid;
|
|
var timerKey = "updateloadbalancerruleJob"+jobId;
|
|
|
|
$("body").everyTime(2000, timerKey, function() {
|
|
$.ajax({
|
|
data: createURL("command=queryAsyncJobResult&jobId="+jobId+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var result = json.queryasyncjobresultresponse;
|
|
if (result.jobstatus == 0) {
|
|
return; //Job has not completed
|
|
} else {
|
|
$("body").stopTime(timerKey);
|
|
if (result.jobstatus == 1) { // Succeeded
|
|
var items = result.loadbalancer;
|
|
loadBalancerJsonToTemplate(items[0],template);
|
|
loadingContainer.hide();
|
|
rowContainer.show();
|
|
} else if (result.jobstatus == 2) { //Fail
|
|
loadingContainer.hide();
|
|
rowContainer.show();
|
|
$("#dialog_alert").html("<p>" + sanitizeXSS(result.jobresult) + "</p>").dialog("open");
|
|
}
|
|
}
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
handleError(XMLHttpResponse);
|
|
$("body").stopTime(timerKey);
|
|
loadingContainer.hide();
|
|
rowContainer.show();
|
|
}
|
|
});
|
|
}, 0);
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
handleError(XMLHttpResponse);
|
|
loadingContainer.hide();
|
|
rowContainer.show();
|
|
}
|
|
});
|
|
});
|
|
|
|
refreshLbVmSelect(template, json.id);
|
|
|
|
template.find("#add_vm_to_lb_row #add_link").unbind("click").bind("click", function(event){
|
|
var vmOption = template.find("#add_vm_to_lb_row #vm_select option:selected");
|
|
var vmId = vmOption.val();
|
|
var vmName = vmOption.data("vmName");
|
|
var vmPrivateIp = vmOption.data("vmPrivateIp");
|
|
if(vmId == null || vmId.length == 0)
|
|
return;
|
|
var loading = template.find("#adding_loading").show();
|
|
var rowContainer = template.find("#adding_row_container").hide();
|
|
|
|
$.ajax({
|
|
data: createURL("command=assignToLoadBalancerRule&id="+loadBalancerId+"&virtualmachineid="+vmId+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var lbInstanceJSON = json.assigntoloadbalancerruleresponse;
|
|
var timerKey = "lbInstanceNew"+lbInstanceJSON.jobid;
|
|
$("body").everyTime(
|
|
5000,
|
|
timerKey,
|
|
function() {
|
|
$.ajax({
|
|
data: createURL("command=queryAsyncJobResult&jobId="+lbInstanceJSON.jobid+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var result = json.queryasyncjobresultresponse;
|
|
if (result.jobstatus == 0) {
|
|
return; //Job has not completed
|
|
} else {
|
|
$("body").stopTime(timerKey);
|
|
if (result.jobstatus == 1) { // Succeeded
|
|
var lbVmTemplate = $("#load_balancer_vm_template").clone();
|
|
var obj = {"loadBalancerId": loadBalancerId, "vmId": vmId, "vmName": vmName, "vmPrivateIp": vmPrivateIp};
|
|
lbVmObjToTemplate(obj, lbVmTemplate);
|
|
template.find("#vm_subgrid").append(lbVmTemplate.show());
|
|
refreshLbVmSelect(template, loadBalancerId);
|
|
loading.hide();
|
|
rowContainer.show();
|
|
} else if (result.jobstatus == 2) { // Failed
|
|
$("#dialog_error").html("<p style='color:red'><b>Operation error:</b></p><br/><p style='color:red'>"+ sanitizeXSS(result.jobresult)+"</p>").dialog("open");
|
|
loading.hide();
|
|
rowContainer.show();
|
|
}
|
|
}
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
handleError(XMLHttpResponse);
|
|
$("body").stopTime(timerKey);
|
|
loading.hide();
|
|
rowContainer.show();
|
|
}
|
|
});
|
|
},
|
|
0
|
|
);
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
handleError(XMLHttpResponse);
|
|
loading.hide();
|
|
rowContainer.show();
|
|
}
|
|
});
|
|
return false;
|
|
});
|
|
}
|
|
|
|
function lbVmObjToTemplate(obj, template) {
|
|
template.find("#vm_name").text(obj.vmName);
|
|
template.find("#vm_private_ip").text(obj.vmPrivateIp);
|
|
template.find("#delete_link").bind("click", function(event){
|
|
var loading = template.find("#deleting_loading").show();
|
|
var rowContainer = template.find("#deleting_row_container").hide();
|
|
|
|
$.ajax({
|
|
data: createURL("command=removeFromLoadBalancerRule&id="+obj.loadBalancerId+"&virtualmachineid="+obj.vmId+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var lbJSON = json.removefromloadbalancerruleresponse;
|
|
var timerKey = "removeVmFromLb"+obj.vmId;
|
|
$("body").everyTime(
|
|
5000,
|
|
timerKey,
|
|
function() {
|
|
$.ajax({
|
|
data: createURL("command=queryAsyncJobResult&jobId="+lbJSON.jobid+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var result = json.queryasyncjobresultresponse;
|
|
if (result.jobstatus == 0) {
|
|
return; //Job has not completed
|
|
} else {
|
|
$("body").stopTime(timerKey);
|
|
if (result.jobstatus == 1) { // Succeeded
|
|
refreshLbVmSelect($("#loadBalancer_" + obj.loadBalancerId), obj.loadBalancerId);
|
|
template.fadeOut("slow", function(event) {
|
|
$(this).remove();
|
|
});
|
|
} else if (result.jobstatus == 2) { // Failed
|
|
$("#dialog_error").html("<p style='color:red'>We were unable to remove the Virtual Instance: "+vmName + " from your load balancer policy. Please try again.").dialog("open");
|
|
loading.hide();
|
|
rowContainer.show();
|
|
}
|
|
}
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
$("body").stopTime(timerKey);
|
|
handleError(XMLHttpResponse);
|
|
loading.hide();
|
|
rowContainer.show();
|
|
}
|
|
});
|
|
},
|
|
0
|
|
);
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
handleError(XMLHttpResponse);
|
|
loading.hide();
|
|
rowContainer.show();
|
|
}
|
|
});
|
|
return false;
|
|
});
|
|
}
|
|
|
|
function refreshLbVmSelect(template, loadBalancerId) {
|
|
var vmSelect = template.find("#add_vm_to_lb_row #vm_select");
|
|
// Load the select box with the VMs that haven't been applied a LB rule to.
|
|
$.ajax({
|
|
cache: false,
|
|
data: createURL("command=listLoadBalancerRuleInstances&id="+loadBalancerId+"&applied=false&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var instances = json.listloadbalancerruleinstancesresponse.loadbalancerruleinstance;
|
|
vmSelect.empty();
|
|
if (instances != null && instances.length > 0) {
|
|
for (var i = 0; i < instances.length; i++) {
|
|
var vmName = getVmName(instances[i].name, instances[i].displayname);
|
|
html = $("<option value='" + instances[i].id + "'>" + vmName + "</option>")
|
|
html.data("vmPrivateIp", instances[i].privateip).data("vmName", vmName);
|
|
vmSelect.append(html);
|
|
}
|
|
} else {
|
|
vmSelect.append("<option value=''>None Available</option>");
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
createLoadBalancerRow.find("#add_link").bind("click", function(event){
|
|
// validate values
|
|
var isValid = true;
|
|
isValid &= validateString("Name", createLoadBalancerRow.find("#name"), createLoadBalancerRow.find("#name_errormsg"));
|
|
isValid &= validateNumber("Public Port", createLoadBalancerRow.find("#public_port"), createLoadBalancerRow.find("#public_port_errormsg"), 1, 65535);
|
|
isValid &= validateNumber("Private Port", createLoadBalancerRow.find("#private_port"), createLoadBalancerRow.find("#private_port_errormsg"), 1, 65535);
|
|
if (!isValid) return;
|
|
|
|
var template = $("#load_balancer_template").clone();
|
|
loadBalancerGrid.append(template.show());
|
|
|
|
var loadingImg = template.find(".adding_loading");
|
|
var rowContainer = template.find("#row_container");
|
|
loadingImg.find(".adding_text").text("Adding....");
|
|
loadingImg.show();
|
|
rowContainer.hide();
|
|
|
|
var ipAddress = $(this).data("ip");
|
|
var name = createLoadBalancerRow.find("#name").val();
|
|
var publicPort = createLoadBalancerRow.find("#public_port").val();
|
|
var privatePort = createLoadBalancerRow.find("#private_port").val();
|
|
var algorithm = createLoadBalancerRow.find("#algorithm_select").val();
|
|
|
|
var array1 = [];
|
|
array1.push("&publicip="+ipAddress);
|
|
array1.push("&name="+name);
|
|
array1.push("&publicport="+publicPort);
|
|
array1.push("&privateport="+privatePort);
|
|
array1.push("&algorithm="+algorithm);
|
|
|
|
$.ajax({
|
|
data: createURL("command=createLoadBalancerRule&response=json"+array1.join("")),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var items = json.createloadbalancerruleresponse.loadbalancerrule;
|
|
loadBalancerJsonToTemplate(items[0],template);
|
|
loadingImg.hide();
|
|
rowContainer.show();
|
|
refreshCreateLoadBalancerRow();
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
handleError(XMLHttpResponse);
|
|
template.slideUp("slow", function() {
|
|
$(this).remove();
|
|
});
|
|
}
|
|
});
|
|
|
|
return false;
|
|
});
|
|
//*** Load Balancer (begin) ***
|
|
|
|
|
|
$("#submenu_network").bind("click", function(event) {
|
|
currentSubMenu.removeClass().addClass("submenu_links_off");
|
|
currentSubMenu = $(this);
|
|
currentSubMenu.removeClass().addClass("submenu_links_on");
|
|
|
|
var submenuContent = $("#submenu_content_network").show();
|
|
$("#submenu_content_network_groups").hide();
|
|
|
|
if(isAdmin() || isDomainAdmin()) {
|
|
submenuContent.find(".select_directipbg_admin").show();
|
|
submenuContent.find(".select_directipbg_user").hide();
|
|
populateDomainDropdown();
|
|
} else {
|
|
submenuContent.find(".select_directipbg_admin").hide();
|
|
submenuContent.find(".select_directipbg_user").show();
|
|
RefreshIpDropDown();
|
|
}
|
|
|
|
return false;
|
|
});
|
|
|
|
var ipMid = $("#submenu_content_network #ip_descriptionbox_mid");
|
|
|
|
$("#submenu_content_network #show_last_search").bind("click", function(event){
|
|
$("#submenu_content_network").find("#show_last_search").hide();
|
|
hidePfLbArea();
|
|
var ips = ipListContainer.children();
|
|
for (var i = 0; i < ips.length; i++) {
|
|
var ip = $(ips[i]);
|
|
ip.show();
|
|
|
|
if(isIpManageable(ip.data("domainid"), ip.data("account")) == true)
|
|
ip.find("#ip_manage").show();
|
|
}
|
|
return false;
|
|
});
|
|
|
|
ipListContainer.bind("click", function(event) {
|
|
var target = $(event.target);
|
|
var id = target.attr("id");
|
|
var targetIp = target.data("ip");
|
|
var domainid = target.data("domainid");
|
|
var account = target.data("account");
|
|
|
|
switch (id) {
|
|
case "ip_manage" :
|
|
var ips = ipListContainer.children();
|
|
var ipSelected = null;
|
|
var first = false;
|
|
ipMid.css("height", ipMid.height());
|
|
for (var i = 0; i < ips.length; i++) {
|
|
var ip = $(ips[i]);
|
|
if (ip.data("ip") != targetIp) {
|
|
ip.fadeOut("fast");
|
|
} else {
|
|
if (i == 0) first = true;
|
|
var ipPosition = ip.position();
|
|
ipSelected = ip.css("position", "absolute").css("top", ipPosition.top);
|
|
}
|
|
}
|
|
var animationSpeed = 2000;
|
|
if (first) {
|
|
animationSpeed = 500;
|
|
}
|
|
ipSelected.animate({top: '24px'}, animationSpeed, function() {
|
|
$(this).css("position", "static").css("float", "left");
|
|
ipMid.css("height", "auto");
|
|
target.hide();
|
|
$("#submenu_content_network").find("#show_last_search").show();
|
|
showPfLbArea(targetIp, domainid, account);
|
|
});
|
|
break;
|
|
case "ip_release" :
|
|
$("#dialog_confirmation")
|
|
.html("<p>Please confirm you want to release the IP address: <b>"+targetIp+"</b> from your account.</p>")
|
|
.dialog('option', 'buttons', {
|
|
"Confirm": function() {
|
|
$(this).dialog("close");
|
|
|
|
$("#submenu_content_network #overlay_white").show();
|
|
$("#submenu_content_network #loading_gridtable").find("#message").text("Releasing IP....");
|
|
$("#submenu_content_network #loading_gridtable").show();
|
|
|
|
$.ajax({
|
|
data: createURL("command=disassociateIpAddress&ipAddress="+targetIp+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
$("#dialog_info").html("<p>Your IP address <b>" + targetIp + "</b> has been released</p>").dialog("open");
|
|
$("#submenu_content_network #overlay_white").hide();
|
|
$("#submenu_content_network #loading_gridtable").hide();
|
|
if (isUser()) {
|
|
RefreshIpDropDown();
|
|
} else {
|
|
// Execute the codepath for showing last search result.
|
|
var ips = ipListContainer.children();
|
|
if(ips != null && ips.length > 0) {
|
|
for (var i = 0; i < ips.length; i++) {
|
|
var ip = $(ips[i]);
|
|
if (ip.data("ip") == targetIp) {
|
|
ip.fadeOut("fast", function(){
|
|
$(this).remove();
|
|
|
|
if(ipPanel.data("ip_address") == targetIp)
|
|
ipPanel.removeData("ip_address");
|
|
|
|
if(ipListContainer.children().length == 0) {
|
|
$("#submenu_content_network #show_last_search").hide();
|
|
} else {
|
|
$("#submenu_content_network #show_last_search").show();
|
|
$("#submenu_content_network #show_last_search").click();
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
handleError(XMLHttpResponse);
|
|
$("#submenu_content_network #overlay_white").hide();
|
|
$("#submenu_content_network #loading_gridtable").hide();
|
|
}
|
|
});
|
|
},
|
|
"Cancel": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
}).dialog("open");
|
|
break;
|
|
default :
|
|
break;
|
|
}
|
|
return false;
|
|
});
|
|
|
|
//*** Network (end) ******************************************************************************
|
|
|
|
//*** Network Group (begin) **********************************************************************
|
|
function networkGroupJSONToTemplate(json, template) {
|
|
(index++ % 2 == 0)? template.addClass("smallrow_even"): template.addClass("smallrow_odd");
|
|
template.attr("id", "networkGroup_"+json.id).data("networkGroupId", json.id).data("domainId", json.domainid).data("account",json.account).data("networkGroupName", sanitizeXSS(json.name));
|
|
template.find("#delete_link, #ingress_rule_link").data("parent_template_id", "networkGroup_"+json.id);
|
|
|
|
template.find("#id").text(json.id);
|
|
template.find("#name").text(json.name);
|
|
template.find("#description").text(json.description);
|
|
template.find("#domain").text(json.domain);
|
|
template.find("#account").text(json.account);
|
|
|
|
// disable delete link from the default group
|
|
if(json.name == 'default' && json.description == 'Default Network Group') {
|
|
template.find("#delete_link").hide();
|
|
} else {
|
|
if(json.ingressrule == null || json.ingressrule.length == 0)
|
|
template.find("#delete_link").show();
|
|
else
|
|
template.find("#delete_link").hide();
|
|
}
|
|
}
|
|
|
|
function listNetworkGroups() {
|
|
var submenuContent = $("#submenu_content_network_groups");
|
|
|
|
var commandString;
|
|
var advanced = submenuContent.find("#search_button").data("advanced");
|
|
if (advanced != null && advanced) {
|
|
var name = submenuContent.find("#advanced_search #adv_search_name").val();
|
|
var virtualMachineId = submenuContent.find("#advanced_search #adv_search_vm").val();
|
|
var domainId = submenuContent.find("#advanced_search #adv_search_domain").val();
|
|
var account = submenuContent.find("#advanced_search #adv_search_account").val();
|
|
var moreCriteria = [];
|
|
if (name!=null && trim(name).length > 0)
|
|
moreCriteria.push("&networkgroupname="+encodeURIComponent(trim(name)));
|
|
if (virtualMachineId!=null && virtualMachineId.length > 0)
|
|
moreCriteria.push("&virtualmachineid="+encodeURIComponent(virtualMachineId));
|
|
if (domainId!=null && domainId.length > 0)
|
|
moreCriteria.push("&domainid="+domainId);
|
|
if (account!=null && account.length > 0)
|
|
moreCriteria.push("&account="+account);
|
|
commandString = "command=listNetworkGroups&page=" + currentPage + moreCriteria.join("") + "&response=json";
|
|
} else {
|
|
var moreCriteria = [];
|
|
if(domainId!=null)
|
|
moreCriteria.push("&domainid="+domainId);
|
|
var searchInput = submenuContent.find("#search_input").val();
|
|
if (searchInput != null && searchInput.length > 0)
|
|
commandString = "command=listNetworkGroups&page=" + currentPage + moreCriteria.join("") + "&keyword=" + searchInput + "&response=json"
|
|
else
|
|
commandString = "command=listNetworkGroups&page=" + currentPage + moreCriteria.join("") + "&response=json";
|
|
}
|
|
|
|
//listItems(submenuContent, commandString, jsonResponse1, jsonResponse2, template, fnJSONToTemplate);
|
|
listItems(submenuContent, commandString, "listnetworkgroupsresponse", "networkgroup", $("#network_group_template"), networkGroupJSONToTemplate);
|
|
}
|
|
|
|
submenuContentEventBinder($("#submenu_content_network_groups"), listNetworkGroups);
|
|
|
|
$("#submenu_network_groups").bind("click", function(event) {
|
|
currentSubMenu.removeClass().addClass("submenu_links_off");
|
|
currentSubMenu = $(this);
|
|
currentSubMenu.removeClass().addClass("submenu_links_on");
|
|
|
|
var submenuContent = $("#submenu_content_network_groups").show();
|
|
$("#submenu_content_network").hide();
|
|
|
|
if (isAdmin())
|
|
submenuContent.find("#adv_search_domain_li, #adv_search_account_li").show();
|
|
|
|
currentPage = 1;
|
|
listNetworkGroups();
|
|
return false;
|
|
});
|
|
|
|
$("#submenu_content_network_groups").find("#grid_content").bind("click", function(event) {
|
|
var link = $(event.target);
|
|
var parentTemplateId = link.data("parent_template_id");
|
|
var template = $(("#"+parentTemplateId));
|
|
var networkGroupId = template.data("networkGroupId");
|
|
var domainId = template.data("domainId");
|
|
var account = template.data("account");
|
|
var networkGroupId = template.data("networkGroupId");
|
|
var networkGroupName = template.data("networkGroupName");
|
|
|
|
var submenuContent = $("#submenu_content_network_groups");
|
|
switch(event.target.id) {
|
|
case "delete_link":
|
|
if(template.find("#ingress_rule_panel").css("display")=="block") //if network group's ingress rule grid is poped down, close it.
|
|
template.find("#ingress_rule_grid").click();
|
|
var loadingImg = template.find(".adding_loading");
|
|
var rowContainer = template.find("#row_container");
|
|
loadingImg.find(".adding_text").text("Deleting....");
|
|
loadingImg.show();
|
|
rowContainer.hide();
|
|
|
|
var array1 = [];
|
|
array1.push("&domainid="+domainId);
|
|
array1.push("&account="+account);
|
|
array1.push("&name="+networkGroupName);
|
|
|
|
$.ajax({
|
|
data: createURL("command=deleteNetworkGroup&response=json" + array1.join("")),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
template.slideUp("slow", function() { $(this).remove() });
|
|
changeGridRowsTotal(submenuContent.find("#grid_rows_total"), -1);
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
handleError(XMLHttpResponse);
|
|
loadingImg.hide();
|
|
rowContainer.show();
|
|
}
|
|
});
|
|
break;
|
|
|
|
case "ingress_rule_link":
|
|
var expanded = link.data("expanded");
|
|
if (expanded == null || expanded == false) {
|
|
$.ajax({
|
|
data: createURL("command=listNetworkGroups"+"&domainid="+domainId+"&account="+account+"&networkgroupname="+networkGroupName+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var items = json.listnetworkgroupsresponse.networkgroup[0].ingressrule;
|
|
var grid = template.find("#ingress_rule_grid");
|
|
if(grid.find("#network_group_ingress_rule_add_row").length==0) {
|
|
var row = $("#network_group_ingress_rule_add_row").clone().show();
|
|
row.find("#network_group_ingress_rule_add_link").data("parent_template_id", parentTemplateId);
|
|
grid.append(row);
|
|
}
|
|
if (items != null && items.length > 0) {
|
|
grid.empty();
|
|
|
|
//need to append "add ingress rule" row again after emptying grid.
|
|
var row = $("#network_group_ingress_rule_add_row").clone().show();
|
|
row.find("#network_group_ingress_rule_add_link").data("parent_template_id", parentTemplateId);
|
|
grid.append(row);
|
|
|
|
for (var i = 0; i < items.length; i++) {
|
|
var newTemplate = $("#network_group_ingress_rule_template").clone(true);
|
|
ingressRuleJSONToTemplate(items[i], newTemplate).data("parentNetworkGroupId", networkGroupId).data("parentNetworkGroupDomainId", domainId).data("parentNetworkGroupAccount", account).data("parentNetworkGroupName",networkGroupName);
|
|
grid.append(newTemplate.show());
|
|
}
|
|
}
|
|
link.removeClass().addClass("vm_botactionslinks_up");
|
|
template.find("#ingress_rule_panel").slideDown("slow");
|
|
link.data("expanded", true);
|
|
}
|
|
});
|
|
} else {
|
|
link.removeClass().addClass("vm_botactionslinks_down");
|
|
template.find("#ingress_rule_panel").slideUp("slow");
|
|
link.data("expanded", false);
|
|
}
|
|
break;
|
|
|
|
case "network_group_ingress_rule_add_link":
|
|
dialogAddIngressRule.find("#start_port").val("");
|
|
cleanErrMsg(dialogAddIngressRule.find("#start_port"), dialogAddIngressRule.find("#start_port_errormsg"));
|
|
|
|
dialogAddIngressRule.find("#end_port").val("");
|
|
cleanErrMsg(dialogAddIngressRule.find("#end_port"), dialogAddIngressRule.find("#end_port_errormsg"));
|
|
|
|
dialogAddIngressRule.find("#protocol").val("TCP");
|
|
|
|
dialogAddIngressRule.find("#cidr_container").empty();
|
|
dialogAddIngressRule.find("#add_more_cidr").click();
|
|
|
|
dialogAddIngressRule.find("#account_networkgroup_container").empty();
|
|
dialogAddIngressRule.find("#add_more_account_networkgroup").click();
|
|
|
|
$("#dialog_add_ingress_rule")
|
|
.dialog('option', 'buttons', {
|
|
"Add": function() {
|
|
var thisDialog = $(this);
|
|
|
|
var moreCriteria = [];
|
|
moreCriteria.push("&domainid="+domainId);
|
|
moreCriteria.push("&account="+account);
|
|
moreCriteria.push("&networkgroupname="+networkGroupName);
|
|
|
|
var protocol = thisDialog.find("#protocol").val();
|
|
if (protocol!=null && protocol.length > 0)
|
|
moreCriteria.push("&protocol="+encodeURIComponent(protocol));
|
|
|
|
// validate values (begin)
|
|
var isValid = true;
|
|
if(protocol == "ICMP") {
|
|
isValid &= validateNumber("Type", thisDialog.find("#icmp_type"), thisDialog.find("#icmp_type_errormsg"), -1, 40, false); //required
|
|
isValid &= validateNumber("Code", thisDialog.find("#icmp_code"), thisDialog.find("#icmp_code_errormsg"), -1 , 15, false); //required
|
|
}
|
|
else { //TCP, UDP
|
|
isValid &= validateNumber("Start Port", thisDialog.find("#start_port"), thisDialog.find("#start_port_errormsg"), 1, 65535, false); //required
|
|
isValid &= validateNumber("End Port", thisDialog.find("#end_port"), thisDialog.find("#end_port_errormsg"), 1, 65535, false); //required
|
|
}
|
|
|
|
if(thisDialog.find("input[name='ingress_rule_type']:checked").val() == "cidr") {
|
|
isValid &= validateCIDR("CIDR", thisDialog.find(".cidr_template").eq(0).find("#cidr"), thisDialog.find(".cidr_template").eq(0).find("#cidr_errormsg"), false); //required
|
|
for(var i=1; i<thisDialog.find(".cidr_template").length; i++)
|
|
isValid &= validateCIDR("CIDR", thisDialog.find(".cidr_template").eq(i).find("#cidr"), thisDialog.find(".cidr_template").eq(0).find("#cidr_errormsg"), true); //optional
|
|
}
|
|
else if(thisDialog.find("input[name='ingress_rule_type']:checked").val() == "account_networkgroup") {
|
|
isValid &= validateString("Account", thisDialog.find(".account_networkgroup_template").eq(0).find("#account"), thisDialog.find(".account_networkgroup_template").eq(0).find("#account_networkgroup_template_errormsg"), false); //required
|
|
isValid &= validateString("Network Group", thisDialog.find(".account_networkgroup_template").eq(0).find("#networkgroup"), thisDialog.find(".account_networkgroup_template").eq(0).find("#account_networkgroup_template_errormsg"), false); //required
|
|
for(var i=1; i<thisDialog.find(".account_networkgroup_template").length; i++) {
|
|
isValid &= validateString("Account", thisDialog.find(".account_networkgroup_template").eq(i).find("#account"), thisDialog.find(".account_networkgroup_template").eq(0).find("#account_networkgroup_template_errormsg"), true); //optional
|
|
isValid &= validateString("Network Group", thisDialog.find(".account_networkgroup_template").eq(i).find("#networkgroup"), thisDialog.find(".account_networkgroup_template").eq(0).find("#account_networkgroup_template_errormsg"), true); //optional
|
|
}
|
|
}
|
|
if (!isValid) return;
|
|
// validate values (end)
|
|
|
|
if(protocol == "ICMP") {
|
|
var icmpType = thisDialog.find("#icmp_type").val();
|
|
if (icmpType!=null && icmpType.length > 0)
|
|
moreCriteria.push("&icmptype="+encodeURIComponent(icmpType));
|
|
var icmpCode = thisDialog.find("#icmp_code").val();
|
|
if (icmpCode!=null && icmpCode.length > 0)
|
|
moreCriteria.push("&icmpcode="+encodeURIComponent(icmpCode));
|
|
}
|
|
else { //TCP, UDP
|
|
var startPort = thisDialog.find("#start_port").val();
|
|
if (startPort!=null && startPort.length > 0)
|
|
moreCriteria.push("&startport="+encodeURIComponent(startPort));
|
|
var endPort = thisDialog.find("#end_port").val();
|
|
if (endPort!=null && endPort.length > 0)
|
|
moreCriteria.push("&endport="+encodeURIComponent(endPort));
|
|
}
|
|
|
|
if(dialogAddIngressRule.find("input[name='ingress_rule_type']:checked").val() == "cidr") {
|
|
var array1 = [];
|
|
var cidrElementArray = dialogAddIngressRule.find(".cidr_template").find("#cidr");
|
|
for(var i=0; i<cidrElementArray.length; i++) {
|
|
if(cidrElementArray[i].value.length > 0)
|
|
array1.push(cidrElementArray[i].value);
|
|
}
|
|
if(array1.length > 0)
|
|
moreCriteria.push("&cidrlist="+encodeURIComponent(array1.join(",")));
|
|
}
|
|
else if(dialogAddIngressRule.find("input[name='ingress_rule_type']:checked").val() == "account_networkgroup") {
|
|
var accountElementArray = dialogAddIngressRule.find(".account_networkgroup_template").find("#account");
|
|
var networkgroupElementArray = dialogAddIngressRule.find(".account_networkgroup_template").find("#networkgroup");
|
|
for(var i=0; i<accountElementArray.length; i++) {
|
|
if(networkgroupElementArray[i].value.length > 0 && accountElementArray[i].value.length > 0)
|
|
moreCriteria.push("&usernetworkgrouplist["+i+"].account="+accountElementArray[i].value+"&usernetworkgrouplist["+i+"].group="+networkgroupElementArray[i].value);
|
|
}
|
|
}
|
|
|
|
thisDialog.dialog("close");
|
|
|
|
var ingressRuleTemplate = $("#network_group_ingress_rule_template").clone(true);
|
|
var loadingImg = ingressRuleTemplate.find(".adding_loading");
|
|
var rowContainer = ingressRuleTemplate.find("#row_container");
|
|
loadingImg.find(".adding_text").text("Adding....");
|
|
loadingImg.show();
|
|
rowContainer.hide();
|
|
template.find("#ingress_rule_grid").append(ingressRuleTemplate.fadeIn("slow"));
|
|
template.find("#ingress_rule_grid").find("#no_ingress_rule").hide();
|
|
|
|
$.ajax({
|
|
data: createURL("command=authorizeNetworkGroupIngress"+moreCriteria.join("")+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var jobId = json.authorizenetworkgroupingress.jobid;
|
|
var timerKey = "ingressRuleJob_"+jobId;
|
|
ingressRuleTemplate.attr("id","ingressRule_"+jobId); //temporary id until API call returns real id
|
|
$("body").everyTime(
|
|
5000,
|
|
timerKey,
|
|
function() {
|
|
$.ajax({
|
|
data: createURL("command=queryAsyncJobResult&jobId="+jobId+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var result = json.queryasyncjobresultresponse;
|
|
if (result.jobstatus == 0) {
|
|
return; //Job has not completed
|
|
} else {
|
|
$("body").stopTime(timerKey);
|
|
if (result.jobstatus == 1) { // Succeeded
|
|
var items = result.networkgroup[0].ingressrule;
|
|
ingressRuleJSONToTemplate(items[0], ingressRuleTemplate).data("parentNetworkGroupId", networkGroupId).data("parentNetworkGroupDomainId", domainId).data("parentNetworkGroupAccount", account).data("parentNetworkGroupName",networkGroupName);
|
|
if(items.length > 1) {
|
|
for(var i=1; i<items.length; i++) {
|
|
var ingressRuleTemplate2 = $("#network_group_ingress_rule_template").clone(true);
|
|
ingressRuleJSONToTemplate(items[i], ingressRuleTemplate2).data("parentNetworkGroupId", networkGroupId).data("parentNetworkGroupDomainId", domainId).data("parentNetworkGroupAccount", account).data("parentNetworkGroupName",networkGroupName);
|
|
template.find("#ingress_rule_grid").append(ingressRuleTemplate2.fadeIn("slow"));
|
|
}
|
|
}
|
|
loadingImg.hide();
|
|
rowContainer.show();
|
|
//hide delete link of network group. (network group is not allowed to delete if it is not empty. i.e. having ingress rule(s)
|
|
template.find("#delete_link").hide();
|
|
} else if (result.jobstatus == 2) { // Failed
|
|
$("#dialog_alert").text("Unable to add ingress rule due to the error: " + result.jobresult).dialog("open");
|
|
ingressRuleTemplate.slideUp("slow", function() {
|
|
$(this).remove();
|
|
});
|
|
}
|
|
}
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
$("body").stopTime(timerKey);
|
|
handleError(XMLHttpResponse);
|
|
ingressRuleTemplate.slideUp("slow", function() {
|
|
$(this).remove();
|
|
});
|
|
}
|
|
});
|
|
},
|
|
0
|
|
);
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
handleError(XMLHttpResponse);
|
|
ingressRuleTemplate.slideUp("slow", function() {
|
|
$(this).remove();
|
|
});
|
|
}
|
|
});
|
|
},
|
|
"Cancel": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
}).dialog("open");
|
|
break;
|
|
}
|
|
|
|
return false;
|
|
});
|
|
|
|
activateDialog($("#dialog_add_network_groups").dialog({
|
|
autoOpen: false,
|
|
modal: true,
|
|
zIndex: 2000
|
|
}));
|
|
|
|
activateDialog($("#dialog_add_ingress_rule").dialog({
|
|
width: 400,
|
|
autoOpen: false,
|
|
modal: true,
|
|
zIndex: 2000
|
|
}));
|
|
|
|
function ingressRuleJSONToTemplate(json, template) {
|
|
(index++ % 2 == 0)? template.addClass("smallrow_even"): template.addClass("smallrow_odd");
|
|
template.attr("id", "ingressRule_"+json.id).data("ingressRuleId", json.ruleid).data("protocol", json.protocol);
|
|
template.data("startPort", json.startport);
|
|
template.data("endPort", json.endport);
|
|
template.data("icmpType", json.icmptype);
|
|
template.data("icmpCode", json.icmpcode);
|
|
template.find("#id").text(json.ruleid);
|
|
template.find("#protocol").text(json.protocol);
|
|
|
|
var endpoint;
|
|
if(json.protocol == "icmp")
|
|
endpoint = "ICMP Type=" + ((json.icmptype!=null)?json.icmptype:"") + ", code=" + ((json.icmpcode!=null)?json.icmpcode:"");
|
|
else //tcp, udp
|
|
endpoint = "Port Range " + ((json.startport!=null)?json.startport:"") + "-" + ((json.endport!=null)?json.endport:"");
|
|
template.find("#endpoint").text(endpoint);
|
|
template.data("startPort", json.startport);
|
|
template.data("endPort", json.endport);
|
|
template.data("icmpType", json.icmptype);
|
|
template.data("icmpCode", json.icmpcode);
|
|
|
|
var cidrOrGroup;
|
|
if(json.cidr != null && json.cidr.length > 0)
|
|
cidrOrGroup = json.cidr;
|
|
else if (json.account != null && json.account.length > 0 && json.networkgroupname != null && json.networkgroupname.length > 0)
|
|
cidrOrGroup = json.account + "/" + json.networkgroupname;
|
|
template.find("#cidr").text(cidrOrGroup);
|
|
template.data("cidr", json.cidr);
|
|
template.data("account", json.account);
|
|
template.data("networkGroupName", json.networkgroupname);
|
|
|
|
return template;
|
|
}
|
|
|
|
$("#network_group_ingress_rule_template").bind("click", function(event) {
|
|
var template = $(this);
|
|
|
|
var parentNetworkGroupId = template.data("parentNetworkGroupId");
|
|
var parentNeteworkGroupTemplate = $("#networkGroup_" + parentNetworkGroupId);
|
|
|
|
var moreCriteria = [];
|
|
|
|
var parentNetworkGroupDomainId = template.data("parentNetworkGroupDomainId");
|
|
moreCriteria.push("&domainid="+encodeURIComponent(parentNetworkGroupDomainId));
|
|
|
|
var parentNetworkGroupAccount = template.data("parentNetworkGroupAccount");
|
|
moreCriteria.push("&account="+encodeURIComponent(parentNetworkGroupAccount));
|
|
|
|
var parentNetworkGroupName = template.data("parentNetworkGroupName");
|
|
moreCriteria.push("&networkgroupname="+encodeURIComponent(parentNetworkGroupName));
|
|
|
|
var protocol = template.data("protocol");
|
|
moreCriteria.push("&protocol="+encodeURIComponent(protocol));
|
|
|
|
if(protocol == "icmp") {
|
|
var icmpType = template.data("icmpType");
|
|
if(icmpType != null && icmpType.length > 0)
|
|
moreCriteria.push("&icmptype="+encodeURIComponent(icmpType));
|
|
|
|
var icmpCode = template.data("icmpCode");
|
|
if(icmpCode != null && icmpCode.length > 0)
|
|
moreCriteria.push("&icmpcode="+encodeURIComponent(icmpCode));
|
|
}
|
|
else { //TCP, UDP
|
|
var startPort = template.data("startPort");
|
|
if(startPort != null && startPort.length > 0)
|
|
moreCriteria.push("&startport="+encodeURIComponent(startPort));
|
|
|
|
var endPort = template.data("endPort");
|
|
if(endPort != null && endPort.length > 0)
|
|
moreCriteria.push("&endport="+encodeURIComponent(endPort));
|
|
}
|
|
|
|
var cidr = template.data("cidr")
|
|
if(cidr != null && cidr.length > 0)
|
|
moreCriteria.push("&cidrlist="+encodeURIComponent(cidr));
|
|
|
|
var account = template.data("account");
|
|
var networkGroupName = template.data("networkGroupName");
|
|
if((account != null && account.length > 0) && (networkGroupName != null && networkGroupName.length > 0))
|
|
moreCriteria.push("&usernetworkgrouplist[0].account="+account + "&usernetworkgrouplist[0].group="+networkGroupName);
|
|
|
|
var link = $(event.target);
|
|
switch(event.target.id) {
|
|
case "ingress_rule_delete_link":
|
|
var loadingImg = template.find(".adding_loading");
|
|
var rowContainer = template.find("#row_container");
|
|
loadingImg.find(".adding_text").text("Deleting....");
|
|
loadingImg.show();
|
|
rowContainer.hide();
|
|
$.ajax({
|
|
data: createURL("command=revokeNetworkGroupIngress"+moreCriteria.join("")+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var jobId = json.revokenetworkgroupingress.jobid;
|
|
var timerKey = "revokeNetworkGroupIngressJob"+jobId;
|
|
$("body").everyTime(2000, timerKey, function() {
|
|
$.ajax({
|
|
data: createURL("command=queryAsyncJobResult&jobId="+jobId+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var result = json.queryasyncjobresultresponse;
|
|
if (result.jobstatus == 0) {
|
|
return; //Job has not completed
|
|
} else {
|
|
$("body").stopTime(timerKey);
|
|
if (result.jobstatus == 1) { //success
|
|
template.slideUp("slow", function() {
|
|
$(this).remove();
|
|
//After deleting ingress rule successfully, check if this network group has any ingress rule(s) left. Show delete link of network group if no ingress rule(s) are left.
|
|
$.ajax({
|
|
data: createURL("command=listNetworkGroups&response=json&domainid="+parentNetworkGroupDomainId+"&account="+parentNetworkGroupAccount+"&networkgroupname="+parentNetworkGroupName),
|
|
dataType: "json",
|
|
success: function(json){
|
|
networkGroupJSONToTemplate(json.listnetworkgroupsresponse.networkgroup[0], parentNeteworkGroupTemplate);
|
|
}
|
|
});
|
|
});
|
|
} else if (result.jobstatus == 2) {
|
|
$("#dialog_alert").html("<p>" + sanitizeXSS(result.jobresult) + "</p>").dialog("open");
|
|
loadingImg.hide();
|
|
rowContainer.show();
|
|
}
|
|
}
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
$("body").stopTime(timerKey);
|
|
handleError(XMLHttpResponse);
|
|
loadingImg.hide();
|
|
rowContainer.show();
|
|
}
|
|
});
|
|
}, 0);
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
handleError(XMLHttpResponse);
|
|
loadingImg.hide();
|
|
rowContainer.show();
|
|
}
|
|
});
|
|
break;
|
|
}
|
|
return false;
|
|
});
|
|
|
|
//*** event handler of dialog_add_ingress_rule (begin) ***
|
|
var dialogAddIngressRule = $("#dialog_add_ingress_rule");
|
|
|
|
dialogAddIngressRule.find("#add_more_cidr").bind("click", function(event){
|
|
dialogAddIngressRule.find("#cidr_container").append($("#cidr_template").clone().show());
|
|
return false;
|
|
});
|
|
dialogAddIngressRule.find("#add_more_cidr").click();
|
|
|
|
|
|
dialogAddIngressRule.find("#add_more_account_networkgroup").bind("click", function(event){
|
|
dialogAddIngressRule.find("#account_networkgroup_container").append($("#account_networkgroup_template").clone().show());
|
|
return false;
|
|
});
|
|
dialogAddIngressRule.find("#add_more_account_networkgroup").click();
|
|
|
|
|
|
dialogAddIngressRule.find("input[name='ingress_rule_type']").change(function(){
|
|
if(dialogAddIngressRule.find("input[name='ingress_rule_type']:checked").val() == "cidr") {
|
|
//enable CIDR
|
|
dialogAddIngressRule.find(".cidr_template, #add_more_cidr").removeAttr("disabled");
|
|
|
|
//disable Account/Network Group, clear up error fields
|
|
dialogAddIngressRule.find(".account_networkgroup_template, #add_more_account_networkgroup").attr("disabled", "disabled");
|
|
cleanErrMsg(dialogAddIngressRule.find(".account_networkgroup_template").find("#account"), dialogAddIngressRule.find(".account_networkgroup_template").find("#account_networkgroup_template_errormsg"));
|
|
cleanErrMsg(dialogAddIngressRule.find(".account_networkgroup_template").find("#networkgroup"), dialogAddIngressRule.find(".account_networkgroup_template").find("#account_networkgroup_template_errormsg"));
|
|
}
|
|
else if(dialogAddIngressRule.find("input[name='ingress_rule_type']:checked").val() == "account_networkgroup") {
|
|
//enable Account/Network Group
|
|
dialogAddIngressRule.find(".account_networkgroup_template, #add_more_account_networkgroup").removeAttr("disabled");
|
|
|
|
//disable CIDR, clear up error fields
|
|
dialogAddIngressRule.find(".cidr_template, #add_more_cidr").attr("disabled", "disabled");
|
|
cleanErrMsg(dialogAddIngressRule.find(".cidr_template").find("#cidr"), dialogAddIngressRule.find(".cidr_template").find("#cidr_errormsg"));
|
|
}
|
|
});
|
|
dialogAddIngressRule.find("input[name='ingress_rule_type']").change();
|
|
|
|
|
|
dialogAddIngressRule.find("#protocol").bind("change", function(event){
|
|
var thisDropDown = $(this);
|
|
if(thisDropDown.val() == "ICMP") {
|
|
dialogAddIngressRule.find("#icmp_type_container, #icmp_code_container").show();
|
|
dialogAddIngressRule.find("#icmp_type, #icmp_code").val("-1");
|
|
|
|
dialogAddIngressRule.find("#start_port_container, #end_port_container").hide();
|
|
dialogAddIngressRule.find("#start_port, #end_port").val("");
|
|
cleanErrMsg(dialogAddIngressRule.find("#start_port"), dialogAddIngressRule.find("#start_port_errormsg"));
|
|
cleanErrMsg(dialogAddIngressRule.find("#end_port"), dialogAddIngressRule.find("#end_port_errormsg"));
|
|
}
|
|
else { //TCP, UDP
|
|
dialogAddIngressRule.find("#start_port_container, #end_port_container").show();
|
|
|
|
dialogAddIngressRule.find("#icmp_type_container, #icmp_code_container").hide();
|
|
dialogAddIngressRule.find("#icmp_type, #icmp_code").val("");
|
|
cleanErrMsg(dialogAddIngressRule.find("#icmp_type"),dialogAddIngressRule.find("#icmp_type_errormsg"));
|
|
cleanErrMsg(dialogAddIngressRule.find("#icmp_code"),dialogAddIngressRule.find("#icmp_code_errormsg"));
|
|
}
|
|
return false;
|
|
});
|
|
dialogAddIngressRule.find("#protocol").change();
|
|
//*** event handler of dialog_add_ingress_rule (end) ***
|
|
|
|
$("#network_groups_action_new").bind("click", function(event){
|
|
$("#dialog_add_network_groups")
|
|
.dialog('option', 'buttons', {
|
|
"Create": function() {
|
|
var thisDialog = $(this);
|
|
|
|
// validate values
|
|
var isValid = true;
|
|
isValid &= validateString("Name", thisDialog.find("#name"), thisDialog.find("#name_errormsg"), false); //required
|
|
isValid &= validateString("Description", thisDialog.find("#description"), thisDialog.find("#description_errormsg"), true); //optional
|
|
if (!isValid) return;
|
|
|
|
var submenuContent = $("#submenu_content_network_groups");
|
|
|
|
var template = $("#network_group_template").clone(true);
|
|
var loadingImg = template.find(".adding_loading");
|
|
var rowContainer = template.find("#row_container");
|
|
loadingImg.find(".adding_text").text("Adding....");
|
|
loadingImg.show();
|
|
rowContainer.hide();
|
|
submenuContent.find("#grid_content").prepend(template.fadeIn("slow"));
|
|
|
|
var name = trim(thisDialog.find("#name").val());
|
|
var desc = trim(thisDialog.find("#description").val());
|
|
|
|
thisDialog.dialog("close");
|
|
|
|
$.ajax({
|
|
data: createURL("command=createNetworkGroup&name="+encodeURIComponent(name)+"&description="+encodeURIComponent(desc)+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var items = json.createnetworkgroupresponse.networkgroup;
|
|
networkGroupJSONToTemplate(items[0], template);
|
|
changeGridRowsTotal(submenuContent.find("#grid_rows_total"), 1);
|
|
loadingImg.hide();
|
|
rowContainer.show();
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
handleError(XMLHttpResponse);
|
|
template.slideUp("slow", function(){ $(this).remove(); } );
|
|
}
|
|
});
|
|
},
|
|
"Cancel": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
}).dialog("open");
|
|
return false;
|
|
});
|
|
|
|
//*** Network Group (end) ************************************************************************
|
|
|
|
|
|
//initialize page
|
|
if(getDirectAttachNetworkGroupsEnabled() != "true")
|
|
$(".submenu_links, #submenu_content_network_groups").hide();
|
|
|
|
var currentSubMenu = $("#submenu_network");
|
|
currentSubMenu.click();
|
|
}
|