[Libguestfs] Extending the nbdkit python plugin

Nir Soffer nsoffer at redhat.com
Thu Nov 21 15:29:40 UTC 2019


On Thu, Nov 21, 2019 at 4:52 PM Richard W.M. Jones <rjones at redhat.com> wrote:
>
> On Thu, Nov 21, 2019 at 02:17:43PM +0000, Daniel P. Berrangé wrote:
> > I would define a new 'api_version()' method for your python
> > plugins.
> >
> > Existing plugins don't implement that of course so when your
> > C code invokes that it'll get an exception, and can assume
> > the classic API contract for pwrite().
> >
> > If the plugin implements  'api_version()' returning '1' (or
> > whatever), then this should inform the C code that the plugin
> > has the 4 arg variant of pwrite().
>
> I suspect this has to be the way to go.  One reason is that
> the V1 zero API is defined as:
>
>   def zero(h, count, offset, may_trim=False):
>
> but in V2 we'd like to replace the fourth parameter with a flags
> bitmask.  I believe pure introspection can never detect this.

You can with:

   def using_api_v2(module):
       sig = inspect.signature(module.zero)
       return "flags" in sig.parameters

See https://www.redhat.com/archives/libguestfs/2019-November/msg00130.html
using it to discover if ImageTransfer supports "format" argument.

But I would add:

    API_VERSION = 2

And query it from the python plugin when importing the module.

Nir





More information about the Libguestfs mailing list