我的目标是仅使用 libvirt api (>=0.10) 找出新虚拟机的 ip 地址。目前我正在使用 libvirt 的 net-update 命令:在启动新机器之前,我为其设置了静态 dhcp 条目,并使用已知地址启动虚拟机。
即使使用旧版本的 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 租约文件中查找。