【问题标题】:Get vmId via pyVmomi通过 pyVmomi 获取 vmId
【发布时间】:2015-11-15 08:22:35
【问题描述】:

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

【问题讨论】:

  • 我不明白你在这里问什么..
  • 我指的是ESXi CLI中使用vim-cmd vmsvc/getallvms获取的vmid

标签: python vmware vmware-tools pyvmomi


【解决方案1】:

您调用的 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 访问一个对象,请按照我提供的示例进行操作。大约一年前,我在我的博客here 上报道了这一点。您可以查看该文章以获得更深入的解释。

【讨论】:

    【解决方案2】:

    我遇到了同样的事情,
    我知道已经有一段时间了,但我建议这样做
    hack 对我来说很好用,希望你能用。

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

    例如给出

    vim.VirtualMachine:11
    

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

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

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

    '11'
    type(buf)&lt;br/&gt;
    &lt;class 'list'&gt;

    【讨论】:

    • 这个答案的格式很奇怪。您能否修复格式,以便清楚配置中的内容以及上下文和 cmets 是什么?
    • 谢谢,我已经修改了。
    猜你喜欢
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 2020-04-22
    相关资源
    最近更新 更多