vRA 8.x API IaaS VM and Deployment REST Filter Examples

Mindwatering Incorporated

Author: Tripp W Black

Created: 10/20/2022 at 12:42 AM

 

Category:
VMWare
vRA, vRO - VCAC

Filter examples with getting the VC:VirtualMachine or a Deployment via the REST API

Warning:
The REST API has up to a delay for properties or other attributes updated coming back into vRA. The delay is equivalent to the interval set for a Cloud Account in vRA.

Example to Get Deployment By Deployment ID:
Inputs:
vRAHost - REST:RESTHost
depID - String

Script:
var restMethod = 'GET';
var restPathURI = '/iaas/api/deployments?$filter=id+eq+' + depID;
var restPayload = null;
var restHeaders = new Properties();
restHeaders.put('Content-Type', 'application/json');

try {
var restClient = vRAHost.createRestClient();
var restRequest = restClient.createRequest( restMethod, restPathURI, restPayload);

var hKeys = restHeaders.keys;
for (var curKey in hKeys) {
restRequest.setHeader( hKeys[curKey], restHeaders.get( hKeys[curKey]) );
}

// perform response
var restResp = restClient.execute(restRequest);

// get response info
var statusCode = restResp.statusCode;
System.debug('Status Code: ' + statusCode );

statusMsg = restResp.statusMessage;
System.debug('Status Message: ' + statusMessage );

var respContent = restResponse.contentAsString;
System.debug('Content: ' + respContent );

if (statusCode >= 400 ) {
var errMsg = 'REST call failed. Status Code: ' + statusCode;
System.error( errMsg );
throw errMsg;
}

// return response content
return respContent


} catche(e) {
System.error('Unhandled exception: ' + e);
throw e;
}


Get Machine by VMName:
var restPathURI = '/iaas/api/machines?$filter=name+eq+' + vmName;
var restMethod = 'GET';
var restInputHdrs = new Properties();
restInputHdrs.put('Content-Type', 'application/json');
// GET = '', for PATCH, PUT, POST, populate JSON payload
restPayloadJSON = '';
restPayload = JSON.stringify(restPayloadJSON);


Other operators:
ne - not equal
or - logical or
and - logical and
startswith(name,'teststring')
endswith(name,'teststring')
substringof('testsubstring',name)
length(name)+eq+4


// get VM properties from the response (see action below)
var vmMachID = '';
var vmCustomProp = '';

var jsonDetails = JSON.parse(restResp);
var respContent = jsonDetails.content[0];
if (respContent == null || respContent == undefined) {
// failed to find VM
System.warn('No VM object returned for ' + vmName '. respContent empty.');
} else {
vmMachID = respContent.id;
vmCustomProp = respContent.customProperties.custompropname;
...
}


______________________


Get a managed deployment's machine:
var restPathURI = '/iaas/api/machines?$filter=deploymentId+eq+*';
var restMethod = 'GET';
var restInputHdrs = new Properties();
restInputHdrs.put('Content-Type', 'application/json');
...

______________________



REST Action:
Assumes an input that is linked to a configuration item that is the the vRA:Host, and the variables passed into the script are above.
Action: DoHOSTREST

Inputs:
restMethod (string)
restPathURI (string)
restPayload (string)
restInputHdrs (Properties)
vRAHost (vRA:Host)

// create client REST request
var restClient = vRAHost.createRestClient();
var req = restClient.createRequest(restMethod, restPathURI, restPayload);
var hdrKeys = restInputHdrs.keys;

// add headers
for (var hdrKey in hdrKeys) {
req.setHeader(hdrKeys[hdrKey], restInputHeaders.get(hdrKeys[hdrKey]));
}

// run and get response
var resp = restClient.execute(req);

var respStatusCode = resp.statusCode;
var respStatusMsg = resp.statusMessage;
System.debug( 'Status: ' + respStatusCode + ', Message: ' + restStatusMsg);

var respContent = resp.contentAsString;
System.debug( 'Response text: ' + respContent );

respHdrs = resp.getHeadersValues('Access-Control-Allow-Headers');
for (var respHdr in respHdrs) {
System.debug( 'Header: ' + respHdr.toString();
}

if (repStatusCode >= 400) {
// uncomment throw if you wish action to fail workflow
System.warn( 'REST called failed. See debug lines above.');
// throw 'REST called failed. See debug lines above.';
}

return respContent;

______________________

vRA8.6 - Other REST Endpoints:

Get the vRA:Host:
var restPathURI = '/vco/api/catalog/VRA?$filter=name+eq+Default';

Get deployments By Deployment ID:
var restPathURI = '/iaas/api/deployments?$filter=id+eq+mydeploymentid';
Note: deployments can be filtered by eq/ne/and/or

Get requests for a specific deployment:
var restPathURI = '/deployment/api/deployments/1a23bc4d-123a-321b-bcd2-1a2bcdef9876/requests';
Note: the last request, will be the Create (provision). Any Day2 actions will be in cronological order above the provision.


Get workflow:
var restPathURI = '/vco/api/workflows?conditions=name=myworkflowname';
or
var restPathURI = '/vco/api/workflows?conditions=categoryName=mwportalapp';

Get projects:
var restPathURI = '/iaas/api/projects/";


______________________

vRA 8.6 - Login Steps:

In vRA 8, the login is split into two steps. We have to get an auth/access token, and then use that to get a bearer token.

1. Auth Access Token:
var restPathURI = 'https://' + vRAFQDN + '/csp/gateway/am/api/login?access_token';
headers:
content-Type: application/json
accept: application/json

Type: POST

POST body:
Pass the username, password, and domain variables, like below:
{"username": "{{username}}, "password": "{{password}}", "domain" {{domain}}"}

Response from vRA:
{"refresh_token":"1Ab2c001bc9A1BcDeFabCDEfabCdEFABCD"}

We are going to save this refresh_token into a variable named loginToken, for the next query.

2. Bearer Token:
Now using that first token, we have to do a second request to get the bearer token to actually do requests:
var restPathURI = 'https://' + vRAFQDN + '/csp/gateway/am/api/login?access_token';
headers:
content-Type: application/json
accept: application/json

Type: POST

POST body:
Pass the username, password, and domain variables, like below:
{"refreshToken": "{{loginToken}}"}

Response from vRA:
{
"tokenType": "Bearer",
"token": "verylongstringcontainingthetoken"
}

We are saving this token, into a variable named bearerToken, for all subsequent requests.

3. Get a VM's Props:
Using the bearer token, we can now do real work. For example we can get a VM and its status and properties:
var restPathURI = 'https://' + vRAFQDN + '/iaas/api/machines?$filter=name+eq+' + vmName;
headers:
content-Type: application/json
accept: application/json
authorization: {{bearerToken}}

Type: GET

Notes on the restPathURI:
The $, in $filter may need to be encoded to the %24.
If the name of the VM contains a space, you'll need to wrap in single quotes, or %27


Response from vrA:
{
"content": [
{
...
<properties and states of the VM>
...
}
],
"totalElements": 1,
"numberOfElements": 1
}

Keywords:
vRA 8, vRA8, vRO


previous page

×