Rework Migrate Window with declarative synthax

Also group all qemu vs LXC tests in a single place.
This commit is contained in:
Emmanuel Kasper 2017-08-24 11:45:19 +02:00 committed by Wolfgang Bumiller
parent f4824f0a69
commit 2df7ea9fda

View File

@ -1,41 +1,113 @@
Ext.define('PVE.window.Migrate', {
extend: 'Ext.window.Window',
resizable: false,
migrate: function(target, online) {
var me = this;
var params = {
target: target
};
if (me.vmtype === 'qemu') {
params.online = online;
} else {
params.restart = online;
}
PVE.Utils.API2Request({
params: params,
url: '/nodes/' + me.nodename + '/' + me.vmtype + '/' + me.vmid + "/migrate",
waitMsgTarget: me,
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})', me.nodename, target);
var win = Ext.create('PVE.window.TaskViewer', {
upid: upid,
extraTitle: extraTitle
});
win.show();
me.close();
}
});
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;
@ -52,87 +124,30 @@ Ext.define('PVE.window.Migrate', {
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);
0, false, false, true);
if (vmrec && vmrec.data && vmrec.data.running) {
running = true;
}
me.lookup('onlineToggle').setValue(running);
me.formPanel = Ext.create('Ext.form.Panel', {
bodyPadding: 10,
border: false,
fieldDefaults: {
labelWidth: 100,
anchor: '100%'
},
items: [
{
xtype: 'pveNodeSelector',
name: 'target',
fieldLabel: gettext('Target node'),
allowBlank: false,
disallowedNodes: [me.nodename],
onlineValidator: true
},
{
xtype: 'pvecheckbox',
name: 'online',
uncheckedValue: 0,
defaultValue: 0,
checked: running,
fieldLabel: me.vmtype === 'qemu' ? gettext('Online') : gettext('Restart Mode')
}
]
});
var form = me.formPanel.getForm();
var submitBtn = Ext.create('Ext.Button', {
text: gettext('Migrate'),
handler: function() {
var values = form.getValues();
me.migrate(values.target, values.online);
}
});
var helpConfig;
// fixme:
// the onlinehelp parser needs
// that every id is explicitely written
// can we do this better?
if (me.vmtype === 'qemu') {
helpConfig = {
onlineHelp: 'qm_migration',
listenToGlobalEvent: false,
hidden: false
};
} else {
helpConfig = {
onlineHelp: 'pct_migration',
listenToGlobalEvent: false,
hidden: false
};
}
var helpBtn = Ext.create('PVE.button.Help', helpConfig);
Ext.apply(me, {
title: gettext('Migrate') + ((me.vmtype === 'qemu')?' VM ':' CT ') + me.vmid,
width: 350,
modal: true,
layout: 'auto',
border: false,
items: [ me.formPanel ],
buttons: [ helpBtn, '->', submitBtn ]
});
me.callParent();
me.mon(me.formPanel, 'validitychange', function(fp, isValid) {
submitBtn.setDisabled(!isValid);
});
me.formPanel.isValid();
me.lookup('pveNodeSelector').disallowedNodes = [me.nodename];
me.lookup('formPanel').isValid();
}
});
});