Compute Systems Manager REST API リファレンスガイド
Compute Systems Manager が管理する特定のブレードサーバの電源をON にするタスクを登録し,タスクの終了を確認する処理のサンプルコードを示します。ユーザー認証はBasic 認証を使用しています。
- HTTP ヘッダーに認証情報や入出力データのエンコード形式などを設定します。
このサンプルでは次のユーザーでログインします。
ユーザーID:system
パスワード:manager
Basic認証のAuthorization
ヘッダーは次のように設定します。Authorization: Basic <base64-id-password><base64-id-password>には,ユーザーIDとパスワードを半角コロン(:)でつないだ文字列をbase64でエンコードした値を設定します。
上記と異なるユーザーでログインする場合は,Authorization
ヘッダーに設定するエンコード済みの文字列を,実際のユーザーIDとパスワードから生成した値に置き換えてください。- localhostの管理サーバに対して,すべてのブレードサーバの情報を取得するAPIを実行します。
- 処理2で実行した API のレスポンスボディーを解析し,ブレードサーバの一覧から最初のブレードサーバの
instanceId
を取得します。- 処理3で取得したブレードサーバの電源をON にするAPI を実行します。
- 処理4 で実行したAPI のレスポンスボディーを解析し
taskID
を取得します。- 処理5で取得した
taskID
のタスクの情報を取得するAPIを,タスクが終了する(タスクの状態がCompleted
,Canceled
,Failed
またはSkipped
になる)まで繰り返し実行します。- 電源をONにするブレードサーバの情報,およびタスクの結果を画面に表示します。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>HCSM REST API Sample</title> <script type="text/javascript" lang="javascript"> function CreateHttpRequest() { try { return new XMLHttpRequest(); } catch (e) { } try { return new ActiveXObject('MSXML2.XMLHTTP.6.0'); } catch (e) { } try { return new ActiveXObject('MSXML2.XMLHTTP.3.0'); } catch (e) { } try { return new ActiveXObject('MSXML2.XMLHTTP'); } catch (e) { } return null; } /** * Set the request header to call HCSM API */ function setHeader(req) { // In the Authorization header of the request, // specify the word Basic, followed by a base64-encoded string // that encodes the user name and password separated by a colon. req.setRequestHeader("Authorization", "Basic c3lzdGVtOm1hbmFnZXI="); req.setRequestHeader('Accept', 'application/json'); req.setRequestHeader('Content-Type', 'application/json; charset=UTF-8'); return req; } /** * Send request (HTTP GET) */ function sendGetRequest(url) { var req = new CreateHttpRequest(); req.open("GET", url, false); setHeader(req); req.send(null); return req; } /** * Send request (HTTP PUT) */ function sendPutRequest(url, body) { var req = new CreateHttpRequest(); req.open("PUT", url, false); setHeader(req); req.send(body); return req; } /** * Obtain instance ID of the first blade from the list of blades */ function getFirstBlade() { // Obtain information for all blade servers var uri = "http://localhost:22015/ComputeSystemsManager/v1/objects/Blades"; var req = sendGetRequest(uri); var instanceId = null; if (req.status == 200) { // success var jsonObj = JSON.parse(req.responseText); var servers = jsonObj.Server; // Obtain instance ID of the first blade from the list of blades instanceId = servers[0].instanceId; document.getElementById("targetblade").innerHTML = "instanceId=" + instanceId + "<br>serverProductName=" + servers[0].serverProductName + "<br>slotNumber=" + servers[0].slotNumber + "<br>serverStatus=" + servers[0].serverStatus; } else if (req.status == 204) { // no content document.getElementById("targetblade").innerHTML = req.status + " " + req.statusText; } else { // failed document.getElementById("targetblade").innerHTML = req.status + " " + req.statusText + "<br>" + req.responseText; } return instanceId; } /** * Wait for task completed */ function waitForTaskCompleted(taskid) { var status = "error" // Obtains information for the task with the specified taskID until a task is completed. var hoge = setInterval(function() { try { // Obtains information for the task with the specified taskID var uri = "http://localhost:22015/ComputeSystemsManager/v1/objects/Tasks/" + taskid; var req = sendGetRequest(uri); if (req.status == 200) { // success var jsonObj = JSON.parse(req.responseText); var taskExecutionInfoList = jsonObj.TaskExecutionInfo; var taskExecutionInfo = taskExecutionInfoList[0]; var taskName = taskExecutionInfo.taskName; status = taskExecutionInfo.status; if (taskExecutionInfo.status == "Canceled" || taskExecutionInfo.status == "Completed" || taskExecutionInfo.status == "Failed" || taskExecutionInfo.status == "Skipped") { clearInterval(hoge); } document.getElementById("taskRes").innerHTML = "taskID=" + taskid + ", taskName=" + taskName + ", status=" + status; } else if (req.status == 204) { // no content document.getElementById("taskRes").innerHTML = req.status + " " + req.statusText; clearInterval(hoge); } else { // fail document.getElementById("taskRes").innerHTML = req.status + " " + req.statusText + "<br>" + req.responseText; clearInterval(hoge); } } catch (err) { clearInterval(hoge); alert(err.description); } }, 1000); return status; } /** * Set parameter for power on blade */ function PowerOnParameter(schedule, time, elapseTime, verifyLpm, lpmElapseTime, emailNotificationType) { this.schedule = schedule; this.time = time; this.elapseTime = elapseTime; this.verifyLpm = verifyLpm; this.lpmElapseTime = lpmElapseTime; this.emailNotificationType = emailNotificationType; } /** * Obtains time one minute after the current time */ function getTaskStartTime() { var current = new Date(); formatedData = 'YYYY/MM/DD hh:mm:ss'; formatedData = formatedData.replace(/YYYY/g, current.getFullYear()); formatedData = formatedData.replace(/MM/g, ('0' + (current.getMonth() + 1)).slice(-2)); formatedData = formatedData.replace(/DD/g, ('0' + current.getDate()).slice(-2)); formatedData = formatedData.replace(/hh/g, ('0' + current.getHours()).slice(-2)); formatedData = formatedData.replace(/mm/g, ('0' + (current.getMinutes() + 1)).slice(-2)); formatedData = formatedData.replace(/ss/g, ('0' + current.getSeconds()).slice(-2)); return formatedData; } /** * Create Http Body */ function createBody() { // api parameter var schedule = "LATER"; // NOW or LATER var time = getTaskStartTime(); var elapseTime = 0; var verifyLpm = "YES"; // YES or NO var lpmElapseTime = 0; var emailNotificationType = "NOT_SEND"; // NOT_SEND or SEND_ONLY_TASK_FAILED or SEND // object -> json var param = new PowerOnParameter(schedule, time, elapseTime, verifyLpm, lpmElapseTime, emailNotificationType); var body = JSON.stringify(param); document.getElementById("taskparam").innerHTML = body; return body; } /** * Power on blade */ function powerOnBlade() { try { // Obtain instance ID of the first blade from the list of blades var instanceId = getFirstBlade(); if (instanceId == null) { return; } // create HTTP Body parameter var body = createBody(); // call HCSM REST API(blade power on) var uri = "http://localhost:22015/ComputeSystemsManager/v1/objects/Blades/" + instanceId + "/actions/Poweron/invoke"; var req = sendPutRequest(uri, body); if (req.status == 200) { // success var jsonObj = JSON.parse(req.responseText); var taskid = jsonObj.id; document.getElementById("taskreg").innerHTML = taskid; var status = waitForTaskCompleted(taskid); } else { // fail document.getElementById("taskreg").innerHTML = req.status + " " + req.statusText + "<br>" + req.responseText; } } catch (err) { alert(err.description); } } </script> </head> <body> Obtain information for all blade servers and then power on the first blade of the list <br> <input type="button" value="Power On" onclick="powerOnBlade()"> <hr> Target blade : <div id="targetblade"></div> <hr> Task parameter : <div id="taskparam"></div> <hr> Task registration : <div id="taskreg"></div> <hr> Task result : <div id="taskRes"></div> </body> </html>Target blade : instanceId=SGl0YWNoaV8wX0RNWV9CTF9TTl8wMTAxMDEwMV8wMA== serverProductName=BladeSymphony 520AA1 slotNumber=0 serverStatus=Running ------------------------------------------------------------------------- Task parameter : {"schedule":"LATER","time":"2016/03/01 16:49:17","elapseTime":0,"verifyLpm":"YES","lpmElapseTime":0,"emailNotificationType":"NOT_SEND"} ------------------------------------------------------------------------- Task registration : 400000000015882 ------------------------------------------------------------------------- Task result : taskID=400000000015882, taskName=Power On-22, status=Completed
All Rights Reserved. Copyright© 2016, Hitachi, Ltd.