]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
examples: Add script to parse topology from capabilities output
authorPeter Krempa <pkrempa@redhat.com>
Tue, 27 Aug 2013 10:27:21 +0000 (12:27 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 3 Sep 2013 12:27:58 +0000 (14:27 +0200)
Add a demo script originally written by Amador Pahim to parse topology
of the host from data provided in the capabilities XML.

examples/python/Makefile.am
examples/python/topology.py [new file with mode: 0755]

index 2cacfa127d9ff42fcb25501a70430279a333cbaa..d5d867cc5fa77905f83583a26f195d8f7cd84444 100644 (file)
@@ -17,4 +17,5 @@
 EXTRA_DIST=                                            \
        README                                          \
        consolecallback.py                              \
+       topoology.py                                    \
        dominfo.py domrestore.py domsave.py domstart.py esxlist.py
diff --git a/examples/python/topology.py b/examples/python/topology.py
new file mode 100755 (executable)
index 0000000..62effe3
--- /dev/null
@@ -0,0 +1,45 @@
+#!/usr/bin/env python
+# Parse topology information from the capabilities XML and use
+# them to calculate host topology
+#
+# Authors:
+#   Amador Pahim <apahim@redhat.com>
+#   Peter Krempa <pkrempa@redhat.com>
+
+import libvirt
+import sys
+from xml.dom import minidom
+
+try:
+    conn = libvirt.openReadOnly(None)
+except libvirt.libvirtError:
+    print 'Failed to connect to the hypervisor'
+    sys.exit(1)
+
+try:
+    capsXML = conn.getCapabilities()
+except libvirt.libvirtError:
+    print 'Failed to request capabilities'
+    sys.exit(1)
+
+caps = minidom.parseString(capsXML)
+host = caps.getElementsByTagName('host')[0]
+cells = host.getElementsByTagName('cells')[0]
+total_cpus = cells.getElementsByTagName('cpu').length
+
+socketIds = []
+siblingsIds = []
+
+socketIds = [ proc.getAttribute('socket_id')
+              for proc in cells.getElementsByTagName('cpu')
+              if proc.getAttribute('socket_id') not in socketIds ]
+
+siblingsIds = [ proc.getAttribute('siblings')
+                for proc in cells.getElementsByTagName('cpu')
+                if proc.getAttribute('siblings') not in siblingsIds ]
+
+print "Host topology"
+print "NUMA nodes:", cells.getAttribute('num')
+print "   Sockets:", len(set(socketIds))
+print "     Cores:", len(set(siblingsIds))
+print "   Threads:", total_cpus