bug 3316: Added initial UI support to live migrate VMs.

This commit is contained in:
will 2011-03-11 16:32:56 -08:00
parent a6861d0ac1
commit 85e892bded
3 changed files with 91 additions and 3 deletions

View File

@ -1,5 +1,10 @@
#New - Add all new parameters here.
label.action.migrate.instance=Migrate Instance
label.migrate.instance.to=Migrate instance to
label.full=Full
label.available=Available
message.migrate.instance.confirm=Please confirm the host you wish to migrate the virtual instance to.
message.download.volume=Please click <a href="#">00000</a> to download volume
message.download.ISO=Please click <a href="#">00000</a> to download ISO

View File

@ -31,6 +31,7 @@ dictionary = {
'label.action.reset.password.processing': '<fmt:message key="label.action.reset.password.processing"/>',
'label.action.change.service': '<fmt:message key="label.action.change.service"/>',
'label.action.change.service.processing': '<fmt:message key="label.action.change.service.processing"/>',
'label.action.migrate.instance': '<fmt:message key="label.action.migrate.instance"/>',
'label.action.detach.disk': '<fmt:message key="label.action.detach.disk"/>',
'label.action.detach.disk.processing': '<fmt:message key="label.action.detach.disk.processing"/>',
'label.action.create.template': '<fmt:message key="label.action.create.template"/>',
@ -42,6 +43,8 @@ dictionary = {
'message.action.take.snapshot': '<fmt:message key="message.action.take.snapshot"/>',
'label.data.disk.offering': '<fmt:message key="label.data.disk.offering"/>',
'label.root.disk.offering': '<fmt:message key="label.root.disk.offering"/>',
'label.full': '<fmt:message key="label.full"/>',
'label.available': '<fmt:message key="label.available"/>',
'message.launch.vm.on.private.network': '<fmt:message key="message.launch.vm.on.private.network"/>'
};
</script>
@ -1223,6 +1226,27 @@ dictionary = {
</div>
</div>
<!-- Migrate VM Dialog -->
<div id="dialog_migrate_instance" title='<fmt:message key="label.action.migrate.vm" />' style="display: none">
<p>
<fmt:message key="message.migrate.instance.confirm" />
</p>
<div class="dialog_formcontent">
<form action="#" method="post" id="form_acquire">
<ol>
<li>
<label>
<fmt:message key="label.migrate.instance.to" />:</label>
<select class="select" id="migrate_instance_hosts">
</select>
<div id="migrate_vm_hosts_errormsg" class="dialog_formcontent_errormsg" style="display: none;">
</div>
</li>
</ol>
</form>
</div>
</div>
<!-- Create template of disk volume dialog (begin) -->
<div id="dialog_create_template" title='<fmt:message key="label.action.create.template" />' style="display: none">
<p>

View File

@ -131,7 +131,8 @@ function afterLoadInstanceJSP() {
initDialog("dialog_detach_iso_from_vm");
initDialog("dialog_attach_iso");
initDialog("dialog_change_service_offering", 600);
initDialog("dialog_create_template", 400);
initDialog("dialog_create_template", 400);
initDialog("dialog_migrate_instance", 600);
$.ajax({
data: createURL("command=listOsTypes"),
@ -1367,7 +1368,16 @@ var vmActionMap = {
var jsonObj = json.changeserviceforvirtualmachineresponse.virtualmachine;
vmToMidmenu(jsonObj, $midmenuItem1);
}
}
},
"label.action.migrate.instance": {
isAsyncJob: false,
inProcessText: "label.action.migrate.instance",
dialogBeforeActionFn : doMigrateInstance,
afterActionSeccessFn: function(json, $midmenuItem1, id) {
var jsonObj = json.queryasyncjobresultresponse.jobresult.virtualmachine;
vmToMidmenu(jsonObj, $midmenuItem1);
}
}
}
function doStartVM($actionLink, $detailsTab, $midmenuItem1) {
@ -1667,6 +1677,54 @@ function doChangeService($actionLink, $detailsTab, $midmenuItem1) {
}).dialog("open");
}
function doMigrateInstance($actionLink, $detailsTab, $midmenuItem1) {
var jsonObj = $midmenuItem1.data("jsonObj");
var id = jsonObj.id;
$.ajax({
data: createURL("command=listHosts&VirtualMachineId="+id),
dataType: "json",
async: false,
success: function(json) {
var hosts = json.listhostsresponse.host;
var hostSelect = $("#dialog_migrate_instance #migrate_instance_hosts").empty();
if (hosts != null && hosts.length > 0) {
for (var i = 0; i < hosts.length; i++) {
var option = $("<option value='" + hosts[i].id + "'>" + fromdb(hosts[i].name) + ": " +((hosts[i].hasEnoughCapacity) ? dictionary["label.available"] : dictionary["label.full"]) + "</option>").data("name", fromdb(hosts[i].name));
hostSelect.append(option);
}
}
}
});
$("#dialog_migrate_instance")
.dialog('option', 'buttons', {
"OK": function() {
var $thisDialog = $(this);
var isValid = true;
isValid &= validateDropDownBox("Host", $thisDialog.find("#migrate_instance_hosts"), $thisDialog.find("#migrate_instance_errormsg"));
if (!isValid)
return;
$thisDialog.dialog("close");
var hostId = $thisDialog.find("#migrate_instance_hosts").val();
/*
if(jsonObj.state != "Stopped") {
$midmenuItem1.find("#info_icon").addClass("error").show();
$midmenuItem1.data("afterActionInfo", ($actionLink.data("label") + " action failed. Reason: virtual instance needs to be stopped before you can change its service."));
}
*/
var apiCommand = "command=migrateVirtualMachine&hostid="+hostId+"&virtualmachineid="+id;
doActionToTab(id, $actionLink, apiCommand, $midmenuItem1, $detailsTab);
},
"Cancel": function() {
$(this).dialog("close");
}
}).dialog("open");
}
function vmToMidmenu(jsonObj, $midmenuItem1) {
$midmenuItem1.data("jsonObj", jsonObj);
$midmenuItem1.attr("id", getMidmenuId(jsonObj));
@ -1830,7 +1888,8 @@ function vmBuildActionMenu(jsonObj, $thisTab, $midmenuItem1) {
buildActionLinkForTab("label.action.edit.instance", vmActionMap, $actionMenu, $midmenuItem1, $thisTab);
buildActionLinkForTab("label.action.stop.instance", vmActionMap, $actionMenu, $midmenuItem1, $thisTab);
buildActionLinkForTab("label.action.reboot.instance", vmActionMap, $actionMenu, $midmenuItem1, $thisTab);
buildActionLinkForTab("label.action.destroy.instance", vmActionMap, $actionMenu, $midmenuItem1, $thisTab);
buildActionLinkForTab("label.action.destroy.instance", vmActionMap, $actionMenu, $midmenuItem1, $thisTab);
buildActionLinkForTab("label.action.migrate.instance", vmActionMap, $actionMenu, $midmenuItem1, $thisTab);
if (jsonObj.isoid == null)
buildActionLinkForTab("label.action.attach.iso", vmActionMap, $actionMenu, $midmenuItem1, $thisTab);