
- Subscribe to RSS Feed
- Mark as New
- Mark as Read
- Bookmark
- Subscribe
- Printer Friendly Page
- Report Inappropriate Content
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:
- Download the attached .ZIP file below to your computer. *Remember the location of the saved file on your computer.
- Unzip the file on your computer. Should end up with a .WFD file.
- Log in to UCS Director as a user that has "system-admin" privileges.
- Navigate to "Policies-->Orchestration" and click on "Import".
- Click "Browse" and navigate to the location on your computer where the .WFD file resides. Choose the .WFD file and click "Open".
- Click "Upload" and then "OK" once the file upload is completed. Then click "Next".
- Click the "Select" button next to "Import Workflows". Click the "Check All" button to check all checkboxes and then the "Select" button.
- Click "Submit".
- 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:
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);