Files
inecs f8d3cbdd59 Initial commit: VMware vSphere API simulator scaffold.
Add the FastAPI app, PostgreSQL migrations, Docker/Helm packaging, API
contracts, docs, client examples, and the unit/integration/compatibility
test suite for local client and tooling labs without a real vCenter.
2026-07-18 04:42:11 +03:00

69 lines
3.3 KiB
Markdown

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