我被要求编写一些Python代码,这些代码会将VMWare ESXi主机置于维护模式。给我一个虚拟中心的名称test-vc和一个ESXi主机的主机名test-esxi-host,并且此链接...

https://github.com/vmware/pyvmomi/blob/master/docs/vim/HostSystem.rst

...提供了有关我应该使用的方法EnterMaintenanceMode(timeout, evacuatePoweredOffVms, maintenanceSpec)的一些文档。

我真的完全不知所措,可以使用一些帮助。我尝试从python控制台执行此操作:

from pyVmomi import vim
vim.HostSystem.EnterMaintenanceMode(timeout=0)


导致此错误跟踪:

Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/apps/cpm/red/env/lib/python2.7/site-packages/pyVmomi/VmomiSupport.py", line 574, in __call__
    return self.f(*args, **kwargs)
TypeError: _InvokeMethod() takes at least 2 arguments (1 given)


另外,我对EnterMaintenanaceMode例程如何知道要将主机test-esxi-host放在虚拟中心test-vc中感到困惑。

更新:我想我已经知道了。这是我认为我需要做的:

from pyVim.connect import SmartConnect, Disconnect
from pyVmomi import vim
import atexit

si = SmartConnectNoSSL(host=vc_host, user=user, pwd=pwd)
cont = si.RetrieveContent()
atexit.register(Disconnect, si) # maybe. I am not really sure what this does
objview = si.content.viewManager.CreateContainerView(si.content.rootFolder, [vim.HostSystem], True)
objview.view[0].EnterMaintenanceMode(0)


当然行

objview.view[0].EnterMaintenanceMode(0)


肯定会造成严重破坏,因为我不知道这是不是主机“ test-esxi-host”,我想进入维护模式。我想我可以做到

for h in objview.view:
   if h.name == 'test-esxi-host'
      h.EnterMaintenanceMode(0)


我希望有一种更好的方法可以完成上述操作。就像是

get_host(objview.view, 'test-esxi-host').EnterMaintenanceMode(0)

最佳答案

看看Getting started with VMwares ESXi/vSphere API in Python


  要获取VM对象或对象列表,可以使用searchIndex
  类。该类具有通过UUID,DNS名称,IP搜索VM的方法
  地址或数据存储路径。


满怀希望的是,有两种方法可以在vCenter中查找对象:


FindByUuid(VM |主机)
FindByDatastorePath(VM)
FindByDnsName(VM |主机)
FindByIp(VM |主机)
FindByInventoryPath(托管实体:VM |主机|资源池| ..)
FindChild(托管实体)


其中许多还具有FindAll..方法,可以进行更广泛的查找。

对于这种特殊情况,可以使用FindByDnsName查找主机。

searcher = si.content.searchIndex
host = searcher.FindByDnsName(dnsName='test-esxi-host', vmSearch=False)
host.EnterMaintenanceMode(0)


此代码要求您使用具有SmartConnectNoSSL特权的用户向vCenter(@ Host.Config.Maintenance)进行身份验证。

最后,您可以使用以下命令使主机退出维护模式:host.ExitMaintenanceMode(0)

关于python - 如何使用pyvmomi将ESXi主机置于维护模式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52937914/

10-11 22:27
查看更多