PowerShell(PowerCLI)でフェールオーバーホストになっているESXiを判定する。

普段の仕事ではサーバ仮想化関連のSEをやってるのでその話を。色々平行して作っているのですが、まだお見せ出来る状態じゃなくて悔しい!1月中にはなにか公開できるかなと思います。

※以下、会社でやったことを思い出しながら書いてるので、動かなかったらスミマセン・・・

VMwareではHA(High Availability)という、ESXiと呼ばれる仮想化ホスト(物理サーバ)の障害によりその上にいる仮想マシンが停止した場合に、他のホストに仮想マシンを自動で移動させて再起動させるという機能があります。

このHAには大きくわけると以下の様な設定があります。

  1. 特定のESXiサーバをHA専用機(フェールオーバーホスト)として用意し、通常時は仮想マシンを起動させない。
  2. クラスター(ESXiサーバ群)全体で、X台のESXiサーバが停止してもリソースが確保できるようにする。

実際どうなのかはわかりませんが、1にしているパターンが多いのではないでしょうか?

PowerCLIについて

PowerCLIとはVMwareが提供する、PowerShellで動くESXiサーバの管理ツールです。vCenterサーバに接続して使えば、以下のようにしてVMの一覧や、データストアの一覧が取得できます。VMwareの管理で問題になりがちなスナップショットの一覧も取得出来て便利です。以下のように使えます。

gistf9d0e36afcabd17131ad

フェールオーバーホストになっているESXiホストを判定する

前置きが長くなりましたが、タイトルの件について。フェールオーバーホストを指定してシステムを運用していると、例えばフェールオーバーホストのリソースは除いてリソース総容量は計算しときたいとか、まあ色々あると思います。PowerCLIのコマンドでフェールオーバーホストを一発取得する方法はないのですが、フェールオーバーホストの情報は実はGet-Clusterで取得できるclusterオブジェクトのなか、ExtensionDataに定義されています。

「ExtensionData.Configuration.DasConfig.AdmissionControlPolicy.FailoverHosts 」

FailoverHostsの中に、その名前の通りフェールオーバーホストに指定されているESXiサーバのID(ホスト名ではありません!)が配列で格納されているので、このIDを使えばフェールオーバーホストを特定できます。以下、サンプルです。

gist66289adf0bbf85f3529d

参考

ExtensionDataの中に情報があるなんてことは、正直全然自分じゃ見つけられませんでした。以下のページで見つけました。公式のドキュメントにも書いてなかった気がするけど、下の人はどうやって見つけたんだろう?

A function to lookup Host System friendly name by MoRef using PowerCLI | Shogan.tech

おまけ

PowerCLIで取得出来る情報をConverTo-Jsonしてみると、vCenterのGUIから(多分)取ってこれない情報(仮想マシン上でのディスク使用量とか)があったりしますよ。お試しあれ。