目前我使用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
?
答案 0 :(得分:2)
您调用vmid的内容称为ManagedObjectReference或mor,或称为moref(在vSphere Web services API的上下文中)。使用pyVmomi有两种方法可以获得moref。一种是打印对象。该方法将以一种格式打印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访问Object,请按照我提供的示例进行操作。大约一年前,我在我的博客here上介绍了这一点。您可以查看该文章以获得更深入的解释。
答案 1 :(得分:1)
我遇到了同样的事情,
我知道已经有一段时间但我建议这一点
黑客对我来说很好,我希望你能用它。
buf = ("%s" % (vm.summary.vm))
例如给出
vim.VirtualMachine:11
现在,我们希望提取数字,对于python3,建议使用正则表达式。
import re #regular expression
re.findall('\d+', buf)
结果包含1个元素的列表
&#39; 11&#39;
type(buf)<br/>
<class 'list'>