public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: "Max R. Carrara" <m.carrara@proxmox.com>
To: "Thomas Ellmenreich" <t.ellmenreich@proxmox.com>,
	<pve-devel@lists.proxmox.com>
Subject: Re: [PATCH common/manager/proxmox-widget-toolkit/storage/storage-plugin-examples v3 00/17] GUI Support for Custom Storage Plugins
Date: Fri, 07 Aug 2026 12:02:22 +0200	[thread overview]
Message-ID: <DKIMIW2CUXVR.1PGK522O74FN7@proxmox.com> (raw)
In-Reply-To: <DKG3GI6Q7D0P.JCPKW1BOE5XA@proxmox.com>

On Tue Aug 4, 2026 at 12:40 PM CEST, Thomas Ellmenreich wrote:
> First of all, I really like the idea of this, and I find it actually really
> easy to use. Without having read anything about how to configure the UI, I was
> quickly able to make changes that then also translated. That said, this also
> means that all the errors I have found could be purely caused by
> misconfiguration. In any case, here is a list of the things I have tried:
>
> - Installed the Patchseries and Plugins on a VM and tried adding Storages of
>   the 3 different Extra Plugin Types
>
> - Made manual curl requests to the different Endpoints to see the return values
>
> - Started playing around with the configuration of the 'backup-provider-dir-example'
>   Plugin to test different edge cases. Here are most of the things I did:
>
>   - Added one and then two multiline fields to see how they sorted.
>
>   - Checked that optional fields are actually optional, and vice versa.
>
>   - Made one of the multiline fields Fixed, and then checked how that showed
>     when adding the Storage and when editing it.
>
>   - Added a sensitive multiline field.
>
>   - Added a normal string field that is not optional, as well as sensitive.
>
>   - Added a multiline field to the advanced properties, while being optional
>     as well as non optional.
>
>   - Repeated some of the combinations with boolean, number and integer
>     fields.

Wew, thanks a lot for the thorough testing and the review! Glad to hear
that it's easy to use! :)

>
> Looking at the code and during these tests, I have encountered some things.
> Not everything might be important, but I will still list everything I have
> noticed. And I should also add that I'm not sure if this series is the correct
> moment to address some of the problems, as they might be more general ExtJs
> problems.
>
> - In some of the patches, there are a few strings that could be wrapped in
>   `gettext` to allow for future translation.

Actually really nice that you spotted that; will hunt those strings down
and translate them in v4. Thanks!

>
> - There seems to be an inconsistency in how required (or non optional) fields
>   show up in the UI. When a field is marked as fixed and required, it has a
>   red lining indicating the fact that it has to be set. But if it's only
>   required, there is no red line. That said, upon trying to create the storage,
>   a good error message is shown. So this is purely a UI/UX issue.

Interesting, will have a look at this too.

>
> - When adding multiline fields, they show up in the bottom section of the
>   popup UI, which is very nice. But when that field has the 'fixed' property set
>   and you then open the editing UI, instead of showing up in the bottom section,
>   the multiline field now shows up between the other properties. This is also
>   just a UI issue, it caused a second of confusion for me though, as the quite
>   wide multiline field suddenly showed up as a small fixed label, hidden
>   between other properties.

Yeah I can totally see why that might be confusing; I'll see if I can
adapt the logic there so that when a property with `multiline` format
is being used as a display field, it still gets put into the wide bottom
column (the same position as before). Nice that you spotted this,
thanks!

>
> - Adding newlines to a multiline field doesn't work and fails with this error:
>   'Property contains a line feed (500)'. I'm guessing, but I think this is
>   a problem with the `storage.cfg` file and not the UI.

Yeah that's gonna be a bit tricky, I'll have to see how multiline
strings can be stored in SectionConfig (sigh). Thanks for spotting this
as well!

>
> - Setting multiline field as sensitive seems to do nothing to the field. It
>   shows up as just a normal multiline field.

That's actually a limitation of text boxes in general, unfortunately.
The censoring cannot be applied to `<textarea>` elements, and I have
tried to look for some kind of solution in ExtJS -- I might try
customizing the new proxmoxtextarea field in some way so that this may
be taken into account. FWIW, we don't do this for the `keyring` of RBD
storages either, but might be nice to adapt that field in the UI there
too, if I do end up finding a solution.

>
> - I then added a new required string field and set that as sensitive, which
>   correctly hides the content of the field. When I then try to save the
>   storage, I get the following error: 'Missing value for required option "another-testing-prop" (500)'

If I understand correctly there, the property is treated as expected
here, right? Or does this happen when you update the config?

>
> - This is not an issue in my opinion, but I wanted to note it. Its possible
>   to have a required field in the Advanced Properties without a default. Can
>   be an annoying thing if a plugin creator sets it, but it would be a mistake
>   on the creators part.

Hmm, yeah, that surely is annoying, but I agree that it would be the
plugin author's fault.

>
> - Purely out of intuition I would have thought that the difference between
>   number and integer is that the first allows decimals and the second does no.
>   This is not the case, when adding a ',' or a '.' in both, the "decimal part"
>   just disappears.

Oh, that's interesting, actually. I will investigate further, thanks for
spotting that!

>
> On Mon Jul 27, 2026 at 4:34 PM CEST, Max R. Carrara wrote:
> > 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





      reply	other threads:[~2026-08-07 10:02 UTC|newest]

Thread overview: 23+ 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 ` [PATCH pve-storage v3 09/17] all plugins, api: mark certain properties as hidden " Max R. Carrara
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
2026-08-03 11:50 ` [PATCH common/manager/proxmox-widget-toolkit/storage/storage-plugin-examples v3 00/17] GUI Support for Custom Storage Plugins Jakob Klocker
2026-08-03 13:27   ` Jakob Klocker
2026-08-07  9:48   ` Max R. Carrara
2026-08-04 10:40 ` Thomas Ellmenreich
2026-08-07 10:02   ` Max R. Carrara [this message]

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=DKIMIW2CUXVR.1PGK522O74FN7@proxmox.com \
    --to=m.carrara@proxmox.com \
    --cc=pve-devel@lists.proxmox.com \
    --cc=t.ellmenreich@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