public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: "Max R. Carrara" <m.carrara@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [PATCH pve-storage v3 09/17] all plugins, api: mark certain properties as hidden in plugindata()
Date: Mon, 27 Jul 2026 16:34:33 +0200	[thread overview]
Message-ID: <20260727143445.513900-10-m.carrara@proxmox.com> (raw)
In-Reply-To: <20260727143445.513900-1-m.carrara@proxmox.com>

As done with 'advanced-properties', add a new 'hidden-properties' hash
in `plugindata()` of all plugins. For each plugin, mark every property
that is *not* visible / used anywhere in the create / edit panel in
the UI in that hash.

This results in the following properties being marked as hidden if
they do appear in a given plugin's `properties()` or `options()`:
- bwlimit
- create-base-path
- create-subdirs
- content-dirs
- format

Additionally, expose whether a property is hidden or not through a
new 'x-hidden' key that is added to each plugin property schema that
is returned by the plugins/storage/plugin endpoint.

Signed-off-by: Max R. Carrara <m.carrara@proxmox.com>
---
 src/PVE/API2/Plugins/Storage/Plugin.pm | 3 +++
 src/PVE/Storage/BTRFSPlugin.pm         | 5 +++++
 src/PVE/Storage/CIFSPlugin.pm          | 7 +++++++
 src/PVE/Storage/CephFSPlugin.pm        | 7 +++++++
 src/PVE/Storage/DirPlugin.pm           | 7 +++++++
 src/PVE/Storage/ESXiPlugin.pm          | 1 +
 src/PVE/Storage/ISCSIDirectPlugin.pm   | 3 +++
 src/PVE/Storage/ISCSIPlugin.pm         | 3 +++
 src/PVE/Storage/LVMPlugin.pm           | 3 +++
 src/PVE/Storage/LvmThinPlugin.pm       | 3 +++
 src/PVE/Storage/NFSPlugin.pm           | 7 +++++++
 src/PVE/Storage/PBSPlugin.pm           | 1 +
 src/PVE/Storage/RBDPlugin.pm           | 3 +++
 src/PVE/Storage/ZFSPlugin.pm           | 3 +++
 src/PVE/Storage/ZFSPoolPlugin.pm       | 3 +++
 15 files changed, 59 insertions(+)

diff --git a/src/PVE/API2/Plugins/Storage/Plugin.pm b/src/PVE/API2/Plugins/Storage/Plugin.pm
index 6f756506..c61a5f75 100644
--- a/src/PVE/API2/Plugins/Storage/Plugin.pm
+++ b/src/PVE/API2/Plugins/Storage/Plugin.pm
@@ -77,6 +77,9 @@ my sub get_schema_for_plugin : prototype($) ($plugin) {
         if (defined(my $props = $plugindata->{'advanced-properties'})) {
             $property->{'x-advanced'} = defined($props->{$option}) ? 1 : 0;
         }
+        if (defined(my $props = $plugindata->{'hidden-properties'})) {
+            $property->{'x-hidden'} = defined($props->{$option}) ? 1 : 0;
+        }
         if (defined(my $props = $plugindata->{'sensitive-properties'})) {
             $property->{'x-sensitive'} = defined($props->{$option}) ? 1 : 0;
         }
diff --git a/src/PVE/Storage/BTRFSPlugin.pm b/src/PVE/Storage/BTRFSPlugin.pm
index feb72860..3aca00b2 100644
--- a/src/PVE/Storage/BTRFSPlugin.pm
+++ b/src/PVE/Storage/BTRFSPlugin.pm
@@ -48,6 +48,11 @@ sub plugindata {
         'advanced-properties' => {
             preallocation => 1,
         },
+        'hidden-properties' => {
+            'create-base-path' => 1,
+            'create-subdirs' => 1,
+            format => 1,
+        },
         'sensitive-properties' => {},
     };
 }
diff --git a/src/PVE/Storage/CIFSPlugin.pm b/src/PVE/Storage/CIFSPlugin.pm
index 38901536..80acc1a3 100644
--- a/src/PVE/Storage/CIFSPlugin.pm
+++ b/src/PVE/Storage/CIFSPlugin.pm
@@ -130,6 +130,13 @@ sub plugindata {
             preallocation => 1,
             'snapshot-as-volume-chain' => 1,
         },
+        'hidden-properties' => {
+            bwlimit => 1,
+            'create-base-path' => 1,
+            'create-subdirs' => 1,
+            'content-dirs' => 1,
+            format => 1,
+        },
         'sensitive-properties' => { password => 1 },
     };
 }
diff --git a/src/PVE/Storage/CephFSPlugin.pm b/src/PVE/Storage/CephFSPlugin.pm
index c334a72b..b137e06e 100644
--- a/src/PVE/Storage/CephFSPlugin.pm
+++ b/src/PVE/Storage/CephFSPlugin.pm
@@ -121,6 +121,13 @@ sub plugindata {
         'advanced-properties' => {
             'content-dirs' => 1,
         },
+        'hidden-properties' => {
+            bwlimit => 1,
+            'create-base-path' => 1,
+            'create-subdirs' => 1,
+            'content-dirs' => 1,
+            format => 1,
+        },
         'sensitive-properties' => { keyring => 1 },
     };
 }
