Getting the IP address of a libvirt domain
If you are starting virtual machines via libvirt
, and you have
attached them to the default
network, there is a very simple method
you can use to determine the address assigned to your running
instance:
- Libvirt runs
dnsmasq
for thedefault
network, and saves leases in a local file (/var/lib/libvirt/dnsmasq/default.leases
under RHEL). - You can get the MAC address assigned to a virtual machine by querying the domain XML description.
Putting this together gets us something along the lines of:
#!/bin/sh
# Get the MAC address of the first interface.
mac=$(virsh dumpxml $1 |
xml2 |
awk -F= '$1 == "/domain/devices/interface/mac/@address" {print $2; exit}')
# Get the ip address assigned to this MAC from dnsmasq
ip=$(awk -vmac=$mac '$2 == mac {print $3}' /var/lib/libvirt/dnsmasq/default.leases )
echo $ip
(gist)
This uses xml2 to transform the XML description into something more amendable to processing in a shell script. You could accomplish much the same thing using some sort of XPath based tool. For example:
mac=$(virsh dumpxml $1 |
xmllint --xpath //interface'[1]/mac/@address' - |
sed 's/.*="\([^"]*\)"/\1/'
)
xmllint
is part of libxml2.