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(a)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