Also group all qemu vs LXC tests in a single place. --- www/manager6/window/Migrate.js | 217 ++++++++++++++++++++++------------------- 1 file changed, 116 insertions(+), 101 deletions(-)
diff --git a/www/manager6/window/Migrate.js b/www/manager6/window/Migrate.js index 17ef8f67..1434d40c 100644 --- a/www/manager6/window/Migrate.js +++ b/www/manager6/window/Migrate.js @@ -1,65 +1,70 @@ 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); + 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); + } }, - 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(); + '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(); + } + }); + } } - }); - }, - - 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"; - } - - 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.formPanel = Ext.create('Ext.form.Panel', { + width: 350, + modal: true, + layout: 'auto', + border: false, + resizable: false, + items: [ + { + xtype: 'form', + reference: 'formPanel', bodyPadding: 10, border: false, fieldDefaults: { @@ -69,70 +74,80 @@ Ext.define('PVE.window.Migrate', { items: [ { xtype: 'pveNodeSelector', + reference: 'pveNodeSelector', name: 'target', fieldLabel: gettext('Target node'), allowBlank: false, - disallowedNodes: [me.nodename], + disallowedNodes: undefined, onlineValidator: true }, { xtype: 'pvecheckbox', + reference: 'onlineToggle', name: 'online', uncheckedValue: 0, defaultValue: 0, - checked: running, - fieldLabel: me.vmtype === 'qemu' ? gettext('Online') : gettext('Restart Mode') + checked: false, + fieldLabel: gettext('Restart Mode') } - ] - }); - - var form = me.formPanel.getForm(); + ] + } + ], + buttons: [ + { + xtype: 'pveHelpButton', + reference: 'pveHelpButton', + onlineHelp: 'pct_migration', + listenToGlobalEvent: false, + hidden: false + }, + '->', + { + xtype: 'button', + reference: 'submitButton', + text: gettext('Migrate') + } + ], - var submitBtn = Ext.create('Ext.Button', { - text: gettext('Migrate'), - handler: function() { - var values = form.getValues(); - me.migrate(values.target, values.online); - } - }); + initComponent : function() { + var me = this; - 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 - }; + if (!me.nodename) { + throw "no node name specified"; } - var helpBtn = Ext.create('PVE.button.Help', helpConfig); + if (!me.vmid) { + throw "no VM ID specified"; + } - 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 ] - }); + if (!me.vmtype) { + throw "no VM type specified"; + } me.callParent(); - me.mon(me.formPanel, 'validitychange', function(fp, isValid) { - submitBtn.setDisabled(!isValid); - }); + 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.formPanel.isValid(); + me.lookup('pveNodeSelector').disallowedNodes = [me.nodename]; + me.lookup('formPanel').isValid(); } -}); +}); \ No newline at end of file -- 2.11.0 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel