On Mon, Jun 16, 2025 at 11:52 AM Daniel P. Berrangé <berra...@redhat.com> wrote: > > On Mon, Jun 16, 2025 at 11:25:54AM +0200, Ilya Dryomov wrote: > > On Thu, May 15, 2025 at 1:29 PM Fiona Ebner <f.eb...@proxmox.com> wrote: > > > > > > Currently, most Ceph configuration options are not exposed via QAPI. > > > While it is possible to specify a dedicated Ceph configuration file, > > > specialized options are often only required for a selection of images > > > on the RBD storage, not all of them. To avoid the need to generate a > > > dedicated Ceph configuration file for each image (or for each required > > > combination of options), support a selection of key-value pairs via > > > QAPI. > > > > > > Initially, this is just 'rbd_cache_policy'. For example, this is > > > useful with small images used as a pflash for EFI variables. Setting > > > the 'rbd_cache_policy' to 'writeback' yields a substantial improvement > > > there [0]. > > > > > > The function qemu_rbd_extract_key_value_pairs() was copied/adapted > > > from the existing qemu_rbd_extract_encryption_create_options(). > > > > > > [0]: https://bugzilla.proxmox.com/show_bug.cgi?id=3329#c9 > > > > > > Signed-off-by: Fiona Ebner <f.eb...@proxmox.com> > > snip > > > > ## > > > # @BlockdevOptionsRbd: > > > # > > > @@ -4327,6 +4360,9 @@ > > > # authentication. This maps to Ceph configuration option "key". > > > # (Since 3.0) > > > # > > > +# @key-value-pairs: Key-value pairs for additional Ceph configuraton. > > > +# (Since 10.1) > > > +# > > > # @server: Monitor host address and port. This maps to the "mon_host" > > > # Ceph option. > > > # > > > @@ -4342,6 +4378,7 @@ > > > '*user': 'str', > > > '*auth-client-required': ['RbdAuthMode'], > > > '*key-secret': 'str', > > > + '*key-value-pairs' : 'RbdKeyValuePairs', > > > > To side-step all of the above, have you considered implementing > > a straightforward passthrough to Ceph instead? Something like > > > > '*key-value-pairs': ['RbdKeyValuePair'] > > > > where RbdKeyValuePair is just a pair arbitrary strings (and > > key-value-pairs is thus an optional list of those). rados_conf_set() > > would be called just the same but the user would be able to override > > any Ceph option they wish, not just a few that we thought of here. > > Passing through arbitrary key/value pairs as strings is essentially > abdicating our design responsibility in QAPI. enums would no longer > be introspectable. Integers / booleans would require abnormal formatting > by clients. API stability / deprecation promises can no longer be made. > and more besides. > > Given that limitation, if we did go the string pairs route, I would > expect it to be marked as "unstable" in the QAPI schema, so apps have > a suitable warning NOT to rely on this.
This sounds sensible to me. We can continue exposing the most common Ceph options through a proper QAPI schema but add key-value-pairs as an alternative low-level route for those who want to avoid dealing with physical configuration files. Thanks, Ilya