From 2df7ea9fda2bef0930ecd5adb67d708f1a47f706 Mon Sep 17 00:00:00 2001 From: Emmanuel Kasper Date: Thu, 24 Aug 2017 11:45:19 +0200 Subject: [PATCH] Rework Migrate Window with declarative synthax Also group all qemu vs LXC tests in a single place. --- www/manager6/window/Migrate.js | 237 ++++++++++++++++++--------------- 1 file changed, 126 insertions(+), 111 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,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(); } -}); +}); \ No newline at end of file