Понимание vim в pyvmomi

Я хотел бы понять vim в pyvmomi.
Я понимаю, что vim импортируется так: from pyvmomi import vim
Я пытался найти, где vim определяется в pyvmomi, но пока не нашел.

Я попробовал следующие шаги:

>>> 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

However, I did not get how vim is defined in LazyModule

Я хотел бы понять, где находятся объекты данных, перечисленные в
https://github.com/vmware/pyvmomi/tree/master/docs/vim изначально определены в pyVmomi.


person tocode    schedule 08.10.2016    source источник


Ответы (1)


По большей части эти объекты находятся здесь: https://github.com/vmware/pyvmomi/blob/master/pyVmomi/ServerObjects.py и https://github.com/vmware/pyvmomi/blob/master/pyVmomi/QueryTypes.py и https://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)])

Здесь используется метод CreateDataType, импортированный из VmomiSupport. Этот метод принимает несколько параметров:

  1. vmodlName (имя языка проектирования управляемых объектов VMware)
  2. wsdlName (имя WSDL типа)
  3. parent (имя VMODL родительского типа, т.е. расширяет ли он какой-то другой класс)
  4. версия (версия типа. Это не версия vSphere, а версия API. Эти версии находятся в WSDL)
  5. props (свойства типа)

Пока для нашего примера у нас есть vim.AboutInfo для vmodlName. Часть 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 с использованием vmodlName, которое соответствует SOAP WSDL/Documentation (см. в этой ссылке vim.AboutInfo.html )

person Michael Rice    schedule 11.10.2016
comment
Спасибо за информацию Михаил! Да, из inspect.getfile(vim) он показывает, что VmomiSupport.py имеет объект vim, как упоминалось в документе. - person tocode; 14.10.2016
comment
Не могли бы вы дать подсказки о блоке, который vim определен в VmomiSupport.py. Спасибо, - person tocode; 14.10.2016
comment
Я обновил свой первоначальный комментарий, включив в него несколько лучших объяснений о vim. Дайте мне знать, если это не ответ на ваш вопрос. - person Michael Rice; 15.10.2016
comment
Спасибо большое Михаил! Ваше обновление помогло мне понять, откуда взялся vim, и уточнить для меня, что это пространство имен для объектов на стороне сервера. - person tocode; 18.10.2016
comment
Извините, я не заметил галочку до вашего поста. (Я поддерживаю ваш ответ, так как думал, что это то, как его принять.) - person tocode; 20.10.2016