みなさんこんにちは。 VMware TAM の入江です。
CLI から vSphere を操作したいとなった場合、多くの方々は PowerCLI が思い付くかと思いますが、
今回は govc を用いた CLI からの vSphere 操作についてご紹介したいと思います。
■ govc とは?
vSphere を操作するためのコマンドラインユーティリティツールです。
Windows / Mac OS / Linux / FreeBSD に対応した実行ファイルが公開されています。
弊社の Github リポジトリ(https://github.com/vmware)にて、Go 言語から vSphere API を扱うライブラリである govmomi の成果物の一つとしてオープンソースプロジェクトでの開発が進められています。
https://github.com/vmware/govmomi
製品として公式にサポートされているものではありませんが、8年以上開発が継続されているツールであるため成熟度は高く安定しており、今もアクティブな開発が行われています。
■ PowerCLI との違い
govc の特徴を PowerCLI と比較しながらご紹介いたします。
- バイナリファイル1個だけで動作する
govc 自体は数十 MB 程度の実行ファイル 1個だけで実行可能な形式となっています。
そのため、他のツールやライブラリのインストールといった環境の構築が不要で、1個の実行ファイルを設置するだけで実行可能とツールの可搬性が非常に高いため、容易に準備し実行することができます。
- bat ファイルやシェルスクリプトに組み込みやすい
PowerCLI は PowerShell 上で動くコマンドレットであるため、一般的に使われている bat ファイルやシェルスクリプトに組み込むには工夫が必要で、スクリプト自体がどうしても煩雑になってしまいます。
govc であれば、実行している CLI 上で直接実行ファイルを呼び出すだけで実行が可能なので、スクリプトへもそのまま組み込むことができます。
- OSS なので独自での改造が可能
前述の通り、オープンソースプロジェクトとして開発されているため、そのソースコードは全て公開されています。
Go 言語が分かる人であれば、ソースコードを追っていくことで詳細な動作を把握することができ、独自で改造や機能拡張やを行うことも可能です。
- できることが限られている
PowerCLI に比べると操作できる範囲は限定されています。
例えば govc では vCenter のアラーム設定を参照、追加変更をすることには対応していません。
また、vSAN の操作や情報取得は PowerCLI に比べるとかなり限定的となっています。
仮想マシンや ESXi ホスト、クラスタ、データストア、仮想スイッチといった基本的なインベントリオブジェクトであれば govc でもかなりの範囲を扱うことができますが、PowerCLI と比べると実装機能は不足しており、完全な代替となるものではありません。
govc でできることにつきましては、ツールのヘルプ情報、もしくは、以下の Usage ページをご確認ください。
https://github.com/vmware/govmomi/blob/main/govc/USAGE.md
- 情報量が少ない
インターネット上で情報を検索してみると PowerCLI の情報は非常に多く見かけますが、govc の情報を見ることはかなり少ないです。
何かやりたいことがあった時に govc ではインターネットからの情報収集はあまり期待できず、自らで試しながら実装を行っていく必要があります。
■ govc の使い方
- 入手方法
弊社の Github より、govmomi のリポジトリを開き、「Releases」のリンクを開きます。
最新順で上から順番にバージョン毎にパネルで govc のリリース情報が表示されいます。
最新バージョンのパネルの下部に「Assests」欄があり、OS・CPU アーキテクチャ毎に圧縮ファイルがありますので、ご利用環境に該当するファイルをダウンロードします。
(初期表示では一部のファイルしか表示されていません。「Show all ** assets」をクリックすることで展開されます。)
ダウンロードしたファイルを解凍すると以下が展開されます。
(スクリーションショットは「govc_Windows_x86_64.zip」を解凍したもの)
コマンドラインより、「govc.exe」を実行することで操作が可能です。
- 環境変数設定
govc の実行をするに辺り、対象 vCenter Server にログインし、ログインセッションを取得する必要があります。
govc のコマンド(session.login)から認証を行いログインセッション取得することも可能ですが、環境変数上に接続先 vCenter Server の URL / ユーザ名 / パスワードを指定しておくことで、接続時に自動でログインセッションを取得し操作することが可能です。
SET GOVC_URL=【vCenter Server の URL】
SET GOVC_USERNAME=【ユーザ名】
SET GOVC_PASSWORD=【パスワード】
SET GOVC_INSECURE=1 #自己証明書など、証明書の検証を行わない場合に指定する
govc 側で設定された値するには “govc env” コマンドにて確認でき、特に誤りなどなければ環境変数で設定された値が表示されます。
- 実行サンプル
govc の基本的な使い方は下記のようになっており、コマンドで行いたい操作を指定し実行します。
govc 【コマンド】 【オプション】(【対象インベントリオブジェクト】)
例えば仮想マシンの一覧は以下で取得できます。
govc ls -t VirtualMachine */*
出力される一覧はインベントリパスの形式で表示されます。
vSphere Client で見ると以下の構成です。
(“labdc01” データセンターの仮想マシンディレクトリにある仮想マシン)
この中で、パワーオフになっている仮想マシン “test-20a.home.lab” をパワーオンしてみます。
govc vm.power -on 【仮想マシン名】
パワーオンした仮想マシンの情報を見てみましょう。
govc vm.info 【仮想マシン名】
Power state が powerdOn となっており、パワーオン状態になったことが確認できました。
vSphere Client から見てもパワーオン状態となっています。
コマンドライン上で表示される情報は上記ですが、-json オプションを付け、json 形式で出力を行うとデバイス構成や詳細パラメータなど、かなり詳細な情報を確認することも可能です。
今回の実行サンプルでは、仮想マシンの一覧、パワーオン、詳細確認をご紹介しました。
若干クセもあるかと思いますが、仮想マシン以外にも ESXi ホストやクラスタ、データストアや仮想スイッチなどいろいろなインベントリオブジェクトに対し情報の取得や操作を行うことが可能です。
■ 終わりに
今回 govc のご紹介を行いました。
`PowerCLI に比べると1ファイルのコピーだけで手軽に実行環境を準備することができ、スクリプトへの組み込みも非常に容易となっています。
適材適所で PowerCLI と使い分けながら活用していくことで、運用をより効率的に行うことができますので、是非 govc もお試しいただければと思います。