xs japan 2008 xen mgmt japanese

10
井澤 信悦(いさわしんえつ) 伊藤忠テクノソリューションズ株式会社( CTC) IT エンジニアリング室 プラットフォーム推進部 軽量言語( JRuby )による Xen 管理 API の応 2008年11月20日

Upload: xen-project

Post on 12-Nov-2014

3.194 views

Category:

Technology


3 download

DESCRIPTION

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

TRANSCRIPT

Page 1: XS Japan 2008 Xen Mgmt Japanese

井澤 信悦(いさわしんえつ)

伊藤忠テクノソリューションズ株式会社( CTC)IT エンジニアリング室 プラットフォーム推進部

軽量言語( JRuby )による Xen 管理 API の応用

2008年11月20日

Page 2: XS Japan 2008 Xen Mgmt Japanese

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 で公式にリリース

Page 3: XS Japan 2008 Xen Mgmt Japanese

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/*

Page 4: XS Japan 2008 Xen Mgmt Japanese

クラス関係図networkVIF 仮想ネットワークインターフェイスPIF 物理ネットワークインターフェイス

VDI 仮想ディスクイメージ

VBD 仮想ブロックデバイスPBD 物理ブロックデバイスSR ストレージリポジトリ

Page 5: XS Japan 2008 Xen Mgmt Japanese

クラスメソッド例

• ゲッターとセッタープロパティ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

Page 6: XS Japan 2008 Xen Mgmt Japanese

プログラミング

• 参照 と 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 などで検索する )

Page 7: XS Japan 2008 Xen Mgmt Japanese

設定準備

• 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

Page 8: XS Japan 2008 Xen Mgmt Japanese

サンプルプログラム

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!

Page 9: XS Japan 2008 Xen Mgmt Japanese

“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"

Page 10: XS Japan 2008 Xen Mgmt Japanese

参考情報

• 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