По большей части эти объекты находятся здесь: 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. Этот метод принимает несколько параметров:
- vmodlName (имя языка проектирования управляемых объектов VMware)
- wsdlName (имя WSDL типа)
- parent (имя VMODL родительского типа, т.е. расширяет ли он какой-то другой класс)
- версия (версия типа. Это не версия vSphere, а версия API. Эти версии находятся в WSDL)
- 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