Mi objetivo es averiguar la dirección IP de la nueva máquina virtual utilizando únicamente la API de libvirt (>=0,10). Actualmente estoy usando el comando net-update de libvirt: antes de iniciar una nueva máquina, configuro una entrada dhcp estática y vm arranca con una dirección conocida.
Funciona casi bien incluso con versiones antiguas de libvirt, pero tiene un error. Cuando "fuerzo el apagado" de la máquina, no envía la consulta de "liberación" al servidor dhcp (libvirt/dnsmasq) y esta IP permanece en el archivo de arrendamiento. Si creo una nueva máquina con la misma dirección IP antes de que expire el tiempo de concesión de dhcp, no obtendrá la dirección IP de la entrada estática, porque el servidor dhcp considera que esta IP ya está en uso (según la información del archivo de concesión).
¿Existen soluciones más sólidas para obtener la dirección IP de la máquina o configurarla antes del inicio sin acceso de shell al servidor de destino o configuración de red estática dentro de la máquina virtual?
Respuesta1
En libvirt >= 1.2.14, es posible consultar libvirt para solicitar las direcciones IP que se han asignado a una NIC invitada, evitando la necesidad de configurar direcciones IP estáticas. p.ej
# virsh domifaddr f25kubdev
Name MAC address Protocol Address
-------------------------------------------------------------------------------
vnet1 52:54:00:b4:fc:f2 ipv4 192.168.122.13/24
No estoy seguro de si eso te sirve de algo, ya que mencionas libvirt 0.10.0
Si tiene >= 1.2.10, hay una forma menos directa de obtener la información consultando la base de datos de arrendamiento de 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
luego debe asignar manualmente la dirección MAC al dominio que le interesa; el comando 'domifaddr' simplemente hace esa asignación por usted.
Antes de 1.2.10, no había forma de obtener esta información a través de la API libvirt; tendrías que hurgar directamente en el archivo de arrendamientos de dnsmasq.