Compute Systems Manager REST API リファレンスガイド

[目次][前へ][次へ]


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

[目次] [前へ] [次へ]


All Rights Reserved. Copyright© 2016, Hitachi, Ltd.