**Language / Язык:** [English](../../domains/soap.md) | [Русский](soap.md)

# SOAP / VIM

Минимальный VIM SDK для клиентов в стиле pyvmomi / govmomi (провайдер
Terraform `hashicorp/vsphere`, Pulumi, govc):
[`app/vsphere/soap/router.py`](../../../app/vsphere/soap/router.py),
[`property_collector.py`](../../../app/vsphere/soap/property_collector.py),
[`pbm.py`](../../../app/vsphere/soap/pbm.py).

## Эндпоинт

Все операции POST'ят SOAP-конверт на `/sdk` (также `/sdk/`). Вспомогательные
маршруты:

| Метод | Путь | Заметки |
|---|---|---|
| GET | `/sdk/vimService.wsdl` (alias `/sdk/vim.wsdl`) | WSDL stub со списком реализованных операций |
| GET | `/sdk/about.do` (alias `/about.do`) | Человекочитаемая страница «VMware vCenter Server» |
| POST | `/sdk/vim25/{version}/SessionManager/SessionManager/Login` | Login-вариант с JSON-телом, используемый некоторыми SDK |

## Реализованные операции

- `RetrieveServiceContent`, `Login`, `Logout`
- `RetrieveProperties`, `RetrievePropertiesEx`, **ContinueRetrievePropertiesEx**
  (токены пагинации; plural `<objects>`), `CreateFilter`,
  `WaitForUpdatesEx` (version tokens; пустые polls), `CreateContainerView`,
  `DestroyPropertyFilter`
- `FindByInventoryPath` (пути без корневой папки `Datacenters`, как в
  конвенциях govmomi), `FindByUuid`, `FindByDnsName`, `FindByIp`, `FindChild`
- `CreateVM_Task`, `CreateChildVM_Task`, `CreateFolder`, `PowerOnVM_Task`,
  `PowerOffVM_Task`, `CloneVM_Task`, `CreateSnapshot_Task`, `Rename_Task`,
  `ReconfigVM_Task`, `RelocateVM_Task`, `Destroy_Task`, `CustomizeVM_Task`,
  `CancelTask`, `CurrentTime`
- Guest file ops: `InitiateFileTransferToGuest`,
  `InitiateFileTransferFromGuest`, `ListFilesInGuest`, `DeleteFileInGuest`,
  `MakeDirectoryInGuest`
- Import/upload: `ImportVApp_Task`, `CreateImportSpec`,
  `HttpNfcLeaseComplete`, `HttpNfcLeaseProgress`, `HttpNfcLeaseAbort`,
  `HttpNfcLeaseGetManifest` (в паре с REST `/nfc/{lease}` —
  см. [Content library](content-library.md))
- `QueryConfigOption`, `QueryConfigOptionEx`, `QueryConfigOptionDescriptor`,
  `QueryConfigTarget`
- Stub PBM (`/pbm`) для клиентов, учитывающих storage policy

## Основные моменты

- `Login` выдаёт ту же underlying-сессию, что и REST (`vmware-api-session-id`
  cookie/header плюс cookie `vmware_soap_session`) — см.
  [Session](session.md).
- `VIM_VERSION` зафиксирован как `8.0.2` с ≤3 компонентами через точку, так
  как `hashicorp/vsphere` строго парсит `AboutInfo.version`.
- Type-strict MOR lookup отклоняет ссылку `VirtualApp:resgroup-*`,
  резолвящуюся как plain `ResourcePool` — важно для Terraform resource path
  `CreateVM_Task`.
- Операции, возвращающие задачу, создают реальную строку в `vsphere_tasks`
  (общую с REST — см. [Tasks](tasks.md)), включая MoRefs `info.result` при
  create/clone.
- Filters PropertyCollector, ContainerViews и version tokens WaitForUpdatesEx
  живут в `vsphere_pc_state` (миграция `013`) между перезапусками процесса
  в рамках лаборатории.
- `Folder.childType` отдаётся как `ArrayOfString`; строковые свойства несут
  `xsi:type="xsd:string"`, чтобы их принимал decoder govmomi; `Datastore.host`
  — `ArrayOfDatastoreHostMount`; у `Cluster`/`Host` есть `environmentBrowser`.

Примеры подключений pyvmomi/govmomi/Terraform/Pulumi — [Клиенты](../clients.md);
минимальный raw-XML smoke —
[examples/python/vsphere_soap_smoke.py](../../../examples/python/vsphere_soap_smoke.py).
