Как узнать IP-адрес новой виртуальной машины с помощью libvirt 0.10.0+ (маршрутизируемая сеть)

Как узнать IP-адрес новой виртуальной машины с помощью libvirt 0.10.0+ (маршрутизируемая сеть)

Моя цель — узнать IP-адрес новой виртуальной машины, используя только API libvirt (>=0.10). В настоящее время я использую команду net-update libvirt: перед запуском новой машины я устанавливаю для нее статическую запись dhcp и загрузку виртуальной машины с известным адресом.

Работает почти нормально даже со старыми версиями libvirt, но есть один баг. Когда я "принудительно выключаю" машину, она не отправляет запрос "release" на сервер dhcp (libvirt/dnsmasq), и этот ip остается в файле аренды. Если я создам новую машину с тем же ip-адресом до истечения срока аренды dhcp, она не получит ip-адрес из статической записи, потому что сервер dhcp считает, что этот ip уже используется (на основе информации в файле аренды).

Существуют ли более надежные решения для получения IP-адреса машины или его установки перед запуском без доступа к оболочке целевого сервера или статической конфигурации сети внутри виртуальной машины?

решение1

В 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 получить эту информацию через API libvirt было вообще невозможно — пришлось бы ковыряться в файле аренды dnsmasq напрямую.

Связанный контент