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.
3.5 KiB
Language / Язык: English | Русский
Authentication
Primary plane: vSphere Automation REST sessions (vmware-api-session-id).
SOAP /sdk uses its own Login/Logout on the VIM SessionManager. An
optional legacy Proxmox stub plane (ENABLE_PVE_STUB=true) keeps historic
/api2/json/access/ticket behavior from a shared platform lineage — it is not
the default lab path and is not covered further here.
Session login (REST)
POST /api/session
Authorization: Basic base64(user:password)
Successful response:
- Body: JSON string session id (e.g.
"a1b2c3…") - Header:
vmware-api-session-id: <id> - Cookie:
vmware-api-session-id=<id>(SameSite=Strict, 2 hour TTL)
Legacy wrapper (same credentials, { "value": "<session-id>" } shape):
POST /rest/com/vmware/cis/session
Authorization: Basic base64(user:password)
Calling APIs
SID=$(curl -sk -u 'administrator@vsphere.local:VMware1!' \
-X POST 'https://localhost/api/session' | tr -d '"')
curl -sk -H "vmware-api-session-id: $SID" \
'https://localhost/api/vcenter/vm'
Cookie-only clients also work after login (credentials: include in the
browser Web UI).
Session inspect / logout
| Method | Path | Notes |
|---|---|---|
| GET | /api/session |
HTTP 200 with x-vmware-session-user / x-vmware-session-roles headers |
| DELETE | /api/session |
Invalidates the session and clears the cookie |
| GET / DELETE | /rest/com/vmware/cis/session |
Legacy { "value": … } equivalents |
Sessions live in PostgreSQL (vsphere_sessions) with a 2-hour sliding
expiry — every authenticated request extends expires_at. Expired sessions
return HTTP 401 on the next lookup and are lazily deleted.
Seeded lab principals
Password for all: VMware1!
| Principal | Role |
|---|---|
administrator@vsphere.local |
Administrator |
readonly@vsphere.local |
ReadOnly |
operator@vsphere.local |
VirtualMachinePowerUser |
vmadmin@vsphere.local |
VirtualMachineAdministrator |
Credentials are stored in vsphere_credentials (scrypt-hashed passwords,
roles array) and are re-inserted idempotently on first /api/session call
and by every seed profile. See Authorization for the
privilege model and Seed profiles for how the four
principals map to inventory-scoped permissions.
Mutating endpoints check privileges via require_privilege(...); calling a
mutate path as readonly@vsphere.local returns 403.
SOAP /sdk
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:vim25">
<soapenv:Body>
<urn:Login>
<urn:_this type="SessionManager">SessionManager</urn:_this>
<urn:userName>administrator@vsphere.local</urn:userName>
<urn:password>VMware1!</urn:password>
</urn:Login>
</soapenv:Body>
</soapenv:Envelope>
Login issues the same underlying session id, returned as
vmware-api-session-id and as a vmware_soap_session cookie; subsequent SOAP
calls (pyvmomi, govmomi, the hashicorp/vsphere Terraform provider, Pulumi)
carry that cookie automatically. Logout deletes the session. See
SOAP / VIM.
Optional legacy Proxmox stub
Only when ENABLE_PVE_STUB=true: ticket login at /api2/json/access/ticket
with PVEAuthCookie + CSRF, inherited from the shared simulator platform this
project forked from. It is disabled by default (ENABLE_PVE_STUB=false) and
is not exercised by the vSphere docs, examples, or test suites in this
repository.