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
? ( at 52:54:00:ec:fe:cd [ether] on virbr0

You can also write a nice little bash script to do this for you:

# This script uses virsh and arp to determine the IP address of a VM

# Where are your tools?

# Get the VM name as an argument:

# 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:

$ ./ debian-7
? ( at 52:54:00:ec:fe:cd [ether] on virbr0

You can get a copy of that script here.