Cisco UCS Director Cloupia スクリプト設定ガイド、リリース 5.0
Cloupia スクリプトのサンプル
Cloupia スクリプトのサンプル

Cloupia スクリプトのサンプル

この付録の内容は、次のとおりです。

その他のワークフローの呼び出し

Cloupia スクリプトを使用して別の名前付きワークフローを呼び出せます。

例では CreateAssetX という名前のワークフローが呼び出され、次の入力がワークフローに渡されます。

  • Input_A

  • Input_B

  • Input_C

CreateAssetX ワークフローのワークフロー タスクの 1 つである Task_Y によって、出力 D が生成されます。

// Create name value pairs for the input of the workflow
var params = util.createNameValueList();
params.addNameValue(util.createNameValue(“Input_A”, “a”));
params.addNameValue(util.createNameValue(“Input_B”, 1000));
params.addNameValue(util.createNameValue(“Input_C”, “something”)); 

 
// Pass three arguments into the following API
//    - Name of the workflow
//    - Parameter List object
//    - Current SR ID so that child can be automatically linked to this one
var childSrId= ctxt.getAPI().userAPISubmitWorkflowServiceRequest(“Create Asset X”, params, ctxt.getSrId());

// wait for completion of the workflow. Or a maximum of 60 seconds        
var status = ctxt.waitForCompletion(vfsrId, 60000);

// status code can be one 0 (Success), 1 (failed), -1 (Invalid SR ID)
// Now that workflow is complete, we can access the output variables of the workflow
var output_y = ctxt.getOutput(”Task_Y.D”", childSrId);

ServiceNow チケット生成との統合

ServiceNow には、テストに使用できるいくつかのデモ インスタンスが用意されています。 デモのログイン名およびパスワードは admin/admin です。

(注)  


デモのログイン名およびパスワードは変更されることがあるため、ServiceNow で確認してください。

ServiceNow はそれぞれのデモ インスタンスのデータを毎日リセットします。 この API を動作させるには JSON プラグインを ServiceNow で有効にする必要があります。 JSON プラグインを有効にする手順については http:/​/​wiki.servicenow.com/​index.php?title=JSON_​Web_​Service#Activating_​the_​Plugin の「Activating the Plugin」の項を参照してください。

このスクリプトの例は ServiceNow でチケットを開く際に参考にできます。

importPackage(java.util);
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);
 
 
//var login= ctxt.getInput("LOGIN")
//var password = ctxt.getInput("PASSWORD");
 
 
var login = "admin";
var password = "admin";
var instance = "demo011.service-now.com";
var url      = "/incident.do?JSON&sysparm_action=insert";
 
   
// Link to Service-now documentation
//http://wiki.servicenow.com/index.php?title=JSON_Web_Service#insert
 
var map = new HashMap();
 
 map.put("sysparm_action", "insert");
 map.put("short_description", "Sample incident #5");
 map.put("impact", "2");
 map.put("urgency", "2");
 map.put("caller_id", "Joe Z");
 map.put("category", "software");
 var data = JSON.javaToJsonString(map, map.getClass());
 
 logger.addInfo("JSON Data = "+data);
 
 
var httpClient = new HttpClient();
httpClient.getHostConfiguration().setHost(instance, 443, "https");
httpClient.getParams().setAuthenticationPreemptive(true);
 
httpClient.getParams().setCookiePolicy("default");
var defaultcreds = new UsernamePasswordCredentials(login, password);
httpClient.getState().setCredentials(new AuthScope(instance, -1, null), defaultcreds);
 
 var httpMethod = new PostMethod(url);
 httpMethod.setRequestEntity(new StringRequestEntity(data));
 httpMethod.addRequestHeader("Content-Type", "application/json");
 
 httpClient.executeMethod(httpMethod);
 
 var statuscode = httpMethod.getStatusCode();
 
 
logger.addInfo("STATUSCODE = "+statuscode);
 
