xs japan 2008 xen mgmt japanese
DESCRIPTION
Shinetsu Isawa: Practical Application of Xen Management API with Light Weight Language (Ruby)TRANSCRIPT
井澤 信悦(いさわしんえつ)
伊藤忠テクノソリューションズ株式会社( CTC)IT エンジニアリング室 プラットフォーム推進部
軽量言語( JRuby )による Xen 管理 API の応用
2008年11月20日
XenAPI 1.0 概要
• データモデルを標準化分散永続オブジェクトを操作
• 標準 XML-RPC リモート API コール用標準ワイヤープロトコルバインディングで言語非依存HTTP/S で通信 , ステイトフルなセッションベース
• レガシーインターフェイスは非推奨 xend-http-server(8000), xend-tcp-xmlrpc-server(8006)
• 長期安定xen-api-server(9363) 新規推奨: Xen-API インターフェイスXen 3.1.0 で公式にリリース
Xen サーバー と その管理分散処理 と 集中管理
Xen ハイパーバイザー
Kernel(Dom0)
xen d
↑ XML-RPC(sockets) ↓
商用 エージェントlibvirt
pyxen libxen(C/C++)
xm
↑ Hyper Call ↓
商用管理システム(ツール)
virt-manager
マネージャー
http(s) クライアントモジュール
Apachexmlrpc-client.jar
Rubyxml-rpc
C#PythonC/C++ Other
JavalibraryTool
RubyGempackage
Xen
Ruby/JRuby programming
9363
/dev/xen/*
クラス関係図networkVIF 仮想ネットワークインターフェイスPIF 物理ネットワークインターフェイス
VDI 仮想ディスクイメージ
VBD 仮想ブロックデバイスPBD 物理ブロックデバイスSR ストレージリポジトリ
クラスメソッド例
• ゲッターとセッタープロパティuuid,label,state,other_config(stringMap type), などreference to related objects( 例 : metrics) MAC,MTU,qos,device_config,status_code
• VM (ゲスト OS )start,(un)pause,(hard/clean)_shutdown,(hard/clean)_reboot,suspend,resume,clone,etc…
• メトリックスmemory/total/actual/free,VCPUs/number,last_updated,etc…
• その他create,destory,plug,unplug,get_all,location
プログラミング
• 参照 と UUID参照 : XML-RPC 上のエンコードされた文字列 ( オペーク )サーバーが生成し , サーバーだけが理解 ( セッション上のみで有効 )UUID : 永続的なオブジェクト ID 名 (OSF DCD フォーマット )相互変換メソッド : get_by_uuid, get_uuid
• XML-RPC ライブラリsession.login_with_password(string uname, string pwd)入力パラメータを用意し , 実行して、結果を得る 結果は HashMap のような複雑なデーター構造の場合がある値を取り出すには、特別に操作が必要な場合が多い
• High-level Class Libraryホストオブジェクトの生成 (xen ホストへログイン ) してハンドルを得る目的オブジェクトへの参照を得て、そのメソッドを呼び出す ( プロパティから得たり , 新規に作成したり , 名前、 UUID などで検索する )
設定準備
• Xen サーバー側での構成ポート , インターフェイス , 及び アクセス制御 の構成/etc/xen/xend-config.sxp(xen-api-server ((0.0.0.0:9363)))そして xend を再起動
• 管理する側でのセットアップJDK セットアップ (1.5 以降 )JRuby ダウンロード http://dist.codehaus.org/jruby/tar zxf jruby-bin-1.1.3.tar.gz -C /usrPATH 追加 (usr/jruby-1.1.3/bin)jruby –S gem install xen
サンプルプログラム
require "rubygems"gem 'xen'require 'xen‘
xh = Xen::Host.new('192.168.11.3', 9363)
xh.vms.each do |vm| puts "VM UUID: " + vm.uuid + " Name-label: " + vm.name unless vm.is_dom0?end
エラーハンドリングは簡素化するために省きました参照 : lib/ruby/gems/1.8/gems/xen-0.1.2.1/README
puts "Enter Guest OS name for reboot"vmin = gets.chompxh.find_vm(vmin).clean_reboot!
“xm create” コマンド と APIRubyGem パッケージを編集lib/ruby/gems/1.8/gems/xen-0.1.2.1/lib/xen/vm.rb:actions_after_shutdown => 'destroy' :PV_kernel => '/boot/vmlinuz-2.6.18-xen':PV_args => 'root=/dev/sda1 ro 3'
Ruby プログラムを作成require "rubygems"gem 'xen'require 'xen'h = Xen::Host.new('192.168.11.3', 9363 )network =Xen::Network.find_by_name "eth0", hvm = h.create_vm “tty", 128*1024*1024vdi_sda1 = h.create_vdi "vdi1", "file:/xen/tty/rootfs"vbd1 = h.create_vbd "sda1", vm, vdi_sda1vif = h.create_vif vm, network, "00:30:48:88:81:07"vm.start!
kernel = "/boot/vmlinuz-2.6.18-xen"memory = 128name = "tty"vif = [ '' ]dhcp = "dhcp"disk = ['file:/xen/tty/rootfs,sda1,w']root = "/dev/sda1 ro"
参考情報
• Xen 管理 API プロジェクトhttp://wiki.xensource.com/xenwiki/XenApi
• Xen サミット 2007 年4月http://www.xen.org/files/xensummit_4/XenSummit_API_Slides_2007-04-18_Ewan.pdf
• 英文マニュアルhttp://wiki.xensource.com/xenwiki/XenApi?action=AttachFile&do=get&target=xenapi-1.0.6.pdf
• 日本語マニュアルhttp://gisawa.googlepages.com/XenAPIJ.pdf