diff --git a/base/fs/__init__.py b/base/fs/__init__.py index 5f1689c..bc13b81 100644 --- a/base/fs/__init__.py +++ b/base/fs/__init__.py @@ -3,7 +3,7 @@ def load_volume(data): from common.fs.loopbackvolume import LoopbackVolume from providers.ec2.ebsvolume import EBSVolume - from providers.virtualbox.volume import VirtualBoxVolume + from common.fs.virtualdiskimage import VirtualDiskImage from partitionmaps.gpt import GPTPartitionMap from partitionmaps.mbr import MBRPartitionMap from partitionmaps.none import NoPartitions @@ -14,7 +14,7 @@ def load_volume(data): partition_map = partition_maps.get(data['partitions']['type'])(data['partitions']) volume_backings = {'raw': LoopbackVolume, 's3': LoopbackVolume, - 'vdi': VirtualBoxVolume, + 'vdi': VirtualDiskImage, 'ebs': EBSVolume } return volume_backings.get(data['backing'])(partition_map) diff --git a/providers/virtualbox/volume.py b/common/fs/qemuvolume.py similarity index 94% rename from providers/virtualbox/volume.py rename to common/fs/qemuvolume.py index 2744233..5139d08 100644 --- a/providers/virtualbox/volume.py +++ b/common/fs/qemuvolume.py @@ -4,13 +4,11 @@ from common.tools import log_check_call from common.fs import get_partitions -class VirtualBoxVolume(LoopbackVolume): - - extension = 'vdi' +class QEMUVolume(LoopbackVolume): def _before_create(self, e): self.image_path = e.image_path - log_check_call(['/usr/bin/qemu-img', 'create', '-f', 'vdi', self.image_path, str(self.size) + 'M']) + log_check_call(['/usr/bin/qemu-img', 'create', '-f', self.qemu_format, self.image_path, str(self.size) + 'M']) def _check_nbd_module(self): from base.fs.partitionmaps.none import NoPartitions diff --git a/common/fs/virtualdiskimage.py b/common/fs/virtualdiskimage.py new file mode 100644 index 0000000..8d177d6 --- /dev/null +++ b/common/fs/virtualdiskimage.py @@ -0,0 +1,14 @@ +from common.fs.qemuvolume import QEMUVolume + + +class VirtualDiskImage(QEMUVolume): + + extension = 'vdi' + qemu_format = 'vdi' + ovf_uri = None + + def get_uuid(self): + import uuid + with open(self.image_path) as image: + image.seek(392) + return uuid.UUID(bytes_le=image.read(16))