NTNX>日記

個人的な趣味による Nutanix Community Edition 日記。Japanese のみですみません。

Nutanix REST API v3 で VM の UUID を特定してみる。(jq)

Nutanix CE で REST API v3 の GET メソッドなどでは、UUID の指定が必要になります。そこで、VM の一覧を取得から UUID を特定してみます。今回は curl と jq を利用してみます。

VM 一覧は、API Explorer では下記の投稿のように取得できます。

一方、curl コマンドでは下記のように実行すると同様の VM 一覧が取得できます。
(ntnx-n01.go-lab.jp は うちの Nutanix CE のアドレスです)

[gowatana@client01 ~]$ curl -ks -X POST -H "Content-Type: application/json" -u "admin:$PASS" -d '{}' https://ntnx-n01.go-lab.jp:9440/api/nutanix/v3/vms/list

admin ユーザで認証する必要があるようです。パスワード文字列は下記のように PASS という変数に格納しています。

[gowatana@client01 ~]$ PASS='パスワード'

今回は、JSON 形式のデータの整形・抽出に jq コマンドを利用します。

[gowatana@client01 ~]$ jq -V
jq-1.5

たとえば、下記のように JSON から特定の情報だけ抽出したりします。

[gowatana@client01 ~]$ curl -ks -X POST -H "Content-Type: application/json" -u "admin:$PASS" -d '{}' https://ntnx-n01.go-lab.jp:9440/api/nutanix/v3/vms/list | jq -C '.entities[] | {vm_name: .spec.name, vm_uuid: .metadata.uuid}'
{
  "vm_name": "k8s-setup-01",
  "vm_uuid": "00bb0224-fd44-4df3-a6f9-a47a994e8c85"
}
{
  "vm_name": "master-0-k8s-cluster-01",
  "vm_uuid": "12d7ef75-5a2a-4123-a75b-c5a3c5699d88"
}
{
  "vm_name": "ol74-cloud-init",
  "vm_uuid": "82f147cc-1bfe-4292-bc5c-ef66e9bdbd56"
}
{
  "vm_name": "worker-0-k8s-cluster-01",
  "vm_uuid": "0583edfa-1178-4d46-9420-83b91b73989b"
}
{
  "vm_name": "api-test-vm01",
  "vm_uuid": "dfd420e4-2948-4f32-99f1-89fe2e7098e6"
}
{
  "vm_name": "worker-1-k8s-cluster-01",
  "vm_uuid": "0e780425-ed5f-46af-b924-5ba5d2b9b700"
}
{
  "vm_name": "centos7-cloud-init",
  "vm_uuid": "77202ecb-7494-4e9d-a8de-25167dcc00ab"
}
{
  "vm_name": "ol74-k8s-base",
  "vm_uuid": "9d667466-17e4-4199-a9e2-66b85702a91b"
}
[gowatana@client01 ~]$

ためしに、上記の実行結果から、VM「api-test-vm01」だけ抽出しています。

[gowatana@client01 ~]$ curl -ks -X POST -H "Content-Type: application/json" -u "admin:$PASS" -d '{}' https://ntnx-n01.go-lab.jp:9440/api/nutanix/v3/vms/list | jq -C '.entities[] | {vm_name: .spec.name, vm_uuid: .metadata.uuid} | select(.vm_name == "api-test-vm01")'
{
  "vm_name": "api-test-vm01",
  "vm_uuid": "dfd420e4-2948-4f32-99f1-89fe2e7098e6"
}

UUID だけに絞ることもできます。

[gowatana@client01 ~]$ curl -ks -X POST -H "Content-Type: application/json" -u "admin:$PASS" -d '{}' https://ntnx-n01.go-lab.jp:9440/api/nutanix/v3/vms/list | jq -C '.entities[] | select(.spec.name == "api-test-vm01") | .metadata.uuid'
"dfd420e4-2948-4f32-99f1-89fe2e7098e6"

ただし、同名の VM が複数あると、UUID が一意にならないので工夫が必要です。

以上。