除了直接撰寫原生的C程式語言,以呼叫libvirt API的方式來操作VM之外,其實最簡單的方法是透過virsh所提供的指令來完成。大部份的工作其實使用virsh的指令集都可以做到。virsh是隨附在libvirt package中用來協助管理者執行libvirt API的一組工具程式集,可以透過它的文字式交談介面來完成工作,也可以在終端機中的命令提示字元使用這些指令。完整的virsh command連結在此:http://libvirt.org/sources/virshcmdref/html-single/。以下是簡易的操作過程:

[root@ncu-note python_libvirt]# virsh list --all
 Id    名稱                         狀態
----------------------------------------------------
 -     vm-cen                         關機
 -     vm-cen-clone                   關機
 -     winxp                          關機

[root@ncu-note python_libvirt]# virsh start vm-cen
區域 vm-cen 已開啟

[root@ncu-note python_libvirt]# virsh list --all
 Id    名稱                         狀態
----------------------------------------------------
 2     vm-cen                         執行中
 -     vm-cen-clone                   關機
 -     winxp                          關機

[root@ncu-note python_libvirt]# 

然而,除了virsh command之外,其實透過Python的交談式介面也可以完成上述的工作,除了直接操作的指令之外,因為Python語言本身的功能,直在接Python中就可以透過變數和流程控制指令,進行更完整的操作。

[root@ncu-note python_libvirt]# python 
Python 2.7.5 (default, Jun 24 2015, 00:41:19) 
[GCC 4.8.3 20140911 (Red Hat 4.8.3-9)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import libvirt
>>> conn = libvirt.open("qemu:///system")
>>> doms = conn.listAllDomains()
>>> for dom in doms:
...   print "ID: ", dom.ID(), ", Name: ", dom.name(), ", UUID:", dom.UUIDString()
... 
ID:  2 , Name:  vm-cen , UUID: 74d93d74-089d-4426-be90-8e374a16bc53
ID:  -1 , Name:  winxp , UUID: 406539b9-cb6a-4be1-9234-62674c20c159
ID:  -1 , Name:  vm-cen-clone , UUID: f02fc808-8497-4010-87ac-c8cefbd03ac9
>>> 

只要在操作之前import libvirt即可。所有的libvirt API幾乎都已被包在libvrt-python之中,也因此就可以透過Python程式碼的方式來先操作看看,沒有問題再把它寫片.py的程式碼中即可,就像是我們之前的幾篇文章所介紹的一樣。非常方便。

(7)