mirror of
https://git.proxmox.com/git/pve-manager
synced 2025-06-05 19:16:23 +00:00
Rework Migrate Window with declarative synthax
Also group all qemu vs LXC tests in a single place.
This commit is contained in:
parent
f4824f0a69
commit
2df7ea9fda
@ -1,41 +1,113 @@
|
|||||||
Ext.define('PVE.window.Migrate', {
|
Ext.define('PVE.window.Migrate', {
|
||||||
extend: 'Ext.window.Window',
|
extend: 'Ext.window.Window',
|
||||||
|
|
||||||
resizable: false,
|
config: {
|
||||||
|
vmtype: undefined,
|
||||||
migrate: function(target, online) {
|
nodename: undefined,
|
||||||
var me = this;
|
vmid: undefined
|
||||||
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();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
|
// 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() {
|
initComponent : function() {
|
||||||
var me = this;
|
var me = this;
|
||||||
@ -52,87 +124,30 @@ Ext.define('PVE.window.Migrate', {
|
|||||||
throw "no VM type specified";
|
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 running = false;
|
||||||
var vmrec = PVE.data.ResourceStore.findRecord('vmid', me.vmid,
|
var vmrec = PVE.data.ResourceStore.findRecord('vmid', me.vmid,
|
||||||
0, false, false, true);
|
0, false, false, true);
|
||||||
if (vmrec && vmrec.data && vmrec.data.running) {
|
if (vmrec && vmrec.data && vmrec.data.running) {
|
||||||
running = true;
|
running = true;
|
||||||
}
|
}
|
||||||
|
me.lookup('onlineToggle').setValue(running);
|
||||||
|
|
||||||
me.formPanel = Ext.create('Ext.form.Panel', {
|
me.lookup('pveNodeSelector').disallowedNodes = [me.nodename];
|
||||||
bodyPadding: 10,
|
me.lookup('formPanel').isValid();
|
||||||
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();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
Loading…
Reference in New Issue
Block a user