When building a guest, give it a fixed (but random) MAC address.
authorRichard W.M. Jones <rjones@redhat.com>
Fri, 9 May 2014 12:34:00 +0000 (13:34 +0100)
committerRichard W.M. Jones <rjones@redhat.com>
Fri, 9 May 2014 12:34:00 +0000 (13:34 +0100)
Otherwise libvirt generates a new random MAC address on
every guest restart.

libvirt_xml.py

index a2f082d..ceb5ab7 100644 (file)
@@ -17,6 +17,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 import os
+import random
 import sys
 
 # Generate libvirt XML.  Would be nice to use virt-install here, but
@@ -26,6 +27,12 @@ def generate_libvirt_xml (vm_name, memory, vcpus, virtio, output):
     if not virtio:
         network_model = "e1000"
 
+    # Give the network a fixed MAC address, otherwise libvirt will
+    # generate a random one on every guest restart.
+    network_mac = "52:54:00:%02x:%02x:%02x" % (random.randint (0, 0xff),
+                                               random.randint (0, 0xff),
+                                               random.randint (0, 0xff))
+
     # XXX Quoting, and we should use a real XML generator.
     xml = """
 <domain type='kvm'>
@@ -53,6 +60,7 @@ def generate_libvirt_xml (vm_name, memory, vcpus, virtio, output):
   <on_crash>restart</on_crash>
   <devices>
     <interface type='bridge'>
+      <mac address='%s'/>
       <source bridge='br0'/>
       <model type='%s'/>
     </interface>
@@ -66,7 +74,7 @@ def generate_libvirt_xml (vm_name, memory, vcpus, virtio, output):
     <video>
       <model type='cirrus' vram='9216' heads='1'/>
     </video>
-""" % (vm_name, memory, memory, vcpus, network_model)
+""" % (vm_name, memory, memory, vcpus, network_mac, network_model)
 
     # virtio-scsi or IDE disk:
     if virtio: