
While creating a template from a image file, the latter must be a bootable image. As probe_image() does all the verifications regarding the image file, the exception must be raised in order to inform user about the problem. Also update the test case accordingly. Signed-off-by: Aline Manera <alinefm@linux.vnet.ibm.com> --- src/kimchi/vmtemplate.py | 8 ++------ tests/test_model.py | 29 +++++++++++++++++++++++------ 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/src/kimchi/vmtemplate.py b/src/kimchi/vmtemplate.py index 4994a5f..5f22db9 100644 --- a/src/kimchi/vmtemplate.py +++ b/src/kimchi/vmtemplate.py @@ -29,8 +29,7 @@ from distutils.version import LooseVersion from kimchi import osinfo -from kimchi.exception import InvalidParameter, IsoFormatError, ImageFormatError -from kimchi.exception import MissingParameter +from kimchi.exception import InvalidParameter, IsoFormatError, MissingParameter from kimchi.imageinfo import probe_image, probe_img_info from kimchi.isoinfo import IsoImage from kimchi.utils import check_url_path, pool_name_from_uri @@ -96,10 +95,7 @@ class VMTemplate(object): if 'base' in d.keys(): base_imgs.append(d) if scan: - try: - distro, version = probe_image(d['base']) - except ImageFormatError: - pass + distro, version = probe_image(d['base']) if 'size' not in d.keys(): d['size'] = probe_img_info(d['base'])['virtual-size'] diff --git a/tests/test_model.py b/tests/test_model.py index d458478..63be20e 100644 --- a/tests/test_model.py +++ b/tests/test_model.py @@ -37,8 +37,8 @@ import kimchi.objectstore import utils from kimchi import netinfo from kimchi.config import paths -from kimchi.exception import InvalidOperation, InvalidParameter -from kimchi.exception import NotFoundError, OperationFailed +from kimchi.exception import ImageFormatError, InvalidOperation +from kimchi.exception import InvalidParameter, NotFoundError, OperationFailed from kimchi.iscsi import TargetClient from kimchi.model import model from kimchi.rollbackcontext import RollbackContext @@ -126,10 +126,27 @@ class ModelTests(unittest.TestCase): rollback.prependDefer(inst.storagevolume_delete, 'default', vol) params = {'name': 'test', 'disks': [{'base': vol_path}]} - inst.templates_create(params) - rollback.prependDefer(inst.template_delete, 'test') - - params = {'name': 'kimchi-vm', 'template': '/templates/test'} + self.assertRaises(ImageFormatError, inst.templates_create, params) + + # Hack the model objstore to add a new template + # It is needed as the image file must be a bootable image when + # using model + # As it is difficult to create one on test runtime, inject a + # template with an empty image file to the objstore to test the + # feature + tmpl_name = "img-tmpl" + tmpl_info = {"cpus": 1, "cdrom": "", + "graphics": {"type": "vnc", "listen": "127.0.0.1"}, + "networks": ["default"], "memory": 1024, "folder": [], + "icon": "images/icon-vm.png", + "os_distro": "unknown", "os_version": "unknown", + "disks": [{"base": vol_path, "size": 10}], + "storagepool": "/storagepools/default"} + + with inst.objstore as session: + session.store('template', tmpl_name, tmpl_info) + + params = {'name': 'kimchi-vm', 'template': '/templates/img-tmpl'} inst.vms_create(params) rollback.prependDefer(inst.vm_delete, 'kimchi-vm') -- 1.9.3