另外有一些簡易的使用範例 [2],可以大略參考要如何開始使用 Python 連接 vSphere/vCenter。
這篇是用來記錄初步介接 vSphere/vCenter 的經驗。
首先,要執行 pyVmomi 的主機必須安裝 pyVmomi 套件,可以簡單地透過 easy_install 或者 pip 來安裝。
easy_install pyvmomi
接著,程式要跟 vSphere/vCenter 連接,可以使用以下的程式碼:
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)上述這段程式碼中,假設 vSphere/vCenter 的 IP 是 192.168.200.200
登入的使用者名稱是 administrator@vsphere.local、登入密碼是 qwer。
連線完成後,在連線資訊上可以取得 session ID,表示連線並且登入成功了。
再來的步驟,在 [2] 的不同範例中作法都不太一樣,我自己後來統一的作法都是取得 ContainerView,然後再做後續的解析。
content = service_instance.RetrieveContent() object_view = content.viewManager.CreateContainerView(content.rootFolder, [], True) for obj in object_view.view: print("Object %s" % obj)上述程式碼中,CreateContainerView() 這個方法的第二個參數是篩選器,如果只想要特定某種類型的物件,可以在這裡輸入做篩選
沒有輸入的話,預設是會吐回所有的物件。
例如在我的環境中,執行結果如下:
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'印出來這些物件都是一個個的 Managed Object Type。
舉例來說,vim.VirtualMachine:vm-72 表示這是一個 VM,物件的種類是 vim.VirtualMachine
這時就可以去翻翻 VMware 的官方文件 [3],看看 vim.VirtualMachine 可以取得什麼東西。
假設我的目的是想要獲得 VM 的名字,從官方文件中可以一層層看出,路徑是 vim.VirtualMachine -> summary -> config -> name
所以完整的程式碼,可以用下述的程式碼,讓 pyVmomi 回傳所有 vSphere 上執行的 VM 的名字(的前三個字元)出來:
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] + "...")
印出的結果如下:
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向您請教嗎?
張貼留言