cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
3441
Views
1
Helpful
0
Comments
Orf Gelbrich
Cisco Employee
Cisco Employee
Task Name

The regular if statemant can not test for a booean.  Here is an example on how to test if a user entered something and if the varaible is empty.

Description

Prerequisites

Tested on UCSD 6.0.1.1  / 6.5 (put)

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-08 at 12.35.33 PM.png

Input output values:

Screen Shot 2017-03-08 at 12.35.18 PM.png

The https task input:

Screen Shot 2017-03-08 at 12.35.43 PM.png

The XML Parser task variable mapping and input:

Screen Shot 2017-03-08 at 12.35.53 PM.png

Screen Shot 2017-03-08 at 12.35.59 PM.png

Workflow run:

Screen Shot 2017-03-08 at 12.39.06 PM.png

The https custom task:

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);

The XML parser custom task:

importPackage(org.w3c.dom);

importPackage(javax.xml.parsers);

importPackage(java.io);

importPackage(java.lang);

importPackage(java.util);

var factory = DocumentBuilderFactory.newInstance();

var builder = factory.newDocumentBuilder();

var xmlStringBuilder = new StringBuilder();

xmlStringBuilder.append(input.XML);

var a1 = input.TAG;

logger.addInfo("a1 : " + a1);

var input =  new ByteArrayInputStream( xmlStringBuilder.toString().getBytes('UTF-8') );

var doc = builder.parse(input);

doc.getDocumentElement().normalize();

var nList = doc.getElementsByTagName(a1);

logger.addInfo("Root element :" + doc.getDocumentElement().getNodeName());

logger.addInfo("nList length: " +nList.getLength() );

for (var i = 0; i < nList.getLength(); i++) {

    var nNode = nList.item(i);

    logger.addInfo("\nCurrent Element : " + nNode.getNodeName());

   logger.addInfo("\nNodeType : " + nNode.getNodeType());

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

    var value = nNode.getTextContent();

        logger.addInfo("Object: " + value );

    output.object = value;

}

The log file:

Service Request ID: 367

Mar 08, 2017 18:28:52 UTC Request submitted

Mar 08, 2017 18:28:53 UTC Executing workflow item number 1

Mar 08, 2017 18:28:53 UTC Completed workflow item number 1, with status Completed

Mar 08, 2017 18:28:59 UTC Executing workflow item number 2

Mar 08, 2017 18:28:59 UTC Trigger context executeWorkFlowStep called

Mar 08, 2017 18:28:59 UTC Executing custom action get_API_via_HTTPS_call_v1 (custom_Get_HTTPS_API_v1)

Mar 08, 2017 18:28:59 UTC Executing custom action get_API_via_HTTPS_call_v1 (custom_Get_HTTPS_API_v1)

Mar 08, 2017 18:28:59 UTC Executing custom script for Get_HTTPS_API_v1

Mar 08, 2017 18:28:59 UTC URL : /cloupia/api-v2/hyperVDeploymentPolicy/Hypervsyspol1

Mar 08, 2017 18:28:59 UTC Request was Succcessful.

Mar 08, 2017 18:28:59 UTC Response = <cuicOperationResponse><cuicOperationStatus>0</cuicOperationStatus><response><hyperVDeploymentPolicy><allowEndUserHostNameSuffix>false</allowEndUserHostNameSuffix><allowEndUserSuffix>false</allowEndUserSuffix><autoLogon>true</autoLogon><autoLogonCount>0</autoLogonCount><domain>TheDomainIAMlookingfor.com</domain><domainAdmin>user</domainAdmin><domainPassword>a2pmZGt3amVm</domainPassword><fullName></fullName><guiRunOnceCommands></guiRunOnceCommands><hostNameTemplate>host-${GROUP_NAME}-SR${SR_ID}</hostNameTemplate><joinTypeDomain>true</joinTypeDomain><licenseMode>Per-Seat</licenseMode><licenseUsers>5</licenseUsers><linuxDnsDomain></linuxDnsDomain><orgName></orgName><password>cGFzc3dvcmRAMTIz</password><policyDescription></policyDescription><policyId>1</policyId><policyName>Hypervsyspol1</policyName><powerOn>true</powerOn><productId></productId><recycleHostName>true</recycleHostName><recycleVMName>true</recycleVMName><rootPassword></rootPassword><SIDUnique>false</SIDUnique><timezone>4</timezone><username></username><vmImageType>Windows and Linux</vmImageType><vmNameTemplate>vm-${GROUP_NAME}-SR${SR_ID}</vmNameTemplate><workGroupName></workGroupName></hyperVDeploymentPolicy></response></cuicOperationResponse>

