Beispiel #1
0
 def get_image(self, media, **kwargs):
     """Returns a newly created Image instance."""
     info = image_info(media)
     image = Image(media, self.out, format=info['format'], **kwargs)
     self._images.append(image)
     image.enable()
     return image
Beispiel #2
0
 def get_image(self, media, **kwargs):
     """Returns a newly created Image instance."""
     info = image_info(media)
     image = Image(media, self.out, format=info['format'], **kwargs)
     self._images.append(image)
     image.enable()
     return image
Beispiel #3
0
    def snapshot(self):
        """Creates a snapshot of the original source media of the Disk
        instance.
        """

        if self.source == '/':
            self.out.warn("Snapshotting ignored for host bundling mode.")
            return self.file

        # Examine media file
        info = image_info(self.file)

        self.out.info("Snapshotting media source ...", False)

        # Create a qcow2 snapshot for image files that are not raw
        if info['format'] != 'raw':
            snapshot = create_snapshot(self.file, self.tmp)
            self._add_cleanup(os.unlink, snapshot)
            self.out.success('done')
            return snapshot

        # Create a device-mapper snapshot for raw image files and block devices
        mode = os.stat(self.file).st_mode
        device = self.file if stat.S_ISBLK(mode) else self._losetup(self.file)
        size = int(blockdev('--getsz', device))

        cowfd, cow = tempfile.mkstemp(dir=self.tmp)
        os.close(cowfd)
        self._add_cleanup(os.unlink, cow)
        # Create cow sparse file
        dd('if=/dev/null', 'of=%s' % cow, 'bs=512', 'seek=%d' % size)
        cowdev = self._losetup(cow)

        snapshot = 'snf-image-creator-snapshot-%s' % uuid.uuid4().hex
        tablefd, table = tempfile.mkstemp()
        try:
            try:
                os.write(tablefd, "0 %d snapshot %s %s n 8\n" %
                         (size, device, cowdev))
            finally:
                os.close(tablefd)

            dmsetup('create', snapshot, table)
            self._add_cleanup(try_fail_repeat, dmsetup, 'remove', snapshot)
        finally:
            os.unlink(table)
        self.out.success('done')
        return "/dev/mapper/%s" % snapshot
Beispiel #4
0
    def snapshot(self):
        """Creates a snapshot of the original source media of the Disk
        instance.
        """

        if self.source == '/':
            self.out.warn("Snapshotting ignored for host bundling mode.")
            return self.file

        # Examine media file
        info = image_info(self.file)

        self.out.info("Snapshotting media source ...", False)

        # Create a qcow2 snapshot for image files that are not raw
        if info['format'] != 'raw':
            snapshot = create_snapshot(self.file, self.tmp)
            self._add_cleanup(os.unlink, snapshot)
            self.out.success('done')
            return snapshot

        # Create a device-mapper snapshot for raw image files and block devices
        mode = os.stat(self.file).st_mode
        device = self.file if stat.S_ISBLK(mode) else self._losetup(self.file)
        size = int(blockdev('--getsz', device))

        cowfd, cow = tempfile.mkstemp(dir=self.tmp)
        os.close(cowfd)
        self._add_cleanup(os.unlink, cow)
        # Create cow sparse file
        dd('if=/dev/null', 'of=%s' % cow, 'bs=512', 'seek=%d' % size)
        cowdev = self._losetup(cow)

        snapshot = 'snf-image-creator-snapshot-%s' % uuid.uuid4().hex
        tablefd, table = tempfile.mkstemp()
        try:
            try:
                os.write(tablefd,
                         "0 %d snapshot %s %s n 8\n" % (size, device, cowdev))
            finally:
                os.close(tablefd)

            dmsetup('create', snapshot, table)
            self._add_cleanup(try_fail_repeat, dmsetup, 'remove', snapshot)
        finally:
            os.unlink(table)
        self.out.success('done')
        return "/dev/mapper/%s" % snapshot