On Fri, Apr 09, 2010 at 03:53:37PM +0100, Antoine Martin wrote:
Daniel P. Berrange wrote:
> On Fri, Apr 09, 2010 at 03:31:37PM +0100, Antoine Martin wrote:
>> [snip]
>>>> * not everything is exposed via libvirt:
>>>> virsh can retrieve vncdisplay
>>>> but libvirt (or at least the python bindings) does not. How come?
>>>> This happens to be one thing I need for writing a libvirt backend for
my
>>>> virtual desktop software.
>>> The 'virsh vncdisplay' command is simply fetching the XML doc for
the
>>> guest and then extracting the VNC port using a xpath expression
>>>
>>> /domain/devices/graphics[@type='vnc']/@port
>>>
>>> So for python you'd want to just get an XML handling module and do
similar.
>> Yes, I saw that in the virsh code.
>> Shouldn't this be part of the libvirt api proper??
>> Isn't it supposed to shield us from dealing with files and XML?
>
> It isn't scalable to add APIs for extracting each possible piece of info
> from the XML. All languages have APIs for extracting data from XML using
> XPath (or DOM). Thus it is better to leave that flexibility to the apps
> rather than hardcoding APIs for it in libvirt. The XML schemas/docs are
> a formal part of the libvit API, so we're not trying to sheild that from
> apps.
>
I was thinking of something like:
domain.get_attribute("vncdisplay")
Because it's a shame to have to use virsh as a wrapper (or XML file
parsing) and re-do all the work that was done to get to the domain
object when all your really want is just an attribute..
You can already do that very simply in python using lxml
from lxml import etree
tree = etree.parse(domain.XMLDesc())
r = tree.xpath('/domain/devices/graphics[@type='vnc']/@port')
So adding an API for this is only saving at best 2 lines of code, and is
much less flexible in what it can do
Daniel
--
|: Red Hat, Engineering, London -o-
http://people.redhat.com/berrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org -o-
http://deltacloud.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|