[Kimchi-devel] [PATCH] Fix disk format lock and checking during template creation
Rodrigo Trujillo
rodrigo.trujillo at linux.vnet.ibm.com
Mon Apr 27 19:23:52 UTC 2015
Users are able to pass the disk format (qcow, raw, etc) in disk Template
information. However, Kimchi was ignoring this information and always
creating QCOW2 disk images (if the storagepool is not 'LOGICAL') when it
creates a VM based on a given Template.
This patch fixes this problem and also moves the checking and disk
format auto assignment to Template creation phase, in VMTemplate class
init.
Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo at linux.vnet.ibm.com>
---
src/kimchi/i18n.py | 1 +
src/kimchi/vmtemplate.py | 15 +++++++++++----
2 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/src/kimchi/i18n.py b/src/kimchi/i18n.py
index 18e84bc..0651032 100644
--- a/src/kimchi/i18n.py
+++ b/src/kimchi/i18n.py
@@ -154,6 +154,7 @@ messages = {
"KCHTMPL0025E": _("When specifying CPU topology, VCPUs must be a product of sockets, cores, and threads."),
"KCHTMPL0026E": _("When specifying CPU topology, each element must be an integer greater than zero."),
"KCHTMPL0027E": _("Invalid disk image format. Valid formats: bochs, cloop, cow, dmg, qcow, qcow2, qed, raw, vmdk, vpc."),
+ "KCHTMPL0028E": _("Invalid disk image format. Logical, SCSI and iSCSI storage pools must use disk image format 'raw'."),
"KCHPOOL0001E": _("Storage pool %(name)s already exists"),
"KCHPOOL0002E": _("Storage pool %(name)s does not exist"),
diff --git a/src/kimchi/vmtemplate.py b/src/kimchi/vmtemplate.py
index ef97d83..84e877b 100644
--- a/src/kimchi/vmtemplate.py
+++ b/src/kimchi/vmtemplate.py
@@ -75,8 +75,16 @@ class VMTemplate(object):
args['graphics'] = graphics
self.info.update(args)
- # Assign right disk format to logical and [i]scsi storagepools
+ # Check disk image format passed and pool type
if self._get_storage_type() in ['logical', 'iscsi', 'scsi']:
+ paramdisks = args.get('disks')
+ if paramdisks is not None:
+ for disk in paramdisks:
+ fmt = disk.get('format')
+ if fmt is not None and fmt != 'raw':
+ raise InvalidParameter('KCHTMPL0028E')
+ # Finally add disk image format when not passed or
+ # using default
for i, disk in enumerate(self.info['disks']):
self.info['disks'][i]['format'] = 'raw'
@@ -198,7 +206,6 @@ class VMTemplate(object):
def to_volume_list(self, vm_uuid):
storage_path = self._get_storage_path()
- fmt = 'raw' if self._get_storage_type() in ['logical'] else 'qcow2'
ret = []
for i, d in enumerate(self.info['disks']):
index = d.get('index', i)
@@ -206,11 +213,11 @@ class VMTemplate(object):
info = {'name': volume,
'capacity': d['size'],
- 'format': fmt,
+ 'format': d['format'],
'path': '%s/%s' % (storage_path, volume)}
if 'logical' == self._get_storage_type() or \
- fmt not in ['qcow2', 'raw']:
+ info['format'] not in ['qcow2', 'raw']:
info['allocation'] = info['capacity']
else:
info['allocation'] = 0
--
2.1.0
More information about the Kimchi-devel
mailing list