[libvirt] [PATCH 6/8] Enable virDomainBlockPull in the python API.

Daniel P. Berrange berrange at redhat.com
Tue Jun 14 09:59:46 UTC 2011


On Thu, Jun 09, 2011 at 12:10:12PM -0500, Adam Litke wrote:
> virDomainBlockPullAll and virDomainBlockPullAbort are handled automatically.
> virDomainBlockPull and virDomainBlockPullInfo require manual overrides since
> they return a custom type.
> 
> * python/generator.py: reenable bindings for this entry point
> * python/libvirt-override-api.xml python/libvirt-override.c:
>   manual overrides
> 
> Signed-off-by: Adam Litke <agl at us.ibm.com>
> ---
>  python/generator.py             |    5 +--
>  python/libvirt-override-api.xml |   14 ++++++++++
>  python/libvirt-override.c       |   53 +++++++++++++++++++++++++++++++++++++++
>  3 files changed, 69 insertions(+), 3 deletions(-)
> 
> diff --git a/python/generator.py b/python/generator.py
> index 43e7414..be8419d 100755
> --- a/python/generator.py
> +++ b/python/generator.py
> @@ -178,8 +178,6 @@ def enum(type, name, value):
>  functions_failed = []
>  functions_skipped = [
>      "virConnectListDomains",
> -    'virDomainBlockPull',
> -    'virDomainGetBlockPullInfo',
>  ]
>  
>  skipped_modules = {
> @@ -194,7 +192,6 @@ skipped_types = {
>       'virConnectDomainEventIOErrorCallback': "No function types in python",
>       'virConnectDomainEventGraphicsCallback': "No function types in python",
>       'virEventAddHandleFunc': "No function types in python",
> -     'virDomainBlockPullInfoPtr': "Not implemented yet",
>  }
>  
>  #######################################################################
> @@ -359,6 +356,8 @@ skip_impl = (
>      'virNodeDeviceListCaps',
>      'virConnectBaselineCPU',
>      'virDomainRevertToSnapshot',
> +    'virDomainBlockPull',
> +    'virDomainGetBlockPullInfo',
>  )
>  
>  
> diff --git a/python/libvirt-override-api.xml b/python/libvirt-override-api.xml
> index ec08e69..4bdd5de 100644
> --- a/python/libvirt-override-api.xml
> +++ b/python/libvirt-override-api.xml
> @@ -314,5 +314,19 @@
>        <arg name='flags' type='unsigned int' info='flags, curently unused'/>
>        <return type='int' info="0 on success, -1 on error"/>
>      </function>
> +    <function name='virDomainBlockPull' file='python'>
> +      <info>Initiate an incremental BlockPull for the given disk</info>
> +      <arg name='dom' type='virDomainPtr' info='pointer to the domain'/>
> +      <arg name='path' type='const char *' info='Fully-qualified filename of disk'/>
> +      <arg name='flags' type='unsigned int' info='fine-tuning flags, currently unused, pass 0.'/>
> +      <return type='virDomainBlockPullInfo' info='A dictionary containing progress information.' />
> +    </function>
> +    <function name='virDomainGetBlockPullInfo' file='python'>
> +      <info>Get progress information for a background BlockPull operation</info>
> +      <arg name='dom' type='virDomainPtr' info='pointer to the domain'/>
> +      <arg name='path' type='const char *' info='Fully-qualified filename of disk'/>
> +      <arg name='flags' type='unsigned int' info='fine-tuning flags, currently unused, pass 0.'/>
> +      <return type='virDomainBlockPullInfo' info='A dictionary containing progress information.' />
> +    </function>
>    </symbols>
>  </api>
> diff --git a/python/libvirt-override.c b/python/libvirt-override.c
> index 974decb..cbdbc54 100644
> --- a/python/libvirt-override.c
> +++ b/python/libvirt-override.c
> @@ -2382,6 +2382,57 @@ libvirt_virDomainGetJobInfo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
>      return(py_retval);
>  }
>  
> +static PyObject *
> +libvirt_virDomainBlockPullImpl(PyObject *self ATTRIBUTE_UNUSED,
> +                               PyObject *args, int infoOnly) {
> +    virDomainPtr domain;
> +    PyObject *pyobj_domain;
> +    const char *path;
> +    unsigned int flags;
> +    virDomainBlockPullInfo info;
> +    int c_ret;
> +    PyObject *ret;
> +
> +    if (!PyArg_ParseTuple(args, (char *)"Ozi:virDomainStreamDiskInfo",
> +                          &pyobj_domain, &path, &flags))
> +        return(NULL);
> +    domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain);
> +
> +LIBVIRT_BEGIN_ALLOW_THREADS;
> +    if (infoOnly)
> +        c_ret = virDomainGetBlockPullInfo(domain, path, &info, flags);
> +    else
> +        c_ret = virDomainBlockPull(domain, path, &info, flags);
> +LIBVIRT_END_ALLOW_THREADS;
> +
> +    if (c_ret == -1)
> +        return VIR_PY_NONE;
> +
> +    if ((ret = PyDict_New()) == NULL)
> +        return VIR_PY_NONE;
> +
> +    PyDict_SetItem(ret, libvirt_constcharPtrWrap("cur"),
> +                   libvirt_ulonglongWrap(info.cur));
> +    PyDict_SetItem(ret, libvirt_constcharPtrWrap("end"),
> +                   libvirt_ulonglongWrap(info.end));
> +
> +    return ret;
> +}
> +
> +static PyObject *
> +libvirt_virDomainBlockPull(PyObject *self ATTRIBUTE_UNUSED,
> +                           PyObject *args)
> +{
> +    return libvirt_virDomainBlockPullImpl(self, args, 0);
> +}
> +
> +static PyObject *
> +libvirt_virDomainGetBlockPullInfo(PyObject *self ATTRIBUTE_UNUSED,
> +                                  PyObject *args)
> +{
> +    return libvirt_virDomainBlockPullImpl(self, args, 1);
> +}
> +
>  
>  /*******************************************
>   * Helper functions to avoid importing modules
> @@ -3613,6 +3664,8 @@ static PyMethodDef libvirtMethods[] = {
>      {(char *) "virDomainGetJobInfo", libvirt_virDomainGetJobInfo, METH_VARARGS, NULL},
>      {(char *) "virDomainSnapshotListNames", libvirt_virDomainSnapshotListNames, METH_VARARGS, NULL},
>      {(char *) "virDomainRevertToSnapshot", libvirt_virDomainRevertToSnapshot, METH_VARARGS, NULL},
> +    {(char *) "virDomainBlockPull", libvirt_virDomainBlockPull, METH_VARARGS, NULL},
> +    {(char *) "virDomainGetBlockPullInfo", libvirt_virDomainGetBlockPullInfo, METH_VARARGS, NULL},
>      {NULL, NULL, 0, NULL}
>  };

ACK


Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list