NTNX>日記

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

Nutanix AHV で vNIC の一覧を取得してみる。(Python)

Nutanix AHV のネットワークや仮想スイッチの様子を確認しているときに、特定時点での vNIC の名前を記録しておきたいことがあります。そこで、Nutanix REST API を利用して vNIC の一覧を取得するスクリプトを作成してみました。

今回のスクリプト

下記のような Python スクリプトを用意して、CVM から実行します。

  • CVM 以外から実行する場合は、pip で requests をインストールしておく必要があります。
  • CVM の情報も取得するため、VM の情報は REST API v1 と v2 を併用しています。
  • さりげなく、json / csv / list 形式で出力できたりします。

gist.github.com

 

さらに、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

以上。

 

©2023 gowatana
クリエイティブ・コモンズ・ライセンスこの 作品 は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。