So, you're running libvirt, you've run up a new VM that's using DHCP and you'd like to know the IP address without logging into the console.
If you haven't already, set LIBVIRT_DEFAULT_URI. The below example assumes it's localhost:
$ export LIBVIRT_DEFAULT_URI=qemu:///system
Next you need to obtain the virtual machine's MAC address:
$ virsh dumpxml vm-name | grep "mac address"
Then you can use the MAC address to get the running VM's IP address:
$ /usr/sbin/arp -an | grep mac-address
So an example of this would look like this:
$ export LIBVIRT_DEFAULT_URI=qemu:///system
$ virsh dumpxml debian-7 | grep "mac address"
<mac address='52:54:00:ec:fe:cd'/>
$ /usr/sbin/arp -an | grep 52:54:00:ec:fe:cd
? (192.168.122.197) at 52:54:00:ec:fe:cd [ether] on virbr0
You can also write a nice little bash script to do this for you:
#!/bin/bash
#
# This script uses virsh and arp to determine the IP address of a VM
# Where are your tools?
virsh=/usr/bin/virsh
arp=/usr/sbin/arp
grep=/bin/grep
sed=/bin/sed
# Get the VM name as an argument:
VM_NAME=$1
# Ensure the default URI is set for your environment:
export LIBVIRT_DEFAULT_URI=qemu:///system
# Obtain the MAC address from libvirt:
MAC_ADDRESS=`$virsh dumpxml $VM_NAME | $grep "mac address" | $sed "s/.*'\(.*\)'.*/\1/g"`
# Use arp to find the IP address you're looking for via it's MAC address:
$arp -an | $grep $MAC_ADDRESS
exit 0
An example output of that script looks likes this:
$ ./vm_ip.sh debian-7
? (192.168.122.197) at 52:54:00:ec:fe:cd [ether] on virbr0
You can get a copy of that script here.