Mar 08, 2017 18:28:59 UTC Processing output: APIResult

Mar 08, 2017 18:28:59 UTC Task #2 (get_API_via_HTTPS_call_v1 (custom_Get_HTTPS_API_v1)) completed successfully in 0 seconds

Mar 08, 2017 18:28:59 UTC Input/Output values for Task #2 (get_API_via_HTTPS_call_v1 (custom_Get_HTTPS_API_v1)):

Mar 08, 2017 18:28:59 UTC [Local Input: UCSDip = 172.17.32.79]

Mar 08, 2017 18:28:59 UTC [Local Input: UCSDport = 8443]

Mar 08, 2017 18:28:59 UTC [Local Input: UCSDkey = C2110A69E8EA4FE2A466B598508E4D5E]

Mar 08, 2017 18:28:59 UTC [Local Input: APIuri = /cloupia/api-v2/hyperVDeploymentPolicy]

Mar 08, 2017 18:28:59 UTC [Local Input: UCSDuser = admin]

Mar 08, 2017 18:28:59 UTC [Local Input: UCSDpassword = **masked-value**]

Mar 08, 2017 18:28:59 UTC [Local Input: UCSDhttps = https]

Mar 08, 2017 18:28:59 UTC [Local Input: APIuriItem = Hypervsyspol1]

Mar 08, 2017 18:28:59 UTC [Output: APIResult = <cuicOperationResponse><cuicOperationStatus>0</cuicOperationStatus><response><hyperVDeploymentPolicy><allowEndUserHostNameSuffix>false</allowEndUserHostNameSuffix><allowEndUserSuffix>false</allowEndUserSuffix><autoLogon>true</autoLogon><autoLogonCount>0</autoLogonCount><domain>TheDomainIAMlookingfor.com</domain><domainAdmin>user</domainAdmin><domainPassword>a2pmZGt3amVm</domainPassword><fullName></fullName><guiRunOnceCommands></guiRunOnceCommands><hostNameTemplate>host-${GROUP_NAME}-SR${SR_ID}</hostNameTemplate><joinTypeDomain>true</joinTypeDomain><licenseMode>Per-Seat</licenseMode><licenseUsers>5</licenseUsers><linuxDnsDomain></linuxDnsDomain><orgName></orgName><password>cGFzc3dvcmRAMTIz</password><policyDescription></policyDescription><policyId>1</policyId><policyName>Hypervsyspol1</policyName><powerOn>true</powerOn><productId></productId><recycleHostName>true</recycleHostName><recycleVMName>true</recycleVMName><rootPassword></rootPassword><SIDUnique>false</SIDUnique><timezone>4</timezone><username></username><vmImageType>Windows and Linux</vmImageType><vmNameTemplate>vm-${GROUP_NAME}-SR${SR_ID}</vmNameTemplate><workGroupName></workGroupName></hyperVDeploymentPolicy></response></cuicOperationResponse> ]

Mar 08, 2017 18:28:59 UTC Completed workflow item number 2, with status Completed

Mar 08, 2017 18:29:05 UTC Executing workflow item number 3

Mar 08, 2017 18:29:05 UTC Trigger context executeWorkFlowStep called

Mar 08, 2017 18:29:05 UTC Executing custom action get_API_via_HTTPS_call_v1 (custom_XMLParser)

Mar 08, 2017 18:29:05 UTC Executing custom action get_API_via_HTTPS_call_v1 (custom_XMLParser)

Mar 08, 2017 18:29:05 UTC Executing custom script for XMLParser

