Tuesday 12 January 2016

vRealize Automation : Why my VM provisioning request got Rejected?

vRealize Automation Version: 6.x

One thing that I have thoroughly enjoyed and has given me immense satisfaction over the years as a field guy is finding interesting use-cases and providing the solutions for the same.

Use-case:

Everything was going smooth until, in UAT, we found an interesting issue. There is no way in vRealize Automation GUI can a requester see the "Bussiness Justification" after his request gets rejected. The vRA version that I am referring here is 6.2.2, but it is seen in earlier versions as well.

While technically it may seem to be a small issue, but from business point of view it posed many challenges some of which Client highlighted as:
  • Since requester doesn't know why his request was rejected, he would repeat the mistake.
  • Even cloudadmin has no visibility of why a particular request was rejected or approved.
  • The bigger roadblock was Auditing, since it was a bank, they wanted to keep track of rejections and most importantly approvals of requests with high resources.
If you are new to vRA or would like to understand its components and constructs, I would recommend you to go through these useful blogs:


Solution:

The solution was quite tricky and bit complex. All Service Request(SR) related details like SR id is stored in catalog-service , while the approval related is stored in approval-service. So the way to retrieve the "Business Justification" and "Approver Detail" was to first make REST calls to catalog-service , store details and then using these details make another REST call to approval-service. I tried these stuff using the REST client and it worked perfectly. Now the next big step was to automate these REST calls and expose to Cloudadmin / Requester as a Catalog Service.

High-Level Steps:

  • Leverage vRealize Orchestrator(vRO) and develop vRO workflows to make REST calls.
  • Make a parent vRO workflow which would be called from vRA.
  • Create and Advance Service Designer(ASD) to call the parent workflow.

Low-Level Steps:


vRO:

  • Register a REST host in vRO by navigating to Library -> HTTP-REST-> Configuration -> Add a REST host.
  • Now add a REST operation by executing Add a REST operation workflow. 
                 Values to copy:
               a.  Name  :  Request-Token
               b.  Template URL : /identity/api/tokens
               c.  Content Type : application/json
               d.  HTTP Method : POST
  • Now Execute a Generate a new workflow from a REST operation for getting token ID/Authentication of vRA session.
  •  Now Add second REST operation for getting PreApproval id by executing the same workflow as in step 2
                  Values to copy:
               a.   Name: GetPreApprovalId
               b.  Template URL: /catalog-service/api/consumer/requests?   limit=1&page=1&%24filter=requestNumber+eq+{SRNumber}
    • Generate a new workflow by executing the Generate a new workflow from a REST operation for getting approval ID.
    •  Register the 3rd REST operation.
                        Values to copy:
                   a. Name : GetDetail.
                   b. Template URL : approval-service/api/info/approvals/{preApprovalId}


      • The script which will extract "Business Justification" and "Approver's Email ID" is:
                                 var jsonResponse = JSON.parse(contentAsString);
                                            var groups = jsonResponse.pastLevel;
                                                            for each (group in groups){
                                                              var requests = group.request;
                                                                  for each (req in requests) {
                                                                     var busJust = req.businessJustification
                                                                     var approver = req.completedBy
                                                                       }

                                                 System.log("Approvers is: " + approver);
                                                 System.log("BusinessJustifaction is: " + busJust);
                                                 }
                       
      •  The final parent workflow should look something like this.


      • Develop above workflow in such a way that it should have only 1 input i.e SR Number and 2 Outputs as shown below.



      vRA:


      • Login to vRealize Automation portal and navigate to Advanced Services tab and Add a new service blueprint.
      • Map it to the parent workflow created in vRO.
      • Edit "srnumber" input field to make it more descriptive, for ex "Request Number".
      • Create an Output field to capture "Business Justification" and "Approver's Email ID".
      • Give proper Entitlement as per need.
      That's it. Now let's see it in Action.

      • Login to vRA and go to Catalog, you would see something like this.

        • Request the Catalog as:

        • Go to Request and see the MAGIC!!


          I hope that you will find this useful!

          Stay tuned for more DeepDives.

          Saturday 9 January 2016

          vRealize Operations Manager Metric Guide!

          This blog was published earlier by me in Sunny Dua's vXpresss:

          vRealize Operations Manager Metric Guide!


          I came across many requests both internally (field consultants / SE) and externally (Clients) for an extensive list of available metrics of vRealize Operations Manager in the form of sheet, so that one can easily refer to without accessing the product UI. The request was genuine, as vROps has rich library of metrics which can be leveraged for doing performance and capacity analysis and creating super-metrics, views, dashboards. I started looking through various available documents and internal sources, but couldn’t find any. Now in the same process, I found a wonderful stuff which is REST interface for vROps. Now coming from an Automation background, I really like to play with api's
          and use them to automate as much as possible.


          Now, let’s deep-dive into, how I have extracted these metrics.


          vRealize Operations API documentation can be found at https://IPADDRESS OF vROPs/ suite-api/docs/rest/index.html. In this page, you can find all relevant information like, which API’s are available, sample request and response etc. The REST call that I made to retrieve these metric details is

          That’s it. Is it the end of the Blog? Nope, because I know, you would be wondering, how did I get to this request, or how do I know which API call I need to fire, Right?

          So, let me explain this. The first thing that we do, whenever we want to see any Metric, is we always select the Adapter Type first in GUI interface. So select the “getAdapterTypes”. The request now becomes.
















            Now, fire the above request on web browser.  Here is what you will see.
























          So, now we know that the adapter-kind key is VMWARE. So the call now becomes

          Again, let’s see what we get after executing above request. 


























          So, now we see all the Object Types available under VMWARE. Note down the resourceKinds key for the Object you want to retrieve metrics. Request now becomes

          Execute the request and you see.
















          That’s it. Here you get the complete http request for getting the statkeys:

          Now, fire the above commands one by one replacing the resourceKinds with each object available under the VMWARE adapterkind. Once you have all the data, it’s quite easy to then dump them into XLS format.

          Hope this consolidated sheet helps you and becomes your reference tool. I have also uploaded this on the following link and you can get a copy. However it is always good to know how I created this as you can do the same for any other AdapterKind.