GUIを触らずにvSphereを操作するためのgovcレシピ
この記事はFJCT アドベントカレンダー 2019の初日の記事です。
明日は @zombeanさんの FJCTで知ったもの、身についたものいろいろ書こうと思います
となります。
さて。本日はニフクラの運用メンバーらしくvSphere周りとして、GUIを触らずにvSphereを操作するためのgovcレシピをいくつか書き残します。 本記事のターゲットはgovcを触ったことがある程度の人です。触れない人はこの記事の前半として、GUIを触らずにvSphereを操作するためのgovc入門とtips を書いたので読んでほしいです。
2019年に利用したgovcコマンドの備忘録的な側面が強いので、網羅性はありませんし、普段govcを使っている人にとって目新しいことは無いですが書いていきます。
以下は別解答が多数あると思われます。 (もとイケてる方法があるじゃん!と思った場合 一緒にIaaSを作りましょう!!!)
複数の操作対象があるパターン
ケースにもよると思いますが以下のようなことをすることが多いです。
govc find ${cond} | xargs govc ${operation}
VMの電源on, off
VMの電源on, off自体は govc vm.power
でできるのだけど。 使いそうなオプションとしていくつかあり、 -off
でパワーオフ, -on
でパワーオン、-s
でシャットダウン、-wait
で電源の上げ下げのタスク完了を待つなどのオプションがついている。 -M
オプションは複数のVMを一度に電源on できるオプション
以下は電源を上げるケース
govc find . -type m -name "${VM-NAME}" | xargs govc vm.power -on -M=true
以下はシャットダウンのケース
govc find . -type m -name "${VM-NAME}" | xargs govc vm.power -s -wait=false
VMのデバイス情報を引く
VMのデバイスの情報はgovc vm.info
でも引けるが、 device.info
を利用するほうが良い。
govc device.info -json -vm `govc find -type m -name="${VM-NAME}"` | jq .
以下は vm.info
のときのjson。DeviceのTypeがなくてどれがどのデバイスか?を機械的に判別するのが難しい。
"Hardware": { "NumCPU": 1, "NumCoresPerSocket": 1, "MemoryMB": 32, "VirtualICH7MPresent": null, "VirtualSMCPresent": null, "Device": [ { "Key": 200, "DeviceInfo": { "Label": "IDE 0", "Summary": "IDE 0" }, "Backing": null, "Connectable": null, "SlotInfo": null, "ControllerKey": 0, "UnitNumber": null, "BusNumber": 0, "Device": null },
以下は device.info
を引いたときのjson。DeviceのTypeがあるので機械的判別がしやすい。
{ "Devices": [ { "Name": "ide-200", "Type": "VirtualIDEController", "Key": 200, "DeviceInfo": { "Label": "IDE 0", "Summary": "IDE 0" }, "Backing": null, "Connectable": null, "SlotInfo": null, "ControllerKey": 0, "UnitNumber": null, "BusNumber": 0, "Device": null },
あるホスト上の電源オン状態のVMのインベントリパス
ホスト名を調べておいた上で以下のコマンドを叩くと、あるホストの上にいるpowerdOnVMのインベントリパスがとれます。
govc find -i . -type h -name ${HOST-NAME} | xargs -Ih govc find . -type m -runtime.powerState poweredOn -runtime.host h
あるホスト上の電源オン状態のVMの情報収集
上のヤツに更にvm.infoをつなげるパターンです。更に vm.info -json
を使ってjqで絞り込むパターンがあると思います。
govc find -i . -type h -name ${HOST-NAME} | xargs -Ih govc find . -type m -runtime.powerState poweredOn -runtime.host h | xargs govc vm.info
クラスタにあるESXiのリストを取得する
あるクラスタに所属するESXiを調べる方法はいくつかあるのですが、これが一番簡単な気がします。 これも host.info
につなげる方法があるかな?と思います。
govc find . -type c -name ${ClusterName} | xargs govc ls -t HostSystem
データストアの残容量順に並べる
どのデータストアが一番残っているか?はたまに気にしたい事項だと思っていて、以下のような方法で引けます。
govc datastore.info -json | jq '.Datastores[].Info| [(.FreeSpace|tostring),.Name] | join(" ")' -r | sort -n
あるデータストアを消費している順にVMを調べる
これの方法が見つけられていないのが残念
あるvCenter配下のデータストアのタイプ一覧
あまり無いと思うが、datastore.infoつながりで、こんな感じでvC配下のデータストアのタイプが調べられます。
govc datastore.info -json | jq '.Datastores[] | [.Info.Name, .Summary.Type] | @csv' -r
あるESXiのオプションを調べる方法
たまにESXi側の設定を一括で調べたいことがあり、以下のコマンドを gocv find . -i -type h
と組み合わせて使うことがある。
govc host.option.ls --host=${InventoryPath} ${OptionName}
あるESXiのサービスを調べる方法
オプションと同じ要領で、サービスも調べられそう.
govc host.service.ls --host=${InventoryPath} ${OptionName}
あるESXiのvibのリストを調べる
govc host.info
では見れなさそうなのでesxcliで直接叩きに行く
govc host.esxcli softoware vib list
アドベントカレンダーに向けて書けたのはここまでなのでまたgovcをパチパチと叩いたら追記します。