[et-mgmt-tools] [PATCH] Check the making domain's mac address(part 2)

Tatsuro Enokura fj7716hz at aa.jp.fujitsu.com
Mon Mar 19 09:08:17 UTC 2007


Hi,

I made the patch the running domain's mac address check(changeset 125),
I make the patch in this time that the virt-install comand adds the
confirming message.

The attached patch the following way:

  1) Count that the making domian's MAC address is already use
     the exists domain's MAC address.
  2) Check the hots's  NIC MAC address.
  2) if count > 0 or , print confirmation message.
  3) if type yes then leave disk source as it is,
     else ask disk source again.

Signed-off-by: Tatsuro Enokura <fj7716hz at aa.jp.fujitsu.com>

Thanks,
Tatsuro Enokura

--------------------------------------------------------------------------
diff -r 73d38353c139 virt-install
--- a/virt-install      Fri Mar 16 14:32:06 2007 -0400
+++ b/virt-install      Mon Mar 19 16:23:03 2007 +0900
@@ -170,13 +170,64 @@ def get_disks(disk, size, sparse, guest,
     else:
         get_disk(disk, size, sparse, guest, hvm, conn)

-def get_network(mac, bridge, guest):
+def get_network(mac, bridge, gues, conn):
     if mac == "RANDOM":
         mac = None
     n = virtinst.VirtualNetworkInterface(mac, bridge)
+    if mac is not None:
+        # get all Domains
+        ids = conn.listDomainsID();
+        vms = []
+        for id in ids:
+            if id == 0:
+                continue
+            vm = conn.lookupByID(id)
+            vms.append(vm)
+        # get defined domain
+        names = conn.listDefinedDomains()
+        for name in names:
+            vm = conn.lookupByName(name)
+            vms.append(vm)
+        # get the Host's NIC MACaddress
+        hostdevs = virtinst.util.get_host_network_devices()
+
+        while 1:
+            if mac is None:
+                msg = "What is the MAC address of your virtual machine?"
+                mac = prompt_for_input(msg, mac)
+                n = virtinst.VirtualNetworkInterface(mac, bridge)
+
+            try:
+                if n.countMACaddr(vms) > 0:
+                    raise ValueError
+                for (dummy, dummy, dummy, dummy, host_macaddr) in hostdevs:
+                    if mac.upper() == host_macaddr.upper():
+                        raise ValueError
+            except ValueError:
+                while 1:
+                    retryFlg = False
+                    warnmsg  = "The MAC address you entered already in
use by another guest. "
+                    warnmsg += "The MAC address should be unique in the
system. \n"
+                    res = prompt_for_input(warnmsg + "  Do you really
want to use the MAC address (yes or no)? ")
+                    try:
+                        if yes_or_no(res) is True:
+                            break
+                        else:
+                            retryFlg = True
+                            break
+                    except ValueError, e:
+                        print "ERROR: ", e
+                        continue
+                if retryFlg is True:
+                    mac = None
+                    continue
+                else:
+                    break
+            except:
+                raise
     guest.nics.append(n)

-def get_networks(macs, bridges, guest):
+def get_networks(macs, bridges, guest, conn):
     # ensure we have equal length lists
     if (type(macs) == type(bridges) == list):
         if len(macs) != len(bridges):
@@ -188,9 +239,9 @@ def get_networks(macs, bridges, guest):
         macs = [ None ] * len(bridges)

     if (type(macs) == list):
-        map(lambda m, b: get_network(m, b, guest), macs, bridges)
-    else:
-        get_network(macs, bridges, guest)
+        map(lambda m, b: get_network(m, b, guest, conn), macs, bridges)
+    else:
+        get_network(macs, bridges, guest, conn)

 def get_graphics(vnc, vncport, nographics, sdl, keymap, guest):
     if vnc and nographics:
@@ -481,7 +532,7 @@ def main():
               guest, hvm, conn)

     # set up network information
-    get_networks(options.mac, options.bridge, guest)
+    get_networks(options.mac, options.bridge, guest, conn)

     # set up graphics information
     get_graphics(options.vnc, options.vncport, options.nographics,
options.sdl, options.keymap, guest)
--------------------------------------------------------------------------




More information about the et-mgmt-tools mailing list