Mar 08, 2017 18:29:05 UTC a1 : domain

Mar 08, 2017 18:29:05 UTC Root element :cuicOperationResponse

Mar 08, 2017 18:29:05 UTC nList length: 1

Mar 08, 2017 18:29:05 UTC Current Element : domain

Mar 08, 2017 18:29:05 UTC NodeType : 1

Mar 08, 2017 18:29:05 UTC typeof nNode: object

Mar 08, 2017 18:29:05 UTC Object: TheDomainIAMlookingfor.com

Mar 08, 2017 18:29:05 UTC Processing output: object

Mar 08, 2017 18:29:05 UTC Task #3 (get_API_via_HTTPS_call_v1 (custom_XMLParser)) completed successfully in 0 seconds

Mar 08, 2017 18:29:05 UTC Input/Output values for Task #3 (get_API_via_HTTPS_call_v1 (custom_XMLParser)):

Mar 08, 2017 18:29:05 UTC [Template Input:XML = <cuicOperationResponse><cuicOperationStatus>0</cuicOperationStatus><response><hyperVDeploymentPolicy><allowEndUserHostNameSuffix>false</allowEndUserHostNameSuffix><allowEndUserSuffix>false</allowEndUserSuffix><autoLogon>true</autoLogon><autoLogonCount>0</autoLogonCount><domain>TheDomainIAMlookingfor.com</domain><domainAdmin>user</domainAdmin><domainPassword>a2pmZGt3amVm</domainPassword><fullName></fullName><guiRunOnceCommands></guiRunOnceCommands><hostNameTemplate>host-${GROUP_NAME}-SR${SR_ID}</hostNameTemplate><joinTypeDomain>true</joinTypeDomain><licenseMode>Per-Seat</licenseMode><licenseUsers>5</licenseUsers><linuxDnsDomain></linuxDnsDomain><orgName></orgName><password>cGFzc3dvcmRAMTIz</password><policyDescription></policyDescription><policyId>1</policyId><policyName>Hypervsyspol1</policyName><powerOn>true</powerOn><productId></productId><recycleHostName>true</recycleHostName><recycleVMName>true</recycleVMName><rootPassword></rootPassword><SIDUnique>false</SIDUnique><timezone>4</timezone><username></username><vmImageType>Windows and Linux</vmImageType><vmNameTemplate>vm-${GROUP_NAME}-SR${SR_ID}</vmNameTemplate><workGroupName></workGroupName></hyperVDeploymentPolicy></response></cuicOperationResponse> ]

Mar 08, 2017 18:29:05 UTC [Resolved Template Input: XML = <cuicOperationResponse><cuicOperationStatus>0</cuicOperationStatus><response><hyperVDeploymentPolicy><allowEndUserHostNameSuffix>false</allowEndUserHostNameSuffix><allowEndUserSuffix>false</allowEndUserSuffix><autoLogon>true</autoLogon><autoLogonCount>0</autoLogonCount><domain>TheDomainIAMlookingfor.com</domain><domainAdmin>user</domainAdmin><domainPassword>a2pmZGt3amVm</domainPassword><fullName></fullName><guiRunOnceCommands></guiRunOnceCommands><hostNameTemplate>host-${GROUP_NAME}-SR367</hostNameTemplate><joinTypeDomain>true</joinTypeDomain><licenseMode>Per-Seat</licenseMode><licenseUsers>5</licenseUsers><linuxDnsDomain></linuxDnsDomain><orgName></orgName><password>cGFzc3dvcmRAMTIz</password><policyDescription></policyDescription><policyId>1</policyId><policyName>Hypervsyspol1</policyName><powerOn>true</powerOn><productId></productId><recycleHostName>true</recycleHostName><recycleVMName>true</recycleVMName><rootPassword></rootPassword><SIDUnique>false</SIDUnique><timezone>4</timezone><username></username><vmImageType>Windows and Linux</vmImageType><vmNameTemplate>vm-${GROUP_NAME}-SR367</vmNameTemplate><workGroupName></workGroupName></hyperVDeploymentPolicy></response></cuicOperationResponse> ]

