ようへいの日々精進XP

よかろうもん

knife-xenserver で XenServer を三枚におろす一部始終(リターンズ)

概要

  • 以前に試した 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 について)

  • XenServer へのアクセスは fog が XenAPI を叩いてくれている(という認識)
  • fogruby の仮想環境にアクセスする為のライブラリ
 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_NAMEeth0 がバインドされたネットワークを指定する。

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 周り