
From: Daniel Henrique Barboza <dhbarboza82@gmail.com> If the user change disk format in template.conf, templates are going to be created correctly and vm xml as well. But, when the disk is created, the format is always qcow2. This patch considers the settings in the template.conf to define the default volume format when creating the disks. User defined settings will override any default (unless the storage type is logical, iscsi or scsi. In those cases the format will always be 'raw'). If the user does not provide any format and template.conf does not declare any default as well, the default value to be used as volume type will be 'qcow2' (considering the storage type restriction mentioned above). Signed-off-by: Daniel Henrique Barboza <dhbarboza82@gmail.com> --- src/kimchi/vmtemplate.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/kimchi/vmtemplate.py b/src/kimchi/vmtemplate.py index 3e42971..1ad9131 100644 --- a/src/kimchi/vmtemplate.py +++ b/src/kimchi/vmtemplate.py @@ -24,11 +24,13 @@ import urlparse import uuid import platform +from configobj import ConfigObj from lxml import etree from lxml.builder import E from kimchi import imageinfo from kimchi import osinfo +from kimchi.config import paths from kimchi.exception import InvalidParameter, IsoFormatError, MissingParameter from kimchi.exception import ImageFormatError, OperationFailed from kimchi.isoinfo import IsoImage @@ -158,6 +160,13 @@ class VMTemplate(object): dev, xml = get_disk_xml(params) return xml + def _get_default_disk0_format(self): + config_file = os.path.join(paths.conf_dir, 'template.conf') + config = ConfigObj(config_file) + + default_vol_format = config['storage']['disk.0'].get('format', 'qcow2') + return default_vol_format + def _get_disks_xml(self, vm_uuid): # Current implementation just allows to create disk in one single # storage pool, so we cannot mix the types (scsi volumes vs img file) @@ -165,7 +174,9 @@ class VMTemplate(object): storage_path = self._get_storage_path() base_disk_params = {'type': 'disk', 'disk': 'file', - 'bus': self.info['disk_bus'], 'format': 'qcow2'} + 'bus': self.info['disk_bus'], + 'format': self._get_default_disk0_format()} + logical_disk_params = {'format': 'raw'} iscsi_disk_params = {'disk': 'block', 'format': 'raw'} @@ -193,8 +204,8 @@ class VMTemplate(object): return unicode(disks_xml, 'utf-8') def to_volume_list(self, vm_uuid): + default_vol_format = self._get_default_disk0_format() 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) @@ -202,11 +213,11 @@ class VMTemplate(object): info = {'name': volume, 'capacity': d['size'], - 'format': fmt, + 'format': d.get('format', default_vol_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.4.3