Unified Management and Automation
Session
As
of vSphere 8.0 Update 3, developers can re-use a vSphere Management (VIM) session for making
vSphere Automation (vAPI) calls, or re-use a vAPI session for making VIM calls. Examples
follow.
Here is Python code to establish a vSphere Automation (vAPI)
session to then invoke a vSphere Management (VIM) call:
import requests from pyVim.connect import SmartConnect from vmware.vapi.vsphere.client import create_vsphere_client vc_host = '10.168.203.112' user = 'Administrator@vsphere.local' password = 'NKCF_n4PagP0jmz_' # vAPI setup session = requests.session() session.verify = False client = create_vsphere_client(vc_host, user, password, session=session) # Acquire session_id session_id = client.get_session_id() # Reuse session_id in SmartConnect si = SmartConnect(host=vc_host, port=443, disableSslCertValidation=True, sessionId=session_id) content = si.RetrieveContent() dc_moref = content.rootFolder.CreateDatacenter("TEST") print(dc_moref)
Here is Python code to establish a vSphere
Management (VIM) session to then invoke a vSphere Automation (vAPI) call:
import requests from pyVim.connect import SmartConnect from vmware.vapi.vsphere.client import create_vsphere_client vc_host = '10.168.203.112' user = 'Administrator@vsphere.local' password = 'NKCF_n4PagP0jmz_' # Login with pyvmomi si = SmartConnect(host=vc_host, port=443, user=user, pwd=password, disableSslCertValidation=True) # TODO GetSessionId documentation session_id = si._GetStub().GetSessionId() # vAPI setup session = requests.session() session.verify = False client = create_vsphere_client(vc_host, session=session, session_id=session_id) print(client.vcenter.compute.Policies.list())
Here are Curl commands to establish a VIM
session via JSON, make a vAPI call, and then call the REST tag API. The second and third
are get requests and do not apply anything. The second command returns a list of
folders. The third returns a list of tags for folder
group-d3
.$ curl "https://$VC/sdk/vim25/8.0.2.0/SessionManager/SessionManager/Login" -H 'Content-Type: application/json' -d '{"userName": "Administrator@vsphere.local", "password": "$PSWD"}' -ki $ curl https://$VC/api/vcenter/folder -H "vmware-api-session-id: $VIM_SESSION" -k $ curl https://$VC/sdk/vim25/8.0.2.0/Folder/group-d3/tag -H "vmware-api-session-id: $VIM_SESSION" -k
Here are Curl commands to create a REST
session and use it to call the VIM tag API:
$ curl -X POST https://$VC/api/session -u "administrator@vsphere.local:$PSWD" -k $ curl "https://$VC/sdk/vim25/8.0.2.0/Folder/group-d1001/tag" -H "vmware-api-session-id: $VAPI_SESSION" -k
The following caveats and limitations apply to unified VIM/vAPI sessions:
- Session timeout can be configured with propertyconfig.vmacore.soap.sessionTimeoutin file/etc/vmware-vpx/vpx.confon vCenter Server, or using the vSphere Client UI.
- Default session lifespan can be configured with propertyvpx.sso.sts.tokenLifetime, also invpx.conf, or using the vSphere Client UI.
- The maximum number of inflight sessions can be configured with propertyconfig.vmacore.soap.maxSessionCount, also invpx.conf, or using the vSphere Client UI.
- Session IDs from either endpoint work in the other endpoint. Clients that want the benefit of single session should adjust to accept variable size Session ID tokens.