Nutanix AHV のネットワークや仮想スイッチの様子を確認しているときに、特定時点での vNIC の名前を記録しておきたいことがあります。そこで、Nutanix REST API を利用して vNIC の一覧を取得するスクリプトを作成してみました。
今回のスクリプト
下記のような Python スクリプトを用意して、CVM から実行します。
- CVM 以外から実行する場合は、pip で requests をインストールしておく必要があります。
- CVM の情報も取得するため、VM の情報は REST API v1 と v2 を併用しています。
- さりげなく、json / csv / list 形式で出力できたりします。
さらに、Prism Element への接続情報を記載した JSON ファイルを用意しておきます。
prism.json
{ "prism_address": "Prism Element IP or FQDN", "user_name": "admin", "password": "パスワード" }
今回の実行環境
Nutanix CE で、3ノードの AHV クラスタを構成してあります。
nutanix@NTNX-1345a952-A-CVM:192.168.20.31:~/work$ acli host.list Hypervisor IP Hypervisor DNS Name Host UUID Compute Only Schedulable Hypervisor Type Hypervisor Name CVM IP 192.168.20.21 192.168.20.21 66a8d4fe-25e3-4011-b05f-2b8ff8f1f6c1 False True kKvm AHV 192.168.20.31 192.168.20.22 192.168.20.22 53c7c396-b607-4b9b-b51e-c4728e9db2e0 False True kKvm AHV 192.168.20.32 192.168.20.23 192.168.20.23 7ed66091-6b61-4e24-a8a4-9a97f87b0e21 False True kKvm AHV 192.168.20.33
VM(UVM)は 2台起動しています。
nutanix@NTNX-1345a952-A-CVM:192.168.20.31:~/work$ acli vm.list VM name VM UUID vm01 3680c778-ba4c-489d-936a-db775d31976c vm02 fbfe1364-d367-4cbe-b0fd-3cd8afe8ba42
このうち、vm02 は AHV「192.168.20.22」で起動されています。
nutanix@NTNX-1345a952-A-CVM:192.168.20.31:~/work$ acli vm.get vm02 | grep host host_name: "192.168.20.22" host_uuid: "53c7c396-b607-4b9b-b51e-c4728e9db2e0"
スクリプトの実行例
python スクリプトとして、1つめの引数として Prism への接続情報を記載した JSON ファイルを指定して実行します。
- python list_ahv_vm_vnic.py prism.json csv
下記のように情報取得できます。
- 各ホストの CVM の vNIC のうち、Open vSwitch ブリッジに接続されている vnet0 と vnet2 が表示されます。
- UVM (vm01 / vm02)の vNIC は、それぞれ tap0 が表示されています。
nutanix@NTNX-1345a952-A-CVM:192.168.20.31:~/work$ python list_ahv_vm_vnic.py prism.json csv AHV_Host,vNIC_Name,MAC,IPs,IP_1,Network_Name,VLAN_ID,VM_UUID,VM_Name NTNX-1345a952-A,tap0,50:6b:8d:bb:b2:5f,1,192.168.11.171,nw-vlan-11-ipam,11,3680c778-ba4c-489d-936a-db775d31976c,vm01 NTNX-1345a952-A,vnet0,50:6b:8d:43:bd:45,2,192.168.5.254,CVM-Port,0,506d214e-47c4-442c-9836-caf292dbc876,NTNX-1345a952-A-CVM NTNX-1345a952-A,vnet2,50:6b:8d:e0:67:3f,1,192.168.20.31,CVM-Port,0,506d214e-47c4-442c-9836-caf292dbc876,NTNX-1345a952-A-CVM NTNX-0a648466-A,vnet2,50:6b:8d:6f:5b:db,1,192.168.20.32,CVM-Port,0,1f58baa1-0fac-40ef-bdc7-406639296ab3,NTNX-0a648466-A-CVM NTNX-0a648466-A,vnet0,50:6b:8d:84:9e:2f,2,192.168.5.254,CVM-Port,0,1f58baa1-0fac-40ef-bdc7-406639296ab3,NTNX-0a648466-A-CVM NTNX-739ee780-A,vnet2,50:6b:8d:57:cd:8b,1,192.168.20.33,CVM-Port,0,6127df2a-de38-4686-8699-2e4b9ff39180,NTNX-739ee780-A-CVM NTNX-739ee780-A,vnet0,50:6b:8d:ad:29:e2,2,192.168.5.254,CVM-Port,0,6127df2a-de38-4686-8699-2e4b9ff39180,NTNX-739ee780-A-CVM NTNX-0a648466-A,tap0,50:6b:8d:a1:f4:72,1,192.168.11.152,nw-vlan-11-ipam,11,fbfe1364-d367-4cbe-b0fd-3cd8afe8ba42,vm02
ためしに、vm02 を別の AHV ホストにライブ マイグレーションしてみます。
nutanix@NTNX-1345a952-A-CVM:192.168.20.31:~/work$ acli vm.migrate vm02 host=192.168.20.21 vm02: pending vm02: complete
vm02 が別のホスト「192.168.20.21」に移動されました。
nutanix@NTNX-1345a952-A-CVM:192.168.20.31:~/work$ acli vm.get vm02 | grep host host_name: "192.168.20.21" host_uuid: "66a8d4fe-25e3-4011-b05f-2b8ff8f1f6c1"
あらためて情報取得してみると、vm02 の AHV ホストと tap デバイス(ポート)が変更されたことがわかります。例では、最終行の vm02 の情報が変更されています。
nutanix@NTNX-1345a952-A-CVM:192.168.20.31:~/work$ python list_ahv_vm_vnic.py prism.json csv AHV_Host,vNIC_Name,MAC,IPs,IP_1,Network_Name,VLAN_ID,VM_UUID,VM_Name NTNX-1345a952-A,tap0,50:6b:8d:bb:b2:5f,1,192.168.11.171,nw-vlan-11-ipam,11,3680c778-ba4c-489d-936a-db775d31976c,vm01 NTNX-1345a952-A,vnet0,50:6b:8d:43:bd:45,2,192.168.5.254,CVM-Port,0,506d214e-47c4-442c-9836-caf292dbc876,NTNX-1345a952-A-CVM NTNX-1345a952-A,vnet2,50:6b:8d:e0:67:3f,1,192.168.20.31,CVM-Port,0,506d214e-47c4-442c-9836-caf292dbc876,NTNX-1345a952-A-CVM NTNX-0a648466-A,vnet2,50:6b:8d:6f:5b:db,1,192.168.20.32,CVM-Port,0,1f58baa1-0fac-40ef-bdc7-406639296ab3,NTNX-0a648466-A-CVM NTNX-0a648466-A,vnet0,50:6b:8d:84:9e:2f,2,192.168.5.254,CVM-Port,0,1f58baa1-0fac-40ef-bdc7-406639296ab3,NTNX-0a648466-A-CVM NTNX-739ee780-A,vnet2,50:6b:8d:57:cd:8b,1,192.168.20.33,CVM-Port,0,6127df2a-de38-4686-8699-2e4b9ff39180,NTNX-739ee780-A-CVM NTNX-739ee780-A,vnet0,50:6b:8d:ad:29:e2,2,192.168.5.254,CVM-Port,0,6127df2a-de38-4686-8699-2e4b9ff39180,NTNX-739ee780-A-CVM NTNX-1345a952-A,tap1,50:6b:8d:a1:f4:72,1,192.168.11.152,nw-vlan-11-ipam,11,fbfe1364-d367-4cbe-b0fd-3cd8afe8ba42,vm02
以上。