XenServer SDK for PowerShellを使ってみる
XenServerホストの準備が整ったら、さっそく、XenServer PowerShell SnapInを起動して使ってみましょう。
PowerShell SnapIn初回起動時、「警告: ExecutionPolicy is set to Restricted. Some XenServer commands are disabled.」という警告が表示されることがあります。この警告が表示されたら、Windows PowerShell標準のコマンドラインウインドウを[管理者として実行]し、「Set-ExecutionPolicy RemoteSigned」コマンドを実行してセキュリティを緩和してください。
今回は、基本的なXenAPIの単独実行、およびPowerShellのパイプラインやスクリプトブロックを使った1行完結型の初級編コマンドサンプルを紹介します。
XenServerコマンドレットを確認する
まずはじめに、PowerShell SDKで追加されたXenServerのコマンドレットを確認してみましょう。PowerShell SnapInウインドウ内で次のコマンドを実行します。
Get-Command -Noun XenServer*
800を超える登録が確認できます。いずれも、PowerShell標準のVerb-Nounという命名規則に従っています。
PowerShell SnapInからホストへ接続
[Citrix XenServer PowerShell SnapIn]を使用するための最初のステップは、XenServerホストへの接続を確立することです。PowerShell SnapInのコマンドラインから、以下のコマンドをホストのipアドレスまたはホスト名を指定して実行します。プール構成の場合、デフォルトではプールマスタにしか接続できません。
Get-Credential | Connect-XenServer –url https://ホストのipアドレス
資格情報を要求するダイアログが表示されたら、rootユーザーとそのパスワードを指定して[OK]をクリックします。
VMを新規作成
Create-XenServer:VM -NameLabel "New Test VM" -VCPUsAtStartup 1 -MemoryDynamicMax 256MB -MemoryStaticMax 256MB -MemoryDynamicMin 256MB -MemoryStaticMin 256MB -MemoryTarget 256MB
"New Test VM"という名前のVMが、仮想CPU1個、仮想メモリ256MBの構成で作成されたことをXenCenterで確認してみましょう。
VMを削除
Destroy-XenServer:VM -VM "New Test VM"
XenCenter上から"New Test VM"が消えたことを確認します。
テンプレートを使ってVMを新規作成
name_labelには、XenServer 5.6の場合"Windows XP SP2 (32-bit)"を、XenServer 5.5の場合"Windows XP SP2"を指定します。
Get-XenServer:VM –properties @{ name_label="Windows XP SP2 (32-bit)"; is_a_template="True" } | Invoke-XenServer:VM.Clone –NewName "XPVM" | Invoke-XenServer:VM.Provision -ErrorAction SilentlyContinue
UUID_INVALIDというエラーが表示されますが、まだ仮想ディスクが無いからで、この場合は無視可能です。このエラーの影響でホストとの接続が切れるのを防ぐため、-ErrorAction SilentlyContinueパラメータを付けています。
XenCenterで"XPVM"というVMが作成されたことを確認します。この時点ではディスクやNICが付いていません。
仮想ディスクを作成し、VMに取り付け
ストレージレポジトリ名には、使用するストレージのXenCenter上の表示名を指定します。
Create-XenServer:VDI –NameLabel "Disk for XPVM" –SR "ストレージレポジトリ名" –VirtualSize 10GB | Create-XenServer:VBD –VM "XPVM" –UserDevice 0 –Mode RW –Type Disk –Bootable 1
"XPVM" に "Disk for XPVM"という仮想ディスクが取り付けられたことを確認します。
VMに仮想CDドライブを取り付け
Create-XenServer:VBD –VM "XPVM" –UserDevice 3 –Mode RO –Type CD -Bootable 0 -Empty 1
"XPVM"にCDドライブが作成されたことを確認します。
VMに仮想ネットワークカードインターフェイスを割り当て
Get-XenServer:Network -Name "eth0" | Create-XenServer:VIF –VM "XPVM" –Device 0 –MAC 11:22:33:44:55:66
"XPVM"にネットワークが取り付けられたことを確認します。
以上で、"XPVM"という仮想マシンを作成し、OSをインストールする準備ができました。次のコマンドサンプルへ進む前に、ホスト実機のCDドライブへWindows XP with SP2のインストールディスクを挿入し、"XPVM"の[ストレージ]タブにあるCDドライブプルダウンでそのCDドライブを手動選択しておいてください。
VMを起動
以下のコマンドは、"XPVM"をシャットダウンした状態で実行してください。
Invoke-XenServer:VM.Start -VM "XPVM"
XenCenterで"XPVM"が起動されたことを確認します。
ここで、XenCenterを使ってVM内のWindows XP SP2インストールを完了させます。なお、OSのインストール完了後はXenServer-Toolsのインストールも忘れずに実行してください。XenServer-Toolsをインストールしないと、XenMotionや、API経由の通常(非強制)シャットダウンができません。
VMのCDドライブにディスクが挿入されていると、後続のサンプル実行の支障となる場合があるので、次のコマンドでCDをイジェクトします。
VMからCDをイジェクト
Get-XenServer:VM.VBDs -VM "XPVM" | Where-Object { $_.type -eq "CD" } | Invoke-XenServer:VBD.Eject
"XPVM"のCDドライブが空になったことを確認します。
VMをシャットダウン
Invoke-XenServer:VM.CleanShutdown -VM "XPVM"
"XPVM"がシャットダウンされたことを確認します。
仮想マシン"XPVM"から、"XPVM01"~"XPVM03"という3台のVMを高速複製
以下のコマンドは、"XPVM"をシャットダウンした状態で実行してください。
For($i=1; $i -lt 4; $i++) { Invoke-XenServer:VM.Clone -VM "XPVM" -NewName ("XPVM0" + $i) -RunAsync }
-RunAsyncは、処理を非同期実行する指定です。
"XPVM01"~"XPVM03"を特定のホストで起動
以下のコマンドは、"XPVM01"~"XPVM03"をシャットダウンした状態で実行してください。起動先ホスト名には、ホストのXenCenter上の表示名を指定します。
$i=1; Do { Invoke-XenServer:VM.StartOn -VM ( "XPVM0" + $i ) -Host "起動先ホスト名" -RunAsync; $i++ } While ( $i -lt 4 )
512MBのVMを3台起動するので、実行するには起動先ホストに約1.5GBの空きメモリが必要です。
各VMのOSが完全に起動し、XenCenterの[全般]タブで仮想化の状態が"最適化済み"になるまでしばらく待ちます。
"XPVM01"~"XPVM03"を、別のホストへマイグレーション(XenMotion)
以下のコマンドは、"XPVM01"~"XPVM03"を同一ホストで起動した状態で実行します。ホスト2台以上のプール構成でなければ実行できません。移行先ホスト名には、ホストのXenCenter上の表示名を指定します。
1..3 | ForEach-Object { Invoke-XenServer:VM.PoolMigrate –VM ( "XPVM0" + $_ ) –Host "移行先ホスト名" –Options @{ live = "True" } -RunAsync }
ハッシュ配列 @{ live = "True" }を指定するのは、XenMotion実行時の決まりです。
起動中の"XPVM01"~"XPVM03"をシャットダウン
以下のコマンドは、"XPVM01"~"XPVM03"を起動した状態で実行してください。
ForEach ( $i in 1..3 ) { Invoke-XenServer:VM.CleanShutdown –VM ( "XPVM0" + $i ) -RunAsync }
強制シャットダウン(電源オフ)を実行したい場合は、VM.CleanShutDownの代わりにVM.HardShutdownを使用します。
PowerShell SnapInをホストから切断
Disconnect-XenServer –url https://ホストのipアドレス
XenAPI命令を独習するには
PowerShell SDKを使って意図したとおりのスクリプトを書くには、ある処理を実行するのにどのXenAPI命令が必要であるかを把握していなければなりません。
それには、XenCenterを使ってGUI操作をしたときにバックグラウンドで発生するXenAPIの流れを、ログを観察して模倣するのが早道です。
XAPIデーモンのログはXenServerホスト上の/var/log/xensource.logに記録されています。XenCenterのGUIからいろいろな操作を実行し、xensource.logにどのようなログレコードが記録されるかモニタしてみましょう。
また、XenServer SDKページでサンプルコードが共有されているので、それも活用しましょう。