首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pyvmomi支持类型

Pyvmomi支持类型
EN

Stack Overflow用户
提问于 2019-04-02 20:26:52
回答 1查看 1.6K关注 0票数 0

背景

我正在尝试从vmware中提取所有信息,我可以通过它的API和pyvmomi提取这些信息。

我从pyvmomi示例中注意到,这是如何获取vsphere实例上的所有vms:

代码语言:javascript
复制
import yaml
from pyVmomi import vim
from pyVim.connect import SmartConnect, Disconnect, SmartConnectNoSSL
si = SmartConnectNoSSL(host=vserver, user=user, pwd=password, port=port)
container = si.RetrieveContent().viewManager.CreateContainerView(si.RetrieveContent().rootFolder, [vim.VirtualMachine], True)

现在,我希望循环遍历所有可提取资源类型的列表(如vim.VirtualMachine、vim.ResourcePool等)。

但是我找不到这份名单。

问题:,这个列表是什么?

有什么方法可以从pyvmomi模块找到这个列表吗?

更多信息

我使用了这个链接:https://vdc-download.vmware.com/vmwb-repository/dcr-public/6b586ed2-655c-49d9-9029-bc416323cb22/fa0b429a-a695-4c11-b7d2-2cbc284049dc/doc/index.html来查找vmware上所有托管对象的列表,但是很多对象似乎不受支持。而且,我不知道这个列表是否包含所有受支持的pyVmomi类型。只有这些资源:

代码语言:javascript
复制
ResourcePool
VirtualApp
Datacenter
VirtualMachine
Datastore
Network
ClusterComputeResource
OpaqueNetwork
HostSystem
DistributedVirtualPortgroup
ManagedEntity
ComputeResource
VmwareDistributedVirtualSwitch
StoragePod
Folder
DistributedVirtualSwitch

不要在container =代码上出错。例如,vim.Alarm在RetrieveContent调用中不受支持,但它确实作为vim的一部分存在。

错误是:

代码语言:javascript
复制
container = si.RetrieveContent().viewManager.CreateContainerView(si.RetrieveContent().rootFolder, [vim.Alarm], True)

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/root/vmware-extract/vmware-extract-0.1.0/env/lib/python2.7/site-packages/pyVmomi/VmomiSupport.py", line 706, in <lambda>
    self.f(*(self.args + (obj,) + args), **kwargs)
  File "/root/vmware-extract/vmware-extract-0.1.0/env/lib/python2.7/site-packages/pyVmomi/VmomiSupport.py", line 512, in _InvokeMethod
    return self._stub.InvokeMethod(self, info, args)
  File "/root/vmware-extract/vmware-extract-0.1.0/env/lib/python2.7/site-packages/pyVmomi/SoapAdapter.py", line 1374, in InvokeMethod
    raise obj # pylint: disable-msg=E0702
pyVmomi.VmomiSupport.InvalidArgument: (vmodl.fault.InvalidArgument) {
   dynamicType = <unset>,
   dynamicProperty = (vmodl.DynamicProperty) [],
   msg = 'A specified parameter was not correct: type',
   faultCause = <unset>,
   faultMessage = (vmodl.LocalizableMessage) [],
   invalidProperty = u'type'
}

编辑1

代码语言:javascript
复制
from pyVmomi import vim
vim.Alarm
dir(vim) 
vim.VirtualMachine
dir(vim)

返回

代码语言:javascript
复制
['Alarm','__call__', '__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattr__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'fault', 'name']
['Alarm', 'VirtualMachine', '__call__', '__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattr__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'name']

dir(vim)不会列出任何资源类型,除非我首先知道它并键入vim.resourceTypeNameHere

但是,即使它确实出现在列表中,RetrieveContent()行仍然在某些resourceTypes上出现错误。例如,如上文所示,警报错误。

EN

回答 1

Stack Overflow用户

发布于 2021-09-28 03:11:59

vim.VirtualMachine只列出“vm02 01”、“vm02 02”、.

尝尝这个

代码语言:javascript
复制
def get_obj(content, vimtype, name=None):
    '''
    return list 
    '''
    container = content.viewManager.CreateContainerView(content.rootFolder, vimtype, True)
    obj = [ view for view in container.view]
    return obj

vm_objs = get_obj(content, [vim.VirtualMachine])
for vm in vm_objs:
    print(dir(vm))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55483050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档