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

# SOAP / VIM

Minimal VIM SDK for pyvmomi / govmomi-style clients (Terraform's
`hashicorp/vsphere` provider, 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).

## Endpoint

All operations POST a SOAP envelope to `/sdk` (also `/sdk/`). Auxiliary
routes:

| Method | Path | Notes |
|---|---|---|
| GET | `/sdk/vimService.wsdl` (alias `/sdk/vim.wsdl`) | WSDL stub advertising the implemented operation list |
| GET | `/sdk/about.do` (alias `/about.do`) | Human-readable "VMware vCenter Server" page |
| POST | `/sdk/vim25/{version}/SessionManager/SessionManager/Login` | JSON-body login variant used by some SDKs |

## Implemented operations

- `RetrieveServiceContent`, `Login`, `Logout`
- `RetrieveProperties`, `RetrievePropertiesEx`, **ContinueRetrievePropertiesEx**
  (pagination tokens; `<objects>` plural), `CreateFilter`,
  `WaitForUpdatesEx` (version tokens; empty polls), `CreateContainerView`,
  `DestroyPropertyFilter`
- `FindByInventoryPath` (paths omit the root `Datacenters` folder, matching
  govmomi conventions), `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` (paired with the REST `/nfc/{lease}` endpoints —
  see [Content library](content-library.md))
- `QueryConfigOption`, `QueryConfigOptionEx`, `QueryConfigOptionDescriptor`,
  `QueryConfigTarget`
- PBM (`/pbm`) stub for storage-policy-aware clients

## Highlights

- `Login` issues the same underlying session as REST (`vmware-api-session-id`
  cookie/header, plus a `vmware_soap_session` cookie) — see
  [Session](session.md).
- `VIM_VERSION` is pinned to `8.0.2` with ≤3 dotted components, since
  `hashicorp/vsphere` parses `AboutInfo.version` strictly.
- Type-strict MOR lookup rejects a `VirtualApp:resgroup-*` reference from
  resolving as a plain `ResourcePool` — matters for the Terraform
  `CreateVM_Task` resource path.
- Task-returning operations create a real row in `vsphere_tasks` (shared with
  REST — see [Tasks](tasks.md)), including `info.result` MoRefs on
  create/clone.
- PropertyCollector filters, ContainerViews, and WaitForUpdatesEx version
  tokens persist in `vsphere_pc_state` (migration `013`) across process
  restarts within a lab.
- `Folder.childType` is emitted as `ArrayOfString`; string properties carry
  `xsi:type="xsd:string"` so govmomi's decoder accepts them; `Datastore.host`
  is `ArrayOfDatastoreHostMount`; `Cluster`/`Host` expose `environmentBrowser`.

See [Clients](../clients.md) for pyvmomi/govmomi/Terraform/Pulumi connection
examples and [examples/python/vsphere_soap_smoke.py](../../examples/python/vsphere_soap_smoke.py)
for a minimal raw-XML smoke.
