bug 11481: cloudStack 2.2 - router page - add "Migration System VM" action.

This commit is contained in:
Jessica Wang 2011-10-07 15:40:08 -07:00
parent cd02613173
commit 18cd05a6a2
5 changed files with 121 additions and 11 deletions

View File

@ -4,9 +4,14 @@
#Labels
label.action.migrate.router=Migrate Router
label.action.migrate.router.processing=Migrating Router....
message.migrate.router.confirm=Please confirm the host you wish to migrate the router to:
label.migrate.router.to=Migrate Router to
label.action.migrate.systemvm=Migrate System VM
label.action.migrate.systemvm.processing=Migrating System VM....
message.migrate.systemvm.confirm=Please confirm the host you wish to migrate the System VM to:
message.migrate.systemvm.confirm=Please confirm the host you wish to migrate the system VM to:
label.migrate.systemvm.to=Migrate System VM to
mode=Mode

View File

@ -19,6 +19,11 @@ dictionary = {
'label.action.change.service': '<fmt:message key="label.action.change.service"/>',
'label.action.change.service.processing': '<fmt:message key="label.action.change.service.processing"/>',
'message.action.change.service.warning.for.router': '<fmt:message key="message.action.change.service.warning.for.router"/>',
'message.migrate.router.confirm' : '<fmt:message key="message.migrate.router.confirm"/>',
'label.action.migrate.router': '<fmt:message key="label.action.migrate.router"/>',
'label.action.migrate.router.processing': '<fmt:message key="label.action.migrate.router.processing"/>',
'label.full': '<fmt:message key="label.full"/>',
'label.available': '<fmt:message key="label.available"/>'
};
</script>
@ -226,6 +231,27 @@ dictionary = {
</div>
<!-- router detail panel (end) -->
<!-- Migrate router dialog -->
<div id="dialog_migrate_router" title='<fmt:message key="label.action.migrate.router" />' style="display: none">
<p>
<fmt:message key="message.migrate.router.confirm" />
</p>
<div class="dialog_formcontent">
<form action="#" method="post" id="form_acquire">
<ol>
<li>
<label>
<fmt:message key="label.migrate.router.to" />:</label>
<select class="select" id="host_select">
</select>
<div id="host_select_errormsg" class="dialog_formcontent_errormsg" style="display: none;">
</div>
</li>
</ol>
</form>
</div>
</div>
<!-- view console template (begin) -->
<div id="view_console_template" style="display:none">
<div class="vm_consolebox" id="box0">

View File

@ -220,9 +220,9 @@ dictionary = {
<li>
<label>
<fmt:message key="label.migrate.systemvm.to" />:</label>
<select class="select" id="migrate_instance_hosts">
<select class="select" id="host_select">
</select>
<div id="migrate_vm_hosts_errormsg" class="dialog_formcontent_errormsg" style="display: none;">
<div id="host_select_errormsg" class="dialog_formcontent_errormsg" style="display: none;">
</div>
</li>
</ol>

View File

@ -76,7 +76,8 @@ function routerGetSearchParams() {
function afterLoadRouterJSP() {
// dialogs
initDialog("dialog_change_system_service_offering", 600);
initDialog("dialog_change_system_service_offering", 600);
initDialog("dialog_migrate_router", 600);
}
function routerToMidmenu(jsonObj, $midmenuItem1) {
@ -207,7 +208,11 @@ function routerBuildActionMenu(jsonObj, $thisTab, $midmenuItem1) {
if (jsonObj.state == 'Running') {
buildActionLinkForTab("label.action.stop.router", routerActionMap, $actionMenu, $midmenuItem1, $thisTab);
buildActionLinkForTab("label.action.reboot.router", routerActionMap, $actionMenu, $midmenuItem1, $thisTab);
buildActionLinkForTab("label.action.change.service", routerActionMap, $actionMenu, $midmenuItem1, $thisTab);
buildActionLinkForTab("label.action.change.service", routerActionMap, $actionMenu, $midmenuItem1, $thisTab);
if (isAdmin())
{
buildActionLinkForTab("label.action.migrate.router", routerActionMap, $actionMenu, $midmenuItem1, $thisTab);
}
noAvailableActions = false;
}
else if (jsonObj.state == 'Stopped') {
@ -364,6 +369,59 @@ function doChangeSystemServiceOffering($actionLink, $detailsTab, $midmenuItem1)
}).dialog("open");
}
function doMigrateRouter($actionLink, $detailsTab, $midmenuItem1) {
var jsonObj = $midmenuItem1.data("jsonObj");
var id = jsonObj.id;
$.ajax({
data: createURL("command=listHosts&VirtualMachineId="+id),
//data: createURL("command=listHosts"), //for testing, comment it out before checking in.
dataType: "json",
async: false,
success: function(json) {
var hosts = json.listhostsresponse.host;
var hostSelect = $("#dialog_migrate_router #host_select").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);
}
}
},
error: function(XMLHttpResponse) {
handleError(XMLHttpResponse, function() {
$("#dialog_migrate_router #host_select").empty();
});
}
});
$("#dialog_migrate_router")
.dialog('option', 'buttons', {
"OK": function() {
var $thisDialog = $(this);
var isValid = true;
isValid &= validateDropDownBox("Host", $thisDialog.find("#host_select"), $thisDialog.find("#host_select_errormsg"));
if (!isValid)
return;
$thisDialog.dialog("close");
var hostId = $thisDialog.find("#host_select").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=migrateSystemVm&hostid="+hostId+"&virtualmachineid="+id;
doActionToTab(id, $actionLink, apiCommand, $midmenuItem1, $detailsTab);
},
"Cancel": function() {
$(this).dialog("close");
}
}).dialog("open");
}
var routerActionMap = {
"label.action.start.router": {
isAsyncJob: true,
@ -403,5 +461,26 @@ var routerActionMap = {
var jsonObj = json.changeserviceforrouterresponse.domainrouter;
vmToMidmenu(jsonObj, $midmenuItem1);
}
}
}
},
"label.action.migrate.router": {
isAsyncJob: true,
asyncJobResponse: "migratesystemvmresponse",
inProcessText: "label.action.migrate.router.processing",
dialogBeforeActionFn : doMigrateRouter,
afterActionSeccessFn: function(json, $midmenuItem1, id) {
//var jsonObj = json.queryasyncjobresultresponse.jobresult.systemvminstance; //not all properties returned in systemvminstance
$.ajax({
data: createURL("command=listRouters&id="+id),
dataType: "json",
async: false,
success: function(json) {
var items = json.listroutersresponse.router;
if(items != null && items.length > 0) {
jsonObj = items[0];
routerToMidmenu(jsonObj, $midmenuItem1);
}
}
});
}
}
}

