XS Japan 2008 Xen Mgmt Japanese

2,354 views

Published on

Shinetsu Isawa: Practical Application of Xen Management API with Light Weight Language (Ruby)

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,354
On SlideShare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
6
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

XS Japan 2008 Xen Mgmt Japanese

  1. 1. 軽量言語( JRuby )による Xen 管理 API の応 用 2008年11月20日 井澤 信悦(いさわしんえつ) 伊藤忠テクノソリューションズ株式会社( CTC) IT エンジニアリング室 プラットフォーム推進部
  2. 2. 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 で公式にリリース
  3. 3. Xen サーバー と その管理 分散処理 と 集中管理 マ 商用管理 ネ システム(ツール) ー ジ ャ ー virt- 商用 manager xm エージェ Ruby/JRuby ント libvirt programming Java pyxen libxen(C/C++) RubyGem library package Tool ↑   XML-RPC(sockets)  ↓ Xen C# Python 9363 xen d C/C++ Ruby Apache /dev/xen/* Other xml-rpc xmlrpc-client.jar Kernel(Dom0) ↑   Hyper Call  ↓ http(s) クライアントモジュー ル Xen ハイパーバイザー
  4. 4. クラス関係図 network VIF 仮想ネットワークインターフェ イス PIF 物理ネットワークインターフェ イス VDI 仮想ディスクイメージ VBD 仮想ブロックデバイス PBD 物理ブロックデバイス SR ストレージリポジトリ
  5. 5. クラスメソッド例 • ゲッターとセッター プロパティ 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
  6. 6. プログラミング • 参照 と 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 などで検 索する )
  7. 7. 設定準備 • 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 /usr PATH 追加 (usr/jruby-1.1.3/bin) jruby –S gem install xen
  8. 8. サンプルプログラム require quot;rubygemsquot; gem 'xen' require 'xen‘ xh = Xen::Host.new('192.168.11.3', 9363) xh.vms.each do |vm| puts quot;VM UUID: quot; + vm.uuid + quot; Name-label: quot; + vm.name unless vm.is_dom0? end puts quot;Enter Guest OS name for rebootquot; vmin = gets.chomp xh.find_vm(vmin).clean_reboot! エラーハンドリングは簡素化するために省きました 参照 : lib/ruby/gems/1.8/gems/xen-0.1.2.1/README
  9. 9. “xm create” コマンド と API RubyGem パッケージを編集 lib/ruby/gems/1.8/gems/xen-0.1.2.1/lib/xen/vm.rb :actions_after_shutdown => 'destroy' kernel = quot;/boot/vmlinuz-2.6.18-xenquot; :PV_kernel => '/boot/vmlinuz-2.6.18-xen' :PV_args => 'root=/dev/sda1 ro 3' memory = 128 name = quot;ttyquot; Ruby プログラムを作成 vif = [ '' ] require quot;rubygemsquot; dhcp = quot;dhcpquot; gem 'xen' disk = ['file:/xen/tty/rootfs,sda1,w'] require 'xen' root = quot;/dev/sda1 roquot; h = Xen::Host.new('192.168.11.3', 9363 ) network =Xen::Network.find_by_name quot;eth0quot;, h vm = h.create_vm “ttyquot;, 128*1024*1024 vdi_sda1 = h.create_vdi quot;vdi1quot;, quot;file:/xen/tty/rootfsquot; vbd1 = h.create_vbd quot;sda1quot;, vm, vdi_sda1 vif = h.create_vif vm, network, quot;00:30:48:88:81:07quot; vm.start!
  10. 10. 参考情報 • 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

×