Hi Cole, On Fri, Apr 11, 2014 at 2:50 PM, Cole Robinson <crobinso@xxxxxxxxxx> wrote: > On 04/11/2014 07:14 AM, Ruben Kerkhof wrote: >> Hi all, >> >> I have a few python scripts which use the libvirt api to get interface and block device statistics. >> What has been bugging me for a while now that is that there’s no high level api to get a list of all interfaces or block devices for a vm. >> The list can be retrieved from the xml with a bit of Xpath magic, but this seems to me to break the nice abstraction layer libvirt provides. >> Ideally, I don’t have to do anything with xml, and add dependencies on xml parsers to my code. >> >> I’ve seen examples of code doing this, for example the collectd libvirt plugin, but there must be many others. >> >> Can I kindly ask for such an API? Unfortunately I don’t have the skills to code this up myself. >> > > It's an unavoidable fact that XML is part of the libvirt API. Going down the > route of providing APIs that return bits and pieces of the XML is a slippery > slope and increases libvirt maintenance burden. > > python has a native XML library. To do what you want is pretty straight > forward once you understand the concepts. For example this prints every > interface mac address for the VM 'f20': > > > import xml.etree.ElementTree as ET > import libvirt > > conn = libvirt.open("qemu:///system") > dom = conn.lookupByName("f20") > xml = dom.XMLDesc(0) > > root = ET.fromstring(xml) > ifaces = root.findall("./devices/interface/mac") > for iface in ifaces: > print iface.attrib["address"] You're right, it's not that hard. I've been using something like the following code for a while now: def get_interfaces(dom): interfaces = {} tree = ElementTree.fromstring(dom.XMLDesc(0)) for interface in tree.findall("devices/interface"): target = interface.find("target") if target is None: continue dev = target.get("dev") mac = interface.find("mac").get("address") if not dev in interfaces: interfaces[dev] = mac return interfaces Kind regards, Ruben -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list