Меня попросили написать код на 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)