はじめに #
pythonでvSphereの作業を自動化する「pyvmomi」というSDKがありますが、pyvmomiについて解説されている記事はほとんど見かけず非常に困った経験をしていました。 しかしpyvmomiを実際に使ってみると、あれもこれもとvSphereのほとんどの機能(体感95%程度)が自動でき非常に便利で驚きました。 このpyvmomiをもっと知ってもらいたいと思い「pyvmomiで自動化」シリーズとして記事を書いて行こうと思います。
今回はpyvmomiを使い始める前に、必ず知っておきたいMOBについて解説します。
1. MOBとは? #
pyvmomiの難しい原因の一つとして、「pyvomiでどんな作業ができるのか?」「どんな情報を取得できるのか?」についての公式のdocsがないことあります。 この公式のdocsの代わりになるのが、今回解説するManagement Object Browser(MOB)で、vSphereに格納されている様々なdataを確認・変更ができるようになります。
従ってpyvomiで何か作業したいと場合には、まずこのMOBを確認することから始まります。
2. MOBへのアクセス #
この超重要なMOBですが、vCenterからすぐにアクセスすることができ
https://<vcenter-ip>/mob
と通常のvCenterのURLに/mob
をつけるだけでOKです。
3. MOBの見方 #
MOBにloginすると表形式でvSphereのデータ構造が確認でき、主に3つの構造に分解できる。
第2回で詳しく紹介しますが、MOBのデータをpyvmomiで取得していくのでMOBのデータ構造を理解するのが最重要となります!!
ObjectType
- 現在見ているオブジェクトのTypeが確認できる。MOBのTOPは必ず
ServiceInstance
となりこれをTOPとした階層構造でデータが格納されている。 - ESXiであれば、
HostSystem
、VMであればVirtualMachine
となる。
Properties
- 該当のオブジェクトが持つデータが格納されている。
- 現在は時刻等だけ表示されているが、VMなら名前やCPU/MEMの量なども表示される。
- Propertiesが持つ子オブジェクトを辿ることで他の階層のオブジェクトにアクセスできる。
ServiceInstance (MOBのtop)
├── capability
│ └── ...
├── content
│ └── ...
└── serverClock
Methods
- 現在のオブジェクトに対して実行可能な操作が一覧になっている。
- こちらもVMならpowerON/OFF等のメソッドが表示されるようになる。
4. ESXiやVMのデータ構造を確認する #
実際にpyvmomiで作業したい対象はESXiやVMであることが大半なので、ServiceInstance
から階層構造を下ってESXiやVMの情報を探します。
例えば以下のようにESXiのオブジェクトを取得すると、Propertiesには「稼働中のVM、現在トリガー済みのアラームの確認」のデータや、Methodsには「メンテナンスモードへの移行」といった操作もできるようになります。
5. ESXi, VMの探し方 #
このESXiやVMのオブジェクトまで、MOB内でたどり着く方法は2つあります。
moidからアクセスする #
vSphereの各種オブジェクトにはmoidというIDが付与されているので、このIDを元に任意のオブジェクトに移動することができる。
- 通常のvCenterのGUIから任意のオブジェクトを確認すると、URLに
<ObjectType>:<moid>
で記載されている。 - MOBのURLのクエリパラメータにmoidを入力することで、該当のオブジェクトに直接アクセスできる。
- 今回の場合だと、
https://<vcenter-ip>/mob/?moid=host-10
となる。
フォルダ階層を辿る #
こちらは面倒だが、pyvmomiで該当のオブジェクトを取得するときによく使用するので覚えておくと非常に楽になります。 MOBのPropertiesは階層構造になっているため、Propertiesを順に辿るとESXiやVMを取得できます。
ServiceInstance → content → rootFolder
と移動(vCenterのツリーTOP)rootFolder → childEntity
へ(childEntityが階層を1つ降りるProperties)- Datacenterになると4つFolderに分岐できるが、ESXiを取得したいので
hostFolder
へ - 後は階層構造(Cluster,resoucePool等)に応じて、
childEntity
で目的のESXiを探す
MOBの階層例(不要なオブジェクトは省略、clusterやフォルダを挟む場合は異なるので注意!)
ServiceInstance (MOBのtop)
├── content
└── ①rootFolder (vCenterのツリーTOPに該当)
└── ②childEntity (Datacenter)
├── hostFolder
│ └── childEntity(cluster or ESXi or folder)
├── vmFolder
├── datastoreFolder
└── networkFolder
おわりに #
MOBにはvSphereの各オブジェクトにデータが詰まっていることがわかったでしょうか? オブジェクトのデータが膨大なため、かなり深い階層まで複雑にデータが詰め込まれており大変ですが、ここに存在するデータは全てpyvmomiで取得することができます。 これが最初に述べた、「Sphereのほとんどの機能(体感95%程度)が自動化できる」に繋がりますので、今後細かく説明できたらと思います。
第2回はpyvmomiを使って、このMOBのデータを取得する方法について解説します。