Richard W.M. Jones wrote:
Daniel P. Berrange wrote:
> On Wed, May 23, 2007 at 03:58:02PM +0100, Richard W.M. Jones wrote:
>> This patch adds a Python binding for the virGetVersion call (called
>> libvirt.getVersion).
>
> Looks good to me.
Actually, it contains a subtle error. Improved patch coming up ...
The error was in the handling of the case where you pass None to the
function. Previously that would pass a NULL type and non-NULL typeVer
to the underlying C function, which the underlying C function would
interpret as a request to get the version of the Xen driver.
Bad idea if libvirt is compiled --without-xen.
The new version treats None as meaning that we just want to get the
version of the main library.
The semantics of the new version are described in the Python documentation:
+ """Return a tuple containing the version of the library and
+ a version of the driver with the given name.
+
+ If the name passed is None then only the first element of the
+ tuple (library version) is meaningful. The second element will
+ be zero.
+
+ If the name passed refers to a non-existent driver, then you
+ will get the exception 'no support for hypervisor'.
+
+ Versions are 1000000*major + 1000*minor + release."""
and shown in the example below:
$ python
Python 2.4.4 (#1, Oct 23 2006, 13:58:18)
[GCC 4.1.1 20061011 (Red Hat 4.1.1-30)] on linux2
Type "help", "copyright", "credits" or "license"
for more information.
>> import libvirt;
>> libvirt.getVersion (None);
(2002, 0)
>> libvirt.getVersion ("Xen");
(2002, 3000001)
>> libvirt.getVersion ("QEMU");
(2002, 2002)
>> libvirt.getVersion ("not_here");
libvir:
error : no support for hypervisor
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "/home/rjones/local/lib/python2.4/site-packages/libvirt.py",
line 102, in getVersion
if ret is None: raise libvirtError ("virGetVersion() failed")
libvirt.libvirtError: virGetVersion() failed no support for hypervisor
Rich.
--
Emerging Technologies, Red Hat -
http://et.redhat.com/~rjones/
Registered Address: Red Hat UK Ltd, Amberley Place, 107-111 Peascod
Street, Windsor, Berkshire, SL4 1TE, United Kingdom. Registered in
England and Wales under Company Registration No. 03798903