[pve-devel] [PATCH manager] ui: migrate: add checkbox to enable offline migration with local resources
Thomas Lamprecht
t.lamprecht at proxmox.com
Fri Oct 11 13:19:10 CEST 2019
On 10/7/19 1:40 PM, Tim Marx wrote:
> 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.marx at 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,
allowLocalResources or overwriteLocalResourceCheck ?
> + 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 at 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) {
cane we get a more telling name than "reset" ? cannot possibly tell what this
could do at all when just looking at the method name and this parameter name.
> 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'),
hmm, maybe this is better suited for a two column spanning checkbox using
a boxLabel, which is rightAligned?`As then we could be a bit more expressive
here, alà
"Overwrite local resources unavailable check"
Alternatively we could call this just "Force" and have above in a tool tip?
> + bind: {
> + hidden: '{setLocalResourceCheckboxHidden}',
> + value: '{migration.withLocalResources}'
> + },
> + listeners: {
> + change: {fn: 'checkMigratePreconditions', extraArg: true}
> + }
> + }]
> }
> ]
> },
>
More information about the pve-devel
mailing list