RSS .92| RSS 2.0| ATOM 0.3
  • Home
  •  

    Connecting to the Nutanix PrismAPI with vCenter Orchestrator – Part 3

    Part 1 covered pointing the vCO HTTP-REST plugin to a PrismAPI endpoint.

    Part 2 covered building a workflow and consuming the bulk data output from the PrismAPI.

    Part 3 will cover consuming the data, and in this case displaying values from Nutanix Protection Domains.

    Add a Scriptable Task

    Right click on the workflow created in Part 2, and click Edit.  In my case, the workflow is called Nutanix PrismAPI – protection_domains.

    1. Drag a Scriptable Task to the blue line that connects Invoke a REST operation and the end ball.add parseJSON scriptable task
    2. Switch to the Info tab, and name it parseJSON.
    3. Switch to the IN tab, hit the single dumb bell, and select contentAsString  scriptable task input
    4. Change to the Scripting tab.  Plug in the following code:
    // built in JSON parser to vCO via javascript
    var jsonResponse = JSON.parse(contentAsString);
    
    System.log("\n\n--------\n\n");
    
    // get the length of the JSON array that is returned
    length=jsonResponse.length;
    
    // iterate through the array and look for particular values we want to use
    for(var i=0;i<length;i++) {
     for(obj in jsonResponse[i]) {
     if(obj == "name") {
     foundName=obj;
     //System.log("object: "+obj);
     System.log("---> Protection_domain: "+jsonResponse[i][obj]);
     }
     if(obj == "pendingReplicationCount") {
     foundReplicationCount=obj;
     System.log("---> pendingReplicationCount: "+jsonResponse[i][obj]);
     }
     if(obj == "ongoingReplicationCount") {
     foundOngoingReplicationCount=obj;
     System.log("---> ongoingReplicationCount: "+jsonResponse[i][obj]);
     }
     if(obj == "totalUserWrittenBytes") {
     foundTotalUserWrittenBytes=obj;
     System.log("---> foundTotalUserWrittenBytes: "+jsonResponse[i][obj]);
     }
    
     }
     System.log("\n");
     }
    

    Validate the workflow and fix any errors.  Right click and run.  My example output looks like this:

    [2014-03-04 15:50:20.402] [I] —> Protection_domain: WANPD2
    [2014-03-04 15:50:20.402] [I] —> pendingReplicationCount: 0
    [2014-03-04 15:50:20.403] [I] —> ongoingReplicationCount: 0
    [2014-03-04 15:50:20.403] [I] —> foundTotalUserWrittenBytes: null
    [2014-03-04 15:50:20.404] [I]

    [2014-03-04 15:50:20.404] [I] —> Protection_domain: WANPD
    [2014-03-04 15:50:20.405] [I] —> pendingReplicationCount: 0
    [2014-03-04 15:50:20.405] [I] —> ongoingReplicationCount: 0
    [2014-03-04 15:50:20.406] [I] —> foundTotalUserWrittenBytes: null
    [2014-03-04 15:50:20.406] [I]

    In my code, I am specifically looking for Protection Domains, and three values:

    • pendingReplicationCount
    •  ongoingReplicationCount
    • foundTotalUserWrittenBytes

    With code such as this, it could be possible to create a scheduled task, and send an alert email if the pendingRelicationCount hits a certain threshold.

    Enjoy!

    Editors note: Mobile shout-out to Ryan Swenson for code assist.

    Leave a Reply

    Your email address will not be published. Required fields are marked *