cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
3526
Views
1
Helpful
0
Comments
Orf Gelbrich
Cisco Employee
Cisco Employee
Task NameGet SR ID details
Description
Prerequisites
  1. Tested on 6.5
CategoryWorkflow
ComponentsvSphere 5.x
User Inputs

Instructions for Regular Workflow Use:

  1. Download the attached .ZIP file below to your computer. *Remember the location of the saved file on your computer.
  2. Unzip the file on your computer. Should end up with a .WFD file.
  3. Log in to UCS Director as a user that has "system-admin" privileges.
  4. Navigate to "Policies-->Orchestration" and click on "Import".
  5. Click "Browse" and navigate to the location on your computer where the .WFD file resides. Choose the .WFD file and click "Open".
  6. Click "Upload" and then "OK" once the file upload is completed. Then click "Next".
  7. Click the "Select" button next to "Import Workflows". Click the "Check All" button to check all checkboxes and then the "Select" button.
  8. Click "Submit".
  9. A new folder should appear in "Policies-->Orchestration" that contains the imported workflow. You will now need to update the included tasks with information about the specific environment.

The workflow:

Screen Shot 2017-03-28 at 7.45.10 AM.png

The Workflow run:

Screen Shot 2017-03-28 at 7.44.32 AM.png

Picture when the SR ID in question is failed (Over all workflow runs in 19 sec):

Screen Shot 2017-03-28 at 8.01.42 AM.png

The API call from the RESTAPI tab:

Screen Shot 2017-03-28 at 7.02.26 AM.png

Option #1 to get the SR ID details:

//app/api/rest?formatType=json&opName=userAPIGetServiceRequestDetails&opData={param0:1000}

var srid = ctxt.getInput("sr_id");

logger.addInfo("---1---");

var x = ctxt.getAPI().userAPIGetServiceRequestDetails(srid).getStatus();

logger.addInfo("Status: " + x);

logger.addInfo("---2---");

ctxt.setTaskStatusMessage("SR ID " + srid + " is " + x);

This code runs in about 1 sec:

Screen Shot 2017-03-28 at 7.38.52 AM.png

The code that was previous in used in many posting on this site runs 10 seconds even when a SR ID is complete:

Screen Shot 2017-03-27 at 4.34.33 PM.png

Screen Shot 2017-03-27 at 4.33.42 PM.png

Typical old code segment:

     for (var i=0; i<childSrIdArray.length; i++)

     {

       var childSrId = childSrIdArray[i];

       var status = ctxt.waitForCompletion(childSrId, 1800000);

       if (status == 0)

       {

       logger.addInfo("Provisioned SR ID  ="+ childSrId+ " successfully.");

       } else {

       logger.addError("SR ID  ="+ childSrId+ " failed");

       }

}

Input / Output for the last two tasks:

Screen Shot 2017-03-28 at 7.53.21 AM.png

Screen Shot 2017-03-28 at 7.53.02 AM.png

Screen Shot 2017-03-28 at 7.53.10 AM.png

Screen Shot 2017-03-28 at 7.53.30 AM.png

Code for this task:

Screen Shot 2017-03-28 at 7.55.48 AM.png

importPackage(com.cloupia.model.cIM);

importPackage(java.util);

importPackage(java.lang);

importPackage(java.io);

importPackage(com.cloupia.lib.util);

importPackage(com.cloupia.model.cIM);

importPackage(com.cloupia.service.cIM.inframgr);

importPackage(org.apache.commons.httpclient);

importPackage(org.apache.commons.httpclient.cookie);

importPackage(org.apache.commons.httpclient.methods);

importPackage(org.apache.commons.httpclient.auth);

importPackage(com.cloupia.model.cEvent.notify);

importPackage(com.cloupia.lib.util.mail);

importPackage(com.cloupia.fw.objstore);

importPackage(com.cloupia.lib.util.managedreports);

//

// GENERIC HTTP Function

//

