libvirt-ruby

virsh で管理されてる仮想ホストのバックアップなスクリプトが下記エントリで公開されていたので使ってみました。

単純に仮想ホストを suspend してディスクをコピィして resume するだけ? って思ったのですが、XML な設定なエントリを云々できるんですね。成程。

ディスクな設定

以下な設定の記述になっています。

  <devices>
    <emulator>/usr/bin/kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/local/libvirt/backup/hoge.img'/>
      <target dev='hda' bus='ide'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>

バックアップという処理という意味ではパスな情報が取れれば良いのか。スクリプトの記述が以下。

# get disk image path
img_paths = []
require "rexml/document"
xml = REXML::Document.new(dom.xml_desc)
xml.elements.to_a("domain/devices/disk").each do |disk|
  if disk.attributes["device"] == "disk"
    img_paths << disk.elements["source"].attributes["file"]
  end
end

タグとか属性使って、という形ですね。ちなみに root なタグは domain になってます。"domain/devices/disk" なタグは複数存在する可能性があるので順に取り出して、それぞれの source なタグの file な属性の値を取得、なのか。むむむ。
しかも XML な設定情報の取得も libvirt 任せなのか。イマサラですが libvirt なかなか凄い。