Added to make use of [0] and because it does make sense for non HA vm's as well, in accordance with #2241.
[0] pve-ha-manager: 6e8b0c225405da9472f56fe5c94c94b204259caa Signed-off-by: Tim Marx <t.m...@proxmox.com> --- www/manager6/window/Migrate.js | 63 +++++++++++++++++++++++++++------- 1 file changed, 50 insertions(+), 13 deletions(-) diff --git a/www/manager6/window/Migrate.js b/www/manager6/window/Migrate.js index 02ef6bfd..3bab88bd 100644 --- a/www/manager6/window/Migrate.js +++ b/www/manager6/window/Migrate.js @@ -25,7 +25,9 @@ Ext.define('PVE.window.Migrate', { preconditions: [], 'with-local-disks': 0, mode: undefined, - allowedNodes: undefined + allowedNodes: undefined, + withLocalResources: false, + hasLocalResources: false } }, @@ -48,6 +50,14 @@ Ext.define('PVE.window.Migrate', { } else { return true; } + }, + setLocalResourceCheckboxHidden: function(get) { + if (get('running') || !get('migration.hasLocalResources') || + Proxmox.UserName !== 'root@pam') { + return true; + } else { + return false; + } } } }, @@ -121,6 +131,10 @@ Ext.define('PVE.window.Migrate', { params.targetstorage = values.targetstorage; } + if (vm.get('migration.withLocalResources')) { + params['force'] = 1; + } + Proxmox.Utils.API2Request({ params: params, url: '/nodes/' + vm.get('nodename') + '/' + vm.get('vmtype') + '/' + vm.get('vmid') + '/migrate', @@ -144,11 +158,10 @@ Ext.define('PVE.window.Migrate', { }, - checkMigratePreconditions: function() { + checkMigratePreconditions: function(reset) { var me = this, vm = me.getViewModel(); - var vmrec = PVE.data.ResourceStore.findRecord('vmid', vm.get('vmid'), 0, false, false, true); if (vmrec && vmrec.data && vmrec.data.running) { @@ -156,9 +169,9 @@ Ext.define('PVE.window.Migrate', { } if (vm.get('vmtype') === 'qemu') { - me.checkQemuPreconditions(); + me.checkQemuPreconditions(reset); } else { - me.checkLxcPreconditions(); + me.checkLxcPreconditions(reset); } me.lookup('pveNodeSelector').disallowedNodes = [vm.get('nodename')]; @@ -170,7 +183,7 @@ Ext.define('PVE.window.Migrate', { }, - checkQemuPreconditions: function() { + checkQemuPreconditions: function(reset) { var me = this, vm = me.getViewModel(), migrateStats; @@ -193,6 +206,7 @@ Ext.define('PVE.window.Migrate', { // Get migration object from viewmodel to prevent // to many bind callbacks var migration = vm.get('migration'); + if (reset) migration.possible = true; migration.preconditions = []; if (migrateStats.allowed_nodes) { @@ -212,11 +226,22 @@ Ext.define('PVE.window.Migrate', { } if (migrateStats.local_resources.length) { - migration.possible = false; - migration.preconditions.push({ - text: 'Can\'t migrate VM with local resources: '+ migrateStats.local_resources.join(', '), - severity: 'error' - }); + migration.hasLocalResources = true; + if(!migration.withLocalResources || vm.get('running')){ + migration.possible = false; + migration.preconditions.push({ + text: Ext.String.format('Can\'t migrate VM with local resources: {0}', + migrateStats.local_resources.join(', ')), + severity: 'error' + }); + } else { + migration.preconditions.push({ + text: Ext.String.format('Migrate VM with local resources: {0}. ' + + 'This might fail if resources aren\'t available on the target node.', + migrateStats.local_resources.join(', ')), + severity: 'warning' + }); + } } if (migrateStats.local_disks.length) { @@ -252,7 +277,7 @@ Ext.define('PVE.window.Migrate', { } }); }, - checkLxcPreconditions: function() { + checkLxcPreconditions: function(reset) { var me = this, vm = me.getViewModel(); if (vm.get('running')) { @@ -324,7 +349,19 @@ Ext.define('PVE.window.Migrate', { bind: { hidden: '{setStorageselectorHidden}' } - }] + }, + { + xtype: 'proxmoxcheckbox', + name: 'withLocalResources', + fieldLabel: gettext('With local resources'), + bind: { + hidden: '{setLocalResourceCheckboxHidden}', + value: '{migration.withLocalResources}' + }, + listeners: { + change: {fn: 'checkMigratePreconditions', extraArg: true} + } + }] } ] }, -- 2.20.1 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel