]> git.proxmox.com Git - pve-manager.git/commitdiff
Rework Migrate Window with declarative synthax
authorEmmanuel Kasper <e.kasper@proxmox.com>
Thu, 24 Aug 2017 09:45:19 +0000 (11:45 +0200)
committerWolfgang Bumiller <w.bumiller@proxmox.com>
Tue, 19 Sep 2017 09:11:29 +0000 (11:11 +0200)
Also group all qemu vs LXC tests in a single place.

www/manager6/window/Migrate.js

index 17ef8f67575e2b550a5518d6768844b81091827d..1434d40cd6b3e1e283525008fca456b77f0d2a4b 100644 (file)
@@ -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