These are short posts on how to connect to qemu/KVM via libvirt using Python binding. Ability to talk to the hypervisor helps in various automation tasks. In this post, we show how to connect to hypervisor and display domain details. Its assumed that you have Qemu/KVM and have installed libvirt-python
package. If not, its yum install libvirt-python
to install it.
import libvirt
import sys
#Open a readonly connection to libvirt
conn = libvirt.openReadOnly(None)
if conn == None:
Logger.critical( 'Could not connect to the hypervisor')
sys.exit(1)
try:
dom = conn.lookupByName("centos_vm")
except:
Logger.critical( 'Could not find the domain')
sys.exit(1)
print ("Domain : id %d running %s state = %d" % (dom.ID(), dom.OSType(), dom.state()[0]))
print (dom.info())
Output
Domain 0: id -1 running hvm state = 5 [5, 2097152L, 0L, 2, 0L]
From libvirt source code:
# virDomainState (dom.state()[0]) VIR_DOMAIN_NOSTATE = 0 # no state VIR_DOMAIN_RUNNING = 1 # the domain is running VIR_DOMAIN_BLOCKED = 2 # the domain is blocked on resource VIR_DOMAIN_PAUSED = 3 # the domain is paused by user VIR_DOMAIN_SHUTDOWN = 4 # the domain is being shut down VIR_DOMAIN_SHUTOFF = 5 # the domain is shut off VIR_DOMAIN_CRASHED = 6 # the domain is crashed VIR_DOMAIN_PMSUSPENDED = 7 # the domain is suspended by guest power management
More Help
Run this command to print out the entire libvirt API.
python -c "import libvirt; help(libvirt)" > help.txt
Other ways to display state names:
domain_state_name = { libvirt.VIR_DOMAIN_NOSTATE : "no state", libvirt.VIR_DOMAIN_RUNNING : "running", libvirt.VIR_DOMAIN_BLOCKED : "idle", libvirt.VIR_DOMAIN_PAUSED : "paused", libvirt.VIR_DOMAIN_SHUTDOWN : "in shutdown", libvirt.VIR_DOMAIN_SHUTOFF : "shut off", libvirt.VIR_DOMAIN_CRASHED : "crashed", libvirt.VIR_DOMAIN_PMSUSPENDED : "suspended by PM" } print("Current State:", domain_state_name[dom.state()[0]])
References
http://www.ibm.com/developerworks/library/os-python-kvm-scripting1/