InfraVMを指定して、vSAN APIでCluster Shutdownを試みる
背景
想定外停電時など、UPSと連携してAPI経由で自動的にvSAN Clusterをシャットダウンするスクリプトを作成したい。
環境は内部VC構成であり、かつクラスタ内にAD/DNSおよびスクリプトVMといったインフラVMが存在する条件でもAPIでシャットダウンできるようにスクリプトを作成したい
参考サイト
vSAN Management SDK for Python
スクリプトの解説
実行環境の準備については前回のブログを参照願いたい。
samplecodeにあるvsanclustershutdownsamples.py コピー&編集して差分が以下になるように作成した
|
# diff vsanclustershutdownsamples.py
vsanclustershutdownsamples_internalVC_with_InfraVMs.py 93c93,96 < print("FAIL:",
test.testName) --- > if test.testName == 'VMware
vCenter appliance is deployed on this vSAN cluster': > return True > else: > print("FAIL:",
test.testName) 124c127,130 < --- >
infra_vms = get_vms_by_name(si, INFRA_VM_NAMES) >
if not infra_vms: >
raise RuntimeError("指定したインフラVMが見つかりませんでした") >
cspec.SetInfraVMs(infra_vms) 136a143,161 > INFRA_VM_NAMES = ["<VM名>"] > def get_vms_by_name(si, vm_names): >
""" > 名前で VM を検索して
vim.VirtualMachine のリストを返す >
""" > content
= si.RetrieveContent() >
container = content.rootFolder >
view = content.viewManager.CreateContainerView( >
container, [vim.VirtualMachine], True >
) >
name_set = set(vm_names) >
result = [] >
try: >
for vm in view.view: >
if vm.name in name_set: > result.append(vm) >
finally: >
view.Destroy() >
return result |
INFRA_VM_NAMESのリストに、インフラVMとして指定したい仮想マシンの名前を入力しておけば、get_vms_by_nameでvim.VirtualMachineのリストにして返してくれるので、その出力をcspec(vim.cluster.PerformClusterPowerActionSpec)のSetInfraVMs
セッターを利用して入力している。
SetInfraVMsについては公開資料から情報が見つけられなかったが、以下のようにhelpを表示したら存在が確認できた。
|
# python3.12 Python 3.12.12 (main, Jan 6 2026, 15:11:09) [GCC 8.5.0 20210514 (Red
Hat 8.5.0-28)] on linux Type "help", "copyright",
"credits" or "license" for more information. >>> import vsanmgmtObjects >>> import vsanapiutils >>> from pyVmomi import vim >>> >>>
help(vim.cluster.PerformClusterPowerActionSpec) |
helpに細かい使い方が記載されていたわけではないが、vim.VirtualMachineのリストを代入したらうまく動いた
動作確認
内部VC、かつvSANクラスタ内にインフラVMが稼働している状態でスクリプトを実行した。
スクリプトは問題なく動作し、停止時にインフラVMが自動的に停止し、次回起動時に自動的にインフラVMが起動するのを確認できた。
おわりに
今回は、スクリプト内で静的にインフラVM名を指定する仕組みを取っているが、もちろん作りこみによってスクリプトに渡す引数で指定する形にしたり、対話式で入力させるようなことも可能である。
その辺は、実際に運用をする人たちの工夫に任せたい。
コメント
コメントを投稿