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へリモートアクセスができるのでネットワーク管理者にとっては嬉しいかも。