pve-manager/www/manager6/window/Migrate.js
Emmanuel Kasper 2df7ea9fda Rework Migrate Window with declarative synthax
Also group all qemu vs LXC tests in a single place.
2017-09-19 11:11:29 +02:00

153 lines
3.3 KiB
JavaScript

Ext.define('PVE.window.Migrate', {
extend: 'Ext.window.Window',
config: {
vmtype: undefined,
nodename: undefined,
vmid: undefined
},
// private, used to store the migration mode after checking if the guest runs
liveMode: undefined,
controller: {
xclass: 'Ext.app.ViewController',
control: {
'panel[reference=formPanel]': {
validityChange: function(panel, isValid) {
this.lookup('submitButton').setDisabled(!isValid);
}
},
'button[reference=submitButton]': {
click: function() {
var me = this;
var view = me.getView();
var values = me.lookup('formPanel').getValues();
var params = {
target: values.target
};
if (values.online) {
params[view.liveMode] = values.online;
}
PVE.Utils.API2Request({
params: params,
url: '/nodes/' + view.nodename + '/' + view.vmtype + '/' + view.vmid + '/migrate',
waitMsgTarget: view,
method: 'POST',
failure: function(response, opts) {
Ext.Msg.alert(gettext('Error'), response.htmlStatus);
},
success: function(response, options) {
var upid = response.result.data;
var extraTitle = Ext.String.format(' ({0} ---> {1})', view.nodename, params.target);
Ext.create('PVE.window.TaskViewer', {
upid: upid,
extraTitle: extraTitle
}).show();
view.close();
}
});
}
}
}
},
width: 350,
modal: true,
layout: 'auto',
border: false,
resizable: false,
items: [
{
xtype: 'form',
reference: 'formPanel',
bodyPadding: 10,
border: false,
fieldDefaults: {
labelWidth: 100,
anchor: '100%'
},
items: [
{
xtype: 'pveNodeSelector',
reference: 'pveNodeSelector',
name: 'target',
fieldLabel: gettext('Target node'),
allowBlank: false,
disallowedNodes: undefined,
onlineValidator: true
},
{
xtype: 'pvecheckbox',
reference: 'onlineToggle',
name: 'online',
uncheckedValue: 0,
defaultValue: 0,
checked: false,
fieldLabel: gettext('Restart Mode')
}
]
}
],
buttons: [
{
xtype: 'pveHelpButton',
reference: 'pveHelpButton',
onlineHelp: 'pct_migration',
listenToGlobalEvent: false,
hidden: false
},
'->',
{
xtype: 'button',
reference: 'submitButton',
text: gettext('Migrate')
}
],
initComponent : function() {
var me = this;
if (!me.nodename) {
throw "no node name specified";
}
if (!me.vmid) {
throw "no VM ID specified";
}
if (!me.vmtype) {
throw "no VM type specified";
}
me.callParent();
var title = gettext('Migrate') + (' CT ') + me.vmid;
me.liveMode = 'restart';
if (me.vmtype === 'qemu') {
me.lookup('onlineToggle').setFieldLabel(gettext('Online'));
me.lookup('pveHelpButton').setHelpConfig({
onlineHelp: 'qm_migration'
});
title = gettext('Migrate') + (' VM ') + me.vmid;
me.liveMode = 'online';
}
me.setTitle(title);
var running = false;
var vmrec = PVE.data.ResourceStore.findRecord('vmid', me.vmid,
0, false, false, true);
if (vmrec && vmrec.data && vmrec.data.running) {
running = true;
}
me.lookup('onlineToggle').setValue(running);
me.lookup('pveNodeSelector').disallowedNodes = [me.nodename];
me.lookup('formPanel').isValid();
}
});