【问题标题】:Understand vim in pyvmomi了解pyvmomi中的vim
【发布时间】:2016-10-08 22:12:28
【问题描述】:

我想了解 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

但是,我不知道在 LazyModule 中 vim 是如何定义的

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

【问题讨论】:

    标签: python vim pyvmomi


    【解决方案1】:

    这些对象大部分都可以在这里找到: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 名称。即它是否扩展了其他一些类)
    4. 版本(类型的版本。这不是 vSphere 版本,而是 API 版本。这些版本在 WSDL 中找到)
    5. props(类型的属性)

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

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

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

    接下来是vim.version.version1,表示支持的 API 版本。

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

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

    所以要回答什么是 vim 以及它是如何定义的:vim 只是 vSphere 知道的服务器端对象的命名空间,它在 pyVmomi 中使用与 SOAP WSDL/文档相对应的vmodlName 定义(参见在那个链接中vim.AboutInfo.html)

    【讨论】:

    • 感谢迈克尔提供的信息!是的,inspect.getfile(vim) 确实显示 VmomiSupport.py 有“vim”对象,如文档所述。
    • 您能否就 VmomiSupport.py 中定义“vim”的块给出提示。谢谢,
    • 我更新了我原来的评论,加入了一些关于 vim 的更好的解释。如果这不能回答您的问题,请告诉我。
    • 非常感谢迈克尔!您的更新帮助我了解了 vim 的来源,并为我澄清了这是服务器端对象的命名空间。
    • 对不起,直到你的帖子我才注意到复选标记。 (我赞成你的回答,因为我认为这是如何接受它。)
    猜你喜欢
    • 2017-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-24
    • 1970-01-01
    • 2013-07-15
    • 1970-01-01
    相关资源
    最近更新 更多