如何使用libvirt 0.10.0+(路由networking)找出新虚拟机的ip地址

我的目标是通过仅使用libvirt API(> = 0.10)来查找新虚拟机的IP地址。 目前我正在使用libvirt的net-update命令:在启动一个新的机器之前,我为它设置了静态dhcp条目,并且使用已知的地址启动了vm。

即使使用旧的libvirt版本,它也可以工作,但是有一个bug。 当我“closures”机器时,它不会向DHCP服务器(libvirt / dnsmasq)发送“释放”查询,并且这个IP保持在租约文件中。 如果我在dhcp租期超时之前创build一个具有相同ip地址的新机器,由于dhcp服务器认为这个ip已经被使用(基于租约文件中的信息),所以它不会从静态项目获取ip地址。

有没有更强大的解决scheme来获取机器的IP地址,或者在开始之前将其设置为无法访问目标服务器或虚拟机内的静态networkingconfiguration?

在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租约文件中查找。