REST API による Commvault へのログインおよび操作


# はじめに

Commvault では REST API による操作が可能です。
REST API のエンドポイントは CommServe ではなく Web Server になるので、REST API を使用するには Web Server のインストールが必要です。

Commvault の REST API 各コマンドの詳細は https://api.commvault.com/ を参照してください。

## ログインおよびトークンの取得

### 手順 1) パスワードの Base64 エンコード文字列の取得 

REST API でログインするときには、パスワードは Base64 エンコードされた文字列で渡す必要があります。
Linux であれば base64 コマンド等で生成することができます。

コマンド

```
echo -n password | base64
```

実行結果

```
# echo -n Password#123! | base64
UGFzc3dvcmQjMTIzIQ==
```

### 手順 2) ログイン

手順 1) で取得した Base64 エンコード文字列を使用して、ログインします。

コマンド

```
curl --location --request POST 'http://webserver/webconsole/api/Login' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  -d '{"username":"cvuser01", "password":"UGFzc3dvcmQjMTIzIQ=="}' \
```

実行結果 (json.tool を使用して整形しています)

```
# curl --location --request POST 'http://webserver/webconsole/api/Login' \
>  --header 'Accept: application/json' \
>  --header 'Content-Type: application/json' \
>  -d '{"username":"cvuser01", "password":"UGFzc3dvcmQjMTIzIQ=="}' \
> | python -m json.tool
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1197  100  1139  100    58   7084    360 --:--:-- --:--:-- --:--:--  7118
{
    "additionalResp": {
        "nameValues": [
            {
                "name": "USERNAME",
                "value": "cvuser01"
            }
        ]
    },
    "aliasName": "4",
    "capability": 4328650366975,
    "ccn": 0,
    "errList": [],
    "forcePasswordChange": false,
    "isAccountLocked": false,
    "loginAttempts": 0,
    "ownerOrganization": {
        "GUID": "95189d4e-4a7f-4cb3-969f-80d5871ac13f",
        "providerDomainName": "Commcell",
        "providerId": 0
    },
    "providerOrganization": {
        "GUID": "95189d4e-4a7f-4cb3-969f-80d5871ac13f",
        "providerDomainName": "Commcell",
        "providerId": 0
    },
    "providerType": 1,
    "remainingLockTime": 0,
    "smtpAddress": "foo@bar.com",
    "token": "QSDK 314187d6720cd125e92872bb9a34eb8ebb7b599c27157194f2d3cc6fec36fd313ff029d7b9865bbc83989a8ec7340653f0f10f8f3714e1ae6d4e260ba921913d1285979cb026b788789bd071b4a21091888c6b055272bd485225c5baacf97ea48739c594b2ebd8badeae8a5373be023f36a89f3a1cd25b63d0410a3a2cccffad1d4f9e82a11911b6dcf152071082671d98020a11cec41adc4bde60d207fd22dddaf1eb793f93589e7ce509933023999cf51a91010d2cb0665508287fc9c62b0939f821bc90b683baa4d41fc3d1a2fe1ac6abd802fb54e2449dc29d82fac6c89973dd973c406176bd264d82a50b70fc4aae56bca5a1edc0f0a10f7fceff8ef4e5d19b459d7f87d8873",
    "userGUID": "FF0AF463-2E34-45A1-8982-B18B93ECA6A1",
    "userName": "cvuser01"
}
#
```

ログインに成功すれば、トークン (QSDK ...) が表示されるで、以降の操作はこのトークンを使用します。

## ログイン後の操作

ヘッダー部に Authtoken を指定して各コマンドを実行します。

例として GetId コマンドを実行します。GetId コマンドはクライアント名からそのクライアントの内部 ID を取得するためのコマンドです。

コマンド

```
curl --location --request GET 'http://10.1.0.32/webconsole/api/GetId?clientname=commserve' \
 --header 'Accept: application/json' \
 --header 'Authtoken: QSDK token'
```

実行例 (json.tool を使用して整形しています)

```
# curl --location --request GET 'http://10.1.0.32/webconsole/api/GetId?clientname=commserve' \
>  --header 'Accept: application/json' \
>  --header 'Authtoken: QSDK 314187d6720cd125e92872bb9a34eb8ebb7b599c27157194f2d3cc6fec36fd313ff029d7b9865bbc83989a8ec7340653f0f10f8f3714e1ae6d4e260ba921913d1285979cb026b788789bd071b4a21091888c6b055272bd485225c5baacf97ea48739c594b2ebd8badeae8a5373be023f36a89f3a1cd25b63d0410a3a2cccffad1d4f9e82a11911b6dcf152071082671d98020a11cec41adc4bde60d207fd22dddaf1eb793f93589e7ce509933023999cf51a91010d2cb0665508287fc9c62b0939f821bc90b683baa4d41fc3d1a2fe1ac6abd802fb54e2449dc29d82fac6c89973dd973c406176bd264d82a50b70fc4aae56bca5a1edc0f0a10f7fceff8ef4e5d19b459d7f87d8873' \
> | python -m json.tool
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    49  100    49    0     0    178      0 --:--:-- --:--:-- --:--:--   178
{
    "_type_": 3,
    "clientId": 2,
    "clientName": "commserve"
}
#
```

## ログアウト

Logout コマンドでログアウトします。

コマンド 

```
curl --location --request POST 'http://10.1.0.32/webconsole/api/Logout' \
 --header 'Accept: application/json' \
 --header 'Authtoken: QSDK 314187d6720cd125e92872bb9a34eb8ebb7b599c27157194f2d3cc6fec36fd313ff029d7b9865bbc83989a8ec7340653f0f10f8f3714e1ae6d4e260ba921913d1285979cb026b788789bd071b4a21091888c6b055272bd485225c5baacf97ea48739c594b2ebd8badeae8a5373be023f36a89f3a1cd25b63d0410a3a2cccffad1d4f9e82a11911b6dcf152071082671d98020a11cec41adc4bde60d207fd22dddaf1eb793f93589e7ce509933023999cf51a91010d2cb0665508287fc9c62b0939f821bc90b683baa4d41fc3d1a2fe1ac6abd802fb54e2449dc29d82fac6c89973dd973c406176bd264d82a50b70fc4aae56bca5a1edc0f0a10f7fceff8ef4e5d19b459d7f87d8873' \
 --header 'Content-Length: 0'
```

実行例

```
# curl --location --request POST 'http://10.1.0.32/webconsole/api/Logout' \
>  --header 'Accept: application/json' \
>  --header 'Authtoken: QSDK 314187d6720cd125e92872bb9a34eb8ebb7b599c27157194f2d3cc6fec36fd313ff029d7b9865bbc83989a8ec7340653f0f10f8f3714e1ae6d4e260ba921913d1285979cb026b788789bd071b4a21091888c6b055272bd485225c5baacf97ea48739c594b2ebd8badeae8a5373be023f36a89f3a1cd25b63d0410a3a2cccffad1d4f9e82a11911b6dcf152071082671d98020a11cec41adc4bde60d207fd22dddaf1eb793f93589e7ce509933023999cf51a91010d2cb0665508287fc9c62b0939f821bc90b683baa4d41fc3d1a2fe1ac6abd802fb54e2449dc29d82fac6c89973dd973c406176bd264d82a50b70fc4aae56bca5a1edc0f0a10f7fceff8ef4e5d19b459d7f87d8873' \
>  --header 'Content-Length: 0'
#
```