VMware vCenter REST APIのまとめメモ

VMware vCenter 6.5からREST APIの操作が可能になったため少し触った部分をメモしておきます。

# 1. vCenter REST API

## 1-1. API Explorer

vCenter 6.5以上であれば `apiexplorer` へアクセスしてAPIの仕様を確認することが可能です。
URLは以下の通りです。

|                    URL                    |
| ----------------------------------------- |
| `https://vCenter IP or FQDN/apiexplorer/` |

アクセスすると以下のような画面が表示されます。

![スクリーンショット 2018-05-20 15.17.27.png](https://qiita-image-store.s3.amazonaws.com/0/180118/eee66773-e2a7-7a5d-3d23-512778b902a8.png)


## 1-2. API仕様の確認

確認したい項目をクリックします。
例えば `VM` をクリックしてみます。

![スクリーンショット 2018-05-20 15.20.38.png](https://qiita-image-store.s3.amazonaws.com/0/180118/e01b11fc-2c60-052a-e2d9-4e3ec32b80d0.png)

すると、APIの仕様が確認できます。

![スクリーンショット 2018-05-20 15.22.17.png](https://qiita-image-store.s3.amazonaws.com/0/180118/d2f87330-32a0-1481-1c6e-138a3a0d5e58.png)

リクエストの方法は `TRY IT OUT` をクリックすると確認できます。

![スクリーンショット 2018-05-20 15.24.00.png](https://qiita-image-store.s3.amazonaws.com/0/180118/d55a45c9-6be1-8a73-c3c0-5b31ed975661.png)

API Explorerでは `curlでの例` や `リクエスト先URL` `レスポンス` などが確認できます。

![スクリーンショット 2018-05-20 15.24.07.png](https://qiita-image-store.s3.amazonaws.com/0/180118/089970cd-d7f5-1496-e6bf-725f27951849.png)

# 2. REST APIの利用

## 2-1. シーケンス

REST APIの利用流れは以下のようなイメージになっています。

![スクリーンショット 2018-05-20 16.07.39.png](https://qiita-image-store.s3.amazonaws.com/0/180118/ef624e5e-7790-14e5-f77f-6a5aaf17694d.png)

## 2-2. APIのベースURL

APIのベースURLは以下の通りです。

|              API URL              |
| --------------------------------- |
| `https://vCenter IP or FQDN/rest` |

## 2-3. サンプルソース

`vcenter` と `password` は環境に合わせてください。

```python
#!/usr/bin/env python3
import json
import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

vcenter = "vCenter IP or FQDN"
username = "administrator@vsphere.local"
password = "secret"

if __name__ == "__main__":
    # セッション作成リクエスト
    url = "https://" + vcenter + "/rest/com/vmware/cis/session"
    headers = {"Accept":"application/json"}
    r = requests.post(url,
                      headers=headers,
                      auth=(username, password),
                      verify=False)

    # 取得した資格情報をヘッダに反映
    token = json.loads(r.text)["value"]
    headers.update({"vmware-api-session-id":token})

    # VM情報を取得するリクエスト
    url = "https://" + vcenter + "/rest/vcenter/vm/"
    r = requests.get(url,
                     headers=headers,
                     verify=False)

    # 結果を表示
    print("VM情報")
    print(json.dumps(json.loads(r.text), indent=2))
    print()

    # 資格削除リクエスト
    url = "https://" + vcenter + "/rest/com/vmware/cis/session"
    r = requests.delete(url,
                        headers=headers,
                        verify=False)

    print("資格削除結果")
    print(r.status_code)
```

## 2-4. サンプルソース実行

実行するとVM情報や資格情報削除結果が出力されます。

```bash
$ ./example.py
VM情報
{
  "value": [
    {
      "power_state": "POWERED_ON",
      "cpu_count": 1,
      "memory_size_MiB": 2048,
      "name": "devel",
      "vm": "vm-101"
    },
(snip)

資格削除結果
200
```

# 3. 最後に

vSphere APIは基本SOAPで操作する方式でしたが、6.5からREST APIが提供され始めました。
ただし、提供された始めたばかりのためできる事はSOAPよりも少ないです。
ただ、複雑なSOAPよりRESTで操作できた方が簡単だと思うので今後の展開に期待です :-)

# 4. 参考

* http://creativeview.co.uk/VMware-vCenter-REST-API-Part-1/#.WwEg0VPRDUI
* http://wahlnetwork.com/2017/02/24/vsphere-6-5-restful-api/