Моя цель - узнать IP-адрес новой виртуальной машины, используя только libvirt api (> = 0.10). В настоящее время я использую команду net-update libvirt: перед запуском новой машины я устанавливаю для нее статическую запись dhcp и загружаю vm с известным адресом.
Он почти нормально работает даже со старыми версиями libvirt, но имеет одну ошибку. Когда я "принудительно выключаю" машину, она не отправляет запрос "освободить" на DHCP-сервер (libvirt / dnsmasq), и этот ip остается в файле аренды. Если я создам новую машину с тем же IP-адресом до истечения времени ожидания аренды dhcp, она не получит IP-адрес из статической записи, потому что сервер DHCP считает, что этот IP-адрес уже используется (на основе информации в файле аренды).
Существуют ли более надежные решения для получения IP-адреса машины или его установки перед запуском без доступа оболочки к целевому серверу или статической конфигурации сети внутри виртуальной машины?
В libvirt> = 1.2.14 можно запросить у libvirt 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 напрямую.