From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gate001.proxmox.com (gate001.proxmox.com [45.144.208.40]) by lore.proxmox.com (Postfix) with ESMTPS id 840D31FF146 for ; Tue, 07 Jul 2026 16:33:47 +0200 (CEST) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id 7CA6B214CA; Tue, 07 Jul 2026 16:33:34 +0200 (CEST) From: Lukas Sichert To: pve-devel@lists.proxmox.com Subject: [PATCH manager v8 4/5] fix #7339: lvmthick: ui: add UI option to free storage Date: Tue, 7 Jul 2026 16:32:47 +0200 Message-ID: <20260707143252.101757-5-l.sichert@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260707143252.101757-1-l.sichert@proxmox.com> References: <20260707143252.101757-1-l.sichert@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1783434772835 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.000 Adjusted score from AWL reputation of From: address DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment (newer systems) SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: IPZAM7VC2UY3ASRTOMFTUL36C2XMUBWO X-Message-ID-Hash: IPZAM7VC2UY3ASRTOMFTUL36C2XMUBWO X-MailFrom: l.sichert@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Lukas Sichert X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Signed-off-by: Lukas Sichert --- www/manager6/Utils.js | 2 +- www/manager6/storage/LVMEdit.js | 45 +++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/www/manager6/Utils.js b/www/manager6/Utils.js index 040b5ae0..3088e6a7 100644 --- a/www/manager6/Utils.js +++ b/www/manager6/Utils.js @@ -2184,7 +2184,7 @@ Ext.define('PVE.Utils', { hastart: ['HA', gettext('Start')], hastop: ['HA', gettext('Stop')], imgcopy: ['', gettext('Copy data')], - imgdel: ['', gettext('Erase data')], + imgdel: ['', gettext('Destroy image')], lvmcreate: [gettext('LVM Storage'), gettext('Create')], lvmremove: ['Volume Group', gettext('Remove')], lvmthincreate: [gettext('LVM-Thin Storage'), gettext('Create')], diff --git a/www/manager6/storage/LVMEdit.js b/www/manager6/storage/LVMEdit.js index 148f0601..30ae275b 100644 --- a/www/manager6/storage/LVMEdit.js +++ b/www/manager6/storage/LVMEdit.js @@ -148,6 +148,39 @@ Ext.define('PVE.storage.LVMInputPanel', { onlineHelp: 'storage_lvm', + onGetValues: function (values) { + let me = this; + + let onRemove = {}; + if (values['on-remove-discard']) { + onRemove.discard = 1; + } + delete values['on-remove-discard']; + + let onRemoveString = PVE.Parser.printPropertyString(onRemove); + if (onRemoveString !== '') { + values['on-volume-remove'] = onRemoveString; + } else if (!me.isCreate) { + if (!values.delete) { + values.delete = []; + } + values.delete.push('on-volume-remove'); + } + + return me.callParent([values]); + }, + + setValues: function (values) { + if (values['on-volume-remove']) { + let onRemove = PVE.Parser.parsePropertyString(values['on-volume-remove']); + values['on-remove-discard'] = onRemove.discard; + } + + delete values['on-volume-remove']; + + return this.callParent([values]); + }, + column1: [ { xtype: 'pveBaseStorageSelector', @@ -241,5 +274,17 @@ Ext.define('PVE.storage.LVMInputPanel', { uncheckedValue: 0, fieldLabel: gettext('Wipe Removed Volumes'), }, + { + xtype: 'proxmoxcheckbox', + name: 'on-remove-discard', + uncheckedValue: 0, + fieldLabel: gettext('Discard Removed Volumes'), + autoEl: { + tag: 'div', + 'data-qtip': gettext( + 'Enable to issue discard (TRIM) requests for logical volumes before removing them.', + ), + }, + }, ], }); -- 2.47.3