我的目標是僅使用 libvirt api (>=0.10) 找出新虛擬機器的 IP 位址。目前我正在使用 libvirt 的 net-update 命令:在啟動新機器之前,我為其設定靜態 dhcp 條目,並使用已知地址啟動 vm。
即使使用舊的 libvirt 版本,它幾乎可以正常工作,但有一個錯誤。當我「強制關閉」機器時,它不會向 dhcp 伺服器(libvirt/dnsmasq)發送「釋放」查詢,並且該 IP 保留在租約檔案中。如果我在 dhcp 租約逾時之前建立具有相同 ip 位址的新計算機,它將不會從靜態條目中獲取 ip 位址,因為 dhcp 伺服器認為該 ip 已被使用(基於租約文件中的資訊)。
是否有更強大的解決方案來獲取電腦 IP 位址或在啟動前設定它,而無需透過 shell 存取目標伺服器或虛擬機器內的靜態網路配置?
答案1
在 libvirt >= 1.2.14 中,可以查詢 libvirt 以詢問已指派給來賓 NIC 的 IP 位址,從而無需設定靜態 IP 位址。例如
# virsh domifaddr f25kubdev
Name MAC address Protocol Address
-------------------------------------------------------------------------------
vnet1 52:54:00:b4:fc:f2 ipv4 192.168.122.13/24
我不確定這對你是否有任何用處,因為你提到了 libvirt 0.10.0
如果您的版本 >= 1.2.10,則有一種不太直接的方法可以透過查詢 DHCP 租約資料庫來獲取信息
# virsh net-dhcp-leases default
Expiry Time MAC address Protocol IP address Hostname Client ID or DUID
-------------------------------------------------------------------------------------------------------------------
2017-01-19 12:01:01 52:54:00:b4:fc:f2 ipv4 192.168.122.13/24 f25kubdev ff:00:b4:fc:f2:00:04:52:fb:4b:29:01:5e:44:c8:b6:57:85:dd:f2:7a:98:73
然後,您必須手動將 MAC 位址對應到您感興趣的網域 - 'domifaddr' 命令只會為您完成該映射。
在 1.2.10 之前,根本無法透過 libvirt API 取得此資訊 - 您必須直接查看 dnsmasq 租約檔案。