diff --git a/src/PVE/Storage/DirPlugin.pm b/src/PVE/Storage/DirPlugin.pm
index d76a4308..ed950a5e 100644
--- a/src/PVE/Storage/DirPlugin.pm
+++ b/src/PVE/Storage/DirPlugin.pm
@@ -43,6 +43,13 @@ sub plugindata {
             preallocation => 1,
             'snapshot-as-volume-chain' => 1,
         },
+        'hidden-properties' => {
+            bwlimit => 1,
+            'create-base-path' => 1,
+            'create-subdirs' => 1,
+            'content-dirs' => 1,
+            format => 1,
+        },
         'sensitive-properties' => {},
     };
 }
diff --git a/src/PVE/Storage/ESXiPlugin.pm b/src/PVE/Storage/ESXiPlugin.pm
index cdc47958..a6b486e3 100644
--- a/src/PVE/Storage/ESXiPlugin.pm
+++ b/src/PVE/Storage/ESXiPlugin.pm
@@ -32,6 +32,7 @@ sub plugindata {
         content => [{ import => 1 }, { import => 1 }],
         format => [{ raw => 1, qcow2 => 1, vmdk => 1 }, 'raw'],
         'advanced-properties' => {},
+        'hidden-properties' => {},
         'sensitive-properties' => { password => 1 },
     };
 }
diff --git a/src/PVE/Storage/ISCSIDirectPlugin.pm b/src/PVE/Storage/ISCSIDirectPlugin.pm
index dfbde00a..8b012569 100644
--- a/src/PVE/Storage/ISCSIDirectPlugin.pm
+++ b/src/PVE/Storage/ISCSIDirectPlugin.pm
@@ -67,6 +67,9 @@ sub plugindata {
         content => [{ images => 1, none => 1 }, { images => 1 }],
         select_existing => 1,
         'advanced-properties' => {},
+        'hidden-properties' => {
+            bwlimit => 1,
+        },
         'sensitive-properties' => {},
     };
 }
diff --git a/src/PVE/Storage/ISCSIPlugin.pm b/src/PVE/Storage/ISCSIPlugin.pm
index 3a18925d..2b31d4ad 100644
--- a/src/PVE/Storage/ISCSIPlugin.pm
+++ b/src/PVE/Storage/ISCSIPlugin.pm
@@ -335,6 +335,9 @@ sub plugindata {
         content => [{ images => 1, none => 1 }, { images => 1 }],
         select_existing => 1,
         'advanced-properties' => {},
+        'hidden-properties' => {
+            bwlimit => 1,
+        },
         'sensitive-properties' => {},
     };
 }
diff --git a/src/PVE/Storage/LVMPlugin.pm b/src/PVE/Storage/LVMPlugin.pm
index d634f551..17de4ab9 100644
--- a/src/PVE/Storage/LVMPlugin.pm
+++ b/src/PVE/Storage/LVMPlugin.pm
@@ -411,6 +411,9 @@ sub plugindata {
         'advanced-properties' => {
             'snapshot-as-volume-chain' => 1,
         },
+        'hidden-properties' => {
+            bwlimit => 1,
+        },
         'sensitive-properties' => {},
     };
 }
diff --git a/src/PVE/Storage/LvmThinPlugin.pm b/src/PVE/Storage/LvmThinPlugin.pm
index 3c5e0c5c..1aaa03c0 100644
--- a/src/PVE/Storage/LvmThinPlugin.pm
+++ b/src/PVE/Storage/LvmThinPlugin.pm
@@ -33,6 +33,9 @@ sub plugindata {
     return {
         content => [{ images => 1, rootdir => 1 }, { images => 1, rootdir => 1 }],
         'advanced-properties' => {},
+        'hidden-properties' => {
+            bwlimit => 1,
+        },
         'sensitive-properties' => {},
     };
 }
diff --git a/src/PVE/Storage/NFSPlugin.pm b/src/PVE/Storage/NFSPlugin.pm
index 8a85cd75..a35085e2 100644
--- a/src/PVE/Storage/NFSPlugin.pm
+++ b/src/PVE/Storage/NFSPlugin.pm
@@ -71,6 +71,13 @@ sub plugindata {
             preallocation => 1,
             'snapshot-as-volume-chain' => 1,
         },
+        'hidden-properties' => {
+            bwlimit => 1,
+            'create-base-path' => 1,
+            'create-subdirs' => 1,
+            'content-dirs' => 1,
+            format => 1,
+        },
         'sensitive-properties' => {},
     };
 }
