From 1d69f65a7fe2a7850139f30e8422d70ce9100e18 Mon Sep 17 00:00:00 2001 From: Anders Ingemann Date: Sat, 28 Dec 2013 14:02:28 +0100 Subject: [PATCH] Support for vmdk disk format --- base/fs/__init__.py | 2 ++ common/fs/virtualmachinedisk.py | 27 ++++++++++++++++++++ plugins/prebootstrapped/manifest-schema.json | 2 +- providers/virtualbox/manifest-schema.json | 2 +- 4 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 common/fs/virtualmachinedisk.py diff --git a/base/fs/__init__.py b/base/fs/__init__.py index bc13b81..eae0dd1 100644 --- a/base/fs/__init__.py +++ b/base/fs/__init__.py @@ -4,6 +4,7 @@ def load_volume(data): from common.fs.loopbackvolume import LoopbackVolume from providers.ec2.ebsvolume import EBSVolume from common.fs.virtualdiskimage import VirtualDiskImage + from common.fs.virtualmachinedisk import VirtualMachineDisk from partitionmaps.gpt import GPTPartitionMap from partitionmaps.mbr import MBRPartitionMap from partitionmaps.none import NoPartitions @@ -15,6 +16,7 @@ def load_volume(data): volume_backings = {'raw': LoopbackVolume, 's3': LoopbackVolume, 'vdi': VirtualDiskImage, + 'vmdk': VirtualMachineDisk, 'ebs': EBSVolume } return volume_backings.get(data['backing'])(partition_map) diff --git a/common/fs/virtualmachinedisk.py b/common/fs/virtualmachinedisk.py new file mode 100644 index 0000000..6126aec --- /dev/null +++ b/common/fs/virtualmachinedisk.py @@ -0,0 +1,27 @@ +from common.fs.qemuvolume import QEMUVolume + + +class VirtualMachineDisk(QEMUVolume): + + extension = 'vmdk' + qemu_format = 'vmdk' + ovf_uri = 'http://www.vmware.com/specifications/vmdk.html#sparse' + + def get_uuid(self): + if not hasattr(self, 'uuid'): + import uuid + self.uuid = uuid.uuid4() + return self.uuid + # import uuid + # with open(self.image_path) as image: + # line = '' + # lines_read = 0 + # while 'ddb.uuid.image="' not in line: + # line = image.read() + # lines_read += 1 + # if lines_read > 100: + # from common.exceptions import VolumeError + # raise VolumeError('Unable to find UUID in VMDK file.') + # import re + # matches = re.search('ddb.uuid.image="(?P[^"]+)"', line) + # return uuid.UUID(hex=matches.group('uuid')) diff --git a/plugins/prebootstrapped/manifest-schema.json b/plugins/prebootstrapped/manifest-schema.json index 4c200af..d3a19d7 100644 --- a/plugins/prebootstrapped/manifest-schema.json +++ b/plugins/prebootstrapped/manifest-schema.json @@ -8,7 +8,7 @@ "properties": { "backing": { "type": "string", - "enum": ["raw", "ebs", "s3", "vdi"] + "enum": ["raw", "ebs", "s3", "vdi", "vmdk"] } }, "required": ["backing"] diff --git a/providers/virtualbox/manifest-schema.json b/providers/virtualbox/manifest-schema.json index cf8a584..07d2cf9 100644 --- a/providers/virtualbox/manifest-schema.json +++ b/providers/virtualbox/manifest-schema.json @@ -16,7 +16,7 @@ "properties": { "backing": { "type": "string", - "enum": ["raw", "vdi"] + "enum": ["raw", "vdi", "vmdk"] }, "partitions": { "type": "object",