03-08-2017 10:41 AM - edited 03-01-2019 06:46 AM
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) |
Category | Workflow |
Components | vSphere 5.x |
User Inputs |
Instructions for Regular Workflow Use:
The workflow:
Input output values:
The https task input:
The XML Parser task variable mapping and input:
Workflow run:
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:
Workflow run:
Catalog Created:
The workflow:
The task input (notice ${ var } in the post message from global workflow input):
If you encounter this error:
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:
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);
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: