Upgrade to Pro — share decks privately, control downloads, hide ads and more …

pyvmomiで始めるvSphere_API生活_初級編_.pdf

 pyvmomiで始めるvSphere_API生活_初級編_.pdf

sky_joker

July 05, 2019
Tweet

More Decks by sky_joker

Other Decks in Technology

Transcript

  1. pyvmomiインストール方法(簡単) 3 Pyvmomiインストール(venv) [pyvmomi@localhost ~]$ virtualenv venv # python2の場合 [pyvmomi@localhost

    ~]$ python3 -m venv venv # python3の場合 [pyvmomi@localhost ~]$ source venv/bin/activate (venv) [pyvmomi@localhost ~]$ pip install pyvmomi # 最新版を新ストールする場合 (venv) [pyvmomi@localhost ~]$ pip install pyvmomi==6.7.0.2018.9 # バージョンを指定する場合 pyVmomiのインストールはpip一撃なので簡単! Perl SDKを使っていた時はcpanで多くのモジュールをインストールしたり、libwww-pe rlのバージョン依存で苦しんでいた…
  2. pyvmomiの使い方例 4 #!/usr/bin/env python # -*- coding: utf-8 -*- from

    pyVim.connect import SmartConnectNoSSL, Disconnect from pyVmomi import vim import ssl import atexit if __name__ == "__main__": # ServiceInstanceを取得 si = SmartConnectNoSSL(host="vCenter or ESXi IP or HostName", user="login user name", pwd="login password") # 処理完了時にvCenterから切断 atexit.register(Disconnect, si) # ServiceContent(Data Object)を取得 content = si.content # VMオブジェクトのリストを取得 vm_objects = content.viewManager.CreateContainerView( content.rootFolder, [vim.VirtualMachine], True) # VM名を指定してオブジェクトを選択 target_vm = "" for vm_obj in vm_objects.view: if vm_obj.name == "example": target_vm = vm_obj # target_vmにVMオブジェクトを格納 break # target_vmが存在した場合、VM名を表示 if target_vm: print target_vm.name VMのオブジェクト取得例
  3. Managed Objectの簡易概念図(イメージ) 6 Objectの概念図 (1) Managed Object データセンタ、ESXiホスト、仮想マシン、仮想スイッチなどの設定情報 やプロパティ、メソッドがまとまったもの。 基本、VMwareをプログラムなどから操作する場合は、Managed

    Obj ectの概念を理解しておく必要がある。 Managed Objectを元にして設定変更やメソッドの実行(例えば、VM のPowerOn/Offなど)をする。 (2) Data Object Managed Objectに関連する設定情報がまとまったデータ。 Data ObjectはManaged Object内に複数存在する。 例えば、NW設定情報やリソース設定情報は別々のData Objectで管 理している。 (3) Property オブジェクト内にある設定項目のようなイメージ。 オブジェクトのプロパティを指定することで、そのプロパティの実際の 値が取得できる。 (4) Method 言葉通り、方法や手法の関数というイメージ。 例えば、仮想マシンのManaged Objectにあるシャットダウンメソッド を実行すると仮想マシンは停止する。 Property Data Object 設定値 仮想マシンのManaged Object name example config vim.vm.VirtualHardware hardeware numCPU 2 MemoryMB 2048 MOBの中は階層化 されている Method MigrateVM_Task, MountToolsInstaller, PowerOffVM_Task, PowerOnVM_Task … など
  4. Objectの操作例 6 VMをシャットダウンする # target_vmをシャットダウンするメソッドを実行 if target_vm: target_vm.ShutdownGuest() VMのCPU数を変更する #

    VM設定のデータオブジェクトを生成(CPUコアを2つにする) vm_config = vim.vm.ConfigSpec() vm_config.numCPUs = 2 # target_vmの設定変更を実行 If target_vm: target_vm.ReconfigVM_Task(vm_config) スナップショットを取得する # target_vmのスナップショットを作成 if target_vm: target_vm.CreateSnapshot_Task(name="snapshot01", memory=False, quiesce=False)
  5. Managed Objectのつらみ 7 • (監視系を作っていた時)VMが数千台とかになってくると処理速度がやばたにえ ん • govmomi使って対処した • オブジェクトの中身が複雑すぎてやばたにえん

    • Managed Object Browserでオブジェクトの中身を確認しようとするとクリック数が やばたにえん • オブジェクトの中身を一覧表示するツールを作った(次へ続く)
  6. Managed Objectの中身一覧を表示するツール紹介 8 mob-peoperty-view Managed ObjectのPropertyやData Objectの一覧を再帰的に表示してくれるツール Python2/3で動作します https://github.com/sky-joker/mob-property-view mob-property-viewインストール

    (venv) [pyvmomi@localhost ~]$ git clone https://github.com/sky-joker/mob-property-view.git (venv) [pyvmomi@localhost ~]$ cd mob-property-view/ (venv) [pyvmomi@localhost ~]$ pip install -r requirements.txt (venv) [pyvmomi@localhost mob-property-view]$ chmod +x mob-property-view.py
  7. mob-property-viewの使い方 9 example VMのオブジェクト一覧を表示 (venv) [pyvmomi@localhost ~]$ ./mob-property-view.py -vc 192.168.0.111

    --mob VirtualMachine -t example Password: ----------- | example | ----------- ------------------ | availableField | ------------------ (vim.CustomFieldsManager.FieldDef) [] (snip) example VMのオブジェクトのnameプロパティを表示 (venv) [pyvmomi@localhost ~]$ ./mob-property-view.py -vc 192.168.0.111 --mob VirtualMachine -t example --property name Password: ----------- | example | ----------- -------- | name | -------- example