使用Python-libvirt函式庫來操作虛擬機,主要的步驟是先取得和Node上的libvirtd連線,然後再透過listAllDomains找出所有在該Node上所有的Domain並儲放在串列變數中,這樣子就可以自由地操作以及查詢該Node上的Domain了。以下是程式片段:

#!/usr/bin/python
import sys, libvirt
conn = libvirt.open("qemu:///system")
domains = conn.listAllDomains()

上述程式碼執行之後,本機所有的Domain(虛擬機)就都被放在domains中了,其中domains[0]是第一台,domains[1] 是第二台,依此類推。

listAllDomains()預設是找出所有的Domain,如果我們想要檢查的是某些特定類型也沒問題,只要把旗標值傳進去就可以了。所有可以用的旗標如下:

VIR_CONNECT_LIST_DOMAINS_ACTIVE
VIR_CONNECT_LIST_DOMAINS_INACTIVE
VIR_CONNECT_LIST_DOMAINS_PERSISTENT
VIR_CONNECT_LIST_DOMAINS_TRANSIENT
VIR_CONNECT_LIST_DOMAINS_RUNNING
VIR_CONNECT_LIST_DOMAINS_PAUSED
VIR_CONNECT_LIST_DOMAINS_SHUTOFF
VIR_CONNECT_LIST_DOMAINS_OTHER
VIR_CONNECT_LIST_DOMAINS_MANAGEDSAVE
VIR_CONNECT_LIST_DOMAINS_NO_MANAGEDSAVE
VIR_CONNECT_LIST_DOMAINS_AUTOSTART
VIR_CONNECT_LIST_DOMAINS_NO_AUTOSTART
VIR_CONNECT_LIST_DOMAINS_HAS_SNAPSHOT
VIR_CONNECT_LIST_DOMAINS_NO_SNAPSHOT

在使用之前,記得要加上libvirt,例如以下的程式片段是要找出所有暫停中的Domain:

#!/usr/bin/python
import sys, libvirt
conn = libvirt.open("qemu:///system")
paused_domains = conn.listAllDomains(libvirt.VIR_CONNECT_LIST_DOMAINS_PAUSED)

有了這些旗標的協助,要操作某些特定的虛擬機(例如把所有暫停中的虛擬機全部恢復執行,或是列出所有還沒有SNAPSHOT的虛擬機,是不是就更容易了呢!

(68)