概要
- 以前に試した knife-xensever を改めて試してみるs
- 前回は XenServer の調子が悪くて断念してしまったこともあり、改めて、knife-xenserver と chef を利用したサーバーの構築を行なってみたい
knife-xensever
概要
github の README に Provision virtual machines with Citrix XenServer and Opscode Chef.
とある通り、XenServer と chef を使って仮想マシンのプロビジョニングを行う knife のプラグイン。残念ながら活発には開発が行われていないようで、どのソースも半年くらい前で開発が止まってしまっている。
出来ること
- XenServer に登録されている仮想サーバー及びテンプレート一覧の取得
- テンプレートからの VM 作成
- VM の削除
- ネットワーク一覧の取得
- xenserver-automater と絡めることで IP アドレスの設定等も行うことが出来る
技術的なメモ( fog について)
12 service(:compute, 'xenserver/compute', 'Compute') 13 14 class Connection 15 require 'xmlrpc/client' 16 17 def initialize(host) 18 @factory = XMLRPC::Client.new(host, '/') 19 @factory.set_parser(NokogiriStreamParser.new) 20 end
一応、fog
のソースコードを見てみると fog-1.11.1/lib/fog/xenserver.rb
で以下の通り xmlrpc/client
を require していることからも XenAPI を http 経由で叩いているようだ。
knife-xenserver を使ってみる
knife-xenserver のインストール
gem で一発!
sudo gem install knife-xenserver --no-ri --no-droc
その他、必要な gem もズラズラインストールされる。もちろん fog もインストールされる。
Fetching: terminal-table-1.4.5.gem (100%) Fetching: builder-3.2.0.gem (100%) Fetching: excon-0.22.1.gem (100%) Fetching: formatador-0.2.4.gem (100%) Fetching: net-scp-1.1.1.gem (100%) Fetching: ruby-hmac-0.4.0.gem (100%) Fetching: fog-1.11.1.gem (100%) Fetching: colored-1.2.gem (100%) Fetching: uuidtools-2.1.4.gem (100%) Fetching: knife-xenserver-1.2.3.gem (100%) Successfully installed terminal-table-1.4.5 Successfully installed builder-3.2.0 Successfully installed excon-0.22.1 Successfully installed formatador-0.2.4 Successfully installed net-scp-1.1.1 Successfully installed ruby-hmac-0.4.0 Successfully installed fog-1.11.1 Successfully installed colored-1.2 Successfully installed uuidtools-2.1.4 Successfully installed knife-xenserver-1.2.3 10 gems installed
インストール後の確認。
knife xenserver --help
下記のようにサブコマンド一覧が表示されればオッケー牧場。
FATAL: Cannot find sub command for: 'xenserver --help' # このメッセージはいただけない... Available xenserver subcommands: (for details, knife SUB-COMMAND --help) ** XENSERVER COMMANDS ** knife xenserver template create knife xenserver vm create (options) knife xenserver network list knife xenserver vm poweron VM_NAME [VM_NAME] (options) knife xenserver vm list (options) knife xenserver vm delete VM_NAME [VM_NAME] (options) knife xenserver template list knife xenserver vm poweroff VM_NAME [VM_NAME] (options)
knife.rb の設定
XenServer へのアクセス情報を knife.rb に設定する。もちろん、コマンドラインの引数でも渡すことが出来る。
knife[:xenserver_password] = "your_password" knife[:xenserver_username] = "your_usre" knife[:xenserver_host] = "IP address or Hostname"
試しに template list を取得してみる。
knife xenserver template list
Connecting to XenServer host xxx.xxx.xxx.xxx... +----------------------------------------------+--------+-------------+----------------------+ | NAME | MEMORY | GUEST_TOOLS | NETWORKS | +----------------------------------------------+--------+-------------+----------------------+ | centos6.x | 1024 | true | Pool-wide network... | | uuid: 76e31f28-0a5a-8cc8-f484-ecd589667a8e | | | | +----------------------------------------------+--------+-------------+----------------------+
XenServer のネットワークリストも取得してみる。
knife xenserver network list
Connecting to XenServer host xxx.xxx.xxx.xxx... +----------------------------------------+------+------+--------+ | NETWORK_NAME | VIFs | PIFs | BRIDGE | +----------------------------------------+------+------+--------+ | Host internal management network | 0 | | xenapi | | Pool-wide network associated with eth0 | 3 | eth0 | xenbr0 | +----------------------------------------+------+------+--------+
テンプレートから VM を作成してみる
一番シンプルに引数に --vm-template
と --vm-name
を設定して作成。--vm-template
には上記で取得したテンプレートの UUID を指定する。
knife xenserver vm create --vm-template 76e31f28-0a5a-8cc8-f484-ecd589667a8e --vm-name hoge
暫くすると...
Creating VM hoge... Using template centos6.x [uuid: 76e31f28-0a5a-8cc8-f484-ecd589667a8e]... VM Name: hoge VM Memory: 512 MB Waiting server...
上記のように VM が作成されるが、Wating server...
が出たままプロンプトが帰ってこない。
XenServer を確認すると...
uuid ( RO) : b6bcfe6e-eafb-2066-e909-5e09d0115017 name-label ( RW): hoge power-state ( RO): running
一応、VM は起動しているが MAC アドレスが重複してしまったようでネットワークインターフェースが上がらない。原因は何のことない VM 作成に利用したテンプレートにてネットワークインターフェースの MAC アドレスが指定されていた為で、とりあえずの対策としては下記のように ifcfg-eh0 の MAC アドレスの指定をコメントアウトしてテンプレートを再作成した。
#HWADDR=BA:EC:17:92:CD:2F
再作成したテンプレートを利用して改めて VM を作成してみる。
knife xenserver vm create --vm-template 886cd33d-380d-ac9a-83ab-ba0a00c4b7e1 --vm-name hoge --vm-networks 'Pool-wide network associated with eth0'
--vm-networks
には上記で取得した NETWORK_NAME
で eth0
がバインドされたネットワークを指定する。
VM を削除する
xenserver vm delete ${vmname}
で VM を削除することも出来る。
knife xenserver vm delete hoge
下記のようにインタラクティブに削除出来るので安心。${vmname}
が同じであっても UUID で判別してくれる。
Do you really want to delete this virtual machine hoge? (Y/N) Y Deleted virtual machine hoge [uuid: b6bcfe6e-eafb-2066-e909-5e09d0115017] Do you really want to delete this virtual machine hoge? (Y/N) Y Deleted virtual machine hoge [uuid: fe284ec8-0a83-25ab-8173-c5c0748a1e3f]
まとめ
- 長くなりそうなので chef の登場は次回
- knife プラグインを使った XenServer 上の VM 操作はとても簡単に行うことが出来た
- テンプレートを作る際にはテンプレートの元になる OS 側の事前準備が必要になる
- 特に NIC 周り