Получить vmId через pyVmomi

В настоящее время я использую vim-cmd выполнить несколько операций в моем центре VMware.

Я использую модуль SSH paramiko для подключения и получения vim-cmd статус команды:

vim-cmd vmsvc/getallvms
vim-cmd vmsvc/power.getstate 13
vim-cmd vmsvc/power.on 13
vim-cmd vmsvc/power.off 13
vim-cmd vmsvc/destroy 13

Я хочу использовать pyVmomi библиотека для запуска некоторых команд и для этого требуется предоставить vmId идентификатор:

from pyvim import connect
from pyVmomi import vim
from pyVmomi import vmodl

vim-cmd vmsvc/get.summary 13
Listsummary:

(vim.vm.Summary) {
   dynamicType = <unset>, 
   vm = 'vim.VirtualMachine:13', 

Какую команду я могу использовать, чтобы получить vmId?

2 ответа

Решение

То, что вы называете vmid, называется ManagedObjectReference или mor, или moref (в контексте API веб-сервисов vSphere). С pyVmomi есть несколько способов получить больше. Один из них - просто напечатать объект. Этот метод будет печатать moref в таком формате, чтобы он давал ManagedObjectType:moref, как показано ниже. Другой способ, если вы просто хотите получить реальный moref, вы можете получить доступ к vm._moId. Ниже приведен пример использования объекта Datacenter.

from pyVim.connect import SmartConnect
from pyVmomi import vim
si = SmartConnect(host='10.12.254.137', user='administrator@vsphere.local', pwd='password')
content = si.RetrieveContent()
children = content.rootFolder.childEntity
for child in children:
    print child

'vim.Datacenter:datacenter-33'
'vim.Datacenter:datacenter-2'
children[0].name
'1000110'
dc = vim.Datacenter('datacenter-33')
dc._stub = si._stub
dc.name
'1000110'

Если вы хотите получить доступ к объекту, используя его moref, следуйте приведенному мною примеру. Я рассказал об этом в своем блоге около года назад. Вы можете проверить эту статью для более глубокого объяснения.

Я столкнулся с тем же,
Я знаю, что это было давно, но я предлагаю это
хак, который работает хорошо для меня, я надеюсь, что вы можете использовать его.

buf = ("%s" % (vm.summary.vm))

который, например, дает

vim.VirtualMachine:11

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

import re #regular expression
re.findall('\d+', buf)

который приводит к списку с 1 элементом

'11'
type(buf)<br/>
<class 'list'>

Другие вопросы по тегам