From: Nikos Skalkotos Date: Sun, 30 Dec 2012 21:14:41 +0000 (+0200) Subject: Make sure the tmp bunble_volume img gets deleted X-Git-Tag: v0.2~23 X-Git-Url: https://code.grnet.gr/git/snf-image-creator/commitdiff_plain/567891a691b1e753ea5dbee6c9c43ee05da40f66 Make sure the tmp bunble_volume img gets deleted --- diff --git a/image_creator/bundle_volume.py b/image_creator/bundle_volume.py index 9f08276..27839fa 100644 --- a/image_creator/bundle_volume.py +++ b/image_creator/bundle_volume.py @@ -33,7 +33,6 @@ import os import re -import uuid import tempfile import time from collections import namedtuple @@ -45,7 +44,6 @@ from image_creator.util import get_command from image_creator.util import FatalError findfs = get_command('findfs') -truncate = get_command('truncate') dd = get_command('dd') dmsetup = get_command('dmsetup') losetup = get_command('losetup') @@ -320,7 +318,7 @@ class BundleVolume(): '/boot/grub/menu.lst', '/boot/grub/grub.conf'] - orig = dict(map(lambda p: (p.number, blkid( '-s', 'UUID', '-o', + orig = dict(map(lambda p: (p.number, blkid('-s', 'UUID', '-o', 'value', p.path).stdout.strip()), self.disk.partitions)) for f in map(lambda f: target + f, files): @@ -392,14 +390,16 @@ class BundleVolume(): self._unmap_partition(dev) losetup('-d', loop) - def create_image(self): + def create_image(self, image): - image = '/mnt/%s.diskdump' % uuid.uuid4().hex - - disk_size = self.disk.device.getLength() * self.disk.device.sectorSize + size = self.disk.device.getLength() * self.disk.device.sectorSize # Create sparse file to host the image - truncate("-s", "%d" % disk_size, image) + fd = os.open(image, os.O_WRONLY | os.O_CREAT) + try: + os.ftruncate(fd, size) + finally: + os.close(fd) self._create_partition_table(image) diff --git a/image_creator/disk.py b/image_creator/disk.py index 0c1f558..8a06f78 100644 --- a/image_creator/disk.py +++ b/image_creator/disk.py @@ -82,8 +82,14 @@ class Disk(object): def _dir_to_disk(self): if self.source == '/': bundle = BundleVolume(self.out, self.meta) - image = bundle.create_image() - self._add_cleanup(os.unlink, image) + image = '/var/tmp/%s.diskdump' % uuid.uuid4().hex + + def check_unlink(path): + if os.path.exists(path): + os.unlink(path) + + self._add_cleanup(check_unlink, image) + bundle.create_image(image) return self._losetup(image) raise FatalError("Using a directory as media source is supported")