A.1 ブレードサーバの一覧を取得するAPIの使用例

Compute Systems Manager が管理するすべてのブレードサーバの情報を取得し,レスポンスを解析する処理のサンプルコードを示します。ユーザー認証はBasic 認証を使用しています。

処理の概要

  1. HTTP ヘッダーに認証情報や入出力データのエンコード形式などを設定します。
    このサンプルでは次のユーザーでログインします。
    ユーザーID:system
    パスワード:manager
    Basic認証のAuthorizationヘッダーは次のように設定します。

    Authorization: Basic <base64-id-password

    base64-id-password>には,ユーザーIDとパスワードを半角コロン(:)でつないだ文字列をbase64でエンコードした値を設定します。
    上記と異なるユーザーでログインする場合は, Authorizationヘッダーに設定するエンコード済みの文字列を,実際のユーザーIDとパスワードから生成した値に置き換えてください。
  2. localhostの 管理サーバに対して,すべてのブレードサーバの情報を取得するAPI を実行します。
  3. 処理2 で実行した API のレスポンスボディーを解析し,ブレードサーバの属性のinstanceIdserverProductNameslotNumberserverStatusを取得します。
  4. 解析した値を画面に出力します。

サンプルコード

<!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;
   }

   /**
    * Parse blade information (JSON)
    */
   function parseBlades(res) {
       // parse responce
       var jsonObj = JSON.parse(res);
       var servers = jsonObj.Server;

       var data = "";

       for (i = 0; i < servers.length; i++) {
           var serverData = "#"
                   + i
                   + "¥t instanceId="
                   + servers[i].instanceId
                   + ", serverProductName="
                   + servers[i].serverProductName
                   + ", slotNumber="
                   + servers[i].slotNumber
                   + ", serverStatus="
                   + servers[i].serverStatus
                   + "<br>";
           data = data
                   + serverData;
       }

       // display a result
       document.getElementById("after").innerHTML = data;
   }

   /**
    * Parse error respose
    */
   function parseErrorRespose(req) {
       var statusCode = req.status;
       var statusText = req.statusText;
       var errorCode;
       var detailCode;
       var resformat = req.getResponseHeader("Content-Type");
       if (req.responseText != null
               && resformat == "application/json") {
           var jsonObj = JSON.parse(req.responseText);
           errorCode = jsonObj.resultCode;
           detailCode = jsonObj.detailCode;
       }

       document.getElementById("after").innerHTML = "HTTP status : "
               + statusCode
               + " "
               + statusText
               + "¥nerrorCode : "
               + errorCode
               + "¥netailCode : "
               + detailCode;
   }

   /**
    * Obtain information for all blade servers
    */
   function GetBlades() {
       try {
           // execute HCSM REST API
           var uri = "http://localhost:22015/ComputeSystemsManager/v1/objects/Blades";
           var req = sendGetRequest(uri);

           if (req.status == 200) {
               // success
               parseBlades(req.responseText);
           } else if (req.status == 204) {
               // success(no content)
               document.getElementById("after").innerHTML = req.status
                       + " "
                       + req.statusText;
           } else {
               // error
               parseErrorRespose(req);
           }

       } catch (err) {
           alert(err.description);
       }
   }
</script>
</head>
<body onload="GetBlades()">
   Obtain some attributes from the information of all blade servers
   <br>
   <hr>
   <div id="after"></div>
</body>

サンプルコードの実行結果例

#0 instanceId=SGl0YWNoaV8wX0RNWV9CTF9TTl8wMTAxMDEwMV8wMA==, serverProductName=BladeSymphony 520AA1, slotNumber=0, serverStatus=Running
#1 instanceId=SGl0YWNoaV8wX0RNWV9CTF9TTl8wMTAxMDEwMV8wMQ==, serverProductName=BladeSymphony 520AA1, slotNumber=1, serverStatus=Running
#2 instanceId=SGl0YWNoaV8wX0RNWV9CTF9TTl8wMTAxMDEwMV8wMg==, serverProductName=BladeSymphony 520AA1, slotNumber=2,3, serverStatus=Running
#3 instanceId=SGl0YWNoaV8wX0RNWV9CTF9TTl8wMTAxMDEwMV8wNA==, serverProductName=BladeSymphony 520HA1, slotNumber=4, serverStatus=Running
#4 instanceId=SGl0YWNoaV8wX0RNWV9CTF9TTl8wMTAxMDEwMV8wNQ==, serverProductName=BladeSymphony 520AA1, slotNumber=5, serverStatus=Running