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 9CE919EF8F for ; Wed, 7 Jun 2023 15:32:41 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 7F5191A439 for ; Wed, 7 Jun 2023 15:32:11 +0200 (CEST) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (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 for ; Wed, 7 Jun 2023 15:32:10 +0200 (CEST) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 8429641EF3 for ; Wed, 7 Jun 2023 15:32:10 +0200 (CEST) From: Leo Nunner To: pve-devel@lists.proxmox.com Date: Wed, 7 Jun 2023 15:32:06 +0200 Message-Id: <20230607133206.216462-1-l.nunner@proxmox.com> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL -0.104 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record T_SCC_BODY_TEXT_LINE -0.01 - Subject: [pve-devel] [PATCH manager] gui: expose content-dirs property in storage edit/create 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: Wed, 07 Jun 2023 13:32:41 -0000 Add a separate tab for the storage edit/create panels to set the recently introduced "content-dirs" property which overrides the default directory locations. Analogous to the API implementation, the tab was added for Directory, CIFS and NFS storages. Signed-off-by: Leo Nunner --- Changes since v3: - remove rootdir field - only allow setting snippets field for root@pam www/manager6/Makefile | 1 + www/manager6/Toolkit.js | 2 + www/manager6/panel/ContentDirs.js | 91 ++++++++++++++++++++++++++++++ www/manager6/storage/CIFSEdit.js | 9 +++ www/manager6/storage/CephFSEdit.js | 9 +++ www/manager6/storage/DirEdit.js | 9 +++ www/manager6/storage/NFSEdit.js | 9 +++ 7 files changed, 130 insertions(+) create mode 100644 www/manager6/panel/ContentDirs.js diff --git a/www/manager6/Makefile b/www/manager6/Makefile index 71ab928ff..9fa016d6e 100644 --- a/www/manager6/Makefile +++ b/www/manager6/Makefile @@ -96,6 +96,7 @@ JSSRC= \ panel/GuestSummary.js \ panel/TemplateStatusView.js \ panel/MultiDiskEdit.js \ + panel/ContentDirs.js \ tree/ResourceTree.js \ tree/SnapshotTree.js \ window/Backup.js \ diff --git a/www/manager6/Toolkit.js b/www/manager6/Toolkit.js index f69c376ad..0c801d453 100644 --- a/www/manager6/Toolkit.js +++ b/www/manager6/Toolkit.js @@ -15,6 +15,8 @@ Ext.apply(Ext.form.field.VTypes, { IP64AddressListMask: /[A-Fa-f0-9,:.; ]/, PciIdText: gettext('Example') + ': 0x8086', PciId: v => /^0x[0-9a-fA-F]{4}$/.test(v), + ContentDirText: gettext('Example') + ': custom/subdir/location', + ContentDir: v => /([^.]*(?:\.?[^.]+)+)/.test(v), }); Ext.define('PVE.form.field.Display', { diff --git a/www/manager6/panel/ContentDirs.js b/www/manager6/panel/ContentDirs.js new file mode 100644 index 000000000..5168f4f21 --- /dev/null +++ b/www/manager6/panel/ContentDirs.js @@ -0,0 +1,91 @@ +Ext.define('PVE.panel.ContentDirsPanel', { + extend: 'Proxmox.panel.InputPanel', + xtype: 'pveContentDirsTab', + mixins: ['Proxmox.Mixin.CBind'], + + onGetValues: function(values) { + let me = this; + let ret = me.values ?? {}; + Object.keys(values || {}).forEach(function(name) { + ret[name] = values[name]; + }); + return { "content-dirs": PVE.Parser.printPropertyString(ret) }; + }, + + onSetValues: function(values) { + let me = this; + me.values = values?.["content-dirs"]; + return me.values; + }, + + column1: [ + { + xtype: 'pmxDisplayEditField', + name: 'vztmpl', + fieldLabel: gettext('CT Template'), + allowBlank: true, + emptyText: "template/cache", + vtype: "ContentDir", + editable: true, + }, + { + xtype: 'pmxDisplayEditField', + name: 'iso', + fieldLabel: gettext('ISO Image'), + allowBlank: true, + emptyText: "template/iso", + vtype: "ContentDir", + editable: true, + }, + { + xtype: 'pmxDisplayEditField', + name: 'snippets', + fieldLabel: gettext('Snippets'), + allowBlank: true, + emptyText: "snippets", + vtype: "ContentDir", + editable: Proxmox.UserName === 'root@pam', + }, + ], + column2: [ + { + xtype: 'pmxDisplayEditField', + name: 'backup', + fieldLabel: gettext('Backup Files'), + allowBlank: true, + emptyText: "dump", + vtype: "ContentDir", + cbind: { + editable: '{isCreate}', + }, + }, + { + xtype: 'pmxDisplayEditField', + name: 'images', + fieldLabel: gettext('Guest Volumes'), + allowBlank: true, + emptyText: "images", + vtype: "ContentDir", + cbind: { + editable: '{isCreate}', + }, + }, + ], + columnT: [ + { + xtype: 'displayfield', + userCls: 'pmx-hint', + value: gettext('Editing overrides for existing storages might affect guests. Proceed with caution.'), + cbind: { + hidden: '{isCreate}', + }, + }, + ], + columnB: [ + { + xtype: 'displayfield', + userCls: 'pmx-hint', + value: gettext('Paths are relative to the mountpoint of the storage.'), + }, + ], +}); diff --git a/www/manager6/storage/CIFSEdit.js b/www/manager6/storage/CIFSEdit.js index 8040bc858..0b19e6ce1 100644 --- a/www/manager6/storage/CIFSEdit.js +++ b/www/manager6/storage/CIFSEdit.js @@ -229,6 +229,15 @@ Ext.define('PVE.storage.CIFSInputPanel', { }, ]; + me.extraTabs = [ + { + xtype: 'pveContentDirsTab', + title: gettext("Content Directories"), + onlineHelp: me.onlineHelp, + isCreate: me.isCreate, + }, + ]; + me.callParent(); }, }); diff --git a/www/manager6/storage/CephFSEdit.js b/www/manager6/storage/CephFSEdit.js index 6a95a00ae..7558a0528 100644 --- a/www/manager6/storage/CephFSEdit.js +++ b/www/manager6/storage/CephFSEdit.js @@ -129,6 +129,15 @@ Ext.define('PVE.storage.CephFSInputPanel', { }, ]; + me.extraTabs = [ + { + xtype: 'pveContentDirsTab', + title: gettext("Content Directories"), + onlineHelp: me.onlineHelp, + isCreate: me.isCreate, + }, + ]; + me.callParent(); }, }); diff --git a/www/manager6/storage/DirEdit.js b/www/manager6/storage/DirEdit.js index 7e9ec44dd..d1ae46ccd 100644 --- a/www/manager6/storage/DirEdit.js +++ b/www/manager6/storage/DirEdit.js @@ -33,6 +33,15 @@ Ext.define('PVE.storage.DirInputPanel', { }, ]; + me.extraTabs = [ + { + xtype: 'pveContentDirsTab', + title: gettext("Content Directories"), + onlineHelp: me.onlineHelp, + isCreate: me.isCreate, + }, + ]; + me.callParent(); }, }); diff --git a/www/manager6/storage/NFSEdit.js b/www/manager6/storage/NFSEdit.js index 202c7de08..13a17e3bb 100644 --- a/www/manager6/storage/NFSEdit.js +++ b/www/manager6/storage/NFSEdit.js @@ -160,6 +160,15 @@ Ext.define('PVE.storage.NFSInputPanel', { }, ]; + me.extraTabs = [ + { + xtype: 'pveContentDirsTab', + title: gettext("Content Directories"), + onlineHelp: me.onlineHelp, + isCreate: me.isCreate, + }, + ]; + me.callParent(); }, }); -- 2.30.2