Как перевести хост ESXi в режим обслуживания с помощью pyvmomi? - PullRequest
0 голосов
/ 23 октября 2018

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

1 Ответ

0 голосов
/ 24 октября 2018

Взгляните на Начало работы с VMwares ESXi / vSphere API в Python .

Чтобы получить объект VM или список объектов, вы можете использовать класс searchIndex .В классе есть методы для поиска виртуальных машин по UUID, DNS-имени, IP-адресу или пути к хранилищу данных.

Надеюсь, есть несколько способов поиска объектов в vCenter:

  • FindByUuid (VM | Host)
  • FindByDatastorePath (VM)
  • FindByDnsName (VM | Host)
  • FindByIp (VM ​​| Host)
  • FindByInventoryPath(управляемый объект: VM | Host | Resource Pools | ..)
  • FindChild (управляемый объект)

Многие из них также имеют FindAll.. методы, которые позволяют гораздо шире искать.

В этом конкретном случае вы можете использовать FindByDnsName для поиска вашего хоста.

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

Этот код требует от вас аутентификации в vCenter (@ SmartConnectNoSSL) с пользователемс привилегиями Host.Config.Maintenance.

Наконец, вы можете вывести хост из режима обслуживания с помощью: host.ExitMaintenanceMode(0)

...