Получить 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'>