mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
1735 lines
75 KiB
JavaScript
1735 lines
75 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 showConfigurationTab() {
|
|
var forceLogout = true; // We force a logout only if the user has first added a POD for the very first time
|
|
var currentSubMenu = $("#submenu_global");
|
|
|
|
activateDialog($("#dialog_edit_global").dialog({
|
|
autoOpen: false,
|
|
modal: true,
|
|
zIndex: 2000
|
|
}));
|
|
|
|
$("#global_template").bind("click", function(event) {
|
|
var template = $(this);
|
|
var link = $(event.target);
|
|
var linkAction = link.attr("id");
|
|
var name = template.data("name");
|
|
switch (linkAction) {
|
|
case "global_action_edit" :
|
|
$("#edit_global_name").text(name);
|
|
$("#edit_global_value").val(template.find("#global_value").text());
|
|
|
|
$("#dialog_edit_global")
|
|
.dialog('option', 'buttons', {
|
|
"Confirm": function() {
|
|
var thisDialog = $(this);
|
|
|
|
// validate values
|
|
var isValid = true;
|
|
isValid &= validateString("Value", thisDialog.find("#edit_global_value"), thisDialog.find("#edit_global_value_errormsg"), true);
|
|
if (!isValid) return;
|
|
|
|
var value = trim(thisDialog.find("#edit_global_value").val());
|
|
|
|
thisDialog.dialog("close");
|
|
$.ajax({
|
|
data: createURL("command=updateConfiguration&name="+todb(name)+"&value="+todb(value)+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
template.find("#global_value").text(value);
|
|
$("#dialog_alert").html("<p><b>PLEASE RESTART YOUR MGMT SERVER!!</b><br/><b>PLEASE RESTART YOUR MGMT SERVER!!</b><br/><br/>You have successfully change a global configuration value. Please <b>RESTART</b> your management server for your new settings to take effect. Refer to the install guide for instructions on how to restart the mgmt server.</p>").dialog("open");
|
|
}
|
|
});
|
|
},
|
|
"Cancel": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
}).dialog("open");
|
|
}
|
|
return false;
|
|
});
|
|
|
|
function globalJSONToTemplate(json, template) {
|
|
template.data("name", fromdb(json.name)).attr("id", "global_"+fromdb(json.name));
|
|
(index++ % 2 == 0)? template.addClass("smallrow_even"): template.addClass("smallrow_odd");
|
|
template.find("#global_name").text(fromdb(json.name));
|
|
template.find("#global_value").text(fromdb(json.value));
|
|
template.find("#global_desc").text(fromdb(json.description));
|
|
}
|
|
|
|
$("#submenu_content_global .grid_container .grid_header .grid_genheader_cell").bind("click", function(event) {
|
|
var headerColumn = $(this);
|
|
var sortingIcon = headerColumn.find(".gridsorting_arrow");
|
|
|
|
if (sortingIcon.hasClass("up") == false) { //If it's not in ascending order, sort it ascending.
|
|
$("#submenu_content_global .grid_container .grid_header .grid_genheader_cell .gridsorting_arrow").removeClass("down up"); //remove arrow from all header columns first
|
|
sortingIcon.addClass("up"); //add up arrow to this specific header column
|
|
sortingOrder = "asc";
|
|
}
|
|
else if (sortingIcon.hasClass("up") == true) { //If it's in ascending order, sort it descending.
|
|
$("#submenu_content_global .grid_container .grid_header .grid_genheader_cell .gridsorting_arrow").removeClass("down up"); //remove arrow from all header columns first
|
|
sortingIcon.addClass("down"); //add down arrow to this specific header column
|
|
sortingOrder = "desc";
|
|
}
|
|
|
|
switch(headerColumn[0].id) {
|
|
case "name_header":
|
|
sortBy = "name";
|
|
items.sort(sortArrayAlphabetically);
|
|
break;
|
|
case "value_header":
|
|
sortBy = "value";
|
|
items.sort(sortArrayAlphabetically);
|
|
break;
|
|
case "description_header":
|
|
sortBy = "description";
|
|
items.sort(sortArrayAlphabetically);
|
|
break;
|
|
}
|
|
|
|
drawGrid(items, $("#submenu_content_global"), $("#global_template"), globalJSONToTemplate);
|
|
return false;
|
|
});
|
|
|
|
function listConfigurations() {
|
|
var submenuContent = $("#submenu_content_global");
|
|
|
|
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 moreCriteria = [];
|
|
if (name!=null && trim(name).length > 0)
|
|
moreCriteria.push("&name="+todb(name));
|
|
commandString = "command=listConfigurations&page="+currentPage+moreCriteria.join("")+"&response=json";
|
|
} else {
|
|
var searchInput = submenuContent.find("#search_input").val();
|
|
if (searchInput != null && searchInput.length > 0)
|
|
commandString = "command=listConfigurations&page="+currentPage+"&keyword="+searchInput+"&response=json";
|
|
else
|
|
commandString = "command=listConfigurations&page="+currentPage+"&response=json";
|
|
}
|
|
|
|
//listItems(submenuContent, commandString, jsonResponse1, jsonResponse2, template, fnJSONToTemplate);
|
|
listItems(submenuContent, commandString, "listconfigurationsresponse", "configuration", $("#global_template"), globalJSONToTemplate);
|
|
}
|
|
|
|
submenuContentEventBinder($("#submenu_content_global"), listConfigurations);
|
|
|
|
$("#submenu_global").bind("click", function(event) {
|
|
event.preventDefault();
|
|
|
|
$(this).toggleClass("submenu_links_on").toggleClass("submenu_links_off");
|
|
currentSubMenu.toggleClass("submenu_links_off").toggleClass("submenu_links_on");
|
|
currentSubMenu = $(this);
|
|
var submenuContent = $("#submenu_content_global").show();
|
|
$("#submenu_content_zones, #submenu_content_service, #submenu_content_disk").hide();
|
|
|
|
currentPage = 1;
|
|
listConfigurations();
|
|
});
|
|
|
|
|
|
//zone
|
|
var rightPanel = $("#submenu_content_zones #right_panel_detail_title");
|
|
var rightContent = $("#submenu_content_zones #right_panel_detail_content");
|
|
|
|
function clearRightPanel() {
|
|
rightPanel.empty();
|
|
rightContent.empty();
|
|
$("#submenu_content_zones").find("#action_edit_zone, #action_add_pod, #action_edit_pod, #action_add_publicip_vlan, #action_add_directip_vlan, #action_delete").hide();
|
|
}
|
|
|
|
function zoneObjectToRightPanel(obj) {
|
|
rightPanel.html("<strong>Zone:</strong> "+fromdb(obj.name));
|
|
var rightContentHtml =
|
|
"<p><span>ZONE:</span> "+fromdb(obj.name)+"</p>"
|
|
+ "<p><span>DNS 1:</span> "+obj.dns1+"</p>"
|
|
+ "<p><span>DNS 2:</span> "+((obj.dns2 == null) ? "" : obj.dns2) +"</p>"
|
|
+ "<p><span>Internal DNS 1:</span> "+obj.internaldns1+"</p>"
|
|
+ "<p><span>Internal DNS 2:</span> "+((obj.internaldns2 == null) ? "" : obj.internaldns2) +"</p>";
|
|
if (getNetworkType() != "vnet")
|
|
rightContentHtml += "<p><span>VLAN:</span> "+((obj.vlan == null) ? "" : obj.vlan) +"</p>";
|
|
rightContentHtml += "<p><span>Guest CIDR:</span> "+obj.guestcidraddress+"</p>";
|
|
|
|
rightContent.data("id", obj.id).html(rightContentHtml);
|
|
|
|
$("#submenu_content_zones").find("#action_edit_pod, #action_add_directip_vlan").hide();
|
|
|
|
var buttons = $("#submenu_content_zones #action_delete, #submenu_content_zones #action_edit_zone, #submenu_content_zones #action_add_pod, #submenu_content_zones #action_add_publicip_vlan").data("type", "zone").show();
|
|
buttons.data("id", obj.id);
|
|
buttons.data("name", obj.name);
|
|
buttons.data("dns1", obj.dns1);
|
|
buttons.data("dns2", obj.dns2);
|
|
buttons.data("internaldns1", obj.internaldns1);
|
|
buttons.data("internaldns2", obj.internaldns2);
|
|
buttons.data("vlan", obj.vlan);
|
|
buttons.data("guestcidraddress", obj.guestcidraddress);
|
|
}
|
|
|
|
function podObjectToRightPanel(obj) {
|
|
rightPanel.html("<strong>Pod:</strong> " + fromdb(obj.name));
|
|
|
|
var rightContentHtml =
|
|
"<p><span>POD:</span> "+fromdb(obj.name)+"</p>"
|
|
+ "<p><span>Private CIDR:</span> "+obj.cidr+"</p>"
|
|
+ "<p><span>Private IP Range:</span> "+obj.ipRange+"</p>"
|
|
+ "<p><span>Gateway:</span> "+obj.gateway+"</p>";
|
|
|
|
rightContent.data("id", obj.id).html(rightContentHtml);
|
|
|
|
$("#submenu_content_zones").find("#action_edit_zone, #action_add_pod, #action_add_publicip_vlan").hide();
|
|
var buttons = $("#submenu_content_zones").find("#action_delete, #action_edit_pod").data("type", "pod").show();
|
|
buttons.data("id", obj.id);
|
|
buttons.data("zoneid", obj.zoneid);
|
|
buttons.data("name", obj.name);
|
|
buttons.data("cidr", obj.cidr);
|
|
buttons.data("startip", obj.startip);
|
|
buttons.data("endip", obj.endip);
|
|
buttons.data("ipRange", obj.ipRange);
|
|
buttons.data("gateway", obj.gateway);
|
|
if (getDirectAttachUntaggedEnabled() == "true") {
|
|
$("#submenu_content_zones #action_add_directip_vlan").data("type", "pod").data("id", obj.id).data("name", obj.name).data("zoneid", obj.zoneid).show();
|
|
}
|
|
}
|
|
|
|
$("#submenu_content_zones #action_delete").bind("click", function(event) {
|
|
var deleteButton = $(this);
|
|
|
|
var confirmMessage = null;
|
|
var id = deleteButton.data("id");
|
|
var type = deleteButton.data("type");
|
|
var command = null;
|
|
if (type == "zone") {
|
|
confirmMessage = "Please confirm you want to delete the zone : <b>" + deleteButton.data("name") +"</b>";
|
|
command = "deleteZone";
|
|
} else if (type == "pod") {
|
|
confirmMessage = "Please confirm you want to delete the pod : <b>" + deleteButton.data("name") + "</b>";
|
|
command = "deletePod"
|
|
} else {
|
|
confirmMessage = "Please confirm you want to delete the public vlan IP range : <b>" + deleteButton.data("name") + "</b>";
|
|
command = "deleteVlanIpRange";
|
|
}
|
|
|
|
$("#dialog_confirmation")
|
|
.html(confirmMessage)
|
|
.dialog('option', 'buttons', {
|
|
"Confirm": function() {
|
|
$(this).dialog("close");
|
|
|
|
$.ajax({
|
|
data: createURL("command="+command+"&id="+id+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var target = null;
|
|
if (type == "zone") {
|
|
target = $("#submenu_content_zones #zone_" + id);
|
|
} else if (type == "pod") {
|
|
target = $("#submenu_content_zones #pod_" + id);
|
|
} else {
|
|
target = $("#submenu_content_zones #publicip_range_" + id);
|
|
}
|
|
target.fadeOut("slow", function() {
|
|
$(this).remove();
|
|
});
|
|
rightPanel.empty();
|
|
rightContent.empty();
|
|
$("#submenu_content_zones #action_delete").hide();
|
|
}
|
|
});
|
|
|
|
},
|
|
"Cancel": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
}).dialog("open");
|
|
});
|
|
|
|
$("#submenu_content_zones #action_edit_zone").bind("click", function(event) {
|
|
var id = $(this).data("id");
|
|
|
|
var dialogEditZone = $("#dialog_edit_zone");
|
|
dialogEditZone.find("#edit_zone_name").val($(this).data("name"));
|
|
dialogEditZone.find("#edit_zone_dns1").val($(this).data("dns1"));
|
|
dialogEditZone.find("#edit_zone_dns2").val($(this).data("dns2"));
|
|
dialogEditZone.find("#edit_zone_internaldns1").val($(this).data("internaldns1"));
|
|
dialogEditZone.find("#edit_zone_internaldns2").val($(this).data("internaldns2"));
|
|
dialogEditZone.find("#edit_zone_guestcidraddress").val($(this).data("guestcidraddress"));
|
|
var guestcidraddress = $(this).data("guestcidraddress");
|
|
|
|
// If the network type is vnet, don't show any vlan stuff.
|
|
if (getNetworkType() != "vnet") {
|
|
dialogEditZone.find("#edit_zone_startvlan").val("");
|
|
dialogEditZone.find("#edit_zone_endvlan").val("");
|
|
var vlan = $(this).data("vlan");
|
|
if(vlan != null) {
|
|
if(vlan.indexOf("-")!==-1) {
|
|
var startVlan = vlan.substring(0, vlan.indexOf("-"));
|
|
var endVlan = vlan.substring((vlan.indexOf("-")+1));
|
|
dialogEditZone.find("#edit_zone_startvlan").val(startVlan);
|
|
dialogEditZone.find("#edit_zone_endvlan").val(endVlan);
|
|
}
|
|
else {
|
|
dialogEditZone.find("#edit_zone_startvlan").val(vlan);
|
|
}
|
|
}
|
|
}
|
|
|
|
dialogEditZone
|
|
.dialog('option', 'buttons', {
|
|
"Change": function() {
|
|
var thisDialog = $(this);
|
|
|
|
// validate values
|
|
var isValid = true;
|
|
isValid &= validateString("Name", thisDialog.find("#edit_zone_name"), thisDialog.find("#edit_zone_name_errormsg"));
|
|
isValid &= validateIp("DNS 1", thisDialog.find("#edit_zone_dns1"), thisDialog.find("#edit_zone_dns1_errormsg"), false); //required
|
|
isValid &= validateIp("DNS 2", thisDialog.find("#edit_zone_dns2"), thisDialog.find("#edit_zone_dns2_errormsg"), true); //optional
|
|
isValid &= validateIp("Internal DNS 1", thisDialog.find("#edit_zone_internaldns1"), thisDialog.find("#edit_zone_internaldns1_errormsg"), false); //required
|
|
isValid &= validateIp("Internal DNS 2", thisDialog.find("#edit_zone_internaldns2"), thisDialog.find("#edit_zone_internaldns2_errormsg"), true); //optional
|
|
if (getNetworkType() != "vnet") {
|
|
isValid &= validateString("Zone - Start VLAN Range", thisDialog.find("#edit_zone_startvlan"), thisDialog.find("#edit_zone_startvlan_errormsg"), false); //required
|
|
isValid &= validateString("Zone - End VLAN Range", thisDialog.find("#edit_zone_endvlan"), thisDialog.find("#edit_zone_endvlan_errormsg"), true); //optional
|
|
}
|
|
isValid &= validateCIDR("Guest CIDR", thisDialog.find("#edit_zone_guestcidraddress"), thisDialog.find("#edit_zone_guestcidraddress_errormsg"), false); //required
|
|
if (!isValid) return;
|
|
|
|
var moreCriteria = [];
|
|
|
|
var name = trim(thisDialog.find("#edit_zone_name").val());
|
|
moreCriteria.push("&name="+todb(name));
|
|
|
|
var dns1 = trim(thisDialog.find("#edit_zone_dns1").val());
|
|
moreCriteria.push("&dns1="+encodeURIComponent(dns1));
|
|
|
|
var dns2 = trim(thisDialog.find("#edit_zone_dns2").val());
|
|
if (dns2 != null & dns2.length > 0)
|
|
moreCriteria.push("&dns2="+encodeURIComponent(dns2));
|
|
|
|
var internaldns1 = trim(thisDialog.find("#edit_zone_internaldns1").val());
|
|
moreCriteria.push("&internaldns1="+encodeURIComponent(internaldns1));
|
|
|
|
var internaldns2 = trim(thisDialog.find("#edit_zone_internaldns2").val());
|
|
if (internaldns2 != null & internaldns2.length > 0)
|
|
moreCriteria.push("&internaldns2="+encodeURIComponent(internaldns2));
|
|
|
|
var vlan;
|
|
if (getNetworkType() != "vnet") {
|
|
var vlanStart = trim(thisDialog.find("#edit_zone_startvlan").val());
|
|
var vlanEnd = trim(thisDialog.find("#edit_zone_endvlan").val());
|
|
if (vlanEnd != null && vlanEnd.length > 0)
|
|
vlan = vlanStart + "-" + vlanEnd;
|
|
else
|
|
vlan = vlanStart;
|
|
moreCriteria.push("&vlan=" + encodeURIComponent(vlan));
|
|
}
|
|
|
|
var guestcidraddress = trim(thisDialog.find("#edit_zone_guestcidraddress").val());
|
|
moreCriteria.push("&guestcidraddress="+encodeURIComponent(guestcidraddress));
|
|
|
|
thisDialog.dialog("close");
|
|
|
|
var template = $("#zone_"+id);
|
|
var loadingImg = template.find(".adding_loading").find(".adding_text").text("Updating zone....");
|
|
var row_container = template.find("#row_container");
|
|
loadingImg.show();
|
|
row_container.hide();
|
|
|
|
$.ajax({
|
|
data: createURL("command=updateZone&id="+id+moreCriteria.join("")+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var obj = {"id": id, "name": name, "dns1": dns1, "dns2": dns2, "internaldns1": internaldns1, "internaldns2": internaldns2, "vlan": vlan, "guestcidraddress": guestcidraddress };
|
|
zoneObjectToRightPanel(obj);
|
|
var zoneName = $("#zone_"+id).find("#zone_name").text(name);
|
|
zoneName.data("id", id).data("name", fromdb(name)).data("dns1", dns1).data("internaldns1", internaldns1).data("guestcidraddress", guestcidraddress);
|
|
if (dns2 != "")
|
|
zoneName.data("dns2", dns2);
|
|
if (internaldns2 != "")
|
|
zoneName.data("internaldns2", internaldns2);
|
|
if (vlan != "")
|
|
zoneName.data("vlan", vlan);
|
|
|
|
loadingImg.hide();
|
|
row_container.show();
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
handleError(XMLHttpResponse);
|
|
loadingImg.hide();
|
|
row_container.show();
|
|
}
|
|
});
|
|
},
|
|
"Cancel": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
}).dialog("open");
|
|
|
|
});
|
|
|
|
$("#submenu_content_zones #action_add_pod").bind("click", function(event) {
|
|
var id = $(this).data("id");
|
|
|
|
$("#dialog_add_pod").find("#add_pod_zone_name").text($(this).data("name"));
|
|
$("#dialog_add_pod #add_pod_name, #dialog_add_pod #add_pod_cidr, #dialog_add_pod #add_pod_startip, #dialog_add_pod #add_pod_endip, #add_pod_gateway").val("");
|
|
|
|
$("#dialog_add_pod")
|
|
.dialog('option', 'buttons', {
|
|
"Add": function() {
|
|
var thisDialog = $(this);
|
|
|
|
// validate values
|
|
var isValid = true;
|
|
isValid &= validateString("Name", thisDialog.find("#add_pod_name"), thisDialog.find("#add_pod_name_errormsg"));
|
|
isValid &= validateCIDR("CIDR", thisDialog.find("#add_pod_cidr"), thisDialog.find("#add_pod_cidr_errormsg"));
|
|
isValid &= validateIp("Start IP Range", thisDialog.find("#add_pod_startip"), thisDialog.find("#add_pod_startip_errormsg")); //required
|
|
isValid &= validateIp("End IP Range", thisDialog.find("#add_pod_endip"), thisDialog.find("#add_pod_endip_errormsg"), true); //optional
|
|
isValid &= validateIp("Gateway", thisDialog.find("#add_pod_gateway"), thisDialog.find("#add_pod_gateway_errormsg")); //required when creating
|
|
if (!isValid) return;
|
|
|
|
var name = trim(thisDialog.find("#add_pod_name").val());
|
|
var cidr = trim(thisDialog.find("#add_pod_cidr").val());
|
|
var startip = trim(thisDialog.find("#add_pod_startip").val());
|
|
var endip = trim(thisDialog.find("#add_pod_endip").val()); //optional
|
|
var gateway = trim(thisDialog.find("#add_pod_gateway").val());
|
|
|
|
var array1 = [];
|
|
array1.push("&zoneId="+id);
|
|
array1.push("&name="+todb(name));
|
|
array1.push("&cidr="+encodeURIComponent(cidr));
|
|
array1.push("&startIp="+encodeURIComponent(startip));
|
|
if (endip != null && endip.length > 0)
|
|
array1.push("&endIp="+encodeURIComponent(endip));
|
|
array1.push("&gateway="+encodeURIComponent(gateway));
|
|
|
|
thisDialog.dialog("close");
|
|
|
|
var template = $("#pod_template").clone(true);
|
|
var loadingImg = template.find(".adding_loading");
|
|
var row_container = template.find("#row_container");
|
|
|
|
$("#zone_"+id+" #zone_content").show();
|
|
$("#zone_" + id + " #pods_container").prepend(template.show());
|
|
$("#zone_" + id + " #zone_expand").removeClass().addClass("zonetree_openarrows");
|
|
loadingImg.show();
|
|
row_container.hide();
|
|
template.fadeIn("slow");
|
|
|
|
$.ajax({
|
|
data: createURL("command=createPod&response=json"+array1.join("")),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var pod = json.createpodresponse;
|
|
template.attr("id", "pod_"+pod.id);
|
|
podJSONToTemplate(pod, template);
|
|
loadingImg.hide();
|
|
row_container.show();
|
|
if (forceLogout) {
|
|
$("#dialog_confirmation")
|
|
.html("<p>You have successfully added your first Zone and Pod. After clicking 'OK', this UI will automatically refresh to give you access to the rest of cloud features.</p>")
|
|
.dialog('option', 'buttons', {
|
|
"OK": function() {
|
|
$(this).dialog("close");
|
|
window.location.reload();
|
|
}
|
|
}).dialog("open");
|
|
}
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
handleError(XMLHttpResponse);
|
|
template.slideUp("slow", function() {
|
|
$(this).remove();
|
|
});
|
|
}
|
|
});
|
|
},
|
|
"Cancel": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
}).dialog("open");
|
|
});
|
|
|
|
$("#submenu_content_zones #action_add_directip_vlan").bind("click", function(event) {
|
|
var thisLink = $(this);
|
|
var podid = thisLink.data("id");
|
|
var podname = thisLink.data("name");
|
|
var zoneid = thisLink.data("zoneid");
|
|
|
|
$("#dialog_add_vlan_for_pod").find("#pod_name_label").text(podname);
|
|
|
|
$("#dialog_add_vlan_for_pod")
|
|
.dialog('option', 'buttons', {
|
|
"Add": function() {
|
|
var thisDialog = $(this);
|
|
|
|
// validate values
|
|
var isValid = true;
|
|
isValid &= validateIp("Gateway", thisDialog.find("#gateway"), thisDialog.find("#gateway_errormsg"));
|
|
isValid &= validateIp("Netmask", thisDialog.find("#netmask"), thisDialog.find("#netmask_errormsg"));
|
|
isValid &= validateIp("Start IP Range", thisDialog.find("#startip"), thisDialog.find("#startip_errormsg")); //required
|
|
isValid &= validateIp("End IP Range", thisDialog.find("#endip"), thisDialog.find("#endip_errormsg"), true); //optional
|
|
if (!isValid) return;
|
|
|
|
var gateway = trim(thisDialog.find("#gateway").val());
|
|
var netmask = trim(thisDialog.find("#netmask").val());
|
|
var startip = trim(thisDialog.find("#startip").val());
|
|
var endip = trim(thisDialog.find("#endip").val());
|
|
|
|
var array1 = [];
|
|
array1.push("&vlan=untagged");
|
|
array1.push("&zoneid=" + zoneid);
|
|
array1.push("&podId=" + podid);
|
|
array1.push("&forVirtualNetwork=false"); //direct VLAN
|
|
array1.push("&gateway="+encodeURIComponent(gateway));
|
|
array1.push("&netmask="+encodeURIComponent(netmask));
|
|
array1.push("&startip="+encodeURIComponent(startip));
|
|
if(endip != null && endip.length > 0)
|
|
array1.push("&endip="+encodeURIComponent(endip));
|
|
|
|
thisDialog.dialog("close");
|
|
|
|
var template = $("#vlan_ip_range_template").clone(true);
|
|
//direct untagged VLAN is under pod(2nd level). So, make direct untagged VLAN 3rd level.
|
|
template.find("#row_container .zonetree_secondlevel").removeClass().addClass("zonetree_thirdlevel");
|
|
|
|
var loadingImg = template.find(".adding_loading");
|
|
loadingImg.find(".adding_text").text("Adding a direct IP range....");
|
|
var row_container = template.find("#row_container");
|
|
|
|
$("#zone_" + zoneid).find("#pod_" + podid).find("#directip_ranges_container").prepend(template.show());
|
|
|
|
loadingImg.show();
|
|
row_container.hide();
|
|
template.fadeIn("slow");
|
|
|
|
$.ajax({
|
|
data: createURL("command=createVlanIpRange&response=json" + array1.join("")),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var vlan = json.createvlaniprangeresponse;
|
|
template.attr("id", "publicip_range_"+vlan.id);
|
|
vlanIpRangeJSONToTemplate(vlan, template);
|
|
loadingImg.hide();
|
|
row_container.show();
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
handleError(XMLHttpResponse);
|
|
template.slideUp("slow", function() {
|
|
$(this).remove();
|
|
});
|
|
}
|
|
});
|
|
},
|
|
"Cancel": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
}).dialog("open");
|
|
|
|
return false;
|
|
});
|
|
|
|
$("#submenu_content_zones #action_edit_pod").bind("click", function(event) {
|
|
var id = $(this).data("id");
|
|
var zoneid = $(this).data("zoneid");
|
|
var dialogEditPod = $("#dialog_edit_pod");
|
|
|
|
var oldName = $(this).data("name");
|
|
dialogEditPod.find("#edit_pod_name").val(oldName);
|
|
|
|
var oldCidr = $(this).data("cidr");
|
|
dialogEditPod.find("#edit_pod_cidr").val(oldCidr);
|
|
|
|
var oldStartip = $(this).data("startip");
|
|
dialogEditPod.find("#edit_pod_startip").val(oldStartip);
|
|
|
|
var oldEndip = $(this).data("endip");
|
|
dialogEditPod.find("#edit_pod_endip").val(oldEndip);
|
|
|
|
var oldGateway = $(this).data("gateway");
|
|
dialogEditPod.find("#edit_pod_gateway").val(oldGateway);
|
|
|
|
dialogEditPod
|
|
.dialog('option', 'buttons', {
|
|
"Change": function() {
|
|
var thisDialog = $(this);
|
|
|
|
// validate values
|
|
var isValid = true;
|
|
isValid &= validateString("Name", thisDialog.find("#edit_pod_name"), thisDialog.find("#edit_pod_name_errormsg"));
|
|
isValid &= validateCIDR("CIDR", thisDialog.find("#edit_pod_cidr"), thisDialog.find("#edit_pod_cidr_errormsg"));
|
|
isValid &= validateIp("Start IP Range", thisDialog.find("#edit_pod_startip"), dialogEditPod.find("#edit_pod_startip_errormsg")); //required
|
|
isValid &= validateIp("End IP Range", dialogEditPod.find("#edit_pod_endip"), thisDialog.find("#edit_pod_endip_errormsg"), true); //optional
|
|
isValid &= validateIp("Gateway", thisDialog.find("#edit_pod_gateway"), thisDialog.find("#edit_pod_gateway_errormsg"), true); //optional when editing
|
|
if (!isValid) return;
|
|
|
|
var newName = trim(thisDialog.find("#edit_pod_name").val());
|
|
var newCidr = trim(thisDialog.find("#edit_pod_cidr").val());
|
|
var newStartip = trim(thisDialog.find("#edit_pod_startip").val());
|
|
var newEndip = trim(thisDialog.find("#edit_pod_endip").val());
|
|
var newIpRange = getIpRange(newStartip, newEndip);
|
|
var newGateway = trim(thisDialog.find("#edit_pod_gateway").val());
|
|
|
|
var array1 = [];
|
|
array1.push("&id="+id);
|
|
if(newName != oldName)
|
|
array1.push("&name="+todb(newName));
|
|
if(newCidr != oldCidr)
|
|
array1.push("&cidr="+encodeURIComponent(newCidr));
|
|
if(newStartip != oldStartip)
|
|
array1.push("&startIp="+encodeURIComponent(newStartip));
|
|
if(newEndip != oldEndip && newEndip != null && newEndip.length > 0) {
|
|
if(newStartip == oldStartip) {
|
|
array1.push("&startIp="+encodeURIComponent(newStartip)); //startIp needs to be passed to updatePod API when endIp is passed to updatePod API.
|
|
}
|
|
array1.push("&endIp="+encodeURIComponent(newEndip));
|
|
}
|
|
if(newGateway != oldGateway && newGateway != null && newGateway.length > 0)
|
|
array1.push("&gateway="+encodeURIComponent(newGateway));
|
|
|
|
$(this).dialog("close");
|
|
|
|
var template = $("#pod_"+id);
|
|
var loadingImg = template.find(".adding_loading");
|
|
loadingImg.find(".adding_text").text("Updating a pod....");
|
|
var row_container = template.find("#row_container");
|
|
|
|
loadingImg.show();
|
|
row_container.hide();
|
|
template.fadeIn("slow");
|
|
|
|
$.ajax({
|
|
data: createURL("command=updatePod&response=json"+array1.join("")),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var newIpRange = getIpRange(newStartip, newEndip);
|
|
var obj = {"id": id, "zoneid": zoneid, "name": newName, "cidr": newCidr, "startip": newStartip, "endip": newEndip, "ipRange": newIpRange, "gateway": newGateway};
|
|
podObjectToRightPanel(obj);
|
|
var podName = $("#pod_"+id).find("#pod_name").text(newName);
|
|
podName.data("id", id).data("name", fromdb(newName)).data("cidr", newCidr).data("startip", newStartip).data("endip", newEndip).data("ipRange", newIpRange).data("gateway", newGateway);
|
|
loadingImg.hide();
|
|
row_container.show();
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
loadingImg.hide();
|
|
row_container.show();
|
|
handleError(XMLHttpResponse);
|
|
}
|
|
});
|
|
},
|
|
"Cancel": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
}).dialog("open");
|
|
});
|
|
|
|
$("#submenu_content_zones #action_add_publicip_vlan").bind("click", function(event) {
|
|
var id = $(this).data("id");
|
|
|
|
// reset dialog
|
|
dialogAddVlanForZone.find("#add_publicip_vlan_vlan_container, #add_publicip_vlan_domain_container, #add_publicip_vlan_account_container").hide();
|
|
dialogAddVlanForZone.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("");
|
|
dialogAddVlanForZone.find("#add_publicip_vlan_zone_name").text($(this).data("name"));
|
|
|
|
if (getNetworkType() == 'vnet') {
|
|
$("#add_publicip_vlan_type_container").hide();
|
|
} else {
|
|
dialogAddVlanForZone.find("#add_publicip_vlan_pod_container").show();
|
|
dialogAddVlanForZone.find("#add_publicip_vlan_type").change();
|
|
$("#add_publicip_vlan_type_container").show();
|
|
var podSelect = dialogAddVlanForZone.find("#add_publicip_vlan_pod").empty();
|
|
$.ajax({
|
|
data: createURL("command=listPods&zoneId="+id+"&response=json"+maxPageSize),
|
|
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("<option value='" + pods[i].id + "'>" + fromdb(pods[i].name) + "</option>");
|
|
}
|
|
} else {
|
|
podSelect.append("<option value=''>No available pods</option>");
|
|
}
|
|
}
|
|
});
|
|
|
|
var domainSelect = dialogAddVlanForZone.find("#add_publicip_vlan_domain").empty();
|
|
$.ajax({
|
|
data: createURL("command=listDomains&response=json"+maxPageSize),
|
|
dataType: "json",
|
|
async: false,
|
|
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 + "'>" + fromdb(domains[i].name) + "</option>");
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
dialogAddVlanForZone
|
|
.dialog('option', 'buttons', {
|
|
"Add": function() {
|
|
var thisDialog = $(this);
|
|
// validate values
|
|
var isValid = true;
|
|
var isTagged = false;
|
|
var isDirect = false;
|
|
if (getNetworkType() == "vlan") {
|
|
isDirect = thisDialog.find("#add_publicip_vlan_type").val() == "false";
|
|
isTagged = thisDialog.find("#add_publicip_vlan_tagged").val() == "tagged";
|
|
}
|
|
|
|
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);
|
|
}
|
|
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;
|
|
|
|
var vlan = trim(thisDialog.find("#add_publicip_vlan_vlan").val());
|
|
if (isTagged) {
|
|
vlan = "&vlan="+vlan;
|
|
} else {
|
|
vlan = "&vlan=untagged";
|
|
}
|
|
|
|
var scopeParams = "";
|
|
if(dialogAddVlanForZone.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());
|
|
|
|
var type = "true";
|
|
if (getNetworkType() == "vlan") 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());
|
|
|
|
thisDialog.dialog("close");
|
|
|
|
var template = $("#vlan_ip_range_template").clone(true);
|
|
var loadingImg = template.find(".adding_loading");
|
|
var row_container = template.find("#row_container");
|
|
|
|
$("#zone_" + id + " #zone_content").show();
|
|
$("#zone_" + id + " #publicip_ranges_container").prepend(template.show());
|
|
$("#zone_" + id + " #zone_expand").removeClass().addClass("zonetree_openarrows");
|
|
loadingImg.show();
|
|
row_container.hide();
|
|
template.fadeIn("slow");
|
|
|
|
$.ajax({
|
|
data: createURL("command=createVlanIpRange&forVirtualNetwork="+type+"&zoneId="+id+vlan+scopeParams+"&gateway="+encodeURIComponent(gateway)+"&netmask="+encodeURIComponent(netmask)+"&startip="+encodeURIComponent(startip)+"&endip="+encodeURIComponent(endip)+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var vlan = json.createvlaniprangeresponse;
|
|
template.attr("id", "publicip_range_"+vlan.id);
|
|
vlanIpRangeJSONToTemplate(vlan, template);
|
|
loadingImg.hide();
|
|
row_container.show();
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
handleError(XMLHttpResponse);
|
|
template.slideUp("slow", function() {
|
|
$(this).remove();
|
|
});
|
|
}
|
|
});
|
|
|
|
},
|
|
"Cancel": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
}).dialog("open");
|
|
});
|
|
|
|
$("#zone_template").bind("click", function(event) {
|
|
var template = $(this);
|
|
var target = $(event.target);
|
|
var action = target.attr("id");
|
|
var id = template.data("id");
|
|
var name = template.data("name");
|
|
|
|
switch (action) {
|
|
case "zone_expand" :
|
|
if (target.hasClass("zonetree_closedarrows")) {
|
|
$("#zone_"+id+" #zone_content").show();
|
|
target.removeClass().addClass("zonetree_openarrows");
|
|
} else {
|
|
$("#zone_"+id+" #zone_content").hide();
|
|
target.removeClass().addClass("zonetree_closedarrows");
|
|
}
|
|
break;
|
|
case "zone_name" :
|
|
$("#submenu_content_zones .zonetree_firstlevel_selected").removeClass().addClass("zonetree_firstlevel");
|
|
$("#submenu_content_zones .zonetree_secondlevel_selected").removeClass().addClass("zonetree_secondlevel");
|
|
template.find(".zonetree_firstlevel").removeClass().addClass("zonetree_firstlevel_selected");
|
|
|
|
var obj = {"id": target.data("id"), "name": target.data("name"), "dns1": target.data("dns1"), "dns2": target.data("dns2"), "internaldns1": target.data("internaldns1"), "internaldns2": target.data("internaldns2"), "vlan": target.data("vlan"), "guestcidraddress": target.data("guestcidraddress")};
|
|
zoneObjectToRightPanel(obj);
|
|
|
|
break;
|
|
case "pod_name" :
|
|
$("#submenu_content_zones .zonetree_firstlevel_selected").removeClass().addClass("zonetree_firstlevel");
|
|
$("#submenu_content_zones .zonetree_secondlevel_selected").removeClass().addClass("zonetree_secondlevel");
|
|
target.parent(".zonetree_secondlevel").removeClass().addClass("zonetree_secondlevel_selected");
|
|
|
|
var obj = {"id": target.data("id"), "zoneid": target.data("zoneid"), "name": target.data("name"), "cidr": target.data("cidr"), "startip": target.data("startip"), "endip": target.data("endip"), "ipRange": target.data("ipRange"), "gateway": target.data("gateway")};
|
|
podObjectToRightPanel(obj);
|
|
|
|
break;
|
|
case "vlan_ip_range_name" :
|
|
$("#submenu_content_zones .zonetree_firstlevel_selected").removeClass().addClass("zonetree_firstlevel");
|
|
$("#submenu_content_zones .zonetree_secondlevel_selected").removeClass().addClass("zonetree_secondlevel");
|
|
target.parent(".zonetree_secondlevel").removeClass().addClass("zonetree_secondlevel_selected");
|
|
|
|
var title = "<strong>Public VLAN IP Range</strong>";
|
|
var isDirect = target.data("forVirtualNetwork") == "false";
|
|
var isTagged = target.data("vlan") != "untagged";
|
|
if (isDirect) {
|
|
title = "<strong>Direct VLAN IP Range</strong>";
|
|
}
|
|
rightPanel.html(title);
|
|
|
|
var rightContentHtml =
|
|
"<p><span>VLAN ID:</span> "+target.data("vlan")+"</p>"
|
|
+ "<p><span>Gateway:</span> "+target.data("gateway")+"</p>"
|
|
+ "<p><span>Netmask:</span> "+target.data("netmask")+"</p>"
|
|
+ "<p><span>IP Range:</span> "+target.data("name")+"</p>";
|
|
if(target.data("domainId")!=null)
|
|
rightContentHtml += "<p><span>Domain ID:</span> "+target.data("domainId")+"</p>";
|
|
if(target.data("domain")!=null)
|
|
rightContentHtml += "<p><span>Domain:</span> "+target.data("domain")+"</p>";
|
|
if(target.data("account")!=null)
|
|
rightContentHtml += "<p><span>Account:</span> "+target.data("account")+"</p>";
|
|
if(target.data("podname")!=null)
|
|
rightContentHtml += "<p><span>Pod:</span> "+target.data("podname")+"</p>";
|
|
rightContent.data("id", target.data("id")).html(rightContentHtml);
|
|
|
|
$("#submenu_content_zones").find("#action_edit_zone, #action_add_pod, #action_edit_pod, #action_add_publicip_vlan, #action_add_directip_vlan").hide();
|
|
$("#submenu_content_zones #action_delete").data("id", target.data("id")).data("name", target.data("name")).data("type", "publicip_range").show();
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
return false;
|
|
});
|
|
|
|
function vlanIpRangeJSONToTemplate(json, template) {
|
|
template.data("id", json.id);
|
|
var vlanName = json.id;
|
|
var vlanDisplayName = vlanName;
|
|
if (json.description != undefined) {
|
|
if (json.description.indexOf("-") == -1) {
|
|
vlanName = json.description;
|
|
vlanDisplayName = vlanName;
|
|
} else {
|
|
var ranges = json.description.split("-");
|
|
vlanName = ranges[0] + " -" + ranges[1];
|
|
vlanDisplayName = ranges[0] + " - " + ranges[1];
|
|
}
|
|
}
|
|
var isDirect = json.forvirtualnetwork == "false";
|
|
var isTagged = json.vlan != "untagged";
|
|
if (isDirect) {
|
|
template.find(".zonetree_ipicon").removeClass().addClass("zonetree_directipicon");
|
|
template.find("#vlan_ip_range_type").text("Direct IP Range:");
|
|
}
|
|
else {
|
|
template.find("#vlan_ip_range_type").text("Public IP Range:");
|
|
}
|
|
template.find("#vlan_ip_range_name")
|
|
.html(vlanName)
|
|
.data("id", json.id)
|
|
.data("name", vlanDisplayName)
|
|
.data("vlan", json.vlan)
|
|
.data("forVirtualNetwork", json.forvirtualnetwork)
|
|
.data("gateway", json.gateway)
|
|
.data("netmask", json.netmask);
|
|
|
|
|
|
template.find("#vlan_ip_range_name").data("domainId", json.domainid); //json.domainid might be null.
|
|
template.find("#vlan_ip_range_name").data("domain", json.domain); //json.domain might be null.
|
|
template.find("#vlan_ip_range_name").data("account", json.account); //json.account might be null.
|
|
template.find("#vlan_ip_range_name").data("podname", json.podname); //json.podname might be null.
|
|
}
|
|
|
|
function getIpRange(startip, endip) {
|
|
var ipRange = "";
|
|
if (startip != null && startip.length > 0) {
|
|
ipRange = startip;
|
|
}
|
|
if (endip != null && endip.length > 0) {
|
|
ipRange = ipRange + "-" + endip;
|
|
}
|
|
return ipRange;
|
|
}
|
|
|
|
function podJSONToTemplate(json, template) {
|
|
var ipRange = getIpRange(json.startip, json.endip);
|
|
template.data("id", json.id).data("name", json.name);
|
|
|
|
var podName = template.find("#pod_name").text(json.name);
|
|
podName.data("id", json.id);
|
|
podName.data("zoneid", json.zoneid);
|
|
podName.data("name", json.name);
|
|
podName.data("cidr", json.cidr);
|
|
podName.data("startip", json.startip);
|
|
podName.data("endip", json.endip);
|
|
podName.data("ipRange", ipRange);
|
|
podName.data("gateway", json.gateway);
|
|
|
|
$.ajax({
|
|
data: createURL("command=listVlanIpRanges&zoneid="+json.zoneid+"&podid="+json.id+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var ranges = json.listvlaniprangesresponse.vlaniprange;
|
|
var grid = template.find("#directip_ranges_container").empty();
|
|
if (ranges != null && ranges.length > 0) {
|
|
for (var i = 0; i < ranges.length; i++) {
|
|
if(ranges[i].forvirtualnetwork == "false" && ranges[i].vlan == "untagged") { //direct untagged VLAN should be under pod, instead of under zone.
|
|
var rangeTemplate = $("#vlan_ip_range_template").clone(true).attr("id", "publicip_range_"+ranges[i].id);
|
|
vlanIpRangeJSONToTemplate(ranges[i], rangeTemplate);
|
|
grid.append(rangeTemplate.show());
|
|
|
|
//direct untagged VLAN is under pod(2nd level). So, make direct untagged VLAN 3rd level.
|
|
rangeTemplate.find("#row_container .zonetree_secondlevel").removeClass().addClass("zonetree_thirdlevel");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
function zoneJSONToTemplate(json, template) {
|
|
var zoneid = json.id;
|
|
template.data("id", zoneid).data("name", fromdb(json.name));
|
|
template.find("#zone_name")
|
|
.text(fromdb(json.name))
|
|
.data("id", zoneid)
|
|
.data("name", fromdb(json.name))
|
|
.data("dns1", json.dns1)
|
|
.data("internaldns1", json.internaldns1)
|
|
.data("guestcidraddress", json.guestcidraddress);
|
|
|
|
if (json.dns2 != undefined) {
|
|
template.find("#zone_name").data("dns2", json.dns2);
|
|
}
|
|
if (json.internaldns2 != undefined) {
|
|
template.find("#zone_name").data("internaldns2", json.internaldns2);
|
|
}
|
|
if (json.vlan != undefined) {
|
|
template.find("#zone_name").data("vlan", json.vlan);
|
|
}
|
|
|
|
$.ajax({
|
|
data: createURL("command=listPods&zoneid="+zoneid+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var pods = json.listpodsresponse.pod;
|
|
var grid = template.find("#pods_container").empty();
|
|
if (pods != null && pods.length > 0) {
|
|
for (var i = 0; i < pods.length; i++) {
|
|
var podTemplate = $("#pod_template").clone(true).attr("id", "pod_"+pods[i].id);
|
|
podJSONToTemplate(pods[i], podTemplate);
|
|
grid.append(podTemplate.show());
|
|
forceLogout = false;
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
$.ajax({
|
|
data: createURL("command=listVlanIpRanges&zoneId="+zoneid+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var ranges = json.listvlaniprangesresponse.vlaniprange;
|
|
var grid = template.find("#publicip_ranges_container").empty();
|
|
if (ranges != null && ranges.length > 0) {
|
|
for (var i = 0; i < ranges.length; i++) {
|
|
if(ranges[i].forvirtualnetwork == "false" && ranges[i].vlan == "untagged") //direct untagged VLAN should be under pod, instead of under zone.
|
|
continue;
|
|
var rangeTemplate = $("#vlan_ip_range_template").clone(true).attr("id", "publicip_range_"+ranges[i].id);
|
|
vlanIpRangeJSONToTemplate(ranges[i], rangeTemplate);
|
|
grid.append(rangeTemplate.show());
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
}
|
|
// If the network type is vnet, don't show any vlan stuff.
|
|
if (getNetworkType() == "vnet") {
|
|
$("#action_add_publicip_vlan").removeClass().addClass("zonedetails_addpublicipbutton");
|
|
$("#dialog_add_vlan_for_zone").attr("title", "Add Public IP Range");
|
|
$("#dialog_edit_zone #edit_zone_container, #dialog_add_zone #add_zone_container").hide();
|
|
}
|
|
activateDialog($("#dialog_add_zone").dialog({
|
|
autoOpen: false,
|
|
modal: true,
|
|
zIndex: 2000
|
|
}));
|
|
|
|
activateDialog($("#dialog_edit_zone").dialog({
|
|
autoOpen: false,
|
|
modal: true,
|
|
zIndex: 2000
|
|
}));
|
|
|
|
activateDialog($("#dialog_add_pod").dialog({
|
|
autoOpen: false,
|
|
modal: true,
|
|
width:320,
|
|
zIndex: 2000
|
|
}));
|
|
|
|
activateDialog($("#dialog_edit_pod").dialog({
|
|
autoOpen: false,
|
|
width: 320,
|
|
modal: true,
|
|
zIndex: 2000
|
|
}));
|
|
|
|
activateDialog($("#dialog_add_vlan_for_zone").dialog({
|
|
autoOpen: false,
|
|
modal: true,
|
|
zIndex: 2000
|
|
}));
|
|
|
|
activateDialog($("#dialog_add_vlan_for_pod").dialog({
|
|
autoOpen: false,
|
|
modal: true,
|
|
zIndex: 2000
|
|
}));
|
|
|
|
//direct VLAN shows only "tagged" option while public VLAN shows both "tagged" and "untagged" option.
|
|
var dialogAddVlanForZone = $("#dialog_add_vlan_for_zone");
|
|
|
|
dialogAddVlanForZone.find("#add_publicip_vlan_type").change(function(event) {
|
|
var addPublicipVlanTagged = dialogAddVlanForZone.find("#add_publicip_vlan_tagged").empty();
|
|
|
|
// default value of "#add_publicip_vlan_scope" is "zone-wide". Calling change() will hide "#add_publicip_vlan_domain_container", "#add_publicip_vlan_account_container".
|
|
dialogAddVlanForZone.find("#add_publicip_vlan_scope").change();
|
|
|
|
if ($(this).val() == "false") { //direct VLAN (only tagged option)
|
|
addPublicipVlanTagged.append('<option value="tagged">tagged</option>');
|
|
|
|
dialogAddVlanForZone.find("#add_publicip_vlan_vlan_container").show();
|
|
dialogAddVlanForZone.find("#add_publicip_vlan_pod_container").hide();
|
|
|
|
} else { //public VLAN
|
|
addPublicipVlanTagged.append('<option value="untagged">untagged</option>').append('<option value="tagged">tagged</option>');
|
|
|
|
if (dialogAddVlanForZone.find("#add_publicip_vlan_tagged") == "tagged") {
|
|
dialogAddVlanForZone.find("#add_publicip_vlan_vlan_container").show();
|
|
dialogAddVlanForZone.find("#add_publicip_vlan_pod_container").hide();
|
|
} else {
|
|
dialogAddVlanForZone.find("#add_publicip_vlan_vlan_container").hide();
|
|
dialogAddVlanForZone.find("#add_publicip_vlan_pod_container").hide();
|
|
}
|
|
}
|
|
return false;
|
|
});
|
|
|
|
if (getNetworkType() != "vnet") {
|
|
dialogAddVlanForZone.find("#add_publicip_vlan_tagged").change(function(event) {
|
|
// default value of "#add_publicip_vlan_scope" is "zone-wide". Calling change() will hide "#add_publicip_vlan_domain_container", "#add_publicip_vlan_account_container".
|
|
dialogAddVlanForZone.find("#add_publicip_vlan_scope").change();
|
|
|
|
if (dialogAddVlanForZone.find("#add_publicip_vlan_type").val() == "false") { //direct VLAN (only tagged option)
|
|
dialogAddVlanForZone.find("#add_publicip_vlan_vlan_container").show();
|
|
dialogAddVlanForZone.find("#add_publicip_vlan_pod_container").hide();
|
|
} else { //public VLAN
|
|
if ($(this).val() == "tagged") {
|
|
dialogAddVlanForZone.find("#add_publicip_vlan_vlan_container").show();
|
|
dialogAddVlanForZone.find("#add_publicip_vlan_pod_container").hide();
|
|
} else {
|
|
dialogAddVlanForZone.find("#add_publicip_vlan_vlan_container").hide();
|
|
dialogAddVlanForZone.find("#add_publicip_vlan_pod_container").hide();
|
|
}
|
|
}
|
|
return false;
|
|
});
|
|
} else {
|
|
dialogAddVlanForZone.find("#add_publicip_vlan_container").hide();
|
|
}
|
|
|
|
dialogAddVlanForZone.find("#add_publicip_vlan_scope").change(function(event) {
|
|
if($(this).val() == "zone-wide") {
|
|
dialogAddVlanForZone.find("#add_publicip_vlan_domain_container").hide();
|
|
dialogAddVlanForZone.find("#add_publicip_vlan_account_container").hide();
|
|
} else { // account-specific
|
|
dialogAddVlanForZone.find("#add_publicip_vlan_domain_container").show();
|
|
dialogAddVlanForZone.find("#add_publicip_vlan_account_container").show();
|
|
}
|
|
return false;
|
|
});
|
|
|
|
$("#action_add_zone").bind("click", function(event) {
|
|
var thisDialog = $(this);
|
|
thisDialog.find("#add_zone_name, #add_zone_dns1, #add_zone_dns2, #add_zone_internaldns1, #add_zone_internaldns2, #add_zone_startvlan, #add_zone_endvlan, #add_zone_guestcidraddress").val("");
|
|
|
|
$("#dialog_add_zone")
|
|
.dialog('option', 'buttons', {
|
|
"Add": function() {
|
|
var thisDialog = $(this);
|
|
|
|
// validate values
|
|
var isValid = true;
|
|
isValid &= validateString("Name", thisDialog.find("#add_zone_name"), thisDialog.find("#add_zone_name_errormsg"));
|
|
isValid &= validateIp("DNS 1", thisDialog.find("#add_zone_dns1"), thisDialog.find("#add_zone_dns1_errormsg"), false); //required
|
|
isValid &= validateIp("DNS 2", thisDialog.find("#add_zone_dns2"), thisDialog.find("#add_zone_dns2_errormsg"), true); //optional
|
|
isValid &= validateIp("Internal DNS 1", thisDialog.find("#add_zone_internaldns1"), thisDialog.find("#add_zone_internaldns1_errormsg"), false); //required
|
|
isValid &= validateIp("Internal DNS 2", thisDialog.find("#add_zone_internaldns2"), thisDialog.find("#add_zone_internaldns2_errormsg"), true); //optional
|
|
if (getNetworkType() != "vnet") {
|
|
isValid &= validateString("Zone - Start VLAN Range", thisDialog.find("#add_zone_startvlan"), thisDialog.find("#add_zone_startvlan_errormsg"), false); //required
|
|
isValid &= validateString("Zone - End VLAN Range", thisDialog.find("#add_zone_endvlan"), thisDialog.find("#add_zone_endvlan_errormsg"), true); //optional
|
|
}
|
|
isValid &= validateCIDR("Guest CIDR", thisDialog.find("#add_zone_guestcidraddress"), thisDialog.find("#add_zone_guestcidraddress_errormsg"), false); //required
|
|
if (!isValid) return;
|
|
|
|
var moreCriteria = [];
|
|
|
|
var name = trim(thisDialog.find("#add_zone_name").val());
|
|
moreCriteria.push("&name="+todb(name));
|
|
|
|
var dns1 = trim(thisDialog.find("#add_zone_dns1").val());
|
|
moreCriteria.push("&dns1="+encodeURIComponent(dns1));
|
|
|
|
var dns2 = trim(thisDialog.find("#add_zone_dns2").val());
|
|
if (dns2 != null && dns2.length > 0)
|
|
moreCriteria.push("&dns2="+encodeURIComponent(dns2));
|
|
|
|
var internaldns1 = trim(thisDialog.find("#add_zone_internaldns1").val());
|
|
moreCriteria.push("&internaldns1="+encodeURIComponent(internaldns1));
|
|
|
|
var internaldns2 = trim(thisDialog.find("#add_zone_internaldns2").val());
|
|
if (internaldns2 != null && internaldns2.length > 0)
|
|
moreCriteria.push("&internaldns2="+encodeURIComponent(internaldns2));
|
|
|
|
if (getNetworkType() != "vnet") {
|
|
var vlanStart = trim(thisDialog.find("#add_zone_startvlan").val());
|
|
var vlanEnd = trim(thisDialog.find("#add_zone_endvlan").val());
|
|
if (vlanEnd != null && vlanEnd.length > 0)
|
|
moreCriteria.push("&vlan=" + encodeURIComponent(vlanStart + "-" + vlanEnd));
|
|
else
|
|
moreCriteria.push("&vlan=" + encodeURIComponent(vlanStart));
|
|
}
|
|
|
|
var guestcidraddress = trim(thisDialog.find("#add_zone_guestcidraddress").val());
|
|
moreCriteria.push("&guestcidraddress="+encodeURIComponent(guestcidraddress));
|
|
|
|
thisDialog.dialog("close");
|
|
|
|
var template = $("#zone_template").clone(true);
|
|
var loadingImg = template.find(".adding_loading");
|
|
var row_container = template.find("#row_container");
|
|
|
|
$("#submenu_content_zones #zones_container").prepend(template.show());
|
|
loadingImg.show();
|
|
row_container.hide();
|
|
template.fadeIn("slow");
|
|
|
|
$.ajax({
|
|
data: createURL("command=createZone"+moreCriteria.join("")+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var zone = json.createzoneresponse;
|
|
template.attr("id", "zone_"+zone.id);
|
|
zoneJSONToTemplate(zone, template);
|
|
loadingImg.hide();
|
|
row_container.show();
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
handleError(XMLHttpResponse);
|
|
template.slideUp("slow", function() {
|
|
thisDialog.remove();
|
|
});
|
|
}
|
|
});
|
|
},
|
|
"Cancel": function() {
|
|
var thisDialog = $(this);
|
|
thisDialog.dialog("close");
|
|
cleanErrMsg(thisDialog.find("#add_zone_name"), thisDialog.find("#add_zone_name_errormsg"));
|
|
cleanErrMsg(thisDialog.find("#add_zone_dns1"), thisDialog.find("#add_zone_dns1_errormsg"));
|
|
cleanErrMsg(thisDialog.find("#add_zone_dns2"), thisDialog.find("#add_zone_dns2_errormsg"));
|
|
cleanErrMsg(thisDialog.find("#add_zone_internaldns1"), thisDialog.find("#add_zone_internaldns1_errormsg"));
|
|
cleanErrMsg(thisDialog.find("#add_zone_internaldns2"), thisDialog.find("#add_zone_internaldns2_errormsg"));
|
|
cleanErrMsg(thisDialog.find("#add_zone_startvlan"), thisDialog.find("#add_zone_startvlan_errormsg"));
|
|
cleanErrMsg(thisDialog.find("#add_zone_guestcidraddress"), thisDialog.find("#add_zone_guestcidraddress_errormsg"));
|
|
}
|
|
}).dialog("open");
|
|
});
|
|
|
|
$("#submenu_zones").bind("click", function(event) {
|
|
event.preventDefault();
|
|
$(this).toggleClass("submenu_links_on").toggleClass("submenu_links_off");
|
|
currentSubMenu.toggleClass("submenu_links_off").toggleClass("submenu_links_on");
|
|
currentSubMenu = $(this);
|
|
var container = $("#submenu_content_zones").show();
|
|
$("#submenu_content_global, #submenu_content_service, #submenu_content_disk").hide();
|
|
clearRightPanel();
|
|
$.ajax({
|
|
data: createURL("command=listZones&available=true&response=json"+maxPageSize),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var zones = json.listzonesresponse.zone;
|
|
var grid = $("#submenu_content_zones #zones_container").empty();
|
|
if (zones != null && zones.length > 0) {
|
|
for (var i = 0; i < zones.length; i++) {
|
|
var template = $("#zone_template").clone(true).attr("id", "zone_"+zones[i].id);
|
|
zoneJSONToTemplate(zones[i], template);
|
|
grid.append(template.show());
|
|
}
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
$("#service_template").bind("click", function(event) {
|
|
var template = $(this);
|
|
var link = $(event.target);
|
|
var linkAction = link.attr("id");
|
|
var svcId = template.data("svcId");
|
|
var svcName = template.data("svcName");
|
|
var submenuContent = $("#submenu_content_service");
|
|
switch (linkAction) {
|
|
case "service_action_edit" :
|
|
var dialogEditService = $("#dialog_edit_service");
|
|
|
|
dialogEditService.find("#service_name").text(svcName);
|
|
dialogEditService.find("#edit_service_name").val(svcName);
|
|
dialogEditService.find("#edit_service_display").val(template.find("#service_displaytext").text());
|
|
dialogEditService.find("#edit_service_offerha").val(toBooleanValue(template.find("#service_offerha").text()));
|
|
|
|
dialogEditService
|
|
.dialog('option', 'buttons', {
|
|
"Confirm": function() {
|
|
var thisDialog = $(this);
|
|
|
|
// validate values
|
|
var isValid = true;
|
|
isValid &= validateString("Name", thisDialog.find("#edit_service_name"), thisDialog.find("#edit_service_name_errormsg"));
|
|
isValid &= validateString("Display Text", thisDialog.find("#edit_service_display"), thisDialog.find("#edit_service_display_errormsg"));
|
|
if (!isValid) return;
|
|
|
|
var moreCriteria = [];
|
|
var name = trim(thisDialog.find("#edit_service_name").val());
|
|
moreCriteria.push("&name="+todb(name));
|
|
var displaytext = trim(thisDialog.find("#edit_service_display").val());
|
|
moreCriteria.push("&displayText="+todb(displaytext));
|
|
var offerha = trim(thisDialog.find("#edit_service_offerha").val());
|
|
moreCriteria.push("&offerha="+offerha);
|
|
|
|
thisDialog.dialog("close");
|
|
|
|
$.ajax({
|
|
data: createURL("command=updateServiceOffering&id="+svcId+moreCriteria.join("")+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
template.find("#service_displaytext").text(displaytext);
|
|
template.find("#service_name").text(name);
|
|
template.find("#service_offerha").text(toBooleanText(offerha));
|
|
template.data("svcName", name);
|
|
}
|
|
});
|
|
},
|
|
"Cancel": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
}).dialog("open");
|
|
break;
|
|
case "service_action_delete" :
|
|
$("#dialog_confirmation")
|
|
.html("<p>Please confirm you want to remove the service offering: <b>"+svcName+"</b> from the management server. </p>")
|
|
.dialog('option', 'buttons', {
|
|
"Confirm": function() {
|
|
var dialogBox = $(this);
|
|
$.ajax({
|
|
data: createURL("command=deleteServiceOffering&id="+svcId+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
dialogBox.dialog("close");
|
|
template.slideUp("slow", function() {
|
|
$(this).remove();
|
|
changeGridRowsTotal(submenuContent.find("#grid_rows_total"), -1);
|
|
});
|
|
}
|
|
});
|
|
},
|
|
"Cancel": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
}).dialog("open");
|
|
break;
|
|
default :
|
|
break;
|
|
}
|
|
return false;
|
|
});
|
|
|
|
function serviceJSONToTemplate(json, template) {
|
|
template.attr("id", "service_"+json.id);
|
|
(index++ % 2 == 0)? template.addClass("smallrow_even"): template.addClass("smallrow_odd");
|
|
template.data("svcId", json.id).data("svcName", fromdb(json.name));
|
|
|
|
template.find("#service_id").text(json.id);
|
|
template.find("#service_name").text(fromdb(json.name));
|
|
template.find("#service_displaytext").text(fromdb(json.displaytext));
|
|
template.find("#service_storagetype").text(json.storagetype);
|
|
template.find("#service_cpu").text(json.cpunumber + " x " + convertHz(json.cpuspeed));
|
|
template.find("#service_memory").text(convertBytes(parseInt(json.memory)*1024*1024));
|
|
template.find("#service_offerha").text(toBooleanText(json.offerha));
|
|
template.find("#service_networktype").text(toNetworkType(json.usevirtualnetwork));
|
|
template.find("#service_tags").text(fromdb(json.tags));
|
|
|
|
setDateField(json.created, template.find("#service_created"));
|
|
}
|
|
|
|
$("#submenu_content_service .grid_container .grid_header .grid_genheader_cell").bind("click", function(event) {
|
|
var headerColumn = $(this);
|
|
var sortingIcon = headerColumn.find(".gridsorting_arrow");
|
|
|
|
if (sortingIcon.hasClass("up") == false) { //If it's not in ascending order, sort it ascending.
|
|
$("#submenu_content_service .grid_container .grid_header .grid_genheader_cell .gridsorting_arrow").removeClass("down up"); //remove arrow from all header columns first
|
|
sortingIcon.addClass("up"); //add up arrow to this specific header column
|
|
sortingOrder = "asc";
|
|
}
|
|
else if (sortingIcon.hasClass("up") == true) { //If it's in ascending order, sort it descending.
|
|
$("#submenu_content_service .grid_container .grid_header .grid_genheader_cell .gridsorting_arrow").removeClass("down up"); //remove arrow from all header columns first
|
|
sortingIcon.addClass("down"); //add down arrow to this specific header column
|
|
sortingOrder = "desc";
|
|
}
|
|
|
|
switch(headerColumn[0].id) {
|
|
case "id_header":
|
|
sortBy = "id";
|
|
items.sort(sortArrayNumerically);
|
|
break;
|
|
case "name_header":
|
|
sortBy = "name";
|
|
items.sort(sortArrayAlphabetically);
|
|
break;
|
|
case "displaytext_header":
|
|
sortBy = "displaytext";
|
|
items.sort(sortArrayAlphabetically);
|
|
break;
|
|
case "storagetype_header":
|
|
sortBy = "storagetype";
|
|
items.sort(sortArrayAlphabetically);
|
|
break;
|
|
case "cpu_header":
|
|
//sortBy = "???";
|
|
//items.sort(sortArray???);
|
|
break;
|
|
case "memory_header":
|
|
sortBy = "memory";
|
|
parseFunction = parseInt;
|
|
items.sort(sortArrayNumericallyParse);
|
|
break;
|
|
case "offerha_header":
|
|
sortBy = "offerha";
|
|
parseFunction = toBooleanText;
|
|
items.sort(sortArrayAlphabetically);
|
|
break;
|
|
case "networktype_header":
|
|
sortBy = "usevirtualnetwork";
|
|
parseFunction = toNetworkType;
|
|
items.sort(sortArrayAlphabeticallyParse);
|
|
break;
|
|
case "tags_header":
|
|
sortBy = "tags";
|
|
items.sort(sortArrayAlphabetically);
|
|
break;
|
|
case "created_header":
|
|
sortBy = "created";
|
|
items.sort(sortArrayByDate);
|
|
break;
|
|
}
|
|
|
|
drawGrid(items, $("#submenu_content_service"), $("#service_template"), serviceJSONToTemplate);
|
|
return false;
|
|
});
|
|
|
|
activateDialog($("#dialog_add_service").dialog({
|
|
autoOpen: false,
|
|
modal: true,
|
|
zIndex: 2000
|
|
}));
|
|
|
|
activateDialog($("#dialog_edit_service").dialog({
|
|
autoOpen: false,
|
|
modal: true,
|
|
zIndex: 2000
|
|
}));
|
|
|
|
activateDialog($("#dialog_edit_disk").dialog({
|
|
autoOpen: false,
|
|
modal: true,
|
|
zIndex: 2000
|
|
}));
|
|
|
|
$("#service_add_service").bind("click", function(event) {
|
|
var dialogAddService = $("#dialog_add_service");
|
|
|
|
dialogAddService.find("#add_service_name").val("");
|
|
dialogAddService.find("#add_service_display").val("");
|
|
dialogAddService.find("#add_service_cpucore").val("");
|
|
dialogAddService.find("#add_service_cpu").val("");
|
|
dialogAddService.find("#add_service_memory").val("");
|
|
dialogAddService.find("#add_service_offerha").val("false");
|
|
|
|
(g_hypervisorType == "kvm")? dialogAddService.find("#add_service_offerha_container").hide():dialogAddService.find("#add_service_offerha_container").show();
|
|
|
|
var submenuContent = $("#submenu_content_service");
|
|
|
|
dialogAddService
|
|
.dialog('option', 'buttons', {
|
|
"Add": function() {
|
|
var thisDialog = $(this);
|
|
|
|
// validate values
|
|
var isValid = true;
|
|
isValid &= validateString("Name", thisDialog.find("#add_service_name"), thisDialog.find("#add_service_name_errormsg"));
|
|
isValid &= validateString("Display Text", thisDialog.find("#add_service_display"), thisDialog.find("#add_service_display_errormsg"));
|
|
isValid &= validateNumber("# of CPU Core", thisDialog.find("#add_service_cpucore"), thisDialog.find("#add_service_cpucore_errormsg"), 1, 1000);
|
|
isValid &= validateNumber("CPU", thisDialog.find("#add_service_cpu"), thisDialog.find("#add_service_cpu_errormsg"), 100, 100000);
|
|
isValid &= validateNumber("Memory", thisDialog.find("#add_service_memory"), thisDialog.find("#add_service_memory_errormsg"), 64, 1000000);
|
|
isValid &= validateString("Tags", thisDialog.find("#add_service_tags"), thisDialog.find("#add_service_tags_errormsg"), true); //optional
|
|
if (!isValid) return;
|
|
|
|
var submenuContent = $("#submenu_content_service");
|
|
var template = $("#service_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 array1 = [];
|
|
var name = trim(thisDialog.find("#add_service_name").val());
|
|
array1.push("&name="+todb(name));
|
|
|
|
var display = trim(thisDialog.find("#add_service_display").val());
|
|
array1.push("&displayText="+todb(display));
|
|
|
|
var storagetype = trim(thisDialog.find("#add_service_storagetype").val());
|
|
array1.push("&storageType="+storagetype);
|
|
|
|
var core = trim(thisDialog.find("#add_service_cpucore").val());
|
|
array1.push("&cpuNumber="+core);
|
|
|
|
var cpu = trim(thisDialog.find("#add_service_cpu").val());
|
|
array1.push("&cpuSpeed="+cpu);
|
|
|
|
var memory = trim(thisDialog.find("#add_service_memory").val());
|
|
array1.push("&memory="+memory);
|
|
|
|
var offerha = thisDialog.find("#add_service_offerha").val();
|
|
array1.push("&offerha="+offerha);
|
|
|
|
var networkType = thisDialog.find("#add_service_networktype").val();
|
|
var useVirtualNetwork = (networkType=="direct")? false:true;
|
|
array1.push("&usevirtualnetwork="+useVirtualNetwork);
|
|
|
|
var tags = trim(thisDialog.find("#add_service_tags").val());
|
|
if(tags != null && tags.length > 0)
|
|
array1.push("&tags="+todb(tags));
|
|
|
|
thisDialog.dialog("close");
|
|
$.ajax({
|
|
data: createURL("command=createServiceOffering"+array1.join("")+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var offering = json.createserviceofferingresponse;
|
|
serviceJSONToTemplate(offering, 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;
|
|
});
|
|
|
|
//add a new disk offering
|
|
activateDialog($("#dialog_add_disk").dialog({
|
|
autoOpen: false,
|
|
modal: true,
|
|
zIndex: 2000
|
|
}));
|
|
|
|
$("#disk_add_disk").bind("click", function(event) {
|
|
var dialogAddDisk = $("#dialog_add_disk");
|
|
dialogAddDisk.find("#disk_name").val("");
|
|
dialogAddDisk.find("#disk_description").val("");
|
|
dialogAddDisk.find("#disk_disksize").val("");
|
|
var submenuContent = $("#submenu_content_disk");
|
|
|
|
dialogAddDisk
|
|
.dialog('option', 'buttons', {
|
|
"Add": function() {
|
|
var thisDialog = $(this);
|
|
|
|
// validate values
|
|
var isValid = true;
|
|
isValid &= validateString("Name", thisDialog.find("#add_disk_name"), thisDialog.find("#add_disk_name_errormsg"));
|
|
isValid &= validateString("Description", thisDialog.find("#add_disk_description"), thisDialog.find("#add_disk_description_errormsg"));
|
|
isValid &= validateNumber("Disk size", thisDialog.find("#add_disk_disksize"), thisDialog.find("#add_disk_disksize_errormsg"), 0, null);
|
|
isValid &= validateString("Tags", thisDialog.find("#add_disk_tags"), thisDialog.find("#add_disk_tags_errormsg"), true); //optional
|
|
if (!isValid) return;
|
|
|
|
var submenuContent = $("#submenu_content_disk");
|
|
var template = $("#disk_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 array1 = [];
|
|
var name = trim(thisDialog.find("#add_disk_name").val());
|
|
array1.push("&name="+todb(name));
|
|
|
|
var description = trim(thisDialog.find("#add_disk_description").val());
|
|
array1.push("&displaytext="+todb(description));
|
|
|
|
var disksize = trim(thisDialog.find("#add_disk_disksize").val());
|
|
array1.push("&disksize="+disksize);
|
|
|
|
var tags = trim(thisDialog.find("#add_disk_tags").val());
|
|
if(tags != null && tags.length > 0)
|
|
array1.push("&tags="+todb(tags));
|
|
|
|
thisDialog.dialog("close");
|
|
$.ajax({
|
|
data: createURL("command=createDiskOffering&isMirrored=false&response=json" + array1.join("")),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var offering = json.creatediskofferingresponse;
|
|
diskJSONToTemplate(offering, 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;
|
|
});
|
|
|
|
function listServiceOfferings() {
|
|
var submenuContent = $("#submenu_content_service");
|
|
|
|
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 moreCriteria = [];
|
|
if (name!=null && trim(name).length > 0)
|
|
moreCriteria.push("&name="+todb(name));
|
|
commandString = "command=listServiceOfferings&page="+currentPage+moreCriteria.join("")+"&response=json";
|
|
} else {
|
|
var searchInput = submenuContent.find("#search_input").val();
|
|
if (searchInput != null && searchInput.length > 0)
|
|
commandString = "command=listServiceOfferings&page="+currentPage +"&keyword="+searchInput+"&response=json";
|
|
else
|
|
commandString = "command=listServiceOfferings&page="+currentPage+"&response=json";
|
|
}
|
|
|
|
//listItems(submenuContent, commandString, jsonResponse1, jsonResponse2, template, fnJSONToTemplate);
|
|
listItems(submenuContent, commandString, "listserviceofferingsresponse", "serviceoffering", $("#service_template"), serviceJSONToTemplate);
|
|
}
|
|
|
|
submenuContentEventBinder($("#submenu_content_service"), listServiceOfferings);
|
|
|
|
$("#submenu_service").bind("click", function(event) {
|
|
event.preventDefault();
|
|
|
|
$(this).toggleClass("submenu_links_on").toggleClass("submenu_links_off");
|
|
currentSubMenu.toggleClass("submenu_links_off").toggleClass("submenu_links_on");
|
|
currentSubMenu = $(this);
|
|
|
|
var submenuContent = $("#submenu_content_service").show();
|
|
$("#submenu_content_zones, #submenu_content_global, #submenu_content_disk").hide();
|
|
|
|
currentPage = 1;
|
|
listServiceOfferings();
|
|
});
|
|
|
|
//Disk Offering
|
|
$("#disk_template").bind("click", function(event) {
|
|
var template = $(this);
|
|
var link = $(event.target);
|
|
var linkAction = link.attr("id");
|
|
var diskId = template.data("diskId");
|
|
var diskName = template.data("diskName");
|
|
var submenuContent = $("#submenu_content_disk");
|
|
|
|
switch (linkAction) {
|
|
case "disk_action_edit" :
|
|
var dialogEditDisk = $("#dialog_edit_disk");
|
|
dialogEditDisk.find("#edit_disk_name").val(template.find("#disk_name").text());
|
|
dialogEditDisk.find("#edit_disk_display").val(template.find("#disk_description").text());
|
|
|
|
dialogEditDisk
|
|
.dialog('option', 'buttons', {
|
|
"Confirm": function() {
|
|
// validate values
|
|
var isValid = true;
|
|
isValid &= validateString("Name", dialogEditDisk.find("#edit_disk_name"), dialogEditDisk.find("#edit_disk_name_errormsg"));
|
|
isValid &= validateString("Display Text", dialogEditDisk.find("#edit_disk_display"), dialogEditDisk.find("#edit_disk_display_errormsg"));
|
|
if (!isValid) return;
|
|
|
|
var name = trim(dialogEditDisk.find("#edit_disk_name").val());
|
|
var display = trim(dialogEditDisk.find("#edit_disk_display").val());
|
|
|
|
var dialogBox = $(this);
|
|
dialogBox.dialog("close");
|
|
$.ajax({
|
|
data: createURL("command=updateDiskOffering&name="+todb(name)+"&displayText="+todb(display)+"&id="+diskId+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
template.find("#disk_description").text(display);
|
|
template.find("#disk_name").text(name);
|
|
template.data("diskName", name);
|
|
}
|
|
});
|
|
},
|
|
"Cancel": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
}).dialog("open");
|
|
break;
|
|
case "disk_action_delete" :
|
|
$("#dialog_confirmation")
|
|
.html("<p>Please confirm you want to remove the disk offering: <b>"+diskName+"</b> from the management server. </p>")
|
|
.dialog('option', 'buttons', {
|
|
"Confirm": function() {
|
|
var dialogBox = $(this);
|
|
$.ajax({
|
|
data: createURL("command=deleteDiskOffering&id="+diskId+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
dialogBox.dialog("close");
|
|
template.slideUp("slow", function() {
|
|
$(this).remove();
|
|
changeGridRowsTotal(submenuContent.find("#grid_rows_total"), -1);
|
|
});
|
|
}
|
|
});
|
|
},
|
|
"Cancel": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
}).dialog("open");
|
|
break;
|
|
default :
|
|
break;
|
|
}
|
|
return false;
|
|
});
|
|
|
|
function diskJSONToTemplate(json, template) {
|
|
template.attr("id", "disk_"+json.id);
|
|
if (index++ % 2 == 0) {
|
|
template.addClass("smallrow_even");
|
|
} else {
|
|
template.addClass("smallrow_odd");
|
|
}
|
|
template.data("diskId", json.id).data("diskName", fromdb(json.name));
|
|
|
|
template.find("#disk_id").text(json.id);
|
|
template.find("#disk_name").text(fromdb(json.name));
|
|
template.find("#disk_description").text(fromdb(json.displaytext));
|
|
template.find("#disk_disksize").text(convertBytes(json.disksize));
|
|
template.find("#disk_tags").text(fromdb(json.tags));
|
|
template.find("#disk_domain").text(fromdb(json.domain));
|
|
}
|
|
|
|
function listDiskOfferings() {
|
|
var submenuContent = $("#submenu_content_disk");
|
|
|
|
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 moreCriteria = [];
|
|
if (name!=null && trim(name).length > 0)
|
|
moreCriteria.push("&name="+todb(name));
|
|
commandString = "command=listDiskOfferings&page="+currentPage+moreCriteria.join("")+"&response=json"; //moreCriteria.join("")
|
|
} else {
|
|
var searchInput = submenuContent.find("#search_input").val();
|
|
if (searchInput != null && searchInput.length > 0)
|
|
commandString = "command=listDiskOfferings&page="+currentPage+"&keyword="+searchInput+"&response=json";
|
|
else
|
|
commandString = "command=listDiskOfferings&page="+currentPage+"&response=json";
|
|
}
|
|
|
|
//listItems(submenuContent, commandString, jsonResponse1, jsonResponse2, template, fnJSONToTemplate);
|
|
listItems(submenuContent, commandString, "listdiskofferingsresponse", "diskoffering", $("#disk_template"), diskJSONToTemplate);
|
|
}
|
|
|
|
submenuContentEventBinder($("#submenu_content_disk"), listDiskOfferings);
|
|
|
|
$("#submenu_disk").bind("click", function(event) {
|
|
event.preventDefault();
|
|
|
|
$(this).toggleClass("submenu_links_on").toggleClass("submenu_links_off");
|
|
currentSubMenu.toggleClass("submenu_links_off").toggleClass("submenu_links_on");
|
|
currentSubMenu = $(this);
|
|
|
|
var submenuContent = $("#submenu_content_disk").show();
|
|
$("#submenu_content_zones, #submenu_content_service, #submenu_content_global").hide();
|
|
|
|
currentPage=1;
|
|
listDiskOfferings();
|
|
});
|
|
|
|
$("#submenu_global").click();
|
|
}
|