View File

@ -389,7 +389,7 @@ function doMigrateSystemVM($actionLink, $detailsTab, $midmenuItem1) {
async: false,
success: function(json) {
var hosts = json.listhostsresponse.host;
var hostSelect = $("#dialog_migrate_systemvm #migrate_instance_hosts").empty();
var hostSelect = $("#dialog_migrate_systemvm #host_select").empty();
if (hosts != null && hosts.length > 0) {
for (var i = 0; i < hosts.length; i++) {
@ -400,7 +400,7 @@ function doMigrateSystemVM($actionLink, $detailsTab, $midmenuItem1) {
},
error: function(XMLHttpResponse) {
handleError(XMLHttpResponse, function() {
$("#dialog_migrate_systemvm #migrate_instance_hosts").empty();
$("#dialog_migrate_systemvm #host_select").empty();
});
}
});
@ -411,12 +411,12 @@ function doMigrateSystemVM($actionLink, $detailsTab, $midmenuItem1) {
var $thisDialog = $(this);
var isValid = true;
isValid &= validateDropDownBox("Host", $thisDialog.find("#migrate_instance_hosts"), $thisDialog.find("#migrate_instance_errormsg"));
isValid &= validateDropDownBox("Host", $thisDialog.find("#host_select"), $thisDialog.find("#host_select_errormsg"));
if (!isValid)
return;
$thisDialog.dialog("close");
var hostId = $thisDialog.find("#migrate_instance_hosts").val();
var hostId = $thisDialog.find("#host_select").val();
/*
if(jsonObj.state != "Stopped") {
$midmenuItem1.find("#info_icon").addClass("error").show();