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 C17291FF0E1 for ; Mon, 27 Jul 2026 16:35:32 +0200 (CEST) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id 5763E21546; Mon, 27 Jul 2026 16:35:20 +0200 (CEST) From: "Max R. Carrara" To: pve-devel@lists.proxmox.com Subject: [PATCH common/manager/proxmox-widget-toolkit/storage/storage-plugin-examples v3 00/17] GUI Support for Custom Storage Plugins Date: Mon, 27 Jul 2026 16:34:24 +0200 Message-ID: <20260727143445.513900-1-m.carrara@proxmox.com> X-Mailer: git-send-email 2.47.3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1785162850661 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.027 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) RCVD_IN_DNSWL_LOW -0.7 Sender listed at https://www.dnswl.org/, low trust 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: PJMBSCW4Z72ZQ4MJG4MBP2VD6ONNVRMU X-Message-ID-Hash: PJMBSCW4Z72ZQ4MJG4MBP2VD6ONNVRMU X-MailFrom: m.carrara@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 X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: GUI Support for Custom Storage Plugins - v3 =========================================== Notable Changes Since v2 ------------------------ - Drop the patternProperties RFC patches. After some additional consideration, I decided that supporting patternProperties is out of scope for this series, and probably something that deserves its own series instead. In turn, the 'x-advanced' and 'x-hidden' keys in the plugin property schema returned by the new API endpoint are now set through two new hashes in `plugindata()`. This means that each plugin has to define which properties it considers advanced and which should be hidden in the UI itself, just like with sensitive properties. - Rename the 'sensitive' key that is returned as part of the plugin property schema by the new API endpoint to 'x-sensitive'. This is done in order to make it clear that this keyword is not part of our overall JSON schema, since each plugins' properties' schemas are returned directly. Note that we can still "promote" 'x-sensitive' and have it exist in the general JSON schema as 'sensitive' at some point in the future, but that's out of scope for this series. - Sort modules in patch #13 (thanks @Jakob for the suggestion!) - Update the SSHFS example plugin and make use of the new hashes in `plugindata()`, `title` keys in `properties()`, and also bump it's API version, with all changes that are necessary for this. Thanks again to everyone who reviewed and/or tested the previous iterations of this series, as well as to those that provided feedback! It's much appreciated. Previous Versions ----------------- rfc-v1: https://lore.proxmox.com/pve-devel/20250908180058.530119-1-m.carrara@proxmox.com/ rfc-v2: https://lore.proxmox.com/pve-devel/20251121165858.818307-1-m.carrara@proxmox.com/ v1: https://lore.proxmox.com/pve-devel/20260623143402.772452-1-m.carrara@proxmox.com/ v2: https://lore.proxmox.com/pve-devel/20260717154943.696411-1-m.carrara@proxmox.com/ Summary of Changes ------------------ pve-common: Max R. Carrara (1): json schema: add multiline string format src/PVE/JSONSchema.pm | 5 +++++ 1 file changed, 5 insertions(+) pve-storage: Max R. Carrara (8): api: plugins/storage: add initial routes and endpoints api: plugins/storage/plugin: include schema in plugin metadata api: plugins/storage/plugin: mark sensitive properties in schema api: plugins/storage/plugin: factor plugin metadata code into helper api: plugins/storage/plugin: add plugins' 'content' to their metadata all plugins: add 'title' to properties, adapt 'description's all plugins, api: mark certain properties as advanced in plugindata() all plugins, api: mark certain properties as hidden in plugindata() src/PVE/API2/Makefile | 1 + src/PVE/API2/Plugins/Makefile | 18 +++ src/PVE/API2/Plugins/Storage.pm | 54 ++++++++ src/PVE/API2/Plugins/Storage/Makefile | 17 +++ src/PVE/API2/Plugins/Storage/Plugin.pm | 172 +++++++++++++++++++++++++ src/PVE/Storage/BTRFSPlugin.pm | 9 ++ src/PVE/Storage/CIFSPlugin.pm | 22 +++- src/PVE/Storage/CephFSPlugin.pm | 16 ++- src/PVE/Storage/DirPlugin.pm | 23 +++- src/PVE/Storage/ESXiPlugin.pm | 3 + src/PVE/Storage/ISCSIDirectPlugin.pm | 4 + src/PVE/Storage/ISCSIPlugin.pm | 10 +- src/PVE/Storage/LVMPlugin.pm | 16 ++- src/PVE/Storage/LvmThinPlugin.pm | 7 +- src/PVE/Storage/NFSPlugin.pm | 18 ++- src/PVE/Storage/PBSPlugin.pm | 7 +- src/PVE/Storage/Plugin.pm | 46 +++++-- src/PVE/Storage/RBDPlugin.pm | 20 ++- src/PVE/Storage/ZFSPlugin.pm | 20 ++- src/PVE/Storage/ZFSPoolPlugin.pm | 13 +- 20 files changed, 459 insertions(+), 37 deletions(-) create mode 100644 src/PVE/API2/Plugins/Makefile create mode 100644 src/PVE/API2/Plugins/Storage.pm create mode 100644 src/PVE/API2/Plugins/Storage/Makefile create mode 100644 src/PVE/API2/Plugins/Storage/Plugin.pm proxmox-widget-toolkit: Max R. Carrara (3): form: introduce new 'proxmoxtextarea' field utils: introduce helper function getFieldDefFromPropertySchema acme: use helper to construct ExtJS fields from property schemas src/Utils.js | 150 +++++++++++++++++++++++++++++++++++ src/form/TextAreaField.js | 47 +++++++++++ src/window/ACMEPluginEdit.js | 42 +++------- 3 files changed, 210 insertions(+), 29 deletions(-) pve-manager: Max R. Carrara (4): api2: sort modules and API method registrations api: add API routes 'plugins' and 'plugins/storage' ui: storage view: display error when no editor for storage type exists ui: storage: add basic UI integration for custom storage plugins PVE/API2.pm | 26 ++-- PVE/API2/Makefile | 1 + PVE/API2/Plugins.pm | 61 +++++++++ www/manager6/Makefile | 1 + www/manager6/dc/StorageView.js | 132 ++++++++++++++----- www/manager6/storage/Base.js | 2 + www/manager6/storage/CustomEdit.js | 198 +++++++++++++++++++++++++++++ 7 files changed, 377 insertions(+), 44 deletions(-) create mode 100644 PVE/API2/Plugins.pm create mode 100644 www/manager6/storage/CustomEdit.js pve-storage-plugin-examples: Max R. Carrara (1): sshfs: Update SSHFS plugin .../src/PVE/Storage/Custom/SSHFSPlugin.pm | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) Summary over all repositories: 32 files changed, 1072 insertions(+), 116 deletions(-) -- Generated by murpp 0.12.0