vmware
python3
pyvmomi

VMware MOBのプロパティやメソッドを取得するスクリプトを作ってみた

VMwareのWeb Serviceで自動化のコーディング(又は、vRealize Orchestrator使ったり)をする時は、Management Object(MOB)やProperty/Data Object/Methodを理解することが必要になってきます。
自動化をする時にドキュメントを読みながらData ObjectやMethodを探すのが面倒になったのでMOBのPropertyやMethodを表示できるツールを作ってみました。

mob-property-view

https://github.com/sky-joker/mob-property-view

インストール方法などは上記を参照ください。

Management Object Types Overview(参考)

http://pubs.vmware.com/vsphere-6-5/index.jsp#com.vmware.wssdk.apiref.doc/mo-types-landing.html

使用例

例えば、仮想マシンの設定変更をしたいと思いそれっぽいMethodを確認してみた時

$ ./mob-property-view.py -vc vcenter01.local --mob VirtualMachine -t devel -ml | grep -i config | grep Task
Password:
ReconfigVM_Task

ReconfigVM_Taskが設定変更するMethodということが確認できました :-)

メモリサイズを変更するストーリーを考えてみます。
設定変更をするにはspecを作らないといけないので、ReconfigVM_Task に渡すData Objectであるvim.vm.ConfigSpecにある memoryMB を確認してみます。

$ ./mob-property-view.py -vc vcenter01.local --mob VirtualMachine -t centos --property config
Password:
---------
| devel |
---------
----------
| config |
----------
(vim.vm.ConfigInfo) {
   dynamicType = <unset>,
   dynamicProperty = (vmodl.DynamicProperty) [],
   changeVersion = '2017-08-05T17:13:42.60412Z',
   modified = 1970-01-01T00:00:00Z,
   name = 'devel',
(snip)
hardware = (vim.vm.VirtualHardware) {
   dynamicType = <unset>,
   dynamicProperty = (vmodl.DynamicProperty) [],
   numCPU = 1,
   numCoresPerSocket = 1,
   memoryMB = 2048,

現在は 2048 ということが分かりました。
メモリの割り当てを変更する場合は以下の様な感じになります。

vmConfigSpec = vim.vm.ConfigSpec()
vmConfigSpec.memoryMB = 4096
VirtualMachineMOB.ReconfigVM_Task(vmConfigSpec)

値を変更した時に問題なく変更されているか確認してみます。

$ ./mob-property-view.py -vc vcenter01.local --mob VirtualMachine -t centos --property config | grep memoryMB
Password:
      memoryMB = 4096,

このスクリプトの目的は、簡単に「あたり」をつけられればと思って作ったものです。
正直、ドキュメントを読むよりは実機で設定を変更してProperty情報を取ってきて、どのData Objectに格納されているか?を確認した方が早いと思った(それまでは、確認用スクリプトを毎回作ってた)ので :-)
(正直、vROでMOBの中身を確認するのもしんどい...)
その後に、ドキュメントと付き合わせて間違いない事を確認しながら自動化していくのが個人的にやりやすいと思っています。