diff --git a/client/WEB-INF/classes/resources/messages.properties b/client/WEB-INF/classes/resources/messages.properties
index 936b634d653..669203fa868 100644
--- a/client/WEB-INF/classes/resources/messages.properties
+++ b/client/WEB-INF/classes/resources/messages.properties
@@ -4,6 +4,11 @@
#Labels
+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:
+label.migrate.systemvm.to=Migrate System VM to
+
mode=Mode
side.by.side=Side by Side
inline=Inline
diff --git a/ui/jsp/systemvm.jsp b/ui/jsp/systemvm.jsp
index 0065263ef8c..8d35997fb05 100644
--- a/ui/jsp/systemvm.jsp
+++ b/ui/jsp/systemvm.jsp
@@ -18,7 +18,12 @@ dictionary = {
'message.action.reboot.systemvm' : '',
'label.action.destroy.systemvm': '',
'label.action.destroy.systemvm.processing': '',
- 'message.action.destroy.systemvm': ''
+ 'message.migrate.systemvm.confirm' : '',
+ 'label.action.migrate.systemvm': '',
+ 'label.action.migrate.systemvm.processing': '',
+ 'message.action.destroy.systemvm': '',
+ 'label.full': '',
+ 'label.available': ''
};
@@ -204,6 +209,27 @@ dictionary = {
+
+
diff --git a/ui/scripts/cloud.core.systemvm.js b/ui/scripts/cloud.core.systemvm.js
index 314a39f1dcc..557568c92c9 100644
--- a/ui/scripts/cloud.core.systemvm.js
+++ b/ui/scripts/cloud.core.systemvm.js
@@ -45,7 +45,7 @@
}
function afterLoadSystemVmJSP($midmenuItem1) {
-
+ initDialog("dialog_migrate_systemvm", 600);
}
function systemvmToMidmenu(jsonObj, $midmenuItem1) {
@@ -183,7 +183,11 @@ function systemvmBuildActionMenu(jsonObj, $thisTab, $midmenuItem1) {
if (jsonObj.state == 'Running') {
buildActionLinkForTab("label.action.stop.systemvm", systemVmActionMap, $actionMenu, $midmenuItem1, $thisTab);
buildActionLinkForTab("label.action.reboot.systemvm", systemVmActionMap, $actionMenu, $midmenuItem1, $thisTab);
- buildActionLinkForTab("label.action.destroy.systemvm", systemVmActionMap, $actionMenu, $midmenuItem1, $thisTab);
+ buildActionLinkForTab("label.action.destroy.systemvm", systemVmActionMap, $actionMenu, $midmenuItem1, $thisTab);
+ if (isAdmin())
+ {
+ buildActionLinkForTab("label.action.migrate.systemvm", systemVmActionMap, $actionMenu, $midmenuItem1, $thisTab);
+ }
noAvailableActions = false;
}
else if (jsonObj.state == 'Stopped') {
@@ -276,7 +280,28 @@ var systemVmActionMap = {
});
}
- }
+ },
+ "label.action.migrate.systemvm": {
+ isAsyncJob: true,
+ asyncJobResponse: "migratesystemvmresponse",
+ inProcessText: "label.action.migrate.systemvm.processing",
+ dialogBeforeActionFn : doMigrateSystemVM,
+ afterActionSeccessFn: function(json, $midmenuItem1, id) {
+ //var jsonObj = json.queryasyncjobresultresponse.jobresult.systemvminstance; //not all properties returned in systemvminstance
+ $.ajax({
+ data: createURL("command=listSystemVms&id="+id),
+ dataType: "json",
+ async: false,
+ success: function(json) {
+ var items = json.listsystemvmsresponse.systemvm;
+ if(items != null && items.length > 0) {
+ jsonObj = items[0];
+ systemvmToMidmenu(jsonObj, $midmenuItem1);
+ }
+ }
+ });
+ }
+ }
}
function doStartSystemVM($actionLink, $detailsTab, $midmenuItem1) {
@@ -352,4 +377,58 @@ function doDestroySystemVM($actionLink, $detailsTab, $midmenuItem1) {
$(this).dialog("close");
}
}).dialog("open");
-}
+}
+
+function doMigrateSystemVM($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_systemvm #migrate_instance_hosts").empty();
+
+ if (hosts != null && hosts.length > 0) {
+ for (var i = 0; i < hosts.length; i++) {
+ var option = $("").data("name", fromdb(hosts[i].name));
+ hostSelect.append(option);
+ }
+ }
+ },
+ error: function(XMLHttpResponse) {
+ handleError(XMLHttpResponse, function() {
+ $("#dialog_migrate_systemvm #migrate_instance_hosts").empty();
+ });
+ }
+ });
+
+ $("#dialog_migrate_systemvm")
+ .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=migrateSystemVm&hostid="+hostId+"&virtualmachineid="+id;
+ doActionToTab(id, $actionLink, apiCommand, $midmenuItem1, $detailsTab);
+ },
+ "Cancel": function() {
+ $(this).dialog("close");
+ }
+ }).dialog("open");
+}
+