メインコンテンツへスキップ
  1. Blogs/

pyvmomiで自動化1 -MOBを触ってみよう-

·2382 文字·
Blog VMware VSphere Pyvmomi Python
hiroki
著者
hiroki
クラウドを作るお仕事をしてます。
目次
pyvmomi - 関連記事
1: << この記事 >>

はじめに
#

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を確認することから始まります。

実はpyvmomiではなく、vSphereAPIとしての公式のdocsは存在します。 しかし英語しか存在しない + 実用例がない等、複雑なのでこれを見てpyvmomi等を使いこなすのは非常に難しいです。

2. MOBへのアクセス
#

この超重要なMOBですが、vCenterからすぐにアクセスすることができ

https://<vcenter-ip>/mob

と通常のvCenterのURLに/mobをつけるだけでOKです。

ESXiはdefaultではMOBの機能がセキュリティのため無効になっています。 有効化方法は公式HP 参照

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等のメソッドが表示されるようになる。

img001

4. ESXiやVMのデータ構造を確認する
#

実際にpyvmomiで作業したい対象はESXiやVMであることが大半なので、ServiceInstanceから階層構造を下ってESXiやVMの情報を探します。

例えば以下のようにESXiのオブジェクトを取得すると、Propertiesには「稼働中のVM、現在トリガー済みのアラームの確認」のデータや、Methodsには「メンテナンスモードへの移行」といった操作もできるようになります。

img002

5. ESXi, VMの探し方
#

このESXiやVMのオブジェクトまで、MOB内でたどり着く方法は2つあります。

moidからアクセスする
#

vSphereの各種オブジェクトにはmoidというIDが付与されているので、このIDを元に任意のオブジェクトに移動することができる。

  1. 通常のvCenterのGUIから任意のオブジェクトを確認すると、URLに <ObjectType>:<moid>で記載されている。
  2. MOBのURLのクエリパラメータにmoidを入力することで、該当のオブジェクトに直接アクセスできる。
  3. 今回の場合だと、https://<vcenter-ip>/mob/?moid=host-10 となる。

img003

フォルダ階層を辿る
#

こちらは面倒だが、pyvmomiで該当のオブジェクトを取得するときによく使用するので覚えておくと非常に楽になります。 MOBのPropertiesは階層構造になっているため、Propertiesを順に辿るとESXiやVMを取得できます。

  1. ServiceInstance → content → rootFolderと移動(vCenterのツリーTOP)
  2. rootFolder → childEntityへ(childEntityが階層を1つ降りるProperties)
  3. Datacenterになると4つFolderに分岐できるが、ESXiを取得したいのでhostFolder
  4. 後は階層構造(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

img004

おわりに
#

MOBにはvSphereの各オブジェクトにデータが詰まっていることがわかったでしょうか? オブジェクトのデータが膨大なため、かなり深い階層まで複雑にデータが詰め込まれており大変ですが、ここに存在するデータは全てpyvmomiで取得することができます。 これが最初に述べた、「Sphereのほとんどの機能(体感95%程度)が自動化できる」に繋がりますので、今後細かく説明できたらと思います。

第2回はpyvmomiを使って、このMOBのデータを取得する方法について解説します。

pyvmomi - 関連記事
1: << この記事 >>

Related

ansibleでvyosのclone
·1307 文字
Blog VMware VSphere Ansible Python
ESXiを自動でインストール
·3901 文字
Blog VMware VSphere RedfishAPI Python Kickstart Ansible
cloud-initでOSの設定
·4291 文字
Blog VMware VSphere Cloud-Init