diff --git a/src/PVE/Storage/PBSPlugin.pm b/src/PVE/Storage/PBSPlugin.pm
index 73b6c1ee..1ec8817f 100644
--- a/src/PVE/Storage/PBSPlugin.pm
+++ b/src/PVE/Storage/PBSPlugin.pm
@@ -32,6 +32,7 @@ sub plugindata {
     return {
         content => [{ backup => 1, none => 1 }, { backup => 1 }],
         'advanced-properties' => {},
+        'hidden-properties' => {},
         'sensitive-properties' => {
             'encryption-key' => 1,
             'master-pubkey' => 1,
diff --git a/src/PVE/Storage/RBDPlugin.pm b/src/PVE/Storage/RBDPlugin.pm
index 1d0f23e2..65ffbe9d 100644
--- a/src/PVE/Storage/RBDPlugin.pm
+++ b/src/PVE/Storage/RBDPlugin.pm
@@ -413,6 +413,9 @@ sub plugindata {
     return {
         content => [{ images => 1, rootdir => 1 }, { images => 1 }],
         'advanced-properties' => {},
+        'hidden-properties' => {
+            bwlimit => 1,
+        },
         'sensitive-properties' => { keyring => 1 },
     };
 }
diff --git a/src/PVE/Storage/ZFSPlugin.pm b/src/PVE/Storage/ZFSPlugin.pm
index 60410cfa..b060db19 100644
--- a/src/PVE/Storage/ZFSPlugin.pm
+++ b/src/PVE/Storage/ZFSPlugin.pm
@@ -177,6 +177,9 @@ sub plugindata {
     return {
         content => [{ images => 1 }, { images => 1 }],
         'advanced-properties' => {},
+        'hidden-properties' => {
+            bwlimit => 1,
+        },
         'sensitive-properties' => {},
     };
 }
diff --git a/src/PVE/Storage/ZFSPoolPlugin.pm b/src/PVE/Storage/ZFSPoolPlugin.pm
index 5ac6d235..6362a438 100644
--- a/src/PVE/Storage/ZFSPoolPlugin.pm
+++ b/src/PVE/Storage/ZFSPoolPlugin.pm
@@ -57,6 +57,9 @@ sub plugindata {
         content => [{ images => 1, rootdir => 1 }, { images => 1, rootdir => 1 }],
         format => [{ raw => 1, subvol => 1 }, 'raw'],
         'advanced-properties' => {},
+        'hidden-properties' => {
+            bwlimit => 1,
+        },
         'sensitive-properties' => {},
     };
 }
-- 
2.47.3





  parent reply	other threads:[~2026-07-27 14:36 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-27 14:34 [PATCH common/manager/proxmox-widget-toolkit/storage/storage-plugin-examples v3 00/17] GUI Support for Custom Storage Plugins Max R. Carrara
2026-07-27 14:34 ` [PATCH pve-common v3 01/17] json schema: add multiline string format Max R. Carrara
2026-07-27 14:34 ` [PATCH pve-storage v3 02/17] api: plugins/storage: add initial routes and endpoints Max R. Carrara
2026-07-27 14:34 ` [PATCH pve-storage v3 03/17] api: plugins/storage/plugin: include schema in plugin metadata Max R. Carrara
2026-07-27 14:34 ` [PATCH pve-storage v3 04/17] api: plugins/storage/plugin: mark sensitive properties in schema Max R. Carrara
2026-07-27 14:34 ` [PATCH pve-storage v3 05/17] api: plugins/storage/plugin: factor plugin metadata code into helper Max R. Carrara
2026-07-27 14:34 ` [PATCH pve-storage v3 06/17] api: plugins/storage/plugin: add plugins' 'content' to their metadata Max R. Carrara
2026-07-27 14:34 ` [PATCH pve-storage v3 07/17] all plugins: add 'title' to properties, adapt 'description's Max R. Carrara
2026-07-27 14:34 ` [PATCH pve-storage v3 08/17] all plugins, api: mark certain properties as advanced in plugindata() Max R. Carrara
2026-07-27 14:34 ` Max R. Carrara [this message]
2026-07-27 14:34 ` [PATCH proxmox-widget-toolkit v3 10/17] form: introduce new 'proxmoxtextarea' field Max R. Carrara
2026-07-27 14:34 ` [PATCH proxmox-widget-toolkit v3 11/17] utils: introduce helper function getFieldDefFromPropertySchema Max R. Carrara
2026-07-27 14:34 ` [PATCH proxmox-widget-toolkit v3 12/17] acme: use helper to construct ExtJS fields from property schemas Max R. Carrara
2026-07-27 14:34 ` [PATCH pve-manager v3 13/17] api2: sort modules and API method registrations Max R. Carrara
2026-07-27 14:34 ` [PATCH pve-manager v3 14/17] api: add API routes 'plugins' and 'plugins/storage' Max R. Carrara
2026-07-27 14:34 ` [PATCH pve-manager v3 15/17] ui: storage view: display error when no editor for storage type exists Max R. Carrara
2026-07-27 14:34 ` [PATCH pve-manager v3 16/17] ui: storage: add basic UI integration for custom storage plugins Max R. Carrara
2026-07-27 14:34 ` [PATCH pve-storage-plugin-examples v3 17/17] sshfs: Update SSHFS plugin Max R. Carrara

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260727143445.513900-10-m.carrara@proxmox.com \
    --to=m.carrara@proxmox.com \
    --cc=pve-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal