Fix bug introdueced in f2ddf4db58fc537e66d60739d2a
[snf-image-creator] / image_creator / bundle_volume.py
index 53c62f6..c099daa 100644 (file)
@@ -42,6 +42,7 @@ from image_creator.rsync import Rsync
 from image_creator.util import get_command
 from image_creator.util import FatalError
 from image_creator.util import try_fail_repeat
+from image_creator.util import free_space
 
 findfs = get_command('findfs')
 dd = get_command('dd')
@@ -67,10 +68,11 @@ MKFS_OPTS = {'ext2': ['-F'],
 class BundleVolume(object):
     """This class can be used to create an image out of the running system"""
 
-    def __init__(self, out, meta):
+    def __init__(self, out, meta, tmp=None):
         """Create an instance of the BundleVolume class."""
         self.out = out
         self.meta = meta
+        self.tmp = tmp
 
         self.out.output('Searching for root device ...', False)
         root = self._get_root_partition()
@@ -211,7 +213,7 @@ class BundleVolume(object):
 
             # Add 10% just to be on the safe side
             part_end = last.start + (new_size * 11) // 10
-            # Alighn to 2048
+            # Align to 2048
             part_end = ((part_end + 2047) // 2048) * 2048
 
             image_disk.setPartitionGeometry(
@@ -279,6 +281,8 @@ class BundleVolume(object):
 
     def _to_exclude(self):
         excluded = ['/tmp', '/var/tmp']
+        if self.tmp is not None:
+            excluded.append(self.tmp)
         local_filesystems = MKFS_OPTS.keys() + ['rootfs']
         for entry in self._read_fstable('/proc/mounts'):
             if entry.fs in local_filesystems:
@@ -385,7 +389,7 @@ class BundleVolume(object):
                     rsync.exclude(excl)
 
                 rsync.archive().hard_links().xattrs().sparse().acls()
-                rsync.run('/', target, 'host', 'tmp image')
+                rsync.run('/', target, 'host', 'temporary image')
 
                 # We need to replace the old UUID referencies with the new
                 # ones in grub configuration files and /etc/fstab for file
@@ -429,11 +433,9 @@ class BundleVolume(object):
 
         # Check if the available space is enough to host the image
         dirname = os.path.dirname(image)
-        self.out.output("Examining available space in %s ..." % dirname, False)
-        stat = os.statvfs(dirname)
-        available = stat.f_bavail * stat.f_frsize
-        if available <= size:
-            raise FatalError('Not enough space in %s to host the image' %
+        self.out.output("Examining available space ...", False)
+        if free_space(dirname) <= size:
+            raise FatalError('Not enough space under %s to host the image' %
                              dirname)
         self.out.success("sufficient")