function GenericHTTPFunction(P1, P2){

var ucsdIP = input.UCSDip;

var ucsdUser = input.UCSDuser;

var ucsdPassword = input.UCSDpassword;

var ucsdPort = input.UCSDport;

var Https = input.UCSDhttps;

var key = input.UCSDkey;

//var apiUri = "/cloupia/api-v2/vdc";

//var apiUri = "/cloupia/api-v2/hyperVDeploymentPolicy";

var apiUri = P1;

var xmlBody = P2;

//xmlBody = "1";

var url = apiUri + "/" + xmlBody;

logger.addInfo(" URL : " + url);

var httpClient = new HttpClient();

//httpClient.getHostConfiguration().setHost(ucsdIP, input.UCSDport, input.https);

httpClient.getHostConfiguration().setHost(ucsdIP, ucsdPort, Https);

httpClient.getParams().setCookiePolicy("default");

httpClient.getParams().setAuthenticationPreemptive(true);

var defaultcreds = new UsernamePasswordCredentials(ucsdUser, ucsdPassword);

httpClient.getState().setCredentials(new AuthScope(ucsdIP, -1, null), defaultcreds);

var httpMethod = new PostMethod(apiUri);

//var httpMethod = new GetMethod (apiUri);

//var httpMethod = new GetMethod (url);

httpMethod.setRequestEntity(new StringRequestEntity(xmlBody));

httpMethod.addRequestHeader("Content-Type", "application/xml");

httpMethod.addRequestHeader("X-Cloupia-Request-Key", key);

httpClient.executeMethod(httpMethod);

var statuscode = httpMethod.getStatusCode();

if (statuscode != 201 && statuscode != 200)

{

    logger.addError("Request failed. HTTP response code: "+statuscode);

    logger.addError("Response = "+httpMethod.getResponseBodyAsString());

     httpMethod.releaseConnection();

     // Set this task as failed.

     ctxt.setFailed("Request failed.");

} else {

    logger.addInfo("Request was Succcessful.");

    logger.addInfo("Response = "+httpMethod.getResponseBodyAsString());

    var x2 = httpMethod.getResponseBodyAsString();

        // All done. Release HTTP connection anyway.

    httpMethod.releaseConnection();

    return x2;

}

}

//

// generic http call end

//

output.APIResult = GenericHTTPFunction(input.APIuri, input.APIuriItem);

Code for this task:

Screen Shot 2017-03-28 at 7.56.21 AM.png

loadLibrary("JSON-JS-Module/JSON-JS-ModuleLibrary");

var i1 = input.input1;

//var opName = "userAPIGetVMSummary";

function showObject(obj) {

  var result = "";

  for (var p in obj) {

    if( obj.hasOwnProperty(p) ) {

      logger.addInfo("Objact name: " + p + " Object value: " + obj[p] );

    }

  }            

  return result;

}

logger.addInfo("The input: " + i1);

var resultObj = JSON2.parse(i1);

//

// The data that is being parsed in this example looks like this:

//{ 'serviceResult':{'rows':[{'Overview_VM_ID':1...

//

// If something different is parsed then the following items need

// to be changed in the code below

//

//      serviceResult

//      rows

//      ****

//

//      ****

if(resultObj.serviceResult == null){

  logger.addError(responseObj.serviceError);

  ctxt.setFailed();

  ctxt.exit();

}

var jsonInString = JSON2.stringify(resultObj);

logger.addInfo(jsonInString);

logger.addInfo("Show all object(s)");

//      ****

//showObject(resultObj.serviceResult.rows[0]);

showObject(resultObj.serviceResult);

// other ways of getting information

//      ****

//Mar 27, 2017 21:36:15 UTC {'serviceResult':{'requestId':524,'requestType':7,'initiatingUser':'admin','groupName':null,'requestTime':1490634256008,'comments':'','provisionQuantity':1,'provisionCatalog':null,'provisionVDCName':null,'provisionDurationHours':0,'status':'Complete','isChild':false,'parentRequestId':0,'isArchived':false,'workflowName':'HTTPS_get_VM_Details_userAPIGetVMSummary','containerName':'','tenantIdentity':'','rollbackStatus':''},'serviceError':null,'serviceName':'InfraMgr','opName':'userAPIGetServiceRequestDetails'}

logger.addInfo(resultObj.serviceResult.initiatingUser);

logger.addInfo(resultObj.serviceResult.workflowName);

logger.addInfo(resultObj.serviceResult.status);

logger.addInfo(resultObj.serviceResult.requestId);

//logger.addInfo(resultObj.serviceResult.requestId.Overview_Hostname);

//logger.addInfo(resultObj.serviceResult.requestId.Overview_Image_ID);

//

// Sample output

//

output.JSONout = resultObj.status

//

//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

//

importPackage(java.util);

importPackage(java.lang);

importPackage(com.cloupia.lib.util);

importPackage(com.cloupia.service.cIM.inframgr);

importPackage(com.google.gson);

var msg = i1;

var gson = new Gson();

var json = gson.toJson(msg);

logger.addInfo('orig msg = '+i1);

logger.addInfo("typeof i1: " + typeof i1 );

var parser = new JsonParser();

var jsonTree = parser.parse(msg).getAsJsonObject();

