[et-mgmt-tools] [PATCH] check if the specified disk using virt-clone is already used in another guests.

S.Sakamoto fj0588di at aa.jp.fujitsu.com
Mon Jul 30 00:54:01 UTC 2007


Hi

Current virt-clone does not confirm if the specified disk is already
used in another guests or not.  So, I create the patch to check if the
specified disk using virt-clone is already used in another guests.


Signed-off-by: Shigeki Sakamoto <fj0588di at aa.jp.fujitsu.com>

Thanks,
Shigeki Sakamoto.

----------------------------------------------------------------------
diff -r 645217bda13b virtinst/CloneManager.py
--- a/virtinst/CloneManager.py	Sat Jul 21 13:03:07 2007 -0400
+++ b/virtinst/CloneManager.py	Fri Jul 27 17:38:47 2007 +0900
@@ -29,6 +29,7 @@ import commands
 import commands
 import libvirt
 import Guest
+import cli
 from virtinst import _virtinst as _
 
 #
@@ -106,6 +107,13 @@ class CloneDesign(object):
     def set_clone_devices(self, devices):
         if len(devices) == 0:
             raise ValueError, _("New file to use for disk image is required")
+        cdev      = []
+        cdev_size = []
+        cdev_type = []
+        cdev.append(devices)
+        cdev_size,\
+        cdev_type = self._get_clone_devices_info(cdev)
+        devices = self._check_file(self._hyper_conn, devices, cdev_size)
         self._clone_devices.append(devices)
     def get_clone_devices(self):
         return self._clone_devices
@@ -320,6 +328,45 @@ class CloneDesign(object):
             except libvirt.libvirtError, e:
                 pass
         return check
+
+    #
+    # check used file func
+    # ret : Use File Path
+    #
+    def _check_file(self, conn, disk, size):
+        retryFlg = False
+        while 1:
+            if disk == None:
+                msg = _("What would you like to use as the disk (path)?")
+                disk = cli.prompt_for_input(msg, disk)
+
+            try:
+                d = Guest.VirtualDisk(disk, size)
+                if d.is_conflict_disk(conn) is True:
+                    while 1:
+                        retryFlg = False
+                        warnmsg = _("Disk %s is already in use by another guest!\n") % disk
+                        res = cli.prompt_for_input(warnmsg + _("Do you really want to use the disk (yes or no)? "))
+                        try:
+                            if cli.yes_or_no(res) is True:
+                                break
+                            else:
+                                retryFlg = True
+                                break
+                        except ValueError, e:
+                            print _("ERROR: "), e
+                            continue
+                    if retryFlg is True:
+                        disk = None
+                        continue
+            except ValueError, e:
+                print _("ERROR: "), e
+                disk = None
+                continue
+
+            break
+
+        return disk
 
     #
     # check used mac func




More information about the et-mgmt-tools mailing list