另外有一些簡易的使用範例 [2],可以大略參考要如何開始使用 Python 連接 vSphere/vCenter。
這篇是用來記錄初步介接 vSphere/vCenter 的經驗。
首先,要執行 pyVmomi 的主機必須安裝 pyVmomi 套件,可以簡單地透過 easy_install 或者 pip 來安裝。
1 |
easy_install pyvmomi |
接著,程式要跟 vSphere/vCenter 連接,可以使用以下的程式碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import atexit import requests from pyVim import connect from pyVmomi import vim # Disable the checking of certification. requests.packages.urllib3.disable_warnings() # Initiate the connection to VMware vSphere. service_instance = connect.SmartConnect( host = "192.168.200.200" , user = "administrator@vsphere.local" , pwd = "qwer" , port = 443 ) atexit.register(connect.Disconnect, service_instance) # Get the session ID from the connection. session_id = service_instance.content.sessionManager.currentSession.key print ( "Session ID: %s" % session_id) |
登入的使用者名稱是 administrator@vsphere.local、登入密碼是 qwer。
連線完成後,在連線資訊上可以取得 session ID,表示連線並且登入成功了。
再來的步驟,在 [2] 的不同範例中作法都不太一樣,我自己後來統一的作法都是取得 ContainerView,然後再做後續的解析。
1 2 3 4 5 |
content = service_instance.RetrieveContent() object_view = content.viewManager.CreateContainerView(content.rootFolder, [], True ) for obj in object_view.view: print ( "Object %s" % obj) |
沒有輸入的話,預設是會吐回所有的物件。
例如在我的環境中,執行結果如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
Object 'vim.Datacenter:datacenter-2' Object 'vim.Folder:group-v3' Object 'vim.Folder:group-h4' Object 'vim.Folder:group-s5' Object 'vim.Folder:group-n6' Object 'vim.Network:network-14' Object 'vim.Network:network-13' Object 'vim.Datastore:datastore-25' Object 'vim.Datastore:datastore-12' Object 'vim.Datastore:datastore-69' Object 'vim.Datastore:datastore-53' Object 'vim.Folder:group-h61' Object 'vim.Folder:group-h60' Object 'vim.ClusterComputeResource:domain-c7' Object 'vim.ResourcePool:resgroup-8' Object 'vim.HostSystem:host-11' Object 'vim.Folder:group-v62' Object 'vim.Folder:group-v67' Object 'vim.VirtualMachine:vm-39' Object 'vim.VirtualMachine:vm-36' Object 'vim.VirtualMachine:vm-63' Object 'vim.VirtualMachine:vm-40' Object 'vim.VirtualMachine:vm-34' Object 'vim.VirtualMachine:vm-33' Object 'vim.VirtualMachine:vm-41' Object 'vim.VirtualMachine:vm-32' Object 'vim.VirtualMachine:vm-28' Object 'vim.VirtualMachine:vm-26' Object 'vim.VirtualMachine:vm-194' Object 'vim.VirtualMachine:vm-149' Object 'vim.VirtualMachine:vm-70' Object 'vim.VirtualMachine:vm-54' Object 'vim.VirtualMachine:vm-21' Object 'vim.VirtualMachine:vm-19' Object 'vim.VirtualMachine:vm-18' Object 'vim.VirtualMachine:vm-68' Object 'vim.VirtualMachine:vm-16' Object 'vim.VirtualMachine:vm-65' Object 'vim.VirtualMachine:vm-15' Object 'vim.VirtualMachine:vm-58' Object 'vim.VirtualMachine:vm-72' |
舉例來說,vim.VirtualMachine:vm-72 表示這是一個 VM,物件的種類是 vim.VirtualMachine
這時就可以去翻翻 VMware 的官方文件 [3],看看 vim.VirtualMachine 可以取得什麼東西。
假設我的目的是想要獲得 VM 的名字,從官方文件中可以一層層看出,路徑是 vim.VirtualMachine -> summary -> config -> name
所以完整的程式碼,可以用下述的程式碼,讓 pyVmomi 回傳所有 vSphere 上執行的 VM 的名字(的前三個字元)出來:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
import atexit import requests from pyVim import connect from pyVmomi import vim # Disable the checking of certification. requests.packages.urllib3.disable_warnings() # Initiate the connection to VMware vSphere. service_instance = connect.SmartConnect( host = "192.168.10.10" , user = "administrator@vsphere.local" , pwd = "qwer" , port = 443 ) atexit.register(connect.Disconnect, service_instance) # Get the session ID from the connection. session_id = service_instance.content.sessionManager.currentSession.key print ( "Session ID: %s" % session_id) content = service_instance.RetrieveContent() object_view = content.viewManager.CreateContainerView(content.rootFolder, [], True ) for obj in object_view.view: if isinstance (obj, vim.VirtualMachine): print ( "Object %s" % obj.summary.config.name[ 0 : 3 ] + "..." ) |
印出的結果如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Session ID: 52496234-f876-d189-75d1-c4ef41e899dd Object [25... Object [25... Object sc-... Object [25... Object Fos... Object Inc... Object [25... Object ovi... Object A. ... Object CAK... Object VMw... Object cf-... Object sc-... Object CAK... Object vCe... Object C. ... Object B. ... Object vm-... Object [25... Object sc-... Object [25... Object vSp... Object sc-... |
參考資料:
1 則留言:
您好
能否請教您
我想透過pyvmomi來取得esxi hosts/vms performance data
但不知道如何使用performance manager
可以透過email向您請教嗎?
張貼留言