Kimchi always creates raw disk format to new vm disks if the storagepool
is logical, iscsi or scsi. But, new templates where not using this
logic and was possible, through API calls, to create a template with a
SCSI storagepool and disk format vmdk, for instance.
This patch fixes this issue and makes necessary change in one of the
tests in order to avoid an error with _get_storage_type() and
deactivated storagepools.
Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo(a)linux.vnet.ibm.com>
---
src/kimchi/model/templates.py | 4 ++--
src/kimchi/vmtemplate.py | 5 +++++
tests/test_template.py | 2 ++
3 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/src/kimchi/model/templates.py b/src/kimchi/model/templates.py
index 6bc8aca..8a1820d 100644
--- a/src/kimchi/model/templates.py
+++ b/src/kimchi/model/templates.py
@@ -94,7 +94,7 @@ class TemplatesModel(object):
# Creates the template class with necessary information
# Checkings will be done while creating this class, so any exception
# will be raised here
- t = LibvirtVMTemplate(params, scan=True)
+ t = LibvirtVMTemplate(params, scan=True, conn=self.conn)
name = params['name']
try:
with self.objstore as session:
@@ -231,8 +231,8 @@ class TemplateModel(object):
class LibvirtVMTemplate(VMTemplate):
def __init__(self, args, scan=False, conn=None):
- VMTemplate.__init__(self, args, scan)
self.conn = conn
+ VMTemplate.__init__(self, args, scan)
def _storage_validate(self):
pool_uri = self.info['storagepool']
diff --git a/src/kimchi/vmtemplate.py b/src/kimchi/vmtemplate.py
index 62772e5..3e4630d 100644
--- a/src/kimchi/vmtemplate.py
+++ b/src/kimchi/vmtemplate.py
@@ -75,6 +75,11 @@ class VMTemplate(object):
args['graphics'] = graphics
self.info.update(args)
+ # Assign right disk format to logical and [i]scsi storagepools
+ if self._get_storage_type() in ['logical', 'iscsi',
'scsi']:
+ for i, disk in enumerate(self.info['disks']):
+ self.info['disks'][i]['format'] = 'raw'
+
def _get_os_info(self, args, scan):
distro = version = 'unknown'
diff --git a/tests/test_template.py b/tests/test_template.py
index 23a24fb..acdb7c6 100644
--- a/tests/test_template.py
+++ b/tests/test_template.py
@@ -329,6 +329,8 @@ class TemplateTests(unittest.TestCase):
pool = {'type': 'dir', 'name': 'dir-pool',
'path': '/tmp/dir-pool'}
self.request('/storagepools', json.dumps(pool), 'POST')
+ pool_uri = '/storagepools/%s' %
pool['name'].encode('utf-8')
+ self.request(pool_uri + '/activate', '{}', 'POST')
# Create a template using the custom network and pool
t = {'name': 'test', 'cdrom': '/tmp/mock.iso',
--
2.1.0