2011年7月24日日曜日

libvirt APIを使ってみる その1

参考URL

仮想環境を自動化する方法として、
cobblerとかKoanとかあって便利に使わせてもらっているのですが、
そもそもlibvirtについての知識があまりなかったので、勉強がてらに、
python使ってちょっと触れてみました。



※Koanは本家のリンクが切れていたようなので、mizzyさんのサイトへリンク張らせてもらいました。


まず、kvmの環境があることが前提になります。
kvmの環境とかは、参考になるサイトがいっぱいあるので、割愛します。

後は、ちょっとpython試すのに便利なbpython使います。
モジュール名とか関数とかいろいろと補完効くので、便利です。

# モジュールをインポートします

>>> import libvirt
>>> import sys

# モジュールについて調べたいときは、
>>> help(libvirt)

# VMM(Virtual Machine Manager)に接続
>>> conn = libvirt.open('qemu:///system')

# 接続でてきるかどうか
# instanceの情報が出てきたんで、接続できたんだろうと思う
>>> print conn
<libvirt.virConnect instance at 0x2848638>

# ドメインIDを取得してみる
>>> conn.listDomainsID()
[1, 8, 12, 2, 3]

# ドメインIDから各ゲストの接続情報を取得
>>> conn.lookupByID(1)
<libvirt.virDomain instance at 0x7f591f2daf38>

# 接続情報を使っていろんな情報が取れるっぽい
>>> vm1 =  conn.lookupByID(1)
>>> vm1.name()                                    ## 名前
sl6.uguis.org
>>>vm1.info()                                       ## 情報(1番目の番号は、起動状態っぽい)
[1, 1048576L, 1048576L, 1, 15552390000000L]

# 試しにサスペンド
>>> vm1.suspend()
0
>>>vm1.info()                                       ## 情報(1番目の番号が3に変わった)
[3, 1048576L, 1048576L, 1, 15552390000000L]

# 元に戻す方法がわからなかったが、resume()で元に戻った
>>> vm1.resume()
0
>>>vm1.info()                                       ## 情報(1番目の番号が1に変わった)
[1, 1048576L, 1048576L, 1, 15552390000000L]

## virt-managerでGUIの表示でもステータスが変わるのを確認できました。

## 他にも以下のような値の取得や操作ができそう

ID                     OSType                 UUID                 
attachDevice           attachDeviceFlags      autostart            
connect                coreDump               create               
detachDeviceFlags      hasCurrentSnapshot     hasManagedSaveImage  
isPersistent           isUpdated              jobInfo              
maxVcpus               memoryParameters       memoryPeek           
migrateToURI           name                   openConsole          
revertToSnapshot       save                   schedulerParameters  
setMemory              setMemoryParameters    setSchedulerParameters
snapshotCreateXML      snapshotCurrent        snapshotListNames    
undefine               updateDeviceFlags      vcpus                
UUIDString             XMLDesc                abortJob             
blockInfo              blockPeek              blockStats           
createWithFlags        destroy                detachDevice         
info                   interfaceStats         isActive             
managedSave            managedSaveRemove      maxMemory            
memoryStats            migrate                migrateSetMaxDowntime
pinVcpu                reboot                 resume               
schedulerType          setAutostart           setMaxMemory         
setVcpus               setVcpusFlags          shutdown             
snapshotLookupByName   snapshotNum            suspend              
vcpusFlags                                                         


もうちょっといろいろと試してみて、次回は何かスクリプトでも作ろうかと思います。

0 件のコメント:

コメントを投稿