Daniel P. Berrange wrote:
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')
Thanks for that!
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
Understood. Could this code be wrapped libvirt
side with something like:
domain.xpath('/domain/devices/graphics[@type='vnc']/@port')
So that libvirt consumers dont need an explicit dependency on XML libraries?
Just another question that came to mind: how do I get notified when
something happens to a domain?
IE: how can I fire a script whenever a domain is created/added/stopped?
Thanks
Antoine
Daniel