理解pyvmomi中的vim

Understand vim in pyvmomi

我想在pyvmomi中理解vim。
我知道 vim 是这样导入的:from pyvmomi import vim
我试图找到pyvmomi中定义vim的位置,但我还没有找到。

我尝试了以下步骤:

>>> inspect.getfile(vim)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.7/inspect.py", line 420, in getfile
    'function, traceback, frame, or code object'.format(object
TypeError: <pyVmomi.VmomiSupport.LazyModule object at 0xb50690> is not a     module, class, method, function, traceback, frame, or code object
>>> globals()['vim']
<pyVmomi.VmomiSupport.LazyModule object at 0xb50690>
>>> locals()['vim']
<pyVmomi.VmomiSupport.LazyModule object at 0xb50690>
>>> vim

但是,我没有得到 vim 是如何在 LazyModule

中定义的

我想了解
中列出的数据对象在哪里 https://github.com/vmware/pyvmomi/tree/master/docs/vim 最初在 pyVmomi 中定义。

大多数情况下,这些对象都可以在这里找到:https://github.com/vmware/pyvmomi/blob/master/pyVmomi/ServerObjects.pyhttps://github.com/vmware/pyvmomi/blob/master/pyVmomi/QueryTypes.pyhttps://github.com/vmware/pyvmomi/blob/master/pyVmomi/CoreTypes.py

最近添加了 SMS 支持,这些 SMS 对象在此处:https://github.com/vmware/pyvmomi/blob/master/pyVmomi/SmsObjects.py

SPBM 对象在这里:https://github.com/vmware/pyvmomi/blob/master/pyVmomi/PbmObjects.py

这些对象是动态创建的,不应编辑此文件的内容,因为它是由 VMWare 使用其内部构建系统自动生成的。这些对象是使用 VmomiSupport 中的工具创建的,位于此处:https://github.com/vmware/pyvmomi/blob/master/pyVmomi/VmomiSupport.py

要进一步了解 vim 的定义位置和方式,请查看 ServerObjects.py:

CreateDataType("vim.AboutInfo", "AboutInfo", "vmodl.DynamicData", "vim.version.version1", [("name", "string", "vim.version.version1", 0), ("fullName", "string", "vim.version.version1", 0), ("vendor", "string", "vim.version.version1", 0), ("version", "string", "vim.version.version1", 0), ("build", "string", "vim.version.version1", 0), ("localeVersion", "string", "vim.version.version1", F_OPTIONAL), ("localeBuild", "string", "vim.version.version1", F_OPTIONAL), ("osType", "string", "vim.version.version1", 0), ("productLineId", "string", "vim.version.version1", 0), ("apiType", "string", "vim.version.version1", 0), ("apiVersion", "string", "vim.version.version1", 0), ("instanceUuid", "string", "vim.version.version5", F_OPTIONAL), ("licenseProductName", "string", "vim.version.version5", F_OPTIONAL), ("licenseProductVersion", "string", "vim.version.version5", F_OPTIONAL)])

这里使用的是从VmomiSupport导入的CreateDataType方法。此方法需要几个参数:

  1. vmodlName(VMware 托管对象设计语言名称)
  2. wsdlName(类型的 WSDL 名称)
  3. parent(父类型的 VMODL 名称。即它是否扩展了其他一些 class)
  4. 版本(类型的版本。这不是 vSphere 版本更多 API 版本。这些版本在 WSDL 中找到)
  5. props(类型的属性)

到目前为止,对于我们的示例,我们有 vim.AboutInfo 作为 vmodlName。 vim 部分只是 AboutInfo 对象的命名空间。

接下来我们有 AboutInfo 作为 WSDL 名称。这只是对象的名称。

接下来是vmodl.DynamicData。这是 AboutInfo 扩展的 class。请在此处查看 SOAP 文档:http://www.yavijava.com/docs/vim.AboutInfo.html

接下来是支持 API 版本的 vim.version.version1

最后是道具部分。这是一个元组列表,描述对象的各种属性及其类型以及它们是否可选。这些也可以,但可以在上面的文档 link 中看到,其中为对象定义了属性。

解析器使用所有这些信息为您动态构建对象,并构建您的 XML 有效负载并发送到服务器。

所以要回答什么是 vim 以及它是如何定义的:vim 只是 vSphere 知道的服务器端对象的命名空间,它在 pyVmomi 中使用 vmodlName对应SOAPWSDL/Documentation(见link中的vim.AboutInfo.html