上一个例子说明了如何使用命令行工具 virsh 实现对域的控制。现在我们看一个使用 Python 来控制域的例子。Python 是受 libvirt 支持的脚本语言,它向 libvirt API 提供完全面向对象的接口。
在本例中,我研究了一些基本操作,与之前用 virsh 工具(list、suspend、resume 等)展示的操作类似。Python 示例脚本见 清单 6。在本例中,我们从导入 libvirt 模块开始。然后连接到本地 QEMU 虚拟机监控程序。从这里开始,重复可用的域 ID;对每个 ID 创建一个域对象,然后中止,继续,最后删除该域。
清单 6. 用于控制域的示例 Python 脚本(libvtest.py)
import libvirt conn = libvirt.open('qemu:///system') for id in conn.listDomainsID(): dom = conn.lookupByID(id) print "Dom %s State %s" % ( dom.name(), dom.info()[0] ) dom.suspend() print "Dom %s State %s (after suspend)" % ( dom.name(), dom.info()[0] ) dom.resume() print "Dom %s State %s (after resume)" % ( dom.name(), dom.info()[0] ) dom.destroy()
虽然这只是个简单示例,我们仍然可以看到 libvirt 通过 Python 提供的强大功能。通过一个简单的脚本就能够重复所有本地 QEMU 域,发行有关域的信息,然后控制域。该脚本的结果如 清单 7 所示。
清单 7. 清单 6 中的 Python 脚本输出的结果
mtj@mtj-desktop:~/libvtest$ python libvtest.py Dom ReactOS-on-QEMU State 1 Dom ReactOS-on-QEMU State 3 (after suspend) Dom ReactOS-on-QEMU State 1 (after resume) mtj@mtj-desktop:~/libvtest$