XenServer SDK for Windows PowerShellによるスナップショット取得
以降では、実際に「XenServer SDK for PowerShell」のSnapInを起動し、XenServer 5.6上に作成しているすべてのWindowsゲストのVolumeスナップショット作成を自動化するサンプルを説明します。
サンプルコードはXenServer SDK for Windows Powershellのインストールフォルダ下(%ProgramFiles%\Citrix\XenServerPSSnapIn)にある「AutomatedTestCore.ps1」をベースに作成しています。
今回のサンプルコードでは、XenAPIのVMクラスを使用して「AutomatedTestCore.ps1」に以下の2つの関数を追加し、テーブルコーディングされている自動化処理に2つの関数エントリを追加しました。不必要な部分は削除しました。
snapshotwithquiesce_vm関数
本関数では第1引数にXENAPI.VMクラスのインスタンス、第2引数に新規作成するスナップショット名(文字列)を取ります。戻り値は新規に作成したスナップショットのXENAPI.VMクラスのインスタンスとなります。
function snapshotwithquiesce_vm([XenAPI.VM]$vm, [String]$new_name) { log_info ("snapshotting vm '{0}' to '{1}'" -f $vm.name_label,$new_name) //第一引数で指定されたXenAPI.VMクラスのインスタンスを指定し、第二引数で指定された //スナップショット名で新規にスナップショットを作成する $vm = Invoke-XenServer:VM.snapshot -VM $vm -NewName $new_name return Get-XenServer:VM -name $new_Name }
snapshotwihquiesce_running_allvms関数
本関数ではGet-XenServer:VM Commandletを使用して、確立しているXenServerセッション内で実行中の状態で、Control Domain以外のインスタンスを取得します。
取得された各インスタンスと本関数呼出時の日付を新規作成するスナップショット名として、前述のsnapshotwithquiesce_vm()を呼び出し、該当する仮想マシンのスナップショットを作成します。
function snapshotwihquiesce_running_allvms() { //本関数呼び出し時の時刻を取得 $new_name = Get-Date $running_vm_count=0 //確立しているXenServerセッション内の仮想マシンを取得 foreach ($vm in Get-XenServer:VM) { //電源状態の確認(実行中以外はcontinueする) if ($vm.power_state -ne "Running") { continue } //仮想マシンがControl Domainかどうかの確認 //Control Domainの場合にはcontinueする elseif($vm.is_control_domain) { continue } //上記以外の仮想マシンの場合にはsnapshotwithquiesce_vm()には //仮想マシンのインスタンスと関数の先頭で取得した日付をスナップショット名にして //各仮想マシンのスナップショットを取得する else { $running_vm_count++ snapshotwithquiesce_vm $vm $new_name log_info("powerstate:'{0}', '{1}'" -f $vm.power_state, $vm.name_label) } } log_info ("snapshotting running all vm count '{0}'" -f $running_vm_count) }