🐁

vSphere API を基本認証で使ってみた。[Postman]

2023/01/30に公開

やりたいこと

ESXi上の仮想マシンの電源ON, OFFや、仮想マシン作成など、手動操作めんどくさいしオペミス怖い・・・・。って時に、vSphere APIでシステム連携したいなあってことあると思います。
(PowerCLIをがりがり書けばできないことないですが、難しいですし。。)
というわけで、vSphere APIを使用する際の基本をやってみます。

使用した環境イメージ

私は、Nestedで無理やりやっていますので、あんまり環境イメージは参考にならないかもしれません。ただ、個人的にやってみたい方の参考にはなるかもしれませんので、記載しています。
単に、Postmanが使えるクライアント環境と、vSphere Clientに接続できるvCenter Server環境があればOKです。

<使用したvSphere環境>
vCenter Server Appliance 8.0.0 Build 20920323
ESXi 8.0.0 Build 20842819

環境をPC内に作りたい場合は、下記にて記事にしています。

Postmanにてコレクション作成

せっかくなので、コレクションを作成しておきます。
Postmanを開き、[New]をクリックします。

[Collection]をクリックします。

コレクションの名前(任意)を入力します。

これでコレクションが作成されたので、このコレクションの中に作っていきます。

資格情報の取得

vCenter REST APIでは、vCenterユーザの認証情報を元に資格情報を作成し、作成した資格情報を元に、各種リクエストを行います。
以下のイメージです。

  1. vCenterユーザの認証情報を使用して、セッション作成リクエスト
  2. vCenterがセッションの資格情報を返却
  3. 返却された資格情報を使用して各種APIリクエスト(仮想マシン情報取得など)

それでは、資格情報取得のリクエストを送ってみます。
新規にリクエストを作成します。

リクエストに任意で名前を付けます。

[POST]メソッドを選択し、リクエストURLに下記を指定します。
その後、認証の設定へ移るので、[Authorization]タブをクリックします。

https://{vCenter ServerのFQDN}/rest/com/vmware/cis/session
※この記事で使用している環境では、[vcsa80.yud-dev.test]となります。

[Type]欄にて、[Basic Auth]を指定します。

vCenterの認証に使用するユーザ名とパスワードを指定し、[Header]タブをクリックします。
※今回は、管理者ユーザを指定しています。

[Header]にて、下記のパラメータを指定し、[Send]をクリックしリクエストを送信します。

SSL Errorと表示されて、リクエストが送信できない場合

vCenter Server のSSL証明書対応をしていない際は、Postmanでの検証に失敗し、リクエストが送信できません。
[Disable SSL Verification]をクリックすることで、検証を無効化できます。

一時的な変更に留め、設定をもとに戻したい場合は、[SETTINGS]の以下のパラメータを変更することでもとに戻すことが可能です。

返却されるResponseを確認します。
成功すれば、Responseは以下の形式になります。

{
    "value": "{資格情報}"
}

資格情報の取得ができました。

今後は、この取得した資格情報をリクエストのヘッダーに加えていく形になります。
今回のセッション情報を使用して、リクエストに加える際は、以下のキーでヘッダーに指定します。

"vmware-api-session-id": "f895dcbd3aa5bd7b13b558d212ded3b8"

仮想マシンの情報を取得してみる

セッションを作成し、資格情報を取得できたので、資格情報を使用して、仮想マシンの情報を取得してみたいと思います。

新規にリクエストを作成し、任意の名前を付けます。

[GET]メソッドが選択されていることを確認し、リクエストURLに下記を指定します。

https://{vCenter ServerのFQDN}/rest/vcenter/vm/
※この記事で使用している環境では、[vcsa80.yud-dev.test]となります。

[Header]タブを指定していきます。

成功すると、以下のようなResponseが返却されます。

{
    "value": [
        {
            "memory_size_MiB": 2048,
            "vm": "vm-13",
            "name": "win2k22-ad",
            "power_state": "POWERED_ON",
            "cpu_count": 2
        },
        {
            "memory_size_MiB": 14336,
            "vm": "vm-14",
            "name": "vcsa80",
            "power_state": "POWERED_ON",
            "cpu_count": 2
        }
    ]
}

vSphere Clientではこんな感じで見えてますので、ちゃんと取得できていそうです。
※実際は、インベントリ表示されていないものもAPIだと拾ってくる気がしています。

資格情報の削除

作成したセッションを他者に使用されても嫌なので、最後に使用したセッションの資格情報を削除しておきます。
[DELETE]メソッドを指定して、セッション作成時と同様のリクエスト先へリクエストを送信します。
[Headers]タブにて、セッションID(資格情報)を指定しておきます。

まとめ

以上で、vSphere APIを使うための準備ができました。
Postmanで確認を進められることで、ぐっとAPIを試すハードルが下がると思います。
この記事では、個人的に馴染みのあった/restを今回使用していますが、vSphere7 U2から/apiが提供開始されており、そちらに切り替えていくようですので、そちらもいずれ試していきたいと思います。
検証を検討されている方は、参考にしてみてください!

Discussion