var serviceResult = jsonTree.get("serviceResult").getAsJsonObject();

logger.addInfo("serviceResult - JSON Object: " + serviceResult.isJsonObject());

logger.addInfo("requestId: " + serviceResult.get("requestId"));

logger.addInfo("initiatingUser: " + serviceResult.get("initiatingUser"));

logger.addInfo("workflowName: " + serviceResult.get("workflowName"));

logger.addInfo("status: " + serviceResult.get("status"));

The Log:

Service Request ID: 544

-------------------------------------

Workflow Inputs:

--Admin Inputs--

--User Inputs--

sr_id : 524

Mar 28, 2017 12:29:41 UTC Request submitted

Mar 28, 2017 12:29:42 UTC Executing workflow item number 1

Mar 28, 2017 12:29:42 UTC Completed workflow item number 1, with status Completed

Mar 28, 2017 12:29:45 UTC Executing workflow item number 2

Mar 28, 2017 12:29:45 UTC Trigger context executeWorkFlowStep called

Mar 28, 2017 12:29:45 UTC Executing custom action HTTPS_get_SR_Details (ExecuteCloupiaScript)

Mar 28, 2017 12:29:45 UTC Executing custom action HTTPS_get_SR_Details (ExecuteCloupiaScript)

Mar 28, 2017 12:29:45 UTC Executing cloupia script: Lable_userAPIGetServiceRequestDetails

Mar 28, 2017 12:29:45 UTC ---1---

Mar 28, 2017 12:29:45 UTC Status: Complete

Mar 28, 2017 12:29:45 UTC ---2---

Mar 28, 2017 12:29:45 UTC Completed cloupia script Lable_userAPIGetServiceRequestDetails

Mar 28, 2017 12:29:45 UTC Task #2 (HTTPS_get_SR_Details (ExecuteCloupiaScript)) completed successfully in 0 seconds

Mar 28, 2017 12:29:45 UTC Input/Output values for Task #2 (HTTPS_get_SR_Details (ExecuteCloupiaScript)):

Mar 28, 2017 12:29:45 UTC [Local Input: Label = Lable_userAPIGetServiceRequestDetails]

