govc による vSphere 環境のシャットダウン自動化
はじめに
govc を利用した vSphere 環境の操作、特にシャットダウンの自動化に関する紹介。
後半にサンプルスクリプトあり。
私の自宅ラボでは電気代節約のためスクリプトでシャットダウンの自動化を実施している。
govc とは
govc とは govmomi の一つとして開発が進められているユーザーフレンドリな vSphere CLI 。
※ govmomi = vSphere API を扱う Go のライブラリ
govc の導入
❯ curl -L -o - "https://github.com/vmware/govmomi/releases/latest/download/govc_$(uname -s)_$(uname -m).tar.gz" | sudo tar -C /usr/local/bin -xvzf - govc
# 確認
❯ which govc
/usr/local/bin/govc
❯ govc version
govc 0.32.0
govc Usage
基本的に -h
でコマンドのヘルプを表示できるのでそちらを都度確認する。
もしくは、以下を参照。
https://github.com/vmware/govmomi/blob/main/govc/USAGE.md
❯ govc -h
❯ govc $cmd -h
# Ref
❯ govc ls -h
Usage: govc ls [OPTIONS] [PATH]...
List inventory items.
Examples:
govc ls -l '*'
govc ls -t ClusterComputeResource host
govc ls -t Datastore host/ClusterA/* | grep -v local | xargs -n1 basename | sort | uniq
環境変数の設定
コマンドの実行には最低限接続先の ESXi あるいは vCenter の情報が必要となる。
いきなり実行しようとすると以下のように失敗する。
❯ govc datacenter.info
govc: specify an ESX or vCenter URL
以下の環境変数にて指定
export GOVC_URL=XXXXX
export GOVC_USERNAME=XXXXX
export GOVC_PASSWORD=XXXXX
export GOVC_INSECURE=true
❯ govc datacenter.info
Name: DC-Homelab-01
Path: /DC-Homelab-01
Hosts: 6
Clusters: 3
Virtual Machines: 29
Networks: 19
Datastores: 10
esxcli の利用
Tips。govc から直接情報取得できないものなど。
❯ govc host.esxcli -host.dns=XXXXX system version get
Build: Releasebuild-22088125
Patch: 25
Product: VMware ESXi
Update: 1
Version: 8.0.1
Hostのシャットダウン
メンテナンスモードからのシャットダウンの実行。
「vCLS 仮想マシン退避の支援」というタスクが自動でトリガされるので、少し時間はかかるがvCLSが稼働している状態からもメンテナンスモードにいれることができた。
# Enter maintenance mode
esxi_host="XXXXX"
govc host.maintenance.enter -host.dns="$esxi_host"
# Shutdown Host
govc host.shutdown -host.dns="$esxi_host"
稼働しているVMのシャットダウン
基本的にメンテナンスモードにいれる前に稼働している VM はシャットダウンする必要がある。
まず特定のホスト上で稼働している仮想マシンをみつけたい。
これは、-runtime.XXX
あたりの情報でしぼれそう。vm.info
を json
で出力すればいろいろ情報が得られそうなので、それを参考にする。
例えば仮想マシンの電源状態であれば、-runtime.powerState
、稼働ホストであれば -runtime.host
など。
❯ govc vm.info -json /DC-XXX/vm/XXXXX/ubuntu-01 > test.txt
...
"runtime": {
...
"host": {
"type": "HostSystem",
"value": "host-27"
},
"connectionState": "connected",
"powerState": "poweredOn",
"faultToleranceState": "notConfigured",
...
❯ govc find . -type m -runtime.powerState poweredOn -runtime.host "HostSystem:host-27"
/DC-XXX/vm/XXXXX/ubuntu-02
/DC-XXX/vm/XXXXX/ubuntu-01
あとはコマンドで取得した結果として vm.power
にわたせばOK
❯ govc find . -type m -runtime.powerState poweredOn -runtime.host "HostSystem:host-27" | xargs govc vm.power -s
Shutdown guest VirtualMachine:vm-1001... OK
Shutdown guest VirtualMachine:vm-46... OK
特定のホスト上の全VM及びホストの自動シャットダウンスクリプト
最後にこれまでの内容を含めた、複数ホストの自動シャットダウンスクリプトを紹介する。