[PATCH V2] Template: Assign 'raw' to disk format if pool is 'logical' or [i]scsi

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@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

Reviewed-by: Aline Manera <alinefm@linux.vnet.ibm.com> On 17/04/2015 01:15, Rodrigo Trujillo wrote:
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@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',
participants (2)
-
Aline Manera
-
Rodrigo Trujillo