Mar 28, 2017 12:29:45 UTC [Local Input: Script = ///app/api/rest?formatType=json&opName=userAPIGetServiceRequestDetails&opData={param0:1000} var srid = ctxt.getInput('sr_id'); logger.addInfo('---1---'); var x = ctxt.getAPI().userAPIGetServiceRequestDetails(srid).getStatus(); logger.addInfo('Status: ' + x); logger.addInfo('---2---'); ctxt.setTaskStatusMessage('SR ID ' + srid + ' is ' + x); ]

Mar 28, 2017 12:29:45 UTC [Local Input: Undo Script = ]

Mar 28, 2017 12:29:45 UTC Completed workflow item number 2, with status Completed

Mar 28, 2017 12:29:48 UTC Executing workflow item number 3

Mar 28, 2017 12:29:48 UTC Trigger context executeWorkFlowStep called

Mar 28, 2017 12:29:48 UTC Executing custom action HTTPS_get_SR_Details (custom_Post_HTTPS_API_v1)

Mar 28, 2017 12:29:48 UTC Executing custom action HTTPS_get_SR_Details (custom_Post_HTTPS_API_v1)

Mar 28, 2017 12:29:48 UTC Executing custom script for Post_HTTPS_API_v1

Mar 28, 2017 12:29:48 UTC URL : /app/api/rest?formatType=json&opName=userAPIGetServiceRequestDetails&opData={param0:524}/

Mar 28, 2017 12:29:48 UTC Request was Succcessful.

Mar 28, 2017 12:29:48 UTC Response = { 'serviceResult':{'requestId':524,'requestType':7,'initiatingUser':'admin','groupName':null,'requestTime':1490634256008,'comments':'','provisionQuantity':1,'provisionCatalog':null,'provisionVDCName':null,'provisionDurationHours':0,'status':'Complete','isChild':false,'parentRequestId':0,'isArchived':false,'workflowName':'HTTPS_get_VM_Details_userAPIGetVMSummary','containerName':'','tenantIdentity':'','rollbackStatus':''}, 'serviceError':null, 'serviceName':'InfraMgr', 'opName':'userAPIGetServiceRequestDetails' }

Mar 28, 2017 12:29:48 UTC Processing output: APIResult

Mar 28, 2017 12:29:49 UTC Task #3 (HTTPS_get_SR_Details (custom_Post_HTTPS_API_v1)) completed successfully in 0 seconds

Mar 28, 2017 12:29:49 UTC Input/Output values for Task #3 (HTTPS_get_SR_Details (custom_Post_HTTPS_API_v1)):

Mar 28, 2017 12:29:49 UTC [Local Input: UCSDip = 172.17.32.80]

Mar 28, 2017 12:29:49 UTC [Local Input: UCSDport = 8443]

Mar 28, 2017 12:29:49 UTC [Local Input: UCSDkey = D644E837A3984730B33E5641AB1436C2]

Mar 28, 2017 12:29:49 UTC [Template Input:APIuri = /app/api/rest?formatType=json&opName=userAPIGetServiceRequestDetails&opData={param0:${sr_id}}]

Mar 28, 2017 12:29:49 UTC [Resolved Template Input: APIuri = /app/api/rest?formatType=json&opName=userAPIGetServiceRequestDetails&opData={param0:524}]

Mar 28, 2017 12:29:49 UTC [Local Input: APIuri = /app/api/rest?formatType=json&opName=userAPIGetServiceRequestDetails&opData={param0:524}]

Mar 28, 2017 12:29:49 UTC [Local Input: UCSDuser = admin]

Mar 28, 2017 12:29:49 UTC [Local Input: UCSDpassword = **masked-value**]

Mar 28, 2017 12:29:49 UTC [Local Input: UCSDhttps = https]

Mar 28, 2017 12:29:49 UTC [Local Input: APIuriItem = ]

Mar 28, 2017 12:29:49 UTC [Output: APIResult = { 'serviceResult':{'requestId':524,'requestType':7,'initiatingUser':'admin','groupName':null,'requestTime':1490634256008,'comments':'','provisionQuantity':1,'provisionCatalog':null,'provisionVDCName':null,'provisionDurationHours':0,'status':'Complete','isChild':false,'parentRequestId':0,'isArchived':false,'workflowName':'HTTPS_get_VM_Details_userAPIGetVMSummary','containerName':'','tenantIdentity':'','rollbackStatus':''}, 'serviceError':null, 'serviceName':'InfraMgr', 'opName':'userAPIGetServiceRequestDetails' }]

Mar 28, 2017 12:29:49 UTC Completed workflow item number 3, with status Completed

Mar 28, 2017 12:29:54 UTC Executing workflow item number 4

Mar 28, 2017 12:29:54 UTC Trigger context executeWorkFlowStep called

Mar 28, 2017 12:29:54 UTC Executing custom action HTTPS_get_SR_Details (custom_JSON_Parse_v1_serviceResult_requestId)

Mar 28, 2017 12:29:54 UTC Executing custom action HTTPS_get_SR_Details (custom_JSON_Parse_v1_serviceResult_requestId)

Mar 28, 2017 12:29:54 UTC Executing custom script for JSON_Parse_v1_serviceResult_requestId

Mar 28, 2017 12:29:54 UTC The input: { 'serviceResult':{'requestId':524,'requestType':7,'initiatingUser':'admin','groupName':null,'requestTime':1490634256008,'comments':'','provisionQuantity':1,'provisionCatalog':null,'provisionVDCName':null,'provisionDurationHours':0,'status':'Complete','isChild':false,'parentRequestId':0,'isArchived':false,'workflowName':'HTTPS_get_VM_Details_userAPIGetVMSummary','containerName':'','tenantIdentity':'','rollbackStatus':''}, 'serviceError':null, 'serviceName':'InfraMgr', 'opName':'userAPIGetServiceRequestDetails' }

Mar 28, 2017 12:29:54 UTC {'serviceResult':{'requestId':524,'requestType':7,'initiatingUser':'admin','groupName':null,'requestTime':1490634256008,'comments':'','provisionQuantity':1,'provisionCatalog':null,'provisionVDCName':null,'provisionDurationHours':0,'status':'Complete','isChild':false,'parentRequestId':0,'isArchived':false,'workflowName':'HTTPS_get_VM_Details_userAPIGetVMSummary','containerName':'','tenantIdentity':'','rollbackStatus':''},'serviceError':null,'serviceName':'InfraMgr','opName':'userAPIGetServiceRequestDetails'}

Mar 28, 2017 12:29:54 UTC Show all object(s)

Mar 28, 2017 12:29:54 UTC Objact name: requestId Object value: 524

Mar 28, 2017 12:29:54 UTC Objact name: requestType Object value: 7

Mar 28, 2017 12:29:54 UTC Objact name: initiatingUser Object value: admin

Mar 28, 2017 12:29:54 UTC Objact name: groupName Object value: null

Mar 28, 2017 12:29:54 UTC Objact name: requestTime Object value: 1490634256008

Mar 28, 2017 12:29:54 UTC Objact name: comments Object value:

Mar 28, 2017 12:29:54 UTC Objact name: provisionQuantity Object value: 1

Mar 28, 2017 12:29:54 UTC Objact name: provisionCatalog Object value: null

Mar 28, 2017 12:29:54 UTC Objact name: provisionVDCName Object value: null

Mar 28, 2017 12:29:54 UTC Objact name: provisionDurationHours Object value: 0

Mar 28, 2017 12:29:54 UTC Objact name: status Object value: Complete

Mar 28, 2017 12:29:54 UTC Objact name: isChild Object value: false

Mar 28, 2017 12:29:54 UTC Objact name: parentRequestId Object value: 0

Mar 28, 2017 12:29:54 UTC Objact name: isArchived Object value: false

Mar 28, 2017 12:29:54 UTC Objact name: workflowName Object value: HTTPS_get_VM_Details_userAPIGetVMSummary

Mar 28, 2017 12:29:54 UTC Objact name: containerName Object value:

Mar 28, 2017 12:29:54 UTC Objact name: tenantIdentity Object value:

Mar 28, 2017 12:29:54 UTC Objact name: rollbackStatus Object value:

Mar 28, 2017 12:29:54 UTC admin

Mar 28, 2017 12:29:54 UTC HTTPS_get_VM_Details_userAPIGetVMSummary

Mar 28, 2017 12:29:54 UTC Complete

Mar 28, 2017 12:29:54 UTC 524

Mar 28, 2017 12:29:54 UTC orig msg = { 'serviceResult':{'requestId':524,'requestType':7,'initiatingUser':'admin','groupName':null,'requestTime':1490634256008,'comments':'','provisionQuantity':1,'provisionCatalog':null,'provisionVDCName':null,'provisionDurationHours':0,'status':'Complete','isChild':false,'parentRequestId':0,'isArchived':false,'workflowName':'HTTPS_get_VM_Details_userAPIGetVMSummary','containerName':'','tenantIdentity':'','rollbackStatus':''}, 'serviceError':null, 'serviceName':'InfraMgr', 'opName':'userAPIGetServiceRequestDetails' }

Mar 28, 2017 12:29:54 UTC typeof i1: string

Mar 28, 2017 12:29:54 UTC serviceResult - JSON Object: true

Mar 28, 2017 12:29:54 UTC requestId: 524

Mar 28, 2017 12:29:54 UTC initiatingUser: 'admin'

Mar 28, 2017 12:29:54 UTC workflowName: 'HTTPS_get_VM_Details_userAPIGetVMSummary'

Mar 28, 2017 12:29:54 UTC status: 'Complete'

Mar 28, 2017 12:29:54 UTC Processing output: JSONout

Mar 28, 2017 12:29:55 UTC Task #4 (HTTPS_get_SR_Details (custom_JSON_Parse_v1_serviceResult_requestId)) completed successfully in 0 seconds

Mar 28, 2017 12:29:55 UTC Input/Output values for Task #4 (HTTPS_get_SR_Details (custom_JSON_Parse_v1_serviceResult_requestId)):

Mar 28, 2017 12:29:55 UTC [Mapped Input: input1 = { 'serviceResult':{'requestId':524,'requestType':7,'initiatingUser':'admin','groupName':null,'requestTime':1490634256008,'comments':'','provisionQuantity':1,'provisionCatalog':null,'provisionVDCName':null,'provisionDurationHours':0,'status':'Complete','isChild':false,'parentRequestId':0,'isArchived':false,'workflowName':'HTTPS_get_VM_Details_userAPIGetVMSummary','containerName':'','tenantIdentity':'','rollbackStatus':''}, 'serviceError':null, 'serviceName':'InfraMgr', 'opName':'userAPIGetServiceRequestDetails' }]

Mar 28, 2017 12:29:55 UTC [Output: JSONout = undefined]

Mar 28, 2017 12:29:55 UTC Completed workflow item number 4, with status Completed

Mar 28, 2017 12:30:00 UTC Executing workflow item number 5

Mar 28, 2017 12:30:00 UTC Completed workflow item number 5, with status Completed


Close

Workflow file contains:

Workflow:

Screen Shot 2017-03-28 at 8.05.35 AM.png

Custom tasks:

Screen Shot 2017-03-28 at 8.05.14 AM.png

JSON2 lib:

Screen Shot 2017-03-28 at 8.05.54 AM.png

Getting Started

Find answers to your questions by entering keywords or phrases in the Search bar above. New here? Use these resources to familiarize yourself with the community:

Quick Links