From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id E5FC063120 for ; Tue, 9 Feb 2021 11:31:42 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id E3DA22B939 for ; Tue, 9 Feb 2021 11:31:42 +0100 (CET) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [212.186.127.180]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id DB5DE2B92C for ; Tue, 9 Feb 2021 11:31:41 +0100 (CET) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id A1FAB4588D for ; Tue, 9 Feb 2021 11:31:41 +0100 (CET) From: Hannes Laimer To: pve-devel@lists.proxmox.com Date: Tue, 9 Feb 2021 11:31:24 +0100 Message-Id: <20210209103124.1949709-3-h.laimer@proxmox.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210209103124.1949709-1-h.laimer@proxmox.com> References: <20210209103124.1949709-1-h.laimer@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.024 Adjusted score from AWL reputation of From: address KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pve-devel] [PATCH v2 pve-manager 2/2] ui: add bulk hibernate action X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 09 Feb 2021 10:31:42 -0000 Signed-off-by: Hannes Laimer --- The bulk action name usually matches the endpoint it will call, here, however, the corresponding endpoint is responsible for hibernate and pause, therefore in order to distinguish both actions the name does not match the endpoint here. This also allows to possible add another bulk action for pausing VMs later. www/manager6/Utils.js | 2 ++ www/manager6/form/VMSelector.js | 34 ++++++++++++++++++++++--------- www/manager6/node/CmdMenu.js | 15 ++++++++++++++ www/manager6/node/Config.js | 13 ++++++++++++ www/manager6/window/BulkAction.js | 7 +++++++ 5 files changed, 61 insertions(+), 10 deletions(-) diff --git a/www/manager6/Utils.js b/www/manager6/Utils.js index ab4988b0..d3a44fa9 100644 --- a/www/manager6/Utils.js +++ b/www/manager6/Utils.js @@ -1807,6 +1807,8 @@ Ext.define('PVE.Utils', { spiceshell: ['', gettext('Shell') + ' (Spice)'], startall: ['', gettext('Start all VMs and Containers')], stopall: ['', gettext('Stop all VMs and Containers')], + hibernateall: ['', gettext('Hibernate all VMs')], + suspendall: ['', gettext('Suspend all VMs')], unknownimgdel: ['', gettext('Destroy image from unknown guest')], vncproxy: ['VM/CT', gettext('Console')], vncshell: ['', gettext('Shell')], diff --git a/www/manager6/form/VMSelector.js b/www/manager6/form/VMSelector.js index 6a51a73d..b5cc0781 100644 --- a/www/manager6/form/VMSelector.js +++ b/www/manager6/form/VMSelector.js @@ -180,6 +180,7 @@ Ext.define('PVE.form.VMSelector', { // only show the relevant guests by default if (me.action) { var statusfilter = ''; + var typefilter = ''; switch (me.action) { case 'startall': statusfilter = 'stopped'; @@ -187,17 +188,30 @@ Ext.define('PVE.form.VMSelector', { case 'stopall': statusfilter = 'running'; break; + case 'suspendall': + statusfilter = 'running'; + typefilter = 'qemu'; + break; } - if (statusfilter !== '') { - me.store.filters.add({ - property: 'template', - value: 0, - }, { - id: 'x-gridfilter-status', - operator: 'in', - property: 'status', - value: [statusfilter], - }); + if (statusfilter !== '' || typefilter !== '') { + + if (statusfilter !== '') { + me.store.filters.add({ + id: 'x-gridfilter-status', + operator: 'in', + property: 'status', + value: [statusfilter], + }); + } + + if (typefilter !== '') { + me.store.filters.add({ + id: 'x-gridfilter-type', + operator: 'in', + property: 'type', + value: [typefilter], + }); + } } } diff --git a/www/manager6/node/CmdMenu.js b/www/manager6/node/CmdMenu.js index b650bfa0..b91c2efe 100644 --- a/www/manager6/node/CmdMenu.js +++ b/www/manager6/node/CmdMenu.js @@ -60,6 +60,21 @@ Ext.define('PVE.node.CmdMenu', { win.show(); }, }, + { + text: gettext('Bulk Hibernate'), + itemId: 'bulksuspend', + iconCls: 'fa fa-fw fa-download', + handler: function() { + var me = this.up('menu'); + var win = Ext.create('PVE.window.BulkAction', { + nodename: me.nodename, + title: gettext('Bulk Hibernate'), + btnText: gettext('Hibernate'), + action: 'hibernateall', + }); + win.show(); + }, + }, { text: gettext('Bulk Migrate'), itemId: 'bulkmigrate', diff --git a/www/manager6/node/Config.js b/www/manager6/node/Config.js index ef3ac32c..db3f0c2e 100644 --- a/www/manager6/node/Config.js +++ b/www/manager6/node/Config.js @@ -63,6 +63,19 @@ Ext.define('PVE.node.Config', { win.show(); }, }, + { + text: gettext('Bulk Hibernate'), + iconCls: 'fa fa-fw fa-download', + handler: function() { + var win = Ext.create('PVE.window.BulkAction', { + nodename: nodename, + title: gettext('Bulk Hibernate'), + btnText: gettext('Hibernate'), + action: 'hibernateall', + }); + win.show(); + }, + }, { text: gettext('Bulk Migrate'), iconCls: 'fa fa-fw fa-send-o', diff --git a/www/manager6/window/BulkAction.js b/www/manager6/window/BulkAction.js index 135f570f..488b82ff 100644 --- a/www/manager6/window/BulkAction.js +++ b/www/manager6/window/BulkAction.js @@ -117,6 +117,13 @@ Ext.define('PVE.window.BulkAction', { name: 'force', value: 1, }); + } else if (me.action === 'hibernateall') { + me.action = 'suspendall'; + items.push({ + xtype: 'hiddenfield', + name: 'todisk', + value: 1, + }); } items.push({ -- 2.20.1