2010-11-13 16:34:57 +01:00
#!/usr/bin/env python
2006-04-25 16:08:48 +00:00
# dominfo - print some information about a domain
import libvirt
import sys
import os
import libxml2
import pdb
def usage ( ) :
print ' Usage: %s DOMAIN ' % sys . argv [ 0 ]
print ' Print information about the domain DOMAIN '
def print_section ( title ) :
print " \n %s " % title
print " = " * 60
def print_entry ( key , value ) :
print " %-10s %-10s " % ( key , value )
def print_xml ( key , ctx , path ) :
res = ctx . xpathEval ( path )
if res is None or len ( res ) == 0 :
value = " Unknown "
else :
value = res [ 0 ] . content
print_entry ( key , value )
return value
2008-02-05 19:27:37 +00:00
2006-04-25 16:08:48 +00:00
if len ( sys . argv ) != 2 :
usage ( )
sys . exit ( 2 )
name = sys . argv [ 1 ]
# Connect to libvirt
conn = libvirt . openReadOnly ( None )
if conn == None :
print ' Failed to open connection to the hypervisor '
sys . exit ( 1 )
try :
dom = conn . lookupByName ( name )
# Annoyiingly, libvirt prints its own error message here
except libvirt . libvirtError :
print " Domain %s is not runing " % name
sys . exit ( 0 )
info = dom . info ( )
print_section ( " Domain info " )
print_entry ( " State: " , info [ 0 ] )
print_entry ( " MaxMem: " , info [ 1 ] )
print_entry ( " UsedMem: " , info [ 2 ] )
print_entry ( " VCPUs: " , info [ 3 ] )
# Read some info from the XML desc
xmldesc = dom . XMLDesc ( 0 )
doc = libxml2 . parseDoc ( xmldesc )
ctx = doc . xpathNewContext ( )
print_section ( " Kernel " )
print_xml ( " Type: " , ctx , " /domain/os/type " )
print_xml ( " Kernel: " , ctx , " /domain/os/kernel " )
print_xml ( " initrd: " , ctx , " /domain/os/initrd " )
print_xml ( " cmdline: " , ctx , " /domain/os/cmdline " )
print_section ( " Devices " )
devs = ctx . xpathEval ( " /domain/devices/* " )
for d in devs :
ctx . setContextNode ( d )
#pdb.set_trace()
type = print_xml ( " Type: " , ctx , " @type " )
if type == " file " :
print_xml ( " Source: " , ctx , " source/@file " )
print_xml ( " Target: " , ctx , " target/@dev " )
elif type == " block " :
print_xml ( " Source: " , ctx , " source/@dev " )
print_xml ( " Target: " , ctx , " target/@dev " )
elif type == " bridge " :
print_xml ( " Source: " , ctx , " source/@bridge " )
print_xml ( " MAC Addr: " , ctx , " mac/@address " )