harry’s memorandum

おれおれメモ

XenServerのコマンドラインインターフェイス xe-cli の便利を実感してみた

XenServer使っていますか?私はVMwareよりXenServerの方が気に入っています。気に入っているその理由の1つとして、VMwareSDK認証が重くて*1時折寝てしまうことがありますが、XenServerのSDKは軽いです。機能は少ないですがやっぱり軽快なのは嬉しいです。

SDK

http://community.citrix.com/display/xs/Download+SDKs

  • XenServer.NET: The XenServer SDK for C#.NET
  • XenServer.NET: Old-style XenServer SDK for C#.NET
  • XenServerJava: The XenServer SDK for Java
  • libxenserver: The XenServer SDK for C
  • XenServerPSSnapIn: The XenServer SDK for PowerShell
  • XenAPI.py: The XenServer Python module

XML-RPCを叩けばいいってことなので、rubyで実装している人もいます。


ここではお手軽な xe-cli を使ったサンプルをメモします。(XenServer5.6fp1で試しています)

xe-cliをインストール

XenServerにログインすればxe-cliは使えます。でもリモートで管理するのなら xe-cli を別のサーバにインストールしたほうが便利です。XenServer-5.6.1-fp1-linux-cd.iso の 中に xe-cli-5.6.100-39153p.i686.rpm があるのでインストールします。

$ sudo rpm -ivh xe-cli-5.6.100-39153p.i686.rpm

xs-tools

VMにxs-toolsはインストールしておきましょう。インストールしていないと取得できない場合があります。

パスワードファイルを作成

cliを実行中にpsでパスワードが生でみえてしまうので、パスワードファイルを作成します。1行目ユーザ、2行目パスワードです。

$ cat passwordfile.txt
user
password

VMの一覧を表示

$ xe -s <xenserver> -pwf ./<passwordfile.txt> vm-list | grep -v "^$"
uuid ( RO)           : 6136b9a8-c32a-b361-14eb-fc33337b2387
     name-label ( RW): Centos5
    power-state ( RO): running
uuid ( RO)           : e918bb8c-16eb-78ed-4aad-2a5f7f8e7d10
     name-label ( RW): WindowsXP
    power-state ( RO): running
uuid ( RO)           : 4ee28767-7423-4ee0-9cc8-8420c45c55cd
     name-label ( RW): Control domain on host: epitaph
    power-state ( RO): running
uuid ( RO)           : fb9f1fe1-ec48-bf32-0f03-9621a61f01b7
     name-label ( RW): Windows2003
    power-state ( RO): halted
uuid ( RO)           : 55c19dd9-cb27-129a-be8e-723a5d72b830
     name-label ( RW): Centos5-1
    power-state ( RO): halted

VMをリブート

$ xe -s <xenserver> -pwf ./<passwordfile.txt> vm-reboot uuid=<uuid>

VMのネットワーク情報

VMに割り当てられているIPアドレスを取得できます。

$ xe -s <xenserver> -pwf ./<passwordfile.txt> vm-param-get param-name=networks uuid=<uuid>
0/ip: 192.168.1.101

VMのスナップショット取得

成功するとスナップショットのuuidが返ってきます。

$xe -s <xenserver> -pwf ./<passwordfile.txt> vm-snapshot new-name-label="snapshot-001" uuid=<uuid>
bbe3a3be-5ace-462d-9005-ba1bbc226e1d

VMのOSの情報

$ xe -s <xenserver> -pwf ./<passwordfile.txt> vm-param-get param-name=os-version uuid=<uuid>
name: CentOS release 5.5 (Final); uname: 2.6.18-194.3.1.el5.centos.plusxen; distro: centos; major: 5; minor: 5

VMのvCPUの使用率

vCPU数が複数であればcpu-id単位で使用率が表示されます。

$ xe -s <xenserver> -pwf ./<passwordfile.txt> vm-param-get param-name=VCPUs-utilisation uuid=<uuid>
0: 0.002; 1: 0.000

VMの色々な情報取得

$ xe -s <xenserver> -pwf ./<passwordfile.txt> vm-param-list uuid=<uuid>

VMのメモリ情報

vm-param-listの情報にはメモリの使用量が存在しない。色々調べたところcitrixのフォーラムにありました。まず vm-data-source-list で情報をみます。name_label は memory と memory_internal_freeです。どちらもenable: true になっていることを確認。falseの場合はxs-toolsをインストールしていない可能性が高いです。

$ xe -s <xenserver> -pwf ./<passwordfile.txt> vm-data-source-list uuid=<uuid>
name_label          : memory
    name_description: Memory currently allocated to VM
             enabled: true
            standard: true
                 min: 0.000
                 max: nan
               units:


name_label          : memory_internal_free
    name_description: Memory used as reported by the guest agent
             enabled: true
            standard: true
                 min: 0.000
                 max: nan
               units:

メモリの総割り当てサイズ (byte)。メモリの総割り当てサイズはバイト(byte)、メモリの使用量はキロバイト(kbyte)で返ってくるので注意が必要。

$ xe -s <xenserver> -pwf ./<passwordfile.txt> vm-data-source-query data-source=memory uuid=<uuid>
419430400.000000

メモリの使用量 (kbyte)。

$ xe -s <xenserver> -pwf ./<passwordfile.txt> vm-data-source-query data-source=memory_internal_free uuid=<uuid>
124456.000000

VMのネットワークトラフィック

メモリと同じく vm-data-source-list で情報をみます。name_label は vif_0_tx と vif_0_tx 。descriptionに「virtual interface number '0'」とあるように最初の'0'のVirtual NICです。et1 なら vif_1_tx と vif_1_txになります。

xe -s <xenserver> -pwf ./<passwordfile.txt> vm-data-source-list uuid=<uuid>
name_label          : vif_0_tx
    name_description: Bytes per second transmitted on virtual interface number '0'
             enabled: true
            standard: true
                 min: 0.000
                 max: nan
               units:


name_label          : vif_0_rx
    name_description: Bytes per second received on virtual interface number '0'
             enabled: true
            standard: true
                 min: 0.000
                 max: nan
               units:

送信サイズ(byte)

$ xe -s <xenserver> -pwf ./<passwordfile.txt> vm-data-source-query data-source=vif_0_tx uuid=<uuid>
15.835249

受信サイズ(byte)

$ xe -s <xenserver> -pwf ./<passwordfile.txt> vm-data-source-query data-source=vif_0_rx uuid=<uuid>
15.835249

VMの操作系

VMをshutdown/rebootしても黄色いアイコンのまま停止してくれない場合の強制適用の方法。
対象のVMのuuidを調べ、list_domainsでid調べ(Hが付く)、xenops destroy_domainで殺すという感じです。

$ xe vm-list
$ list_domains | grep <uuid>
<id> | <uuid> | H
$ /opt/xensource/debug/xenops destroy_domain –domid <id>

*1:これは嘘でした。