How to provide VM lease date during the submission of VM build in VRA8 using ABX flow

Recently I was on working on scenario where we want to provide the lease date of VM at the time of submission. It is well known feature in 7.x which we get .


In VRA 8.x we can play with lease only with Day 2 actions.

With the help of extensibility you can provide the lease time during submission and use extensibility to trigger abx flow/ workflow as day 2.

The flow looks like below .

Here is my Yaml looks like.

formatVersion: 1
inputs:
  leaseDate:
    type: string
    title: Lease Date
    format: date-time
resources:
  Cloud_Network_1:
    type: Cloud.Network
    properties:
      constraints:
        - tag: 'vsphere:network'
      networkType: existing
  Cloud_vSphere_Machine_1:
    type: Cloud.vSphere.Machine
    properties:
      image: Images
      abxaction: 'yes'
      leaseDate: '${input.leaseDate}'
      cpuCount: 1
      totalMemoryMB: 1024
      awaitIp: false
      customizeGuestOs: false
      storage:
        constraints:
          - tag: 'vsphere:ds'
      constraints:
        - tag: 'vsphere:cluster'
      networks:
        - network: '${resource.Cloud_Network_1.id}'

Here us my Catalog log request will look like.

It is simple blueprint and catalog request where I am using date-time as format in input and will be using for my ABX flow .

Here is the quick look of both abx action in flow
1. VRAtoken
2. Extend Lesse

import requests
import json
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

def handler(context, inputs):
    vrafqdn = inputs['vrafqdn']
    username = inputs['username']
    password = inputs['password']
    domain =inputs['domain']
    refreshtokenurl = f"https://{vrafqdn}/csp/gateway/am/api/login?access_token"
    iaasUrl = f"https://{vrafqdn}/iaas/api/login"
    headers = {
        'accept': "application/json",
        'content-type': "application/json"
    }
    payload = {
        "username": username,
        "password": password,
        "domain": domain
        }
    apioutput = requests.post(refreshtokenurl, data=json.dumps(payload), verify=False, headers=headers)
    if apioutput.status_code == 200:
        refreshtoken = apioutput.json()['refresh_token']
        iaasPayload = f'{{"refreshToken": "{refreshtoken}"}}'
        iaasApiOutput = requests.post(iaasUrl, data=iaasPayload, headers=headers, verify=False).json()['token']
        bearerToken = "Bearer " + iaasApiOutput
        outputs = {}
        outputs['vratoken'] = bearerToken
        return outputs
    else:
        print(apioutput.status_code)
        print(apioutput.json())
import requests
import json
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

def handler(context, inputs):
    token = inputs['vratoken']
    vrafqdn = inputs['vrafqdn']
    deploymentid = inputs['deploymentId']
    print(token)
    print(deploymentid)
    leasedate = inputs['requestInputs']['leaseDate']
    url = f'https://{vrafqdn}/deployment/api/deployments/{deploymentid}/requests'
    headers = {
        'accept': "application/json",
        'content-type': "application/json",
        'authorization': token
        }
    data = {
        "actionId": "Deployment.ChangeLease",
        "inputs": {
            'Lease Expiration Date': leasedate
            }
        }
    jdata = json.dumps(data)
    apioutput = requests.post(url, headers=headers,data=jdata, verify=False)
    print(apioutput)
    print(apioutput.json())

Once we are done with creating the ABX action , we can create ABX Flow .

Here is the quick look for ABX flow

Once we are done with setting the flow , Last Part which is left is configuring the subscription.

Here is the quick look how my subscription looks like , we will be setting this on Deployment completed.

I am using filter so that it can only run for completed event.

event.data.eventType == "CREATE_DEPLOYMENT" && event.data.status == "FINISHED" 

Disclaimer : My VRA lab has internet connectivity , so I can use any module online , you may need to make the action as module and zip it ,before you use as ABX action/flow . If you are using VRA Cloud then we can use as it is without any change.

One response to “How to provide VM lease date during the submission of VM build in VRA8 using ABX flow”

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

Create a website or blog at WordPress.com

%d bloggers like this: