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.
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
**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.
|
||||
Reference in New Issue
Block a user