Nutanix の Acropolis IP address management(IPAM)で管理されている IP アドレスを、 Python + API v2 で取得してみます。
スクリプトの内容
- Python 2.7 を使用。
- VM 名を指定して実行すると、vNIC ごとに UUID、MAC アドレス、IP アドレス、VM 名を表示。
- Nutanix REST API は v2。
- /vms/{vm_uuid}/nics/{nic_id} の requested_ip_address では IP が取れない vNIC があるので、その場合は /networks/{uuid}/addresses の ip_address から IP を取得する。→これは IPAM を使用していないネットワーク接続の vNIC みたいなので、割り切って取得しないようにしました。(以前のはこれ ntnx-vm-ip.py · GitHub)
スクリプトはこんな感にしてみました。
vNIC が2つある VM を指定して実行するとこんな感じです。ちなみに IPAM を使用していない vNIC は、IP アドレスが空欄になるようにしています。
[root@jbox01 ~]# python ntnx-vm-ip.py vm03 d38785cd-45ec-48b9-b26f-5f26c7f011bf,50:6b:8d:f8:78:1a,192.168.1.223,vm03 d38785cd-45ec-48b9-b26f-5f26c7f011bf,50:6b:8d:06:81:6a,192.168.12.179,vm03
IP アドレスが分かれば、何かしらの自動化などで利用できそうだと思います。
[root@jbox01 ~]# python ntnx-vm-ip.py db02 | awk -F, '{print $3}' 192.168.12.146 [root@jbox01 ~]# python ntnx-vm-ip.py db02 | awk -F, '{print $3}' >> hosts [root@jbox01 ~]# ansible -i ./hosts -m ping 192.168.12.146 192.168.12.146 | SUCCESS => { "changed": false, "ping": "pong" }
感想
- 正直、CVM で直接 acli コマンドを実行してしまった方が簡単な気がする。
- ただ API であれば Prism のユーザで処理実行できるので、CVM の OS に直接ログインするよりよいかもしれない。
- Nutanix Acropolis の IPAM を使用できるなら、基本的に全部の vNIC を IPAM 管理にしたほうが美しいかもしれない。API で簡潔に情報取得しやすいので。
以上。