harry’s memorandum

おれおれメモ

Xen - Ruby interface to the Xen API を使ってみる

Xenを操作するために、virt-manager, xmコマンド, virsh でも特に不満はないのですが、Xen Management APIというのがあるそうなので使ってみたくなりました。

xenライブラリをインストール

gem install xen
Successfully installed xen-0.1.2.1
1 gem installed
Installing ri documentation for xen-0.1.2.1...
Installing RDoc documentation for xen-0.1.2.1...

xend-config.sxpを変更

Domain0へリモートアクセスを可能にするため、少々設定。ただXenのバージョンが古いと対応していないかも。私のXenは3.4.1を使っています。

$ cat /etc/xen/xend-config.sxp | grep ^\(xen-api-server
(xen-api-server ((0.0.0.0:9363)))

設定を再読み込み。

$ sudo /etc/init.d/xend reload

domainUのboot, reboot, shutdown

dom0 = "mydom0"
domu = "mydomu"
xenhost = Xen::Host.new(dom0, 9363)
vm = xenhost.find_vm(domu)
if vm
  printf("%s: vm is in the state of %s \n", domu, vm.start!) 
  #vm.clean_reboot! 
  #vm.clean_shutdown!
  #vm.hard_reboot!
  #vm.hard_shutdown!
end

xmコマンドのxm listっぽいのやつ

require 'rubygems'
require 'xen'

dom0s = ["mydom0"]
printf("%-15s%-20s%-10s%-10s%-10s%-10s\n","Dom0", "Name", "ID", "Mem", "VCPUs", "State")
dom0s.each {|dom|
  xenhost = Xen::Host.new(dom, 9363)

  xenhost.vms.each {|vm|
    next if vm.is_dom0?
    rec = vm.record
    dom0, name, domid, mem, vcpus, state =
    [
      dom,
      rec["name_label"],
      rec["domid"],
      (rec["memory_dynamic_min"].to_i / (1024*1024)),
      rec["VCPUs_max"],
      rec["power_state"]
    ]
    printf("%-15s%-20s%-10s%-10s%-10s%-10s\n", dom0, name, domid, mem, vcpus, state)
  }
}

感想

思ったより便利ですが、基本的な操作ぐらいしかできない感じです。
gemでxenライブラリをインストールさえすれば、Linux, Windowsでもdomain0へリモートアクセスができるのでネットワーク管理者にとっては嬉しいかも。