Mar 08, 2017 18:29:05 UTC [Mapped Input: XML = <cuicOperationResponse><cuicOperationStatus>0</cuicOperationStatus><response><hyperVDeploymentPolicy><allowEndUserHostNameSuffix>false</allowEndUserHostNameSuffix><allowEndUserSuffix>false</allowEndUserSuffix><autoLogon>true</autoLogon><autoLogonCount>0</autoLogonCount><domain>TheDomainIAMlookingfor.com</domain><domainAdmin>user</domainAdmin><domainPassword>a2pmZGt3amVm</domainPassword><fullName></fullName><guiRunOnceCommands></guiRunOnceCommands><hostNameTemplate>host-${GROUP_NAME}-SR367</hostNameTemplate><joinTypeDomain>true</joinTypeDomain><licenseMode>Per-Seat</licenseMode><licenseUsers>5</licenseUsers><linuxDnsDomain></linuxDnsDomain><orgName></orgName><password>cGFzc3dvcmRAMTIz</password><policyDescription></policyDescription><policyId>1</policyId><policyName>Hypervsyspol1</policyName><powerOn>true</powerOn><productId></productId><recycleHostName>true</recycleHostName><recycleVMName>true</recycleVMName><rootPassword></rootPassword><SIDUnique>false</SIDUnique><timezone>4</timezone><username></username><vmImageType>Windows and Linux</vmImageType><vmNameTemplate>vm-${GROUP_NAME}-SR367</vmNameTemplate><workGroupName></workGroupName></hyperVDeploymentPolicy></response></cuicOperationResponse> ]

Mar 08, 2017 18:29:05 UTC [Local Input: TAG = domain]

Mar 08, 2017 18:29:05 UTC [Output: object = TheDomainIAMlookingfor.com]

Mar 08, 2017 18:29:05 UTC Completed workflow item number 3, with status Completed

Mar 08, 2017 18:29:08 UTC Executing workflow item number 4

Mar 08, 2017 18:29:08 UTC Completed workflow item number 4, with status Completed

HTTP PUT example (Create Catalog)

Workflow input:

Screen Shot 2017-03-20 at 8.30.03 AM.png

Workflow run:

Screen Shot 2017-03-20 at 8.32.24 AM.png

Catalog Created:

Screen Shot 2017-03-20 at 8.33.05 AM.png

The workflow:

Screen Shot 2017-03-20 at 8.34.56 AM.png

The task input (notice ${ var } in the post message from global workflow input):

Screen Shot 2017-03-20 at 8.34.31 AM.png

If you encounter this error:

Screen Shot 2017-03-16 at 9.04.30 PM.png

1) I reset my API key for admin

2) Stopped and started the UCSD services (shelladmin)

3) put the new API key into the workflow

Tested in 6.0.1.1 create catalog via internal function call:

The workflow:

Screen Shot 2017-03-20 at 8.47.12 AM.png

The custom task code:

importPackage(com.cloupia.model.cIM);

importPackage(com.cloupia.feature.catalog.api.models);

var catalogName = input.CATALOGNAME;

var apiCatalogItem = new APICatalogItem();

var advancedCatalog = new AdvancedCatalogParameters();

advancedCatalog.setWorkflowName("MyApplication");

apiCatalogItem.setCatalogItemName(catalogName);

apiCatalogItem.setCatalogType("Advanced");

apiCatalogItem.setCatalogItemDescription("This is sdk_advanceCatalog");

apiCatalogItem.setCatalogIcon("IBM");

apiCatalogItem.setAppliedToAllGroups(false);

apiCatalogItem.setGroups("developer");

apiCatalogItem.setPublishToEndUsers(true);

apiCatalogItem.setFolderName("Advanced");

apiCatalogItem.setAdvancedCatalog(advancedCatalog);

var isCatalogCreated = ctxt.getAPI().userAPICreateCatalogItem(apiCatalogItem);

logger.addInfo("Is Catalog Created ? "+isCatalogCreated);

Https custom task (POST):

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);

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