1

目前我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

4

2 回答 2

4

您所称的 vmid 称为 ManagedObjectReference 或 mor 或 moref(在 vSphere Web 服务 API 的上下文中)。使用 pyVmomi 有几种方法可以获取更多信息。一种是只打印对象。该方法将以某种格式打印 moref,从而提供 ManagedObjectType: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 访问对象,请按照我提供的示例进行操作。大约一年前,我在这里的博客上介绍了这一点。您可以查看该文章以获得更深入的解释。

于 2015-12-20T08:16:38.560 回答
1

我也遇到过同样的事情,
我知道这已经有一段时间了,但我建议这个
hack 对我来说很好,我希望你可以使用它。

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

例如给出

vim.VirtualMachine:11

现在,我们希望提取数字,对于 python3,建议使用正则表达式。

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

结果是一个包含 1 个元素的列表

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

于 2017-11-15T19:50:25.143 回答