if (statuscode != 200)
{
   
     logger.addError("Ticket opening failed with code "+statuscode);
    if (statuscode == 302)
    {
 
         logger.addWarning("Likely cause of the failure is JSON plugin is not activated on the Service Now instance. ");
       logger.addWarning("Check documentation on how to enable the plugin: "+
"http://wiki.servicenow.com/index.php?title=JSON_Web_Service#insert  "+
" (see section 2)");
 
     }
 
      httpMethod.releaseConnection();
 
     // Set this task as failed.
     ctxt.setFailed("Unable to open ticket");
} else
{
    var reader = new InputStreamReader(httpMethod.getResponseBodyAsStream());
 
    var resp = JSON.getJsonElement(reader, null);
    logger.addInfo("Response = "+resp);
 
    var entry = resp.get("records").get(0);
 
    logger.addInfo("Ticket Number "+entry.get("number"));
    logger.addInfo("Ticket Sys_id "+entry.get("sys_id"));
 
    httpMethod.releaseConnection();
}

Cloupia スクリプトからメールを送信

Cisco UCS Director にはメールを送信する組み込みタスクが用意されています。

この例では、Cloupia スクリプトを使用してカスタム メールを送信する方法を説明します。

importPackage(com.cloupia.model.cEvent.notify);
importPackage(com.cloupia.model.cIM);
importPackage(com.cloupia.lib.util.mail);
importPackage(com.cloupia.fw.objstore);
 
function getMailSettings()
{
      return ObjStoreHelper.getStore((new MailSettings()).getClass()).getSingleton();
}
 
// Assume the To Email Addres is in the input variable 'Email Address'
var toEmail = [ ctxt.getInput("Email Address") ];
 
var message = new EmailMessageRequest();
message.setToAddrs(toEmail);

// other methods in the message object are
//       setToAddr(emailAddress)     -- to set a single email address in To list
//       setCcAddr(emailAddress)     -- to set a single email address in Cc list
//       setBccAddr(emailAddress)     -- to set a single email address in Bcc list
//       setCcAddrs(emailAddressArray)     -- to set a an array of  email addresses in Cc list
//       setBccAddrs(emailAddressArray)     -- to set a an array of  email addresses in Bcc list

 
message.setSubject("Test Email");
message.setFromAddress("no-reply@cisco.com");
 
var body = "<h1>This is a sample Email </h1><br><b>Sample content</b>";
message.setMessageBody(body);

// By default, content type if text/html. Following method can be used to modify content type
//    message.setContentType("text/plain");
 
logger.addInfo("Sending email");
MailManager.sendEmail("Sample Email", getMailSettings(), message);

古いサービス リクエストのアーカイブの自動化

Cloupia スクリプトを使用してサービス リクエストをアーカイブできます。

次のスクリプトは、経過日数が 30 日を超える古いサービス リクエスト(SR)をすべてアーカイブするスクリプトの設定方法の例です。 このワークフロー設定を 1 日に 1 回実行すると、最新 30 日の SR のみをメイン レポートに表示できます。

importPackage(com.cloupia.model.cIM);
importPackage(com.cloupia.fw.objstore);
importPackage(com.cloupia.service.cIM.inframgr.workflowmgr);
importPackage(com.cloupia.service.cIM.inframgr.cmdb);
importPackage(java.lang);
 
function getOlderSRs(ageInDays)
{
     var timeStamp = System.currentTimeMillis() - (ageInDays*(24*60*60*1000));
     
     var store = ObjStoreHelper.getStore((new ServiceRequest()).getClass());
    
     return store.query("isArchived == false && requestTime < "+timeStamp);
}
 
var srList = getOlderSRs(30);
logger.addInfo("There are "+srList.size()+" SRs to be archived");
 
for (var i=0; i<srList.size(); i++)
{ 
     var sr = srList.get(i);
     
     logger.addDebug("["+i+"] Archiving SR "+sr.getRequestId());
    
     // Archive the SR
     WorkFlowManager.getInstance().archive(sr.getRequestId());
 
    // Add an entry into the Change Log
    CMDB.getInstance().change(ctxt.getUserId(), 0, "Request archived by Workflow", sr);
}