mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
2647 lines
124 KiB
JavaScript
2647 lines
124 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 showInstancesTab(p_domainId, p_account) {
|
|
// Manage VM Tab
|
|
// Submenus change based on role
|
|
if (isUser()) {
|
|
$("#submenu_links, #submenu_routers, #submenu_console").hide();
|
|
} else if (isDomainAdmin()) {
|
|
$("#submenu_console, #router_template #router_action_view_console_container").hide();
|
|
}
|
|
|
|
var vIndex = 0;
|
|
var vmPopup = $("#vmpopup");
|
|
var currentPageInTemplateGridInVmPopup =1;
|
|
var selectedTemplateTypeInVmPopup; //selectedTemplateTypeInVmPopup will be set to "featured" when new VM dialog box opens
|
|
|
|
activateDialog($("#dialog_change_service_offering").dialog({
|
|
width: 600,
|
|
autoOpen: false,
|
|
modal: true,
|
|
zIndex: 2000
|
|
}));
|
|
|
|
activateDialog($("#dialog_create_template").dialog({
|
|
width: 400,
|
|
autoOpen: false,
|
|
modal: true,
|
|
zIndex: 2000
|
|
}));
|
|
|
|
activateDialog($("#dialog_change_group").dialog({
|
|
autoOpen: false,
|
|
modal: true,
|
|
zIndex: 2000
|
|
}));
|
|
|
|
activateDialog($("#dialog_list_network_groups").dialog({
|
|
width: 600,
|
|
autoOpen: false,
|
|
modal: true,
|
|
zIndex: 2000
|
|
}));
|
|
|
|
activateDialog($("#dialog_change_name").dialog({
|
|
autoOpen: false,
|
|
modal: true,
|
|
zIndex: 2000
|
|
}));
|
|
|
|
activateDialog($("#dialog_attach_iso").dialog({
|
|
width: 600,
|
|
autoOpen: false,
|
|
modal: true,
|
|
zIndex: 2000
|
|
}));
|
|
|
|
activateDialog($("#dialog_t_and_c").dialog({
|
|
width: 600,
|
|
autoOpen: false,
|
|
modal: true,
|
|
zIndex: 2000,
|
|
buttons: { "OK": function() { $(this).dialog("close"); } }
|
|
}));
|
|
|
|
$("#t_and_c").click(function(event) {
|
|
$("#dialog_t_and_c").dialog("open");
|
|
return false;
|
|
});
|
|
|
|
$("#apply_sg_public_ip").change(function() {
|
|
var publicIp = $(this).val();
|
|
var vmId = $(this).data("vmId");
|
|
var appliedSG = null;
|
|
// Get all the groups applied to this VM
|
|
$.ajax({
|
|
data: createURL("command=listPortForwardingServicesByVm&ipaddress="+publicIp+"&virtualmachineid="+vmId+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var appliedSG = json.listportforwardingservicesbyvmresponse.portforwardingservice;
|
|
addSGToSelect(appliedSG);
|
|
}
|
|
});
|
|
});
|
|
// End Security Groups Dialog setup ------------------
|
|
|
|
// VM Instance Template Setup
|
|
var vmInstanceTemplate = $("#vm_instance_template");
|
|
|
|
// FUNCTION: Sets up the thumbnail effect
|
|
function enableConsoleHover(vmTemplate) {
|
|
var offset = vmTemplate.offset();
|
|
var imgUrl = vmTemplate.data("imgUrl");
|
|
var index = 0;
|
|
if (imgUrl != null) {
|
|
var time = new Date();
|
|
$("#spopup .console_box0").css("background", "url("+imgUrl+"&t="+time.getTime()+")");
|
|
$("#spopup .console_box1").css("background", "url("+imgUrl+"&t="+time.getTime()+")");
|
|
vmTemplate.everyTime(2000, function() {
|
|
var time = new Date();
|
|
if ((index % 2) == 0) {
|
|
$("#spopup .console_box0").hide().css("background", "url("+imgUrl+"&t="+time.getTime()+")");
|
|
$("#spopup .console_box1").show();
|
|
} else {
|
|
$("#spopup .console_box1").hide().css("background", "url("+imgUrl+"&t="+time.getTime()+")");
|
|
$("#spopup .console_box0").show();
|
|
}
|
|
index++;
|
|
}, 0);
|
|
}
|
|
$("#spopup").css("top", (offset.top - 210) + "px").css("left", offset.left + "px").show();
|
|
}
|
|
vmInstanceTemplate.find("#vm_action_view_console").bind("mouseover", function(event) {
|
|
enableConsoleHover($(this));
|
|
});
|
|
vmInstanceTemplate.find("#vm_action_view_console").bind("mouseout", function(event) {
|
|
$(this).stopTime();
|
|
$("#spopup").hide();
|
|
});
|
|
|
|
function showInstanceLoading(vmInstance, actionText) {
|
|
vmInstance.find("#instance_loading_overlay").show();
|
|
vmInstance.find("#vm_instance_menu").hide();
|
|
vmInstance.find("#vm_loading_text").text(actionText);
|
|
vmInstance.find("#vm_loading_container").fadeIn("slow");
|
|
}
|
|
|
|
function hideInstanceLoading(vmInstance) {
|
|
vmInstance.find("#instance_loading_overlay").hide();
|
|
vmInstance.find("#vm_loading_container").hide();
|
|
vmInstance.find("#vm_instance_menu").fadeIn("slow");
|
|
}
|
|
|
|
vmInstanceTemplate.bind("click", function(event) {
|
|
var vmInstance = $(this);
|
|
var link = $(event.target);
|
|
var linkAction = link.attr("id");
|
|
var vmId = vmInstance.data("id");
|
|
var vmName = vmInstance.data("name");
|
|
var vmState = vmInstance.data("state");
|
|
var timerKey = "vm"+vmId;
|
|
|
|
var closeActions = false;
|
|
if (link.hasClass("vmaction_links_off")) {
|
|
return false;
|
|
} else if (link.hasClass("vmaction_links_on")) {
|
|
closeActions = true;
|
|
}
|
|
switch (linkAction) {
|
|
case "vm_action_start" :
|
|
$("#dialog_confirmation")
|
|
.html("<p>Please confirm you want to start your virtual machine: <b>"+vmName+"</b></p>")
|
|
.dialog('option', 'buttons', {
|
|
"Confirm": function() {
|
|
$(this).dialog("close");
|
|
showInstanceLoading(vmInstance, "Starting...");
|
|
vmInstance.find("#vm_state_bar").removeClass("admin_vmred_arrow admin_vmgreen_arrow").addClass("admin_vmgrey_arrow");
|
|
vmInstance.find("#vm_state").text("Starting").removeClass("grid_stoppedtitles grid_runningtitles").addClass("grid_celltitles");
|
|
vmInstance.find("#vm_action_volumes").removeClass().addClass("vm_botactionslinks_down").data("expanded", false);
|
|
vmInstance.find("#volume_detail_panel").slideUp("slow");
|
|
$.ajax({
|
|
data: createURL("command=startVirtualMachine&id="+vmId+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
vmInstance.fadeIn("slow");
|
|
$("body").everyTime(
|
|
10000,
|
|
timerKey,
|
|
function() {
|
|
$.ajax({
|
|
data: createURL("command=queryAsyncJobResult&jobId="+json.startvirtualmachineresponse.jobid+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var result = json.queryasyncjobresultresponse;
|
|
if (result.jobstatus == 0) {
|
|
return; //Job has not completed
|
|
} else {
|
|
if (vmInstance != null) {
|
|
$("body").stopTime(timerKey);
|
|
vmInstance.find("#vm_loading_container").hide();
|
|
if (result.jobstatus == 1) {
|
|
// Succeeded
|
|
vmInstance.find(".loadingmessage_container .loadingmessage_top p").html("Your instance has been successfully started.");
|
|
vmInstance.find(".loadingmessage_container").fadeIn("slow");
|
|
vmInstance.find("#vm_state_bar").removeClass("admin_vmgrey_arrow admin_vmred_arrow").addClass("admin_vmgreen_arrow");
|
|
|
|
vmInstance.find("#vm_state").text(result.virtualmachine[0].state).removeClass("grid_celltitles grid_stoppedtitles").addClass("grid_runningtitles");
|
|
vmInstance.data("state", result.virtualmachine[0].state);
|
|
|
|
if (result.virtualmachine[0].hostname != undefined) {
|
|
vmInstance.find("#vm_host").html("<strong>Host:</strong> " + sanitizeXSS(result.virtualmachine[0].hostname));
|
|
} else {
|
|
vmInstance.find("#vm_host").html("<strong>Host:</strong> ");
|
|
}
|
|
|
|
vmInstance.find("#vm_action_start, #vm_action_reset_password, #vm_action_change_service").removeClass().addClass("vmaction_links_off");
|
|
vmInstance.find("#vm_action_stop, #vm_action_reboot").removeClass().addClass("vmaction_links_on");
|
|
|
|
|
|
// Console Proxy UI
|
|
vmInstance.find("#vm_action_view_console").data("imgUrl", "console?cmd=thumbnail&vm=" + result.virtualmachine[0].id + "&w=144&h=110");
|
|
vmInstance.find("#vm_action_view_console").data("proxyUrl", "console?cmd=access&vm=" + result.virtualmachine[0].id).data("vmId",result.virtualmachine[0].id).click(function(event) {
|
|
event.preventDefault();
|
|
var viewer = window.open($(this).data("proxyUrl"),$(this).data("vmId"),"width=820,height=640,resizable=yes,menubar=no,status=no,scrollbars=no,toolbar=no,location=no");
|
|
viewer.focus();
|
|
});
|
|
vmInstance.find("#vm_action_view_console").bind("mouseover", function(event) {
|
|
enableConsoleHover($(this));
|
|
});
|
|
} else if (result.jobstatus == 2) {
|
|
// Failed
|
|
vmInstance.find("#vm_state_bar").removeClass("admin_vmgrey_arrow admin_vmgreen_arrow").addClass("admin_vmred_arrow");
|
|
vmInstance.find("#vm_state").text("Stopped").removeClass("grid_celltitles grid_runningtitles").addClass("grid_stoppedtitles");
|
|
vmInstance.find(".loadingmessage_container .loadingmessage_top p").text("Unable to start your instance due to the error: " + result.jobresult);
|
|
vmInstance.find(".loadingmessage_container").fadeIn("slow");
|
|
}
|
|
}
|
|
}
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
hideInstanceLoading(vmInstance);
|
|
$("body").stopTime(timerKey);
|
|
handleError(XMLHttpResponse);
|
|
}
|
|
});
|
|
},
|
|
0
|
|
);
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
hideInstanceLoading(vmInstance);
|
|
handleError(XMLHttpResponse);
|
|
}
|
|
});
|
|
},
|
|
"Cancel": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
}).dialog("open");
|
|
break;
|
|
case "vm_action_stop" :
|
|
$("#dialog_confirmation")
|
|
.html("<p>Please confirm you want to stop your virtual machine: <b>"+vmName+"</b></p>")
|
|
.dialog('option', 'buttons', {
|
|
"Confirm": function() {
|
|
$(this).dialog("close");
|
|
showInstanceLoading(vmInstance, "Stopping...");
|
|
vmInstance.find("#vm_state_bar").removeClass("admin_vmred_arrow admin_vmgreen_arrow").addClass("admin_vmgrey_arrow");
|
|
vmInstance.find("#vm_state").text("Stopping").removeClass("grid_stoppedtitles grid_runningtitles").addClass("grid_celltitles");
|
|
vmInstance.find("#vm_action_volumes").removeClass().addClass("vm_botactionslinks_down").data("expanded", false);
|
|
vmInstance.find("#volume_detail_panel").slideUp("slow");
|
|
$.ajax({
|
|
data: createURL("command=stopVirtualMachine&id="+vmId+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
$("body").everyTime(
|
|
10000,
|
|
timerKey,
|
|
function() {
|
|
$.ajax({
|
|
data: createURL("command=queryAsyncJobResult&jobId="+json.stopvirtualmachineresponse.jobid+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var result = json.queryasyncjobresultresponse;
|
|
if (result.jobstatus == 0) {
|
|
return; //Job has not completed
|
|
} else {
|
|
if (vmInstance != null) {
|
|
$("body").stopTime(timerKey);
|
|
vmInstance.find("#vm_loading_container").hide();
|
|
if (result.jobstatus == 1) {
|
|
// Succeeded
|
|
vmInstance.find(".loadingmessage_container .loadingmessage_top p").html("Your instance has been successfully stopped.");
|
|
vmInstance.find(".loadingmessage_container").fadeIn("slow");
|
|
vmInstance.find("#vm_state_bar").removeClass("admin_vmgrey_arrow admin_vmgreen_arrow").addClass("admin_vmred_arrow");
|
|
|
|
vmInstance.find("#vm_state").text(result.virtualmachine[0].state).removeClass("grid_celltitles grid_runningtitles").addClass("grid_stoppedtitles");
|
|
vmInstance.data("state", result.virtualmachine[0].state);
|
|
|
|
if (result.virtualmachine[0].hostname != undefined) {
|
|
vmInstance.find("#vm_host").html("<strong>Host:</strong> " + sanitizeXSS(result.virtualmachine[0].hostname));
|
|
} else {
|
|
vmInstance.find("#vm_host").html("<strong>Host:</strong> ");
|
|
}
|
|
|
|
vmInstance.find("#vm_action_start, #vm_action_reset_password, #vm_action_change_service").removeClass().addClass("vmaction_links_on");
|
|
vmInstance.find("#vm_action_stop, #vm_action_reboot").removeClass().addClass("vmaction_links_off");
|
|
vmInstance.find("#vm_action_view_console").unbind("mouseover click");
|
|
|
|
} else if (result.jobstatus == 2) {
|
|
// Failed
|
|
vmInstance.find("#vm_state_bar").removeClass("admin_vmgrey_arrow admin_vmred_arrow").addClass("admin_vmgreen_arrow");
|
|
vmInstance.find("#vm_state").text("Running").removeClass("grid_celltitles grid_stoppedtitles").addClass("grid_runningtitles");
|
|
vmInstance.find(".loadingmessage_container .loadingmessage_top p").text("Unable to stop your instance due to the error: " + result.jobresult);
|
|
vmInstance.find(".loadingmessage_container").fadeIn("slow");
|
|
}
|
|
}
|
|
}
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
hideInstanceLoading(vmInstance);
|
|
$("body").stopTime(timerKey);
|
|
handleError(XMLHttpResponse);
|
|
}
|
|
});
|
|
},
|
|
0
|
|
);
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
hideInstanceLoading(vmInstance);
|
|
handleError(XMLHttpResponse);
|
|
}
|
|
});
|
|
},
|
|
"Cancel": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
}).dialog("open");
|
|
break;
|
|
case "vm_action_reboot" :
|
|
$("#dialog_confirmation")
|
|
.html("<p>Please confirm you want to reboot your virtual machine: <b>"+vmName+"</b></p>")
|
|
.dialog('option', 'buttons', {
|
|
"Confirm": function() {
|
|
$(this).dialog("close");
|
|
showInstanceLoading(vmInstance, "Rebooting...");
|
|
vmInstance.find("#vm_state_bar").removeClass("admin_vmred_arrow admin_vmgreen_arrow").addClass("admin_vmgrey_arrow");
|
|
vmInstance.find("#vm_state").text("Rebooting").removeClass("grid_stoppedtitles grid_runningtitles").addClass("grid_celltitles");
|
|
$.ajax({
|
|
data: createURL("command=rebootVirtualMachine&id="+vmId+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
$("body").everyTime(
|
|
10000,
|
|
timerKey,
|
|
function() {
|
|
$.ajax({
|
|
data: createURL("command=queryAsyncJobResult&jobId="+json.rebootvirtualmachineresponse.jobid+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var result = json.queryasyncjobresultresponse;
|
|
if (result.jobstatus == 0) {
|
|
return; //Job has not completed
|
|
} else {
|
|
if (vmInstance != null) {
|
|
$("body").stopTime(timerKey);
|
|
vmInstance.find("#vm_loading_container").hide();
|
|
if (result.jobstatus == 1) {
|
|
// Succeeded
|
|
vmInstance.find(".loadingmessage_container .loadingmessage_top p").html("Your instance has been successfully rebooted.");
|
|
vmInstance.find(".loadingmessage_container").fadeIn("slow");
|
|
vmInstance.find("#vm_state_bar").removeClass("admin_vmgrey_arrow admin_vmred_arrow").addClass("admin_vmgreen_arrow");
|
|
vmInstance.find("#vm_state").text("Running").removeClass("grid_stoppedtitles grid_celltitles").addClass("grid_runningtitles");
|
|
} else if (result.jobstatus == 2) {
|
|
// Failed
|
|
vmInstance.find("#vm_state_bar").removeClass("admin_vmgrey_arrow admin_vmred_arrow").addClass("admin_vmgreen_arrow");
|
|
vmInstance.find("#vm_state").text("Running").removeClass("grid_celltitles grid_stoppedtitles").addClass("grid_runningtitles");
|
|
vmInstance.find(".loadingmessage_container .loadingmessage_top p").text("Unable to reboot your instance due to the error: " + result.jobresult);
|
|
vmInstance.find(".loadingmessage_container").fadeIn("slow");
|
|
}
|
|
}
|
|
}
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
hideInstanceLoading(vmInstance);
|
|
$("body").stopTime(timerKey);
|
|
handleError(XMLHttpResponse);
|
|
}
|
|
});
|
|
},
|
|
0
|
|
);
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
hideInstanceLoading(vmInstance);
|
|
handleError(XMLHttpResponse);
|
|
}
|
|
});
|
|
},
|
|
"Cancel": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
}).dialog("open");
|
|
break;
|
|
case "vm_action_destroy" :
|
|
$("#dialog_confirmation")
|
|
.html("<p>Please confirm you want to destroy your virtual machine: <b>"+vmName+"</b>. Destroying your virtual machine would include deleting the ROOT volume and all attached data disk volumes.</p>")
|
|
.dialog('option', 'buttons', {
|
|
"Confirm": function() {
|
|
$(this).dialog("close");
|
|
showInstanceLoading(vmInstance, "Destroying...");
|
|
vmInstance.find("#vm_state_bar").removeClass("admin_vmred_arrow admin_vmgreen_arrow").addClass("admin_vmgrey_arrow");
|
|
vmInstance.find("#vm_state").text("Destroying").removeClass("grid_stoppedtitles grid_runningtitles").addClass("grid_celltitles");
|
|
vmInstance.find("#vm_action_volumes").removeClass().addClass("vm_botactionslinks_down").data("expanded", false);
|
|
vmInstance.find("#volume_detail_panel").slideUp("slow");
|
|
$.ajax({
|
|
data: createURL("command=destroyVirtualMachine&id="+vmId+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
$("body").everyTime(
|
|
10000,
|
|
timerKey,
|
|
function() {
|
|
$.ajax({
|
|
data: createURL("command=queryAsyncJobResult&jobId="+json.destroyvirtualmachineresponse.jobid+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var result = json.queryasyncjobresultresponse;
|
|
if (result.jobstatus == 0) {
|
|
return; //Job has not completed
|
|
} else {
|
|
if (vmInstance != null) {
|
|
$("body").stopTime(timerKey);
|
|
vmInstance.find("#vm_loading_container").hide();
|
|
if (result.jobstatus == 1) {
|
|
// Succeeded
|
|
vmInstance.find(".loadingmessage_container .loadingmessage_top p").html("Your instance has been successfully destroyed.");
|
|
vmInstance.find(".loadingmessage_container").fadeIn("slow");
|
|
if (isAdmin()) {
|
|
vmInstance.find("#vm_state_bar").removeClass("admin_vmred_arrow admin_vmgreen_arrow").addClass("admin_vmgrey_arrow");
|
|
|
|
//No embedded object is returned. So, hardcoding state as "Destroyed".
|
|
vmInstance.find("#vm_state").text("Destroyed").removeClass("grid_stoppedtitles grid_runningtitles").addClass("grid_celltitles");
|
|
vmInstance.data("state", "Destroyed");
|
|
|
|
vmInstance.find("#vm_host").html("<strong>Host:</strong>");
|
|
|
|
vmInstance.find("#vm_action_restore").show();
|
|
vmInstance.find("#vm_action_volumes, #vm_actions").hide();
|
|
} else {
|
|
vmInstance.find(".continue_button").unbind("click").bind("click", function(event) {
|
|
$(this).parents(".loadingmessage_container").hide().prevAll(".row_loading").hide();
|
|
vmInstance.fadeOut("slow", function(event) {
|
|
$(this).remove();
|
|
});
|
|
});
|
|
}
|
|
} else if (result.jobstatus == 2) {
|
|
// Failed
|
|
if (vmState == 'Running') {
|
|
vmInstance.find("#vm_state_bar").removeClass("admin_vmgrey_arrow admin_vmred_arrow").addClass("admin_vmgreen_arrow");
|
|
vmInstance.find("#vm_state").text("Running").removeClass("grid_stoppedtitles grid_celltitles").addClass("grid_runningtitles");
|
|
} else {
|
|
vmInstance.find("#vm_state_bar").removeClass("admin_vmgrey_arrow admin_vmgreen_arrow").addClass("admin_vmred_arrow");
|
|
vmInstance.find("#vm_state").text(vmState).removeClass("grid_runningtitles grid_celltitles").addClass("grid_stoppedtitles");
|
|
}
|
|
vmInstance.find(".loadingmessage_container .loadingmessage_top p").text("Unable to destroy your instance due to the error: " + result.jobresult);
|
|
vmInstance.find(".loadingmessage_container").fadeIn("slow");
|
|
}
|
|
}
|
|
}
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
hideInstanceLoading(vmInstance);
|
|
$("body").stopTime(timerKey);
|
|
handleError(XMLHttpResponse);
|
|
}
|
|
});
|
|
},
|
|
0
|
|
);
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
hideInstanceLoading(vmInstance);
|
|
handleError(XMLHttpResponse);
|
|
}
|
|
});
|
|
},
|
|
"Cancel": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
}).dialog("open");
|
|
break;
|
|
case "vm_action_reset_password" :
|
|
if(vmState != "Stopped") {
|
|
$("#dialog_alert").html("<p><b>"+vmName+"</b> needs to be stopped before you can reset your password.</p>")
|
|
$("#dialog_alert").dialog("open");
|
|
return false;
|
|
}
|
|
if($(this).data("passwordEnabled") != "true") {
|
|
$("#dialog_alert").html("<p><b>"+vmName+"</b> is not using a template that has the password reset feature enabled. If you have forgotten your root password, please contact support.</p>")
|
|
$("#dialog_alert").dialog("open");
|
|
return false;
|
|
}
|
|
$("#dialog_confirmation")
|
|
.html("<p>Please confirm you want to change the ROOT password for your virtual machine: <b>"+vmName+"</b></p>")
|
|
.dialog('option', 'buttons', {
|
|
"Confirm": function() {
|
|
$(this).dialog("close");
|
|
showInstanceLoading(vmInstance, "Resetting password...");
|
|
$.ajax({
|
|
data: createURL("command=resetPasswordForVirtualMachine&id="+vmId+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
vmInstance.fadeIn("slow");
|
|
$("body").everyTime(
|
|
10000,
|
|
timerKey,
|
|
function() {
|
|
$.ajax({
|
|
data: createURL("command=queryAsyncJobResult&jobId="+json.resetpasswordforvirtualmachineresponse.jobid+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var result = json.queryasyncjobresultresponse;
|
|
if (result.jobstatus == 0) {
|
|
return; //Job has not completed
|
|
} else {
|
|
if (vmInstance != null) {
|
|
$("body").stopTime(timerKey);
|
|
vmInstance.find("#vm_loading_container").hide();
|
|
if (result.jobstatus == 1) {
|
|
// Succeeded
|
|
vmInstance.find(".loadingmessage_container .loadingmessage_top p").html("Your password has been successfully resetted. Your new password is : <b>" + result.virtualmachine[0].password + "</b> . Please reboot your virtual instance for the new password to take effect.");
|
|
vmInstance.find(".loadingmessage_container").fadeIn("slow");
|
|
} else if (result.jobstatus == 2) {
|
|
// Failed
|
|
vmInstance.find(".loadingmessage_container .loadingmessage_top p").text("Unable to reset your password. Please try again or contact support.");
|
|
vmInstance.find(".loadingmessage_container").fadeIn("slow");
|
|
}
|
|
}
|
|
}
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
hideInstanceLoading(vmInstance);
|
|
$("body").stopTime(timerKey);
|
|
handleError(XMLHttpResponse);
|
|
}
|
|
});
|
|
},
|
|
0
|
|
);
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
hideInstanceLoading(vmInstance);
|
|
handleError(XMLHttpResponse);
|
|
}
|
|
});
|
|
},
|
|
"Cancel": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
}).dialog("open");
|
|
break;
|
|
case "vm_action_change_service" :
|
|
if(vmState != "Stopped") {
|
|
$("#dialog_alert").html("<p><b>"+vmName+"</b> needs to be stopped before you can change its service.</p>")
|
|
$("#dialog_alert").dialog("open");
|
|
return false;
|
|
}
|
|
|
|
$("#dialog_change_service_offering").find("#change_vm_name").text(vmName);
|
|
$.ajax({
|
|
data: createURL("command=listServiceOfferings&VirtualMachineId="+vmId+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var offerings = json.listserviceofferingsresponse.serviceoffering;
|
|
var offeringSelect = $("#dialog_change_service_offering #change_service_offerings").empty();
|
|
|
|
if (offerings != null && offerings.length > 0) {
|
|
for (var i = 0; i < offerings.length; i++) {
|
|
var option = $("<option value='" + offerings[i].id + "'>" + sanitizeXSS(offerings[i].displaytext) + "</option>").data("name", offerings[i].name);
|
|
offeringSelect.append(option);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
$("#dialog_change_service_offering")
|
|
.dialog('option', 'buttons', {
|
|
"Change": function() {
|
|
$(this).dialog("close");
|
|
$.ajax({
|
|
data: createURL("command=changeServiceForVirtualMachine&id="+vmId+"&serviceOfferingId="+$("#dialog_change_service_offering #change_service_offerings").val()+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var jobId = json.changeserviceforvirtualmachineresponse.jobid;
|
|
var timerKey = "changeServiceForVirtualMachineJob_" + jobId;
|
|
$("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
|
|
vmInstance.find("#vm_loading_container").hide();
|
|
vmInstance.find(".row_loading").show();
|
|
vmInstance.find(".loadingmessage_container .loadingmessage_top p").html("Your virtual instance has been upgraded. Please restart your virtual instance for the new service offering to take effect.");
|
|
vmInstance.find(".loadingmessage_container").fadeIn("slow");
|
|
vmInstance.find("#vm_service").html("<strong>Service:</strong> " + sanitizeXSS(result.virtualmachine[0].serviceofferingname));
|
|
if (result.virtualmachine[0].haenable =='true') {
|
|
vmInstance.find("#vm_ha").html("<strong>HA:</strong> Enabled");
|
|
vmInstance.find("#vm_action_ha").text("Disable HA");
|
|
} else {
|
|
vmInstance.find("#vm_ha").html("<strong>HA:</strong> Disabled");
|
|
vmInstance.find("#vm_action_ha").text("Enable HA");
|
|
}
|
|
} else if (result.jobstatus == 2) { // Failed
|
|
$("#dialog_alert").html("<p>" + sanitizeXSS(result.jobresult) + "</p>").dialog("open");
|
|
}
|
|
}
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
handleError(XMLHttpResponse);
|
|
$("body").stopTime(timerKey);
|
|
}
|
|
});
|
|
},
|
|
0
|
|
);
|
|
}
|
|
});
|
|
},
|
|
"Cancel": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
}).dialog("open");
|
|
break;
|
|
|
|
case "vm_action_list_network_groups" :
|
|
$.ajax({
|
|
data: createURL("command=listNetworkGroups&virtualmachineid="+vmId+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var networkgroups = json.listnetworkgroupsresponse.networkgroup;
|
|
if(networkgroups != null && networkgroups.length > 0) {
|
|
var firstLevelList = $("#dialog_list_network_groups #network_groups_list_first_level").empty();
|
|
for(var i=0; i<networkgroups.length; i++) {
|
|
var secondLevelList = $("#network_groups_list_second_level").clone();
|
|
if(networkgroups[i].ingressrule != null && networkgroups[i].ingressrule.length >0) {
|
|
for(var k=0; k<networkgroups[i].ingressrule.length; k++) {
|
|
var ingressRule = networkgroups[i].ingressrule[k];
|
|
|
|
var html = [];
|
|
html.push("Protocol: " + ingressRule.protocol);
|
|
|
|
if(ingressRule.startport != null)
|
|
html.push("Start Port: " + ingressRule.startport);
|
|
if(ingressRule.endport != null)
|
|
html.push("End Port: " + ingressRule.endport);
|
|
if(ingressRule.icmptype != null)
|
|
html.push("ICMP Type: " + ingressRule.icmptype);
|
|
if(ingressRule.icmpcode != null)
|
|
html.push("ICMP Code: " + ingressRule.icmpcode);
|
|
|
|
if(ingressRule.cidr != null)
|
|
html.push("CIDR: " + ingressRule.cidr);
|
|
if(ingressRule.account != null)
|
|
html.push("Account: " + ingressRule.account);
|
|
if(ingressRule.networkgroupname != null)
|
|
html.push("Network Group: " + ingressRule.networkgroupname);
|
|
|
|
var secondLevelItem = "<li>" + html.join(", ") + "</li>";
|
|
secondLevelList.append(secondLevelItem);
|
|
}
|
|
}
|
|
var firstLevelItem = $("<li></li>");
|
|
firstLevelItem.append(networkgroups[i].name);
|
|
firstLevelItem.append(secondLevelList);
|
|
firstLevelList.append(firstLevelItem);
|
|
}
|
|
}
|
|
else { //no network group is associated
|
|
$("#dialog_list_network_groups #network_groups_list_first_level").text("This instance is not associated with any network groups.");
|
|
}
|
|
|
|
$("#dialog_list_network_groups")
|
|
.dialog('option', 'buttons', {
|
|
"Close": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
}).dialog("open");
|
|
}
|
|
});
|
|
break;
|
|
|
|
case "vm_action_change_group" :
|
|
$("#dialog_change_group").find("#vm_name").text(vmName);
|
|
$("#dialog_change_group").find("#change_group_name").val((vmInstance.data("group")==null)?"":vmInstance.data("group"));
|
|
$("#dialog_change_group")
|
|
.dialog('option', 'buttons', {
|
|
"Confirm": function() {
|
|
// validate values
|
|
var isValid = true;
|
|
isValid &= validateString("Group", $("#change_group_name"), $("#change_group_name_errormsg"), true); //group name is optional
|
|
if (!isValid) return;
|
|
|
|
var group = trim($("#change_group_name").val());
|
|
var vmInstance = $("#vm"+vmId);
|
|
$.ajax({
|
|
data: createURL("command=updateVirtualMachine&id="+vmId+"&group="+encodeURIComponent(group)+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
vmInstance.find("#vm_group").text(group);
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
handleError(XMLHttpResponse);
|
|
}
|
|
});
|
|
$(this).dialog("close");
|
|
},
|
|
"Cancel": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
}).dialog("open");
|
|
break;
|
|
case "vm_action_change_name" :
|
|
$("#dialog_change_name").find("#vm_name").text(vmName);
|
|
$("#dialog_change_name")
|
|
.dialog('option', 'buttons', {
|
|
"Confirm": function() {
|
|
// validate values
|
|
var isValid = true;
|
|
isValid &= validateString("Name", $("#change_instance_name"), $("#change_instance_name_errormsg"));
|
|
if (!isValid) return;
|
|
|
|
var name = trim($("#change_instance_name").val());
|
|
|
|
$.ajax({
|
|
data: createURL("command=updateVirtualMachine&id="+vmId+"&displayName="+encodeURIComponent(name)+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
if (isAdmin()) {
|
|
var systemName = vmInstance.data("systemName");
|
|
name = systemName + "(" + name + ")";
|
|
vmInstance.find("#vm_name").text(name);
|
|
} else {
|
|
vmInstance.find("#vm_name").text(name);
|
|
}
|
|
vmInstance.data("name", name);
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
handleError(XMLHttpResponse);
|
|
}
|
|
});
|
|
$(this).dialog("close");
|
|
},
|
|
"Cancel": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
}).dialog("open");
|
|
break;
|
|
case "vm_action_ha" :
|
|
var enable = true;
|
|
var message = "<p>Please confirm you want to enable HA for your virtual machine: <b>"+vmName+"</b>. Once HA is enabled, your Virtual Instance will be automatically restarted in the event it is detected to have failed.</p>";
|
|
if (vmInstance.data("ha") == 'true') {
|
|
enable = false;
|
|
message = "<p>Please confirm you want to disable HA for your virtual machine: <b>"+vmName+"</b>. Once HA is disabled, your Virtual Instance will no longer be be automatically restarted in the event of a failure.</p>";
|
|
}
|
|
$("#dialog_confirmation")
|
|
.html(message)
|
|
.dialog('option', 'buttons', {
|
|
"Confirm": function() {
|
|
$(this).dialog("close");
|
|
$.ajax({
|
|
data: createURL("command=updateVirtualMachine&id="+vmId+"&haenable="+enable+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
if (enable) {
|
|
vmInstance.find("#vm_ha").html("<strong>HA:</strong> Enabled");
|
|
vmInstance.find("#vm_action_ha").text("Disable HA");
|
|
vmInstance.data("ha", "true");
|
|
} else {
|
|
vmInstance.find("#vm_ha").html("<strong>HA:</strong> Disabled");
|
|
vmInstance.find("#vm_action_ha").text("Enable HA");
|
|
vmInstance.data("ha", "false");
|
|
}
|
|
}
|
|
});
|
|
},
|
|
"Cancel": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
}).dialog("open");
|
|
break;
|
|
case "vm_action_restore" :
|
|
$("#dialog_confirmation")
|
|
.html("<p>Please confirm you want to restore the virtual machine: <b>"+vmName+"</b>.</p>")
|
|
.dialog('option', 'buttons', {
|
|
"Confirm": function() {
|
|
$(this).dialog("close");
|
|
$.ajax({
|
|
data: createURL("command=recoverVirtualMachine&id="+vmId+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
vmInstance.find("#vm_state_bar").removeClass("admin_vmgrey_arrow admin_vmgreen_arrow").addClass("admin_vmred_arrow");
|
|
vmInstance.find("#vm_state").text("Stopped").removeClass("grid_celltitles grid_runningtitles").addClass("grid_stoppedtitles");
|
|
vmInstance.find("#vm_action_restore").hide();
|
|
vmInstance.find("#vm_action_volumes, #vm_actions").show();
|
|
vmInstance.find("#vm_action_start, #vm_action_reset_password, #vm_action_change_service").removeClass().addClass("vmaction_links_on");
|
|
if (vmInstance.data("isoId") != null) {
|
|
vmInstance.find("#vm_action_detach_iso").removeClass().addClass("vmaction_links_on");
|
|
vmInstance.find("#vm_action_attach_iso").removeClass().addClass("vmaction_links_off");
|
|
} else {
|
|
vmInstance.find("#vm_action_detach_iso").removeClass().addClass("vmaction_links_off");
|
|
vmInstance.find("#vm_action_attach_iso").removeClass().addClass("vmaction_links_on");
|
|
}
|
|
vmInstance.find("#vm_action_stop, #vm_action_reboot").removeClass().addClass("vmaction_links_off");
|
|
vmInstance.data("state", "Stopped");
|
|
}
|
|
});
|
|
},
|
|
"Cancel": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
}).dialog("open");
|
|
break;
|
|
case "vm_action_attach_iso" :
|
|
$.ajax({
|
|
data: createURL("command=listIsos&isReady=true&response=json"),
|
|
dataType: "json",
|
|
async: false,
|
|
success: function(json) {
|
|
var isos = json.listisosresponse.iso;
|
|
var isoSelect = $("#dialog_attach_iso #attach_iso_select");
|
|
if (isos != null && isos.length > 0) {
|
|
isoSelect.empty();
|
|
for (var i = 0; i < isos.length; i++) {
|
|
isoSelect.append("<option value='"+isos[i].id+"'>"+sanitizeXSS(isos[i].displaytext)+"</option>");;
|
|
}
|
|
}
|
|
}
|
|
});
|
|
$("#dialog_attach_iso").find("#vm_name").text(vmName);
|
|
$("#dialog_attach_iso")
|
|
.dialog('option', 'buttons', {
|
|
"Confirm": function() {
|
|
$(this).dialog("close");
|
|
var isoId = $("#dialog_attach_iso #attach_iso_select").val();
|
|
if (isoId == "none") {
|
|
$("#dialog_alert").html("<p>There is no ISO file to attach to the virtual machine.</p>")
|
|
$("#dialog_alert").dialog("open");
|
|
return false;
|
|
}
|
|
|
|
showInstanceLoading(vmInstance, "Attaching ISO...");
|
|
$.ajax({
|
|
data: createURL("command=attachIso&virtualmachineid="+vmId+"&id="+isoId+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
$("body").everyTime(
|
|
5000,
|
|
timerKey,
|
|
function() {
|
|
$.ajax({
|
|
data: createURL("command=queryAsyncJobResult&jobId="+json.attachisoresponse.jobid+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var result = json.queryasyncjobresultresponse;
|
|
if (result.jobstatus == 0) {
|
|
return; //Job has not completed
|
|
} else {
|
|
if (vmInstance != null) {
|
|
$("body").stopTime(timerKey);
|
|
vmInstance.find("#vm_loading_container").hide();
|
|
if (result.jobstatus == 1) {
|
|
// Succeeded
|
|
vmInstance.find("#iso_state").removeClass().addClass("vmiso_on");
|
|
vmInstance.data("isoId", isoId);
|
|
vmInstance.find("#vm_action_detach_iso").removeClass().addClass("vmaction_links_on");
|
|
vmInstance.find("#vm_action_attach_iso").removeClass().addClass("vmaction_links_off");
|
|
vmInstance.find(".loadingmessage_container .loadingmessage_top p").html("Your ISO has been successfully attached.");
|
|
vmInstance.find(".loadingmessage_container").fadeIn("slow");
|
|
} else if (result.jobstatus == 2) {
|
|
// Failed
|
|
vmInstance.find(".loadingmessage_container .loadingmessage_top p").text("We were unable to attach the ISO to your VM. Please contact support or try again.");
|
|
vmInstance.find(".loadingmessage_container").fadeIn("slow");
|
|
}
|
|
}
|
|
}
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
hideInstanceLoading(vmInstance);
|
|
$("body").stopTime(timerKey);
|
|
handleError(XMLHttpResponse);
|
|
}
|
|
});
|
|
},
|
|
0
|
|
);
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
hideInstanceLoading(vmInstance);
|
|
handleError(XMLHttpResponse);
|
|
}
|
|
});
|
|
},
|
|
"Cancel": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
}).dialog("open");
|
|
break;
|
|
case "vm_action_detach_iso" :
|
|
$("#dialog_confirmation")
|
|
.html("<p>Please confirm you want to detach an ISO from the virtual machine: <b>"+vmName+"</b>.</p>")
|
|
.dialog('option', 'buttons', {
|
|
"Confirm": function() {
|
|
$(this).dialog("close");
|
|
showInstanceLoading(vmInstance, "Detaching ISO...");
|
|
$.ajax({
|
|
data: createURL("command=detachIso&virtualmachineid="+vmId+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
$("body").everyTime(
|
|
5000,
|
|
timerKey,
|
|
function() {
|
|
$.ajax({
|
|
data: createURL("command=queryAsyncJobResult&jobId="+json.detachisoresponse.jobid+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var result = json.queryasyncjobresultresponse;
|
|
if (result.jobstatus == 0) {
|
|
return; //Job has not completed
|
|
} else {
|
|
if (vmInstance != null) {
|
|
$("body").stopTime(timerKey);
|
|
vmInstance.find("#vm_loading_container").hide();
|
|
if (result.jobstatus == 1) {
|
|
// Succeeded
|
|
vmInstance.find("#iso_state").removeClass().addClass("vmiso_off");
|
|
vmInstance.data("isoId", null);
|
|
vmInstance.find("#vm_action_detach_iso").removeClass().addClass("vmaction_links_off");
|
|
vmInstance.find("#vm_action_attach_iso").removeClass().addClass("vmaction_links_on");
|
|
vmInstance.find(".loadingmessage_container .loadingmessage_top p").html("You have successfully detached your ISO.");
|
|
vmInstance.find(".loadingmessage_container").fadeIn("slow");
|
|
} else if (result.jobstatus == 2) {
|
|
// Failed
|
|
vmInstance.find(".loadingmessage_container .loadingmessage_top p").text(result.jobresult);
|
|
vmInstance.find(".loadingmessage_container").fadeIn("slow");
|
|
}
|
|
}
|
|
}
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
hideInstanceLoading(vmInstance);
|
|
$("body").stopTime(timerKey);
|
|
handleError(XMLHttpResponse);
|
|
}
|
|
});
|
|
},
|
|
0
|
|
);
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
hideInstanceLoading(vmInstance);
|
|
handleError(XMLHttpResponse);
|
|
}
|
|
});
|
|
},
|
|
"Cancel": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
}).dialog("open");
|
|
break;
|
|
case "vm_action_volumes" :
|
|
var expanded = link.data("expanded");
|
|
if (expanded == null || expanded == false) {
|
|
var index = 0;
|
|
$.ajax({
|
|
cache: false,
|
|
data: createURL("command=listVolumes&virtualMachineId="+vmId+"&response=json"+maxPageSize),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var volumes = json.listvolumesresponse.volume;
|
|
if (volumes != null && volumes.length > 0) {
|
|
var grid = vmInstance.find("#detail_container").empty();
|
|
var detailTemplate = $("#volume_detail_template");
|
|
for (var i = 0; i < volumes.length; i++) {
|
|
var detail = detailTemplate.clone(true).attr("id","volume"+volumes[i].id);
|
|
if (getHypervisorType() == "kvm") {
|
|
detail.find("#volume_action_create_template").show();
|
|
}
|
|
if (vIndex++ % 2 == 0) {
|
|
detail.addClass("hostadmin_showdetails_row_even");
|
|
} else {
|
|
detail.addClass("hostadmin_showdetails_row_odd");
|
|
}
|
|
detail.find("#detail_id").text(volumes[i].id);
|
|
detail.data("volumeId", volumes[i].id).data("vmState", volumes[i].vmstate).data("vmName", volumes[i].vmname);
|
|
detail.find("#detail_name").text(volumes[i].name);
|
|
if (volumes[i].storagetype == "shared") {
|
|
detail.find("#detail_type").text(volumes[i].type + " (shared storage)");
|
|
} else {
|
|
detail.find("#detail_type").text(volumes[i].type + " (local storage)");
|
|
}
|
|
|
|
detail.find("#detail_size").text((volumes[i].size == "0") ? "" : convertBytes(volumes[i].size));
|
|
setDateField(volumes[i].created, detail.find("#detail_created"));
|
|
|
|
grid.append(detail.show());
|
|
|
|
if(volumes[i].type=="ROOT") {
|
|
if (volumes[i].vmstate == "Stopped") {
|
|
detail.find("#volume_action_detach_disk, #volume_acton_separator").hide();
|
|
} else {
|
|
detail.find("#volume_action_detach_disk, #volume_acton_separator, #volume_action_create_template").hide();
|
|
}
|
|
} else {
|
|
if (volumes[i].vmstate != "Stopped") {
|
|
detail.find("#volume_acton_separator, #volume_action_create_template").hide();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//expand volumes panel
|
|
link.removeClass().addClass("vm_botactionslinks_up");
|
|
vmInstance.find("#volume_detail_panel").slideDown("slow");
|
|
link.data("expanded", true);
|
|
|
|
//collapse statistics panel if it is expanding
|
|
if(vmInstance.find("#vm_statistics_panel").css("display") != "none")
|
|
vmInstance.find("#vm_action_statistics").click();
|
|
}
|
|
});
|
|
} else {
|
|
link.removeClass().addClass("vm_botactionslinks_down");
|
|
vmInstance.find("#volume_detail_panel").slideUp("slow");
|
|
link.data("expanded", false);
|
|
}
|
|
break;
|
|
case "vm_action_statistics" :
|
|
var expanded = link.data("expanded");
|
|
if (expanded == null || expanded == false) {
|
|
//expand statistics panel
|
|
link.removeClass().addClass("vm_botactionslinks_up");
|
|
vmInstance.find("#vm_statistics_panel").slideDown("slow");
|
|
link.data("expanded", true);
|
|
|
|
//collapse volumes panel if it is expanding
|
|
if(vmInstance.find("#volume_detail_panel").css("display") != "none")
|
|
vmInstance.find("#vm_action_volumes").click();
|
|
|
|
} else {
|
|
link.removeClass().addClass("vm_botactionslinks_down");
|
|
vmInstance.find("#vm_statistics_panel").slideUp("slow");
|
|
link.data("expanded", false);
|
|
}
|
|
break;
|
|
case "vm_actions" :
|
|
vmInstance.find("#vm_actions_container").slideDown("fast");
|
|
break;
|
|
case "vm_actions_close" :
|
|
vmInstance.find("#vm_actions_container").hide();
|
|
break;
|
|
case "vm_action_continue" :
|
|
hideInstanceLoading(vmInstance);
|
|
vmInstance.find(".loadingmessage_container").fadeOut("slow");
|
|
vmInstance.find(".row_loading").fadeOut("slow");
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
if (closeActions) {
|
|
vmInstance.find("#vm_actions_container").hide();
|
|
}
|
|
return false;
|
|
});
|
|
|
|
// FUNCTION: Parses the JSON object for VM Instances and applies it to the vm template
|
|
function vmJSONToTemplate(instanceJSON, instanceTemplate) {
|
|
instanceTemplate.attr("id","vm"+instanceJSON.id);
|
|
|
|
// Setup
|
|
var vmName = getVmName(instanceJSON.name, instanceJSON.displayname);
|
|
|
|
instanceTemplate.data("id", instanceJSON.id)
|
|
.data("systemName", sanitizeXSS(instanceJSON.name))
|
|
.data("name", sanitizeXSS(vmName))
|
|
.data("passwordEnabled", instanceJSON.passwordenabled)
|
|
.data("domainId", instanceJSON.domainid)
|
|
.data("account", sanitizeXSS(instanceJSON.account))
|
|
.data("zoneId", sanitizeXSS(instanceJSON.zoneid))
|
|
.data("state", instanceJSON.state)
|
|
.data("ha", instanceJSON.haenable);
|
|
instanceTemplate.data("group", sanitizeXSS(instanceJSON.group));
|
|
|
|
if (instanceJSON.isoId != undefined && instanceJSON.isoid.length > 0) {
|
|
instanceTemplate.data("isoId", instanceJSON.isoid);
|
|
}
|
|
instanceTemplate.find("#vm_actions").data("id", instanceJSON.id);
|
|
|
|
// Populate the template
|
|
instanceTemplate.find("#vm_name").html("<strong>Name:</strong> " + sanitizeXSS(vmName));
|
|
instanceTemplate.find("#vm_ip_address").html("<strong>IP Address:</strong> " + instanceJSON.ipaddress);
|
|
instanceTemplate.find("#vm_zone").html("<strong>Zone:</strong> " + sanitizeXSS(instanceJSON.zonename));
|
|
instanceTemplate.find("#vm_template").html("<strong>Template:</strong> " + sanitizeXSS(instanceJSON.templatename));
|
|
instanceTemplate.find("#vm_service").html("<strong>Service:</strong> " + sanitizeXSS(instanceJSON.serviceofferingname));
|
|
if (instanceJSON.haenable =='true') {
|
|
instanceTemplate.find("#vm_ha").html("<strong>HA:</strong> Enabled");
|
|
instanceTemplate.find("#vm_action_ha").text("Disable HA");
|
|
} else {
|
|
instanceTemplate.find("#vm_ha").html("<strong>HA:</strong> Disabled");
|
|
instanceTemplate.find("#vm_action_ha").text("Enable HA");
|
|
}
|
|
|
|
setDateField(instanceJSON.created, instanceTemplate.find("#vm_created"), "<strong>Created:</strong> ");
|
|
|
|
instanceTemplate.find("#vm_account").html("<strong>Account:</strong> " + sanitizeXSS(instanceJSON.account));
|
|
instanceTemplate.find("#vm_domain").html("<strong>Domain:</strong> " + sanitizeXSS(instanceJSON.domain));
|
|
if (isAdmin()) {
|
|
if (instanceJSON.hostname != undefined) {
|
|
instanceTemplate.find("#vm_host").html("<strong>Host:</strong> " + sanitizeXSS(instanceJSON.hostname));
|
|
} else {
|
|
instanceTemplate.find("#vm_host").html("<strong>Host:</strong> ");
|
|
}
|
|
}
|
|
if (instanceJSON.group != undefined) {
|
|
instanceTemplate.find("#vm_group").text(instanceJSON.group);
|
|
} else {
|
|
instanceTemplate.find("#vm_group").text("No Group");
|
|
}
|
|
|
|
// Show State of the VM
|
|
if (instanceJSON.state == 'Destroyed') {
|
|
instanceTemplate.find("#vm_state_bar").removeClass("admin_vmred_arrow admin_vmgreen_arrow").addClass("admin_vmgrey_arrow");
|
|
instanceTemplate.find("#vm_state").text(instanceJSON.state).removeClass("grid_stoppedtitles grid_runningtitles").addClass("grid_celltitles");
|
|
instanceTemplate.find("#vm_action_restore").show();
|
|
instanceTemplate.find("#vm_action_volumes, #vm_actions").hide();
|
|
instanceTemplate.find("#vm_action_view_console").unbind("mouseover");
|
|
} else if (instanceJSON.state == 'Running') {
|
|
instanceTemplate.find("#vm_state_bar").removeClass("admin_vmgrey_arrow admin_vmred_arrow").addClass("admin_vmgreen_arrow");
|
|
instanceTemplate.find("#vm_state").text(instanceJSON.state).removeClass("grid_celltitles grid_stoppedtitles").addClass("grid_runningtitles");
|
|
instanceTemplate.find("#vm_action_view_console").data("imgUrl", "console?cmd=thumbnail&vm=" + instanceJSON.id + "&w=144&h=110");
|
|
|
|
// Console Proxy UI
|
|
instanceTemplate.find("#vm_action_view_console").data("proxyUrl", "console?cmd=access&vm=" + instanceJSON.id).data("vmId",instanceJSON.id).click(function(event) {
|
|
event.preventDefault();
|
|
var viewer = window.open($(this).data("proxyUrl"),$(this).data("vmId"),"width=820,height=640,resizable=yes,menubar=no,status=no,scrollbars=no,toolbar=no,location=no");
|
|
viewer.focus();
|
|
});
|
|
|
|
// Enable/Disable actions
|
|
instanceTemplate.find("#vm_action_start, #vm_action_reset_password, #vm_action_change_service").removeClass().addClass("vmaction_links_off");
|
|
if (instanceJSON.isoid != undefined && instanceJSON.isoid.length > 0) {
|
|
instanceTemplate.find("#vm_action_attach_iso").removeClass().addClass("vmaction_links_off");
|
|
} else {
|
|
instanceTemplate.find("#vm_action_detach_iso").removeClass().addClass("vmaction_links_off");
|
|
}
|
|
} else {
|
|
if (instanceJSON.state == 'Stopped') {
|
|
instanceTemplate.find("#vm_state_bar").removeClass("admin_vmgrey_arrow admin_vmgreen_arrow").addClass("admin_vmred_arrow");
|
|
instanceTemplate.find("#vm_state").text(instanceJSON.state).removeClass("grid_celltitles grid_runningtitles").addClass("grid_stoppedtitles");
|
|
instanceTemplate.find("#vm_action_stop, #vm_action_reboot").removeClass().addClass("vmaction_links_off");
|
|
if (instanceJSON.isoid != undefined && instanceJSON.isoid.length > 0) {
|
|
instanceTemplate.find("#vm_action_attach_iso").removeClass().addClass("vmaction_links_off");
|
|
} else {
|
|
instanceTemplate.find("#vm_action_detach_iso").removeClass().addClass("vmaction_links_off");
|
|
}
|
|
} else {
|
|
instanceTemplate.find("#vm_state_bar").removeClass("admin_vmred_arrow admin_vmgreen_arrow").addClass("admin_vmgrey_arrow");
|
|
instanceTemplate.find("#vm_state").text(instanceJSON.state).removeClass("grid_stoppedtitles grid_runningtitles").addClass("grid_celltitles");
|
|
instanceTemplate.find("#vm_action_start, #vm_action_stop, #vm_action_reboot, #vm_action_attach_iso, #vm_action_detach_iso, #vm_action_reset_password, #vm_action_change_service").removeClass().addClass("vmaction_links_off");
|
|
if(instanceJSON.state == 'Creating')
|
|
instanceTemplate.find("#vm_action_destroy").hide();
|
|
}
|
|
instanceTemplate.find("#vm_action_view_console").unbind("mouseover");
|
|
}
|
|
|
|
// Show ISO state
|
|
if (instanceJSON.isoid != undefined && instanceJSON.isoid.length > 0) {
|
|
instanceTemplate.find("#iso_state").removeClass().addClass("vmiso_on");
|
|
}
|
|
|
|
if(getDirectAttachNetworkGroupsEnabled() != "true")
|
|
instanceTemplate.find("#vm_action_list_network_groups_container").hide();
|
|
|
|
var spaceCharacter = " "
|
|
var statHtml = "<div class='hostcpu_icon'></div><p><strong> CPU Total:</strong> " + ((instanceJSON.cpunumber==null)? spaceCharacter:instanceJSON.cpunumber) + " x " + ((instanceJSON.cpuspeed==null)? spaceCharacter:convertHz(instanceJSON.cpuspeed)) + " | <span class='host_statisticspanel_green'> <strong>CPU Used:</strong> " + ((instanceJSON.cpuused==null)? spaceCharacter:instanceJSON.cpuused) + "</span></p>";
|
|
instanceTemplate.find("#vm_cpu_stat").html(statHtml);
|
|
statHtml = "<div class='hostnetwork_icon'></div><p><strong> Network Read:</strong> " + ((instanceJSON.networkkbsread==null)? spaceCharacter:convertBytes(instanceJSON.networkkbsread * 1024))+" | <strong>Network Write:</strong> " + ((instanceJSON.networkkbswrite==null)? spaceCharacter:convertBytes(instanceJSON.networkkbswrite * 1024)) + "</p>";
|
|
instanceTemplate.find("#vm_network_stat").html(statHtml);
|
|
}
|
|
|
|
vmPopup.find("#wizard_service_offering").bind("click", function(event){
|
|
event.stopPropagation(); //do not use event.preventDetault(), otherwise, radio button won't be checked.
|
|
var serviceOfferingId = vmPopup.find("#wizard_service_offering input[name=service]:checked").val();
|
|
if(getDirectAttachNetworkGroupsEnabled() != "true") {
|
|
vmPopup.find("#wizard_network_groups_container").hide();
|
|
}
|
|
else {
|
|
$.ajax({
|
|
data: createURL("command=listServiceOfferings&response=json&id="+serviceOfferingId),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var offerings = json.listserviceofferingsresponse.serviceoffering;
|
|
if (offerings != null && offerings.length > 0) {
|
|
if(offerings[0].usevirtualnetwork =="true") { //virtual network
|
|
vmPopup.find("#wizard_network_groups_container").hide();
|
|
}
|
|
else { //direct attached
|
|
if(vmPopup.find("#wizard_network_groups").find("option").length == 0)
|
|
vmPopup.find("#wizard_network_groups_container").hide();
|
|
else
|
|
vmPopup.find("#wizard_network_groups_container").show();
|
|
}
|
|
|
|
}
|
|
}
|
|
});
|
|
}
|
|
});
|
|
|
|
// Add New Wizard Setup
|
|
var currentStepInVmPopup;
|
|
$(".add_newvmbutton").bind("click", function(event) {
|
|
vmPopup.fadeIn("slow");
|
|
$("#overlay_black").show();
|
|
vmWizardCleanup();
|
|
|
|
$.ajax({
|
|
data: createURL("command=listZones&available=true&response=json"+maxPageSize),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var zones = json.listzonesresponse.zone;
|
|
var zoneSelect = vmPopup.find("#wizard_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>");
|
|
}
|
|
}
|
|
listTemplatesInVmPopup();
|
|
}
|
|
});
|
|
|
|
$.ajax({
|
|
data: createURL("command=listNetworkGroups"+"&domainid="+g_domainid+"&account="+g_account+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var items = json.listnetworkgroupsresponse.networkgroup;
|
|
var networkGroupSelect = vmPopup.find("#wizard_network_groups").empty();
|
|
if (items != null && items.length > 0) {
|
|
for (var i = 0; i < items.length; i++) {
|
|
if(items[i].name != "default")
|
|
networkGroupSelect.append("<option value='" + sanitizeXSS(items[i].name) + "'>" + sanitizeXSS(items[i].name) + "</option>");
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
$.ajax({
|
|
data: createURL("command=listServiceOfferings&response=json"),
|
|
dataType: "json",
|
|
async: false,
|
|
success: function(json) {
|
|
var offerings = json.listserviceofferingsresponse.serviceoffering;
|
|
$("#wizard_service_offering").empty();
|
|
|
|
var first = true;
|
|
if (offerings != null && offerings.length > 0) {
|
|
for (var i = 0; i < offerings.length; i++) {
|
|
if(getSystemVmUseLocalStorage() == "false" && offerings[i].storagetype == "local")
|
|
continue;
|
|
var checked = "checked";
|
|
if (first == false) checked = "";
|
|
var listItem = $("<li><input class='radio' type='radio' name='service' id='service' value='"+offerings[i].id+"'" + checked + "/><label style='width:500px;font-size:11px;' for='service'>"+sanitizeXSS(offerings[i].displaytext)+"</label></li>");
|
|
$("#wizard_service_offering").append(listItem);
|
|
first = false;
|
|
}
|
|
//Safari and Chrome are not smart enough to make checkbox checked if html markup is appended by JQuery.append(). So, the following 2 lines are added.
|
|
var html_all = $("#wizard_service_offering").html();
|
|
$("#wizard_service_offering").html(html_all);
|
|
}
|
|
|
|
$.ajax({
|
|
data: createURL("command=listDiskOfferings&domainid=1&response=json"),
|
|
dataType: "json",
|
|
async: false,
|
|
success: function(json) {
|
|
var offerings = json.listdiskofferingsresponse.diskoffering;
|
|
$("#wizard_root_disk_offering, #wizard_data_disk_offering").empty();
|
|
|
|
var html =
|
|
"<li>"
|
|
+"<input class='radio' type='radio' name='datadisk' id='datadisk' value='' checked/>"
|
|
+"<label style='width:500px;font-size:11px;' for='disk'>No disk offering</label>"
|
|
+"</li>";
|
|
$("#wizard_data_disk_offering").append(html);
|
|
|
|
if (offerings != null && offerings.length > 0) {
|
|
for (var i = 0; i < offerings.length; i++) {
|
|
var html =
|
|
"<li>"
|
|
+"<input class='radio' type='radio' name='rootdisk' id='rootdisk' value='"+offerings[i].id+"'" + ((i==0)?"checked":"") + "/>"
|
|
+"<label style='width:500px;font-size:11px;' for='disk'>"+sanitizeXSS(offerings[i].displaytext)+"</label>"
|
|
+"</li>";
|
|
$("#wizard_root_disk_offering").append(html);
|
|
|
|
var html2 =
|
|
"<li>"
|
|
+"<input class='radio' type='radio' name='datadisk' id='datadisk' value='"+offerings[i].id+"'" + "/>"
|
|
+"<label style='width:500px;font-size:11px;' for='disk'>"+sanitizeXSS(offerings[i].displaytext)+"</label>"
|
|
+"</li>";
|
|
$("#wizard_data_disk_offering").append(html2);
|
|
}
|
|
//Safari and Chrome are not smart enough to make checkbox checked if html markup is appended by JQuery.append(). So, the following 2 lines are added.
|
|
var html_all = $("#wizard_root_disk_offering").html();
|
|
$("#wizard_root_disk_offering").html(html_all);
|
|
|
|
var html_all2 = $("#wizard_data_disk_offering").html();
|
|
$("#wizard_data_disk_offering").html(html_all2);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
});
|
|
|
|
vmPopup.find("#wizard_service_offering").click();
|
|
});
|
|
|
|
function vmWizardClose() {
|
|
vmPopup.hide();
|
|
$("#overlay_black").hide();
|
|
vmWizardCleanup();
|
|
}
|
|
|
|
function vmWizardCleanup() {
|
|
currentStepInVmPopup = 1;
|
|
vmPopup.find("#step1").show().nextAll().hide();
|
|
vmPopup.find(".rev_wizmid_actionback").hide();
|
|
vmPopup.find(".rev_wizmid_actionnext").show();
|
|
vmPopup.find("#wizard_message").hide();
|
|
selectedTemplateTypeInVmPopup = "featured";
|
|
$("#wiz_featured").removeClass().addClass("rev_wizmid_selectedtempbut");
|
|
$("#wiz_my, #wiz_community, #wiz_blank").removeClass().addClass("rev_wizmid_nonselectedtempbut");
|
|
currentPageInTemplateGridInVmPopup = 1;
|
|
}
|
|
|
|
vmPopup.find("#vm_wizard_close").bind("click", function(event) {
|
|
vmWizardClose();
|
|
return false;
|
|
});
|
|
|
|
vmPopup.find("#step1 #wiz_message_continue").bind("click", function(event) {
|
|
vmPopup.find("#step1 #wiz_message").hide();
|
|
return false;
|
|
});
|
|
|
|
vmPopup.find("#step2 #wiz_message_continue").bind("click", function(event) {
|
|
vmPopup.find("#step2 #wiz_message").hide();
|
|
return false;
|
|
});
|
|
|
|
function getIconForOS(osType) {
|
|
if (osType == null || osType.length == 0) {
|
|
return "";
|
|
} else {
|
|
if (osType.match("^CentOS") != null) {
|
|
return "rev_wiztemo_centosicons";
|
|
} else if (osType.match("^Windows") != null) {
|
|
return "rev_wiztemo_windowsicons";
|
|
} else {
|
|
return "rev_wiztemo_linuxicons";
|
|
}
|
|
}
|
|
}
|
|
|
|
//vm wizard search and pagination
|
|
vmPopup.find("#search_button").bind("click", function(event) {
|
|
currentPageInTemplateGridInVmPopup = 1;
|
|
listTemplatesInVmPopup();
|
|
return false; //event.preventDefault() + event.stopPropagation()
|
|
});
|
|
|
|
vmPopup.find("#search_input").bind("keypress", function(event) {
|
|
if(event.keyCode == keycode_Enter) {
|
|
vmPopup.find("#search_button").click();
|
|
return false; //event.preventDefault() + event.stopPropagation()
|
|
}
|
|
});
|
|
|
|
vmPopup.find("#nextPage").bind("click", function(event){
|
|
currentPageInTemplateGridInVmPopup++;
|
|
listTemplatesInVmPopup();
|
|
return false; //event.preventDefault() + event.stopPropagation()
|
|
});
|
|
|
|
vmPopup.find("#prevPage").bind("click", function(event){
|
|
currentPageInTemplateGridInVmPopup--;
|
|
listTemplatesInVmPopup();
|
|
return false; //event.preventDefault() + event.stopPropagation()
|
|
});
|
|
|
|
var vmPopupStep2PageSize = 11; //max number of templates each page in step2 of New VM wizard is 11
|
|
function listTemplatesInVmPopup() {
|
|
var zoneId = vmPopup.find("#wizard_zone").val();
|
|
if(zoneId == null || zoneId.length == 0)
|
|
return;
|
|
|
|
var container = vmPopup.find("#template_container");
|
|
|
|
var commandString;
|
|
var searchInput = vmPopup.find("#search_input").val();
|
|
if (selectedTemplateTypeInVmPopup != "blank") {
|
|
if (searchInput != null && searchInput.length > 0)
|
|
commandString = "command=listTemplates&templatefilter="+selectedTemplateTypeInVmPopup+"&zoneid="+zoneId+"&keyword="+searchInput+"&page="+currentPageInTemplateGridInVmPopup+"&response=json";
|
|
else
|
|
commandString = "command=listTemplates&templatefilter="+selectedTemplateTypeInVmPopup+"&zoneid="+zoneId+"&page="+currentPageInTemplateGridInVmPopup+"&response=json";
|
|
} else {
|
|
if (searchInput != null && searchInput.length > 0)
|
|
commandString = "command=listIsos&isReady=true&bootable=true&zoneid="+zoneId+"&keyword="+searchInput+"&page="+currentPageInTemplateGridInVmPopup+"&response=json";
|
|
else
|
|
commandString = "command=listIsos&isReady=true&bootable=true&zoneid="+zoneId+"&page="+currentPageInTemplateGridInVmPopup+"&response=json";
|
|
}
|
|
|
|
var loading = vmPopup.find("#wiz_template_loading").show();
|
|
if(currentPageInTemplateGridInVmPopup==1)
|
|
vmPopup.find("#prevPage").hide();
|
|
else
|
|
vmPopup.find("#prevPage").show();
|
|
|
|
$.ajax({
|
|
data: createURL(commandString),
|
|
dataType: "json",
|
|
async: false,
|
|
success: function(json) {
|
|
var items;
|
|
if (selectedTemplateTypeInVmPopup != "blank")
|
|
items = json.listtemplatesresponse.template;
|
|
else
|
|
items = json.listisosresponse.iso;
|
|
loading.hide();
|
|
container.empty();
|
|
if (items != null && items.length > 0) {
|
|
var first = true;
|
|
for (var i = 0; i < items.length; i++) {
|
|
var divClass = "rev_wiztemplistbox";
|
|
if (first) {
|
|
divClass = "rev_wiztemplistbox_selected";
|
|
first = false;
|
|
}
|
|
|
|
var html = '<div class="'+divClass+'" id="'+items[i].id+'">'
|
|
+'<div class="'+getIconForOS(items[i].ostypename)+'"></div>'
|
|
+'<div class="rev_wiztemp_listtext">'+sanitizeXSS(items[i].displaytext)+'</div>'
|
|
+'<div class="rev_wiztemp_ownertext">'+sanitizeXSS(items[i].account)+'</div>'
|
|
+'</div>';
|
|
container.append(html);
|
|
}
|
|
if(items.length < vmPopupStep2PageSize)
|
|
vmPopup.find("#nextPage").hide();
|
|
else
|
|
vmPopup.find("#nextPage").show();
|
|
|
|
} else {
|
|
var msg;
|
|
if (selectedTemplateTypeInVmPopup != "blank")
|
|
msg = "No templates available";
|
|
else
|
|
msg = "No ISOs available";
|
|
var html = '<div class="rev_wiztemplistbox" id="-2">'
|
|
+'<div></div>'
|
|
+'<div class="rev_wiztemp_listtext">'+msg+'</div>'
|
|
+'</div>';
|
|
container.append(html);
|
|
vmPopup.find("#nextPage").hide();
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
vmPopup.find("#template_container").bind("click", function(event) {
|
|
var container = $(this);
|
|
var target = $(event.target);
|
|
var parent = target.parent();
|
|
if (parent.hasClass("rev_wiztemplistbox_selected") || parent.hasClass("rev_wiztemplistbox")) {
|
|
target = parent;
|
|
}
|
|
if (target.attr("id") != "-2") {
|
|
if (target.hasClass("rev_wiztemplistbox")) {
|
|
container.find(".rev_wiztemplistbox_selected").removeClass().addClass("rev_wiztemplistbox");
|
|
target.removeClass().addClass("rev_wiztemplistbox_selected");
|
|
} else if (target.hasClass("rev_wiztemplistbox_selected")) {
|
|
target.removeClass().addClass("rev_wiztemplistbox");
|
|
}
|
|
}
|
|
});
|
|
|
|
vmPopup.find("#wizard_zone").bind("change", function(event) {
|
|
var selectedZone = $(this).val();
|
|
if(selectedZone != null && selectedZone.length > 0)
|
|
listTemplatesInVmPopup();
|
|
return false;
|
|
});
|
|
|
|
function displayDiskOffering(type) {
|
|
if(type=="data") {
|
|
vmPopup.find("#wizard_data_disk_offering_title").show();
|
|
vmPopup.find("#wizard_data_disk_offering").show();
|
|
vmPopup.find("#wizard_root_disk_offering_title").hide();
|
|
vmPopup.find("#wizard_root_disk_offering").hide();
|
|
}
|
|
else if(type=="root") {
|
|
vmPopup.find("#wizard_root_disk_offering_title").show();
|
|
vmPopup.find("#wizard_root_disk_offering").show();
|
|
vmPopup.find("#wizard_data_disk_offering_title").hide();
|
|
vmPopup.find("#wizard_data_disk_offering").hide();
|
|
}
|
|
}
|
|
displayDiskOffering("data"); //because default value of "#wiz_template_filter" is "wiz_featured"
|
|
|
|
// Setup the left template filters
|
|
vmPopup.find("#wiz_template_filter").unbind("click").bind("click", function(event) {
|
|
var container = $(this);
|
|
var target = $(event.target);
|
|
var targetId = target.attr("id");
|
|
selectedTemplateTypeInVmPopup = "featured";
|
|
switch (targetId) {
|
|
case "wiz_featured":
|
|
vmPopup.find("#search_input").val("");
|
|
currentPageInTemplateGridInVmPopup = 1;
|
|
selectedTemplateTypeInVmPopup = "featured";
|
|
container.find("#wiz_featured").removeClass().addClass("rev_wizmid_selectedtempbut");
|
|
container.find("#wiz_my, #wiz_community, #wiz_blank").removeClass().addClass("rev_wizmid_nonselectedtempbut");
|
|
displayDiskOffering("data");
|
|
break;
|
|
case "wiz_my":
|
|
vmPopup.find("#search_input").val("");
|
|
currentPageInTemplateGridInVmPopup = 1;
|
|
container.find("#wiz_my").removeClass().addClass("rev_wizmid_selectedtempbut");
|
|
container.find("#wiz_featured, #wiz_community, #wiz_blank").removeClass().addClass("rev_wizmid_nonselectedtempbut");
|
|
selectedTemplateTypeInVmPopup = "selfexecutable";
|
|
displayDiskOffering("data");
|
|
break;
|
|
case "wiz_community":
|
|
vmPopup.find("#search_input").val("");
|
|
currentPageInTemplateGridInVmPopup = 1;
|
|
container.find("#wiz_community").removeClass().addClass("rev_wizmid_selectedtempbut");
|
|
container.find("#wiz_my, #wiz_featured, #wiz_blank").removeClass().addClass("rev_wizmid_nonselectedtempbut");
|
|
selectedTemplateTypeInVmPopup = "community";
|
|
displayDiskOffering("data");
|
|
break;
|
|
case "wiz_blank":
|
|
vmPopup.find("#search_input").val("");
|
|
currentPageInTemplateGridInVmPopup = 1;
|
|
container.find("#wiz_blank").removeClass().addClass("rev_wizmid_selectedtempbut");
|
|
container.find("#wiz_my, #wiz_community, #wiz_featured").removeClass().addClass("rev_wizmid_nonselectedtempbut");
|
|
selectedTemplateTypeInVmPopup = "blank";
|
|
displayDiskOffering("root");
|
|
break;
|
|
}
|
|
listTemplatesInVmPopup();
|
|
return false;
|
|
});
|
|
|
|
vmPopup.find(".rev_wizmid_actionnext").bind("click", function(event) {
|
|
event.preventDefault();
|
|
event.stopPropagation();
|
|
|
|
var thisPopup = vmPopup;
|
|
|
|
if (currentStepInVmPopup == 1) {
|
|
// prevent a person from moving on if no templates are selected
|
|
if(thisPopup.find("#step1 #template_container .rev_wiztemplistbox_selected").length == 0) {
|
|
thisPopup.find("#step1 #wiz_message").show();
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if (currentStepInVmPopup == 2) {
|
|
// prevent a person from moving on if no service offering is selected
|
|
if(thisPopup.find("#step2 #wizard_service_offering li").length == 0) {
|
|
thisPopup.find("#step2 #wiz_message #wiz_message_text").text("Please select a service offering to continue");
|
|
thisPopup.find("#step2 #wiz_message").show();
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if(currentStepInVmPopup ==3) {
|
|
// validate values
|
|
var isValid = true;
|
|
isValid &= validateString("Name", thisPopup.find("#wizard_vm_name"), thisPopup.find("#wizard_vm_name_errormsg"), true);
|
|
isValid &= validateString("Group", thisPopup.find("#wizard_vm_group"), thisPopup.find("#wizard_vm_group_errormsg"), true);
|
|
if (!isValid) return;
|
|
|
|
// populate data for next step (step 4)
|
|
if (thisPopup.find("#wiz_blank").hasClass("rev_wizmid_selectedtempbut")) { //selected template type is ISO(blank template)
|
|
thisPopup.find("#wizard_review_root_disk_offering").text(thisPopup.find("#wizard_root_disk_offering input[name=rootdisk]:checked").next().text());
|
|
thisPopup.find("#wizard_review_root_disk_offering_p").show();
|
|
thisPopup.find("#wizard_review_iso").text(thisPopup.find("#step1 .rev_wiztemplistbox_selected .rev_wiztemp_listtext").text());
|
|
thisPopup.find("#wizard_review_iso_p").show();
|
|
thisPopup.find("#wizard_review_data_disk_offering_p").hide();
|
|
thisPopup.find("#wizard_review_template").text("Blank Template");
|
|
} else { //selected template type is template(non-blank template)
|
|
thisPopup.find("#wizard_review_template").text(thisPopup.find("#step1 .rev_wiztemplistbox_selected .rev_wiztemp_listtext").text());
|
|
thisPopup.find("#wizard_review_data_disk_offering_p").show();
|
|
thisPopup.find("#wizard_review_data_disk_offering").text(thisPopup.find("#wizard_data_disk_offering input[name=datadisk]:checked").next().text());
|
|
thisPopup.find("#wizard_review_root_disk_offering_p").hide();
|
|
thisPopup.find("#wizard_review_iso_p").hide();
|
|
}
|
|
|
|
thisPopup.find("#wizard_review_service_offering").text(thisPopup.find("#wizard_service_offering input[name=service]:checked").next().text());
|
|
thisPopup.find("#wizard_review_zone").text(thisPopup.find("#wizard_zone option:selected").text());
|
|
thisPopup.find("#wizard_review_name").text(thisPopup.find("#wizard_vm_name").val());
|
|
thisPopup.find("#wizard_review_group").text(thisPopup.find("#wizard_vm_group").val());
|
|
|
|
if(thisPopup.find("#wizard_network_groups_container").css("display") != "none" && thisPopup.find("#wizard_network_groups").val() != null) {
|
|
var networkGroupList = thisPopup.find("#wizard_network_groups").val().join(",");
|
|
thisPopup.find("#wizard_review_network_groups_p").show();
|
|
thisPopup.find("#wizard_review_network_groups").text(networkGroupList);
|
|
} else {
|
|
thisPopup.find("#wizard_review_network_groups_p").hide();
|
|
thisPopup.find("#wizard_review_network_groups").text("");
|
|
}
|
|
}
|
|
if (currentStepInVmPopup == 4) {
|
|
// Create a new VM!!!!
|
|
var moreCriteria = [];
|
|
moreCriteria.push("&zoneId="+thisPopup.find("#wizard_zone").val());
|
|
|
|
var name = trim(thisPopup.find("#wizard_vm_name").val());
|
|
if (name != null && name.length > 0)
|
|
moreCriteria.push("&displayname="+encodeURIComponent(name));
|
|
|
|
var group = trim(thisPopup.find("#wizard_vm_group").val());
|
|
if (group != null && group.length > 0)
|
|
moreCriteria.push("&group="+encodeURIComponent(group));
|
|
|
|
if(thisPopup.find("#wizard_network_groups_container").css("display") != "none" && thisPopup.find("#wizard_network_groups").val() != null) {
|
|
var networkGroupList = thisPopup.find("#wizard_network_groups").val().join(",");
|
|
moreCriteria.push("&networkgrouplist="+encodeURIComponent(networkGroupList));
|
|
}
|
|
|
|
moreCriteria.push("&templateId="+thisPopup.find("#step1 .rev_wiztemplistbox_selected").attr("id"));
|
|
|
|
moreCriteria.push("&serviceOfferingId="+thisPopup.find("#wizard_service_offering input[name=service]:checked").val());
|
|
|
|
if (thisPopup.find("#wiz_blank").hasClass("rev_wizmid_selectedtempbut")) { //ISO
|
|
var diskOfferingId = thisPopup.find("#wizard_root_disk_offering input[name=rootdisk]:checked").val();
|
|
moreCriteria.push("&diskOfferingId="+diskOfferingId);
|
|
}
|
|
else { //template
|
|
var diskOfferingId = thisPopup.find("#wizard_data_disk_offering input[name=datadisk]:checked").val();
|
|
if(diskOfferingId != null && diskOfferingId != "")
|
|
moreCriteria.push("&diskOfferingId="+diskOfferingId);
|
|
}
|
|
|
|
vmWizardClose();
|
|
|
|
var vmInstance = vmInstanceTemplate.clone(true);
|
|
// Add it to the DOM
|
|
showInstanceLoading(vmInstance, "Creating...");
|
|
vmInstance.find("#vm_state_bar").removeClass("admin_vmred_arrow admin_vmgreen_arrow").addClass("admin_vmgrey_arrow");
|
|
vmInstance.find("#vm_state").text("Creating").removeClass("grid_stoppedtitles grid_runningtitles").addClass("grid_celltitles");
|
|
vmInstance.fadeIn("slow");
|
|
$("#submenu_content_vms #grid_content").prepend(vmInstance);
|
|
|
|
$.ajax({
|
|
data: createURL("command=deployVirtualMachine"+moreCriteria.join("")+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var jobId = json.deployvirtualmachineresponse.jobid;
|
|
vmInstance.attr("id","vmNew"+jobId).data("jobId", jobId);
|
|
var timerKey = "vmNew"+jobId;
|
|
|
|
// Process the async job
|
|
$("body").everyTime(
|
|
10000,
|
|
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);
|
|
//vmInstance.find(".loading_animationcontainer").hide();
|
|
vmInstance.find("#vm_loading_container").hide();
|
|
if (result.jobstatus == 1) {
|
|
// Succeeded
|
|
vmJSONToTemplate(result.virtualmachine[0], vmInstance);
|
|
if (result.virtualmachine[0].passwordenabled == 'true') {
|
|
vmInstance.find(".loadingmessage_container .loadingmessage_top p").html("Your instance has been successfully created. Your new password is : <b>" + result.virtualmachine[0].password + "</b> . Please change it as soon as you log into your new instance");
|
|
} else {
|
|
vmInstance.find(".loadingmessage_container .loadingmessage_top p").html("Your instance has been successfully created.");
|
|
}
|
|
vmInstance.find(".loadingmessage_container").fadeIn("slow");
|
|
vmInstance.attr("id", "vm" + result.virtualmachine[0].id);
|
|
vmInstance.find("#vm_state_bar").removeClass("admin_vmred_arrow admin_vmgrey_arrow").addClass("admin_vmgreen_arrow");
|
|
vmInstance.find("#vm_state").text("Running").removeClass("grid_stoppedtitles grid_celltitles").addClass("grid_runningtitles");
|
|
changeGridRowsTotal($("#grid_rows_total"), 1);
|
|
} else if (result.jobstatus == 2) {
|
|
// Failed
|
|
vmInstance.find(".loadingmessage_container .loadingmessage_top p").text("Unable to create your new instance due to the error: " + result.jobresult);
|
|
vmInstance.find(".loadingmessage_container").fadeIn("slow");
|
|
vmInstance.find(".continue_button").data("jobId", result.jobid).unbind("click").bind("click", function(event) {
|
|
event.preventDefault();
|
|
var deadVM = $("#vmNew"+$(this).data("jobId"));
|
|
deadVM.slideUp("slow", function() {
|
|
$(this).remove();
|
|
});
|
|
});
|
|
}
|
|
}
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
$("body").stopTime(timerKey);
|
|
handleError(XMLHttpResponse);
|
|
}
|
|
});
|
|
},
|
|
0
|
|
);
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
vmInstance.slideUp("slow", function() {
|
|
$(this).remove();
|
|
});
|
|
handleError(XMLHttpResponse);
|
|
}
|
|
});
|
|
}
|
|
|
|
//since no error, move to next step
|
|
vmPopup.find(".rev_wizmid_actionback").show();
|
|
vmPopup.find("#step" + currentStepInVmPopup).hide().next().show();
|
|
currentStepInVmPopup++;
|
|
});
|
|
|
|
vmPopup.find(".rev_wizmid_actionback").bind("click", function(event) {
|
|
vmPopup.find("#step" + currentStepInVmPopup).hide().prev().show();
|
|
currentStepInVmPopup--;
|
|
if (currentStepInVmPopup == 1) {
|
|
vmPopup.find(".rev_wizmid_actionback").hide();
|
|
}
|
|
return false; //event.preventDefault() + event.stopPropagation()
|
|
});
|
|
|
|
var currentSubMenu = $("#submenu_vms");
|
|
$("#submenu_vms").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_vms").show();
|
|
$("#submenu_content_console, #submenu_content_routers, #submenu_content_snapshots").hide();
|
|
|
|
// Major HACK here. I am reusing the disk header as the account header.
|
|
if (isAdmin()) {
|
|
$("#vm_disk_header").text("Account");
|
|
$("#vm_group_header").text("Host");
|
|
submenuContent.find("#adv_search_pod_li, #adv_search_domain_li, #adv_search_account_li").show();
|
|
}
|
|
|
|
// Setup VM Page by listing User's VMs
|
|
currentPage = 1;
|
|
listVirtualMachines();
|
|
});
|
|
|
|
function listVirtualMachines() {
|
|
var submenuContent = $("#submenu_content_vms");
|
|
|
|
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 state = submenuContent.find("#advanced_search #adv_search_state").val();
|
|
var zone = submenuContent.find("#advanced_search #adv_search_zone").val();
|
|
var pod = submenuContent.find("#advanced_search #adv_search_pod").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("&name="+encodeURIComponent(trim(name)));
|
|
if (state!=null && state.length > 0)
|
|
moreCriteria.push("&state="+state);
|
|
if (zone!=null && zone.length > 0)
|
|
moreCriteria.push("&zoneid="+zone);
|
|
if (domainId!=null && domainId.length > 0)
|
|
moreCriteria.push("&domainid="+domainId);
|
|
if (pod!=null && pod.length > 0)
|
|
moreCriteria.push("&podId="+pod);
|
|
if (account!=null && account.length > 0)
|
|
moreCriteria.push("&account="+account);
|
|
commandString = "command=listVirtualMachines&page="+currentPage+moreCriteria.join("")+"&response=json";
|
|
} else {
|
|
var searchInput = submenuContent.find("#search_input").val();
|
|
if (searchInput != null && searchInput.length > 0) {
|
|
commandString = "command=listVirtualMachines&page="+currentPage+"&keyword="+searchInput+"&response=json";
|
|
}
|
|
else {
|
|
var moreCriteria = [];
|
|
// "p_domainId!=null" and "p_account!=null" means redirected from "VMs" link on Accounts page to here(Instances page)
|
|
if(p_domainId!=null && p_domainId.length > 0)
|
|
moreCriteria.push("&domainid="+p_domainId);
|
|
if (p_account!=null && p_account.length > 0)
|
|
moreCriteria.push("&account="+p_account);
|
|
commandString = "command=listVirtualMachines&page="+currentPage+moreCriteria.join("")+"&response=json";
|
|
}
|
|
}
|
|
|
|
//listItems(submenuContent, commandString, jsonResponse1, jsonResponse2, template, fnJSONToTemplate);
|
|
listItems(submenuContent, commandString, "listvirtualmachinesresponse", "virtualmachine", vmInstanceTemplate, vmJSONToTemplate);
|
|
}
|
|
|
|
submenuContentEventBinder($("#submenu_content_vms"), listVirtualMachines);
|
|
|
|
//*** router_template event handler (begin) ******************************************************************
|
|
$("#router_template").bind("mouseenter", function(event) {
|
|
$(this).find("#grid_links_container").show();
|
|
return false;
|
|
});
|
|
$("#router_template").bind("mouseleave", function(event) {
|
|
$(this).find("#grid_links_container").hide();
|
|
return false;
|
|
});
|
|
|
|
$("#router_template").bind("click", function(event) {
|
|
var template = $(this);
|
|
var link = $(event.target);
|
|
var linkAction = link.attr("id");
|
|
var id = template.data("routerId");
|
|
var name = template.data("routerName");
|
|
switch (linkAction) {
|
|
case "router_action_start" :
|
|
$("#dialog_confirmation")
|
|
.html("<p>Please confirm you want to start the router: <b>"+name+"</b></p>")
|
|
.dialog('option', 'buttons', {
|
|
"Confirm": function() {
|
|
var dialogBox = $(this);
|
|
$.ajax({
|
|
data: createURL("command=startRouter&id="+id+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
dialogBox.dialog("close");
|
|
|
|
template.find(".row_loading").show();
|
|
template.find(".loading_animationcontainer .loading_animationtext").text("Starting...");
|
|
template.find(".loading_animationcontainer").show();
|
|
template.fadeIn("slow");
|
|
var that = template; //"that" is a closure and will be used in callback function.
|
|
template.find(".continue_button").data("id", id).unbind("click").bind("click", function(event) {
|
|
event.preventDefault();
|
|
that.find(".loading_animationcontainer").hide();
|
|
that.find(".loadingmessage_container").fadeOut("slow");
|
|
that.find(".row_loading").fadeOut("slow");
|
|
});
|
|
var timerKey = "router"+id;
|
|
$("body").everyTime(
|
|
10000,
|
|
timerKey,
|
|
function() {
|
|
$.ajax({
|
|
data: createURL("command=queryAsyncJobResult&jobId="+json.startrouterresponse.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
|
|
routerJSONToTemplate(result.router[0], template);
|
|
template.find(".loadingmessage_container .loadingmessage_top p").html("Your router has been successfully started.");
|
|
template.find(".loadingmessage_container").fadeIn("slow");
|
|
} else if (result.jobstatus == 2) {
|
|
// Failed
|
|
template.find("#router_state_bar").removeClass("yellow_statusbar green_statusbar grey_statusbar").addClass("red_statusbar");
|
|
template.find("#router_state").text("Stopped").removeClass("grid_runningtitles grid_celltitles").addClass("grid_stoppedtitles");
|
|
template.find(".grid_links").find("#router_action_start_container").show();
|
|
template.find(".grid_links").find("#router_action_stop_container, #router_action_view_console_container, #router_action_reboot_container").hide();
|
|
template.find(".loadingmessage_container .loadingmessage_top p").text("We were unable to start the router. Please check your logs for more info.");
|
|
template.find(".loadingmessage_container").fadeIn("slow");
|
|
}
|
|
}
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
$("body").stopTime(timerKey);
|
|
handleError(XMLHttpResponse);
|
|
}
|
|
});
|
|
},
|
|
0
|
|
);
|
|
}
|
|
});
|
|
},
|
|
"Cancel": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
}).dialog("open");
|
|
break;
|
|
case "router_action_stop" :
|
|
$("#dialog_confirmation")
|
|
.html("<p>Please confirm you want to stop the router: <b>"+name+"</b></p>")
|
|
.dialog('option', 'buttons', {
|
|
"Confirm": function() {
|
|
var dialogBox = $(this);
|
|
$.ajax({
|
|
data: createURL("command=stopRouter&id="+id+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
dialogBox.dialog("close");
|
|
|
|
template.find(".row_loading").show();
|
|
template.find(".loading_animationcontainer .loading_animationtext").text("Stopping...");
|
|
template.find(".loading_animationcontainer").show();
|
|
template.fadeIn("slow");
|
|
var that = template; //"that" is a closure and will be used in callback function.
|
|
template.find(".continue_button").data("id", id).unbind("click").bind("click", function(event) {
|
|
event.preventDefault();
|
|
that.find(".loading_animationcontainer").hide();
|
|
that.find(".loadingmessage_container").fadeOut("slow");
|
|
that.find(".row_loading").fadeOut("slow");
|
|
});
|
|
var timerKey = "router"+id;
|
|
$("body").everyTime(
|
|
10000,
|
|
timerKey,
|
|
function() {
|
|
$.ajax({
|
|
data: createURL("command=queryAsyncJobResult&jobId="+json.stoprouterresponse.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
|
|
routerJSONToTemplate(result.router[0], template);
|
|
template.find(".loadingmessage_container .loadingmessage_top p").html("Your router has been successfully stopped.");
|
|
template.find(".loadingmessage_container").fadeIn("slow");
|
|
} else if (result.jobstatus == 2) {
|
|
// Failed
|
|
template.find("#router_state_bar").removeClass("yellow_statusbar grey_statusbar red_statusbar").addClass("green_statusbar");
|
|
template.find("#router_state").text("Running").removeClass("grid_celltitles grid_stoppedtitles").addClass("grid_runningtitles");
|
|
template.find(".grid_links").find("#router_action_stop_container, #router_action_view_console_container, #router_action_reboot_container").show();
|
|
template.find(".grid_links").find("#router_action_start_container").hide();
|
|
template.find(".loadingmessage_container .loadingmessage_top p").text("We were unable to stop the router. Please check your logs for more info.");
|
|
template.find(".loadingmessage_container").fadeIn("slow");
|
|
}
|
|
}
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
$("body").stopTime(timerKey);
|
|
handleError(XMLHttpResponse);
|
|
}
|
|
});
|
|
},
|
|
0
|
|
);
|
|
}
|
|
});
|
|
},
|
|
"Cancel": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
}).dialog("open");
|
|
break;
|
|
case "router_action_reboot" :
|
|
$("#dialog_confirmation")
|
|
.html("<p>Please confirm you want to reboot the router: <b>"+name+"</b></p>")
|
|
.dialog('option', 'buttons', {
|
|
"Confirm": function() {
|
|
var dialogBox = $(this);
|
|
$.ajax({
|
|
data: createURL("command=rebootRouter&id="+id+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
dialogBox.dialog("close");
|
|
|
|
template.find(".row_loading").show();
|
|
template.find(".loading_animationcontainer .loading_animationtext").text("Rebooting...");
|
|
template.find(".loading_animationcontainer").show();
|
|
template.fadeIn("slow");
|
|
var that = template; //"that" is a closure and will be used in callback function.
|
|
template.find(".continue_button").data("id", id).unbind("click").bind("click", function(event) {
|
|
event.preventDefault();
|
|
that.find(".loading_animationcontainer").hide();
|
|
that.find(".loadingmessage_container").fadeOut("slow");
|
|
that.find(".row_loading").fadeOut("slow");
|
|
});
|
|
var timerKey = "router"+id;
|
|
$("body").everyTime(
|
|
10000,
|
|
timerKey,
|
|
function() {
|
|
$.ajax({
|
|
data: createURL("command=queryAsyncJobResult&jobId="+json.rebootrouterresponse.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
|
|
routerJSONToTemplate(result.router[0], template);
|
|
template.find(".loadingmessage_container .loadingmessage_top p").html("Your router has been successfully rebooted.");
|
|
template.find(".loadingmessage_container").fadeIn("slow");
|
|
} else if (result.jobstatus == 2) {
|
|
// Failed
|
|
template.find("#router_state_bar").removeClass("yellow_statusbar grey_statusbar red_statusbar").addClass("green_statusbar");
|
|
template.find("#router_state").text("Running").removeClass("grid_celltitles grid_stoppedtitles").addClass("grid_runningtitles");
|
|
template.find(".grid_links").find("#router_action_stop_container, #router_action_view_console_container, #router_action_reboot_container").show();
|
|
template.find(".grid_links").find("#router_action_start_container").hide();
|
|
template.find(".loadingmessage_container .loadingmessage_top p").text("We were unable to reboot the router. Please check your logs for more info.");
|
|
template.find(".loadingmessage_container").fadeIn("slow");
|
|
}
|
|
}
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
$("body").stopTime(timerKey);
|
|
handleError(XMLHttpResponse);
|
|
}
|
|
});
|
|
},
|
|
0
|
|
);
|
|
}
|
|
});
|
|
},
|
|
"Cancel": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
}).dialog("open");
|
|
break;
|
|
default :
|
|
break;
|
|
}
|
|
return false;
|
|
});
|
|
//*** router_template event handler (end) ********************************************************************
|
|
|
|
//*** console_template event handler (begin) ******************************************************************
|
|
$("#console_template").bind("mouseenter", function(event) {
|
|
$(this).find("#grid_links_container").show();
|
|
return false;
|
|
});
|
|
$("#console_template").bind("mouseleave", function(event) {
|
|
$(this).find("#grid_links_container").hide();
|
|
return false;
|
|
});
|
|
|
|
$("#console_template").bind("click", function(event) {
|
|
var template = $(this);
|
|
var link = $(event.target);
|
|
var linkAction = link.attr("id");
|
|
var id = template.data("consoleId");
|
|
var name = template.data("consoleName");
|
|
switch (linkAction) {
|
|
case "console_action_start" :
|
|
$("#dialog_confirmation")
|
|
.html("<p>Please confirm you want to start the system VM: <b>"+name+"</b></p>")
|
|
.dialog('option', 'buttons', {
|
|
"Confirm": function() {
|
|
var dialogBox = $(this);
|
|
$.ajax({
|
|
data: createURL("command=startSystemVm&id="+id+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
dialogBox.dialog("close");
|
|
|
|
template.find(".row_loading").show();
|
|
template.find(".loading_animationcontainer .loading_animationtext").text("Starting...");
|
|
template.find(".loading_animationcontainer").show();
|
|
template.fadeIn("slow");
|
|
var that = template; //"that" is a closure and will be used in callback function.
|
|
template.find(".continue_button").data("id", id).unbind("click").bind("click", function(event) {
|
|
event.preventDefault();
|
|
that.find(".loading_animationcontainer").hide();
|
|
that.find(".loadingmessage_container").fadeOut("slow");
|
|
that.find(".row_loading").fadeOut("slow");
|
|
});
|
|
var timerKey = "console"+id;
|
|
$("body").everyTime(
|
|
10000,
|
|
timerKey,
|
|
function() {
|
|
$.ajax({
|
|
data: createURL("command=queryAsyncJobResult&jobId="+json["startsystemvmresponse"].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
|
|
consoleJSONToTemplate(result.systemvm[0], template);
|
|
template.find(".loadingmessage_container .loadingmessage_top p").html("Your system vm has been successfully started.");
|
|
template.find(".loadingmessage_container").fadeIn("slow");
|
|
} else if (result.jobstatus == 2) {
|
|
// Failed
|
|
template.find("#console_state_bar").removeClass("yellow_statusbar green_statusbar grey_statusbar").addClass("red_statusbar");
|
|
template.find("#console_state").text("Stopped").removeClass("grid_runningtitles grid_celltitles").addClass("grid_stoppedtitles");
|
|
template.find(".grid_links").find("#console_action_start_container").show();
|
|
template.find(".grid_links").find("#console_action_stop_container, #console_action_view_console_container, #console_action_reboot_container").hide();
|
|
template.find(".loadingmessage_container .loadingmessage_top p").text("We were unable to start the console. Please check your logs for more info.");
|
|
template.find(".loadingmessage_container").fadeIn("slow");
|
|
}
|
|
}
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
$("body").stopTime(timerKey);
|
|
handleError(XMLHttpResponse);
|
|
}
|
|
});
|
|
},
|
|
0
|
|
);
|
|
}
|
|
});
|
|
},
|
|
"Cancel": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
}).dialog("open");
|
|
break;
|
|
case "console_action_stop" :
|
|
$("#dialog_confirmation")
|
|
.html("<p>Please confirm you want to stop the system VM: <b>"+name+"</b></p>")
|
|
.dialog('option', 'buttons', {
|
|
"Confirm": function() {
|
|
var dialogBox = $(this);
|
|
$.ajax({
|
|
data: createURL("command=stopSystemVm&id="+id+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
dialogBox.dialog("close");
|
|
|
|
template.find(".row_loading").show();
|
|
template.find(".loading_animationcontainer .loading_animationtext").text("Stopping...");
|
|
template.find(".loading_animationcontainer").show();
|
|
template.fadeIn("slow");
|
|
var that = template; //"that" is a closure and will be used in callback function.
|
|
template.find(".continue_button").data("id", id).unbind("click").bind("click", function(event) {
|
|
event.preventDefault();
|
|
that.find(".loading_animationcontainer").hide();
|
|
that.find(".loadingmessage_container").fadeOut("slow");
|
|
that.find(".row_loading").fadeOut("slow");
|
|
});
|
|
var timerKey = "console"+id;
|
|
$("body").everyTime(
|
|
10000,
|
|
timerKey,
|
|
function() {
|
|
$.ajax({
|
|
data: createURL("command=queryAsyncJobResult&jobId="+json["stopsystemvmresponse"].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
|
|
consoleJSONToTemplate(result.systemvm[0], template);
|
|
template.find(".loadingmessage_container .loadingmessage_top p").html("Your system vm has been successfully stopped.");
|
|
template.find(".loadingmessage_container").fadeIn("slow");
|
|
} else if (result.jobstatus == 2) {
|
|
// Failed
|
|
template.find("#console_state_bar").removeClass("yellow_statusbar grey_statusbar red_statusbar").addClass("green_statusbar");
|
|
template.find("#console_state").text("Running").removeClass("grid_celltitles grid_stoppedtitles").addClass("grid_runningtitles");
|
|
template.find(".grid_links").find("#console_action_stop_container, #console_action_view_console_container, #console_action_reboot_container").show();
|
|
template.find(".grid_links").find("#console_action_start_container").hide();
|
|
template.find(".loadingmessage_container .loadingmessage_top p").text("We were unable to stop the console. Please check your logs for more info.");
|
|
template.find(".loadingmessage_container").fadeIn("slow");
|
|
}
|
|
}
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
$("body").stopTime(timerKey);
|
|
handleError(XMLHttpResponse);
|
|
}
|
|
});
|
|
},
|
|
0
|
|
);
|
|
}
|
|
});
|
|
},
|
|
"Cancel": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
}).dialog("open");
|
|
break;
|
|
case "console_action_reboot" :
|
|
$("#dialog_confirmation")
|
|
.html("<p>Please confirm you want to reboot the system VM: <b>"+name+"</b></p>")
|
|
.dialog('option', 'buttons', {
|
|
"Confirm": function() {
|
|
var dialogBox = $(this);
|
|
$.ajax({
|
|
data: createURL("command=rebootSystemVm&id="+id+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
dialogBox.dialog("close");
|
|
|
|
template.find(".row_loading").show();
|
|
template.find(".loading_animationcontainer .loading_animationtext").text("Rebooting...");
|
|
template.find(".loading_animationcontainer").show();
|
|
template.fadeIn("slow");
|
|
var that = template; //"that" is a closure and will be used in callback function.
|
|
template.find(".continue_button").data("id", id).unbind("click").bind("click", function(event) {
|
|
event.preventDefault();
|
|
that.find(".loading_animationcontainer").hide();
|
|
that.find(".loadingmessage_container").fadeOut("slow");
|
|
that.find(".row_loading").fadeOut("slow");
|
|
});
|
|
var timerKey = "console"+id;
|
|
$("body").everyTime(
|
|
10000,
|
|
timerKey,
|
|
function() {
|
|
$.ajax({
|
|
data: createURL("command=queryAsyncJobResult&jobId="+json["rebootsystemvmresponse"].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
|
|
consoleJSONToTemplate(result.systemvm[0], template);
|
|
template.find(".loadingmessage_container .loadingmessage_top p").html("Your system vm has been successfully rebooted.");
|
|
template.find(".loadingmessage_container").fadeIn("slow");
|
|
} else if (result.jobstatus == 2) {
|
|
// Failed
|
|
template.find("#console_state_bar").removeClass("yellow_statusbar grey_statusbar red_statusbar").addClass("green_statusbar");
|
|
template.find("#console_state").text("Running").removeClass("grid_celltitles grid_stoppedtitles").addClass("grid_runningtitles");
|
|
template.find(".grid_links").find("#console_action_stop_container, #console_action_view_console_container, #console_action_reboot_container").show();
|
|
template.find(".grid_links").find("#console_action_start_container").hide();
|
|
template.find(".loadingmessage_container .loadingmessage_top p").text("We were unable to reboot the console. Please check your logs for more info.");
|
|
template.find(".loadingmessage_container").fadeIn("slow");
|
|
}
|
|
}
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
$("body").stopTime(timerKey);
|
|
handleError(XMLHttpResponse);
|
|
}
|
|
});
|
|
},
|
|
0
|
|
);
|
|
}
|
|
});
|
|
},
|
|
"Cancel": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
}).dialog("open");
|
|
break;
|
|
default :
|
|
break;
|
|
}
|
|
return false;
|
|
});
|
|
//*** console_template event handler (end) ********************************************************************
|
|
|
|
//routers page
|
|
function listRouters() {
|
|
var submenuContent = $("#submenu_content_routers");
|
|
|
|
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 state = submenuContent.find("#advanced_search #adv_search_state").val();
|
|
var zone = submenuContent.find("#advanced_search #adv_search_zone").val();
|
|
var pod = submenuContent.find("#advanced_search #adv_search_pod").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("&name="+encodeURIComponent(trim(name)));
|
|
if (state!=null && state.length > 0)
|
|
moreCriteria.push("&state="+state);
|
|
if (zone!=null && zone.length > 0)
|
|
moreCriteria.push("&zoneId="+zone);
|
|
if (pod!=null && pod.length > 0)
|
|
moreCriteria.push("&podId="+pod);
|
|
if (domainId!=null && domainId.length > 0)
|
|
moreCriteria.push("&domainid="+domainId);
|
|
if (account!=null && account.length > 0)
|
|
moreCriteria.push("&account="+account);
|
|
commandString = "command=listRouters&page="+currentPage+moreCriteria.join("")+"&response=json";
|
|
} else {
|
|
var searchInput = submenuContent.find("#search_input").val();
|
|
if (searchInput != null && searchInput.length > 0)
|
|
commandString = "command=listRouters&page="+currentPage+"&keyword="+searchInput+"&response=json";
|
|
else
|
|
commandString = "command=listRouters&page="+currentPage+"&response=json";
|
|
}
|
|
|
|
//listItems(submenuContent, commandString, jsonResponse1, jsonResponse2, template, fnJSONToTemplate);
|
|
listItems(submenuContent, commandString, "listroutersresponse", "router", $("#router_template"), routerJSONToTemplate);
|
|
}
|
|
|
|
function routerJSONToTemplate(json, template) {
|
|
if (index % 2 == 0)
|
|
template.addClass("row_odd");
|
|
else
|
|
template.addClass("row_even");
|
|
template.data("routerId", json.id).data("routerName", noNull(json.name)).attr("id", "router"+json.id);
|
|
template.find("#router_zonename").text(noNull(json.zonename));
|
|
template.find("#router_name").text(noNull(json.name));
|
|
template.find("#router_public_ip").text(noNull(json.publicip));
|
|
template.find("#router_private_ip").text(noNull(json.privateip));
|
|
template.find("#router_guest_ip").text(noNull(json.guestipaddress));
|
|
template.find("#router_host").text(noNull(json.hostname));
|
|
template.find("#router_domain").text(noNull(json.networkdomain));
|
|
template.find("#router_owner").text(noNull(json.account));
|
|
setDateField(json.created, template.find("#router_created"));
|
|
|
|
// State
|
|
if (json.state == 'Running') {
|
|
template.find("#router_state_bar").removeClass("yellow_statusbar grey_statusbar red_statusbar").addClass("green_statusbar ");
|
|
template.find("#router_state").text(json.state).removeClass("grid_celltitles grid_stoppedtitles").addClass("grid_runningtitles");
|
|
template.find(".grid_links").find("#router_action_start_container").hide();
|
|
template.find(".grid_links").find("#router_action_stop_container, #router_action_reboot_container, #router_action_view_console_container").show();
|
|
// Console Proxy UI
|
|
template.find("#router_action_view_console").data("proxyUrl", "console?cmd=access&vm=" + json.id).data("vmId",json.id).click(function(event) {
|
|
event.preventDefault();
|
|
var viewer = window.open($(this).data("proxyUrl"),$(this).data("vmId"),"width=820,height=640,resizable=yes,menubar=no,status=no,scrollbars=no,toolbar=no,location=no");
|
|
viewer.focus();
|
|
});
|
|
} else if (json.state == 'Stopped') {
|
|
template.find("#router_state_bar").removeClass("yellow_statusbar grey_statusbar green_statusbar").addClass("red_statusbar");
|
|
template.find("#router_state").text(json.state).removeClass("grid_celltitles grid_runningtitles").addClass("grid_stoppedtitles");
|
|
template.find(".grid_links").find("#router_action_stop_container, #router_action_reboot_container, #router_action_view_console_container").hide();
|
|
template.find(".grid_links").find("#router_action_start_container").show();
|
|
template.find("#router_action_view_console").unbind("click");
|
|
} else {
|
|
template.find("#router_state_bar").removeClass("yellow_statusbar green_statusbar red_statusbar").addClass("grey_statusbar");
|
|
template.find("#router_state").text(json.state).removeClass("grid_runningtitles grid_stoppedtitles").addClass("grid_celltitles");
|
|
template.find(".grid_links").find("#router_action_start_container, #router_action_stop_container, #router_action_reboot_container, #router_action_view_console_container").hide();
|
|
template.find("#router_action_view_console").unbind("click");
|
|
}
|
|
}
|
|
|
|
$("#submenu_routers").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_routers").show();
|
|
$("#submenu_content_vms, #submenu_content_console, #submenu_content_snapshots").hide();
|
|
|
|
if (isAdmin())
|
|
submenuContent.find("#adv_search_pod_li, #adv_search_domain_li, #adv_search_account_li").show();
|
|
|
|
currentPage = 1;
|
|
listRouters();
|
|
});
|
|
|
|
submenuContentEventBinder($("#submenu_content_routers"), listRouters);
|
|
|
|
//console proxy
|
|
function listConsoleProxies() {
|
|
var submenuContent = $("#submenu_content_console");
|
|
|
|
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 state = submenuContent.find("#advanced_search #adv_search_state").val();
|
|
var zone = submenuContent.find("#advanced_search #adv_search_zone").val();
|
|
var pod = submenuContent.find("#advanced_search #adv_search_pod").val();
|
|
var domainId = submenuContent.find("#advanced_search #adv_search_domain").val();
|
|
var moreCriteria = [];
|
|
if (name!=null && trim(name).length > 0)
|
|
moreCriteria.push("&name="+encodeURIComponent(trim(name)));
|
|
if (state!=null && state.length > 0)
|
|
moreCriteria.push("&state="+state);
|
|
if (zone!=null && zone.length > 0)
|
|
moreCriteria.push("&zoneId="+zone);
|
|
if (pod!=null && pod.length > 0)
|
|
moreCriteria.push("&podId="+pod);
|
|
if (domainId!=null && domainId.length > 0)
|
|
moreCriteria.push("&domainid="+domainId);
|
|
commandString = "command=listSystemVms&page="+currentPage+moreCriteria.join("")+"&response=json";
|
|
} else {
|
|
var searchInput = submenuContent.find("#search_input").val();
|
|
if (searchInput != null && searchInput.length > 0)
|
|
commandString = "command=listSystemVms&page="+currentPage+"&keyword="+searchInput+"&response=json"
|
|
else
|
|
commandString = "command=listSystemVms&page="+currentPage+"&response=json";
|
|
}
|
|
|
|
//listItems(submenuContent, commandString, jsonResponse1, jsonResponse2, template, fnJSONToTemplate);
|
|
listItems(submenuContent, commandString, "listsystemvmsresponse", "systemvm", $("#console_template"), consoleJSONToTemplate);
|
|
}
|
|
|
|
function consoleJSONToTemplate(json, template) {
|
|
if (index++ % 2 == 0)
|
|
template.addClass("row_odd");
|
|
else
|
|
template.addClass("row_even");
|
|
template.data("consoleId", json.id).data("consoleName", noNull(json.name)).attr("id", "console"+json.id);
|
|
template.find("#console_type").text(noNull(json.systemvmtype));
|
|
template.find("#console_name").text(noNull(json.name));
|
|
template.find("#console_zone").text(noNull(json.zonename));
|
|
template.find("#console_active_session").text(noNull(json.activeviewersessions));
|
|
template.find("#console_public_ip").text(noNull(json.publicip));
|
|
template.find("#console_private_ip").text(noNull(json.privateip));
|
|
template.find("#console_host").text(noNull(json.hostname));
|
|
template.find("#console_gateway").text(noNull(json.gateway));
|
|
setDateField(json.created, template.find("#console_created"));
|
|
|
|
// State
|
|
if (json.state == 'Running') {
|
|
template.find("#console_state_bar").removeClass("yellow_statusbar grey_statusbar red_statusbar").addClass("green_statusbar ");
|
|
template.find("#console_state").text(json.state).removeClass("grid_celltitles grid_stoppedtitles").addClass("grid_runningtitles");
|
|
template.find(".grid_links").find("#console_action_start_container").hide();
|
|
template.find(".grid_links").find("#console_action_stop_container, #console_action_reboot_container, #console_action_view_console_container").show();
|
|
// Console Proxy UI
|
|
template.find("#console_action_view_console").data("proxyUrl", "console?cmd=access&vm=" + json.id).data("vmId", json.id).click(function(event) {
|
|
event.preventDefault();
|
|
var viewer = window.open($(this).data("proxyUrl"),$(this).data("vmId"),"width=820,height=640,resizable=yes,menubar=no,status=no,scrollbars=no,toolbar=no,location=no");
|
|
viewer.focus();
|
|
});
|
|
} else if (json.state == 'Stopped') {
|
|
template.find("#console_state_bar").removeClass("yellow_statusbar grey_statusbar green_statusbar").addClass("red_statusbar");
|
|
template.find("#console_state").text(json.state).removeClass("grid_celltitles grid_runningtitles").addClass("grid_stoppedtitles");
|
|
template.find(".grid_links").find("#console_action_stop_container, #console_action_reboot_container, #console_action_view_console_container").hide();
|
|
template.find(".grid_links").find("#console_action_start_container").show();
|
|
template.find("#console_action_view_console").unbind("click");
|
|
} else {
|
|
template.find("#console_state_bar").removeClass("yellow_statusbar green_statusbar red_statusbar").addClass("grey_statusbar");
|
|
template.find("#console_state").text(json.state).removeClass("grid_runningtitles grid_stoppedtitles").addClass("grid_celltitles");
|
|
template.find(".grid_links").find("#console_action_start_container, #console_action_stop_container, #console_action_reboot_container, #console_action_view_console_container").hide();
|
|
template.find("#console_action_view_console").unbind("click");
|
|
}
|
|
}
|
|
|
|
// CONSOLE PROXY SUBMENU
|
|
$("#submenu_console").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_console").show();
|
|
$("#submenu_content_vms, #submenu_content_routers, #submenu_content_snapshots").hide();
|
|
|
|
if (isAdmin())
|
|
submenuContent.find("#adv_search_pod_li #adv_search_domain_li").show();
|
|
|
|
currentPage = 1;
|
|
listConsoleProxies();
|
|
});
|
|
|
|
submenuContentEventBinder($("#submenu_content_console"), listConsoleProxies);
|
|
|
|
activateDialog($("#dialog_detach_volume").dialog({
|
|
autoOpen: false,
|
|
modal: true,
|
|
zIndex: 2000
|
|
}));
|
|
|
|
$("#volume_detail_template").bind("click", function(event) {
|
|
var template = $(this);
|
|
var link = $(event.target);
|
|
var linkAction = link.attr("id");
|
|
var volumeId = template.data("volumeId");
|
|
var volumeName = template.data("volumeName");
|
|
var vmState = template.data("vmState");
|
|
var vmName = template.data("vmName");
|
|
var timerKey = "volume"+volumeId;
|
|
switch (linkAction) {
|
|
case "volume_action_detach_disk" :
|
|
$("#dialog_confirmation")
|
|
.html("<p>Please confirm you want to detach the volume. If you are detaching a disk volume from a Windows based virtual machine, you will need to reboot the instance for the settings to take effect.</p>")
|
|
.dialog('option', 'buttons', {
|
|
"Confirm": function() {
|
|
$(this).dialog("close");
|
|
template.find(".adding_loading .adding_text").text("Detaching...");
|
|
template.find(".adding_loading").show();
|
|
template.find("#volume_body").hide();
|
|
$.ajax({
|
|
data: createURL("command=detachVolume&id="+volumeId+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
$("body").everyTime(5000, timerKey, function() {
|
|
$.ajax({
|
|
data: createURL("command=queryAsyncJobResult&jobId="+json.detachvolumeresponse.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
|
|
template.find(".adding_loading").hide();
|
|
template.find("#volume_body").show();
|
|
$("#dialog_alert").html("<p>" + sanitizeXSS(result.jobresult) + "</p>").dialog("open");
|
|
}
|
|
}
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
$("body").stopTime(timerKey);
|
|
handleError(XMLHttpResponse);
|
|
}
|
|
});
|
|
}, 0);
|
|
}
|
|
});
|
|
},
|
|
"Cancel": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
}).dialog("open");
|
|
break;
|
|
case "volume_action_create_template" :
|
|
if(vmState != "Stopped") {
|
|
$("#dialog_alert").html("<p><b>"+vmName+"</b> needs to be stopped before you can create a template of this disk volume.</p>")
|
|
$("#dialog_alert").dialog("open");
|
|
return false;
|
|
}
|
|
$("#dialog_create_template").find("#volume_name").text(volumeName);
|
|
$("#dialog_create_template")
|
|
.dialog('option', 'buttons', {
|
|
"Create": function() {
|
|
// validate values
|
|
var isValid = true;
|
|
isValid &= validateString("Name", $("#create_template_name"), $("#create_template_name_errormsg"));
|
|
isValid &= validateString("Display Text", $("#create_template_desc"), $("#create_template_desc_errormsg"));
|
|
if (!isValid) return;
|
|
|
|
var name = trim($("#create_template_name").val());
|
|
var desc = trim($("#create_template_desc").val());
|
|
var osType = $("#create_template_os_type").val();
|
|
var isPublic = $("#create_template_public").val();
|
|
var password = $("#create_template_password").val();
|
|
|
|
$(this).dialog("close");
|
|
template.find(".adding_loading .adding_text").text("Creating Template...");
|
|
template.find(".adding_loading").show();
|
|
template.find("#volume_body").hide();
|
|
$.ajax({
|
|
data: createURL("command=createTemplate&volumeId="+volumeId+"&name="+encodeURIComponent(name)+"&displayText="+encodeURIComponent(desc)+"&osTypeId="+osType+"&isPublic="+isPublic+"&passwordEnabled="+password+"&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
$("body").everyTime(
|
|
30000, // This is templates..it could take hours
|
|
timerKey,
|
|
function() {
|
|
$.ajax({
|
|
data: createURL("command=queryAsyncJobResult&jobId="+json.createtemplateresponse.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);
|
|
template.find(".adding_loading").hide();
|
|
template.find("#volume_body").show();
|
|
if (result.jobstatus == 1) {
|
|
$("#dialog_info").html("<p>Private template: " + name + " has been successfully created</p>").dialog("open");
|
|
} else if (result.jobstatus == 2) {
|
|
$("#dialog_alert").html("<p>" + result.jobresult + "</p>").dialog("open");
|
|
}
|
|
}
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
template.find(".adding_loading").hide();
|
|
template.find("#volume_body").show();
|
|
$("body").stopTime(timerKey);
|
|
handleError(XMLHttpResponse);
|
|
}
|
|
});
|
|
},
|
|
0
|
|
);
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
template.find(".adding_loading").hide();
|
|
template.find("#volume_body").show();
|
|
handleError(XMLHttpResponse);
|
|
}
|
|
});
|
|
},
|
|
"Cancel": function() {
|
|
$(this).dialog("close");
|
|
}
|
|
}).dialog("open");
|
|
break;
|
|
default :
|
|
break;
|
|
}
|
|
return false;
|
|
});
|
|
|
|
$.ajax({
|
|
data: createURL("command=listOsTypes&response=json"),
|
|
dataType: "json",
|
|
success: function(json) {
|
|
types = json.listostypesresponse.ostype;
|
|
if (types != null && types.length > 0) {
|
|
var select = $("#dialog_create_template #create_template_os_type").empty();
|
|
for (var i = 0; i < types.length; i++) {
|
|
select.append("<option value='" + types[i].id + "'>" + types[i].description + "</option>");
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
$("#submenu_vms").click();
|
|
}
|