
- Based on this check this patch returns a new field to the interface be able to disable such ISO before creating any templates with it. Signed-off-by: Jose Ricardo Ziviani <joserz@linux.vnet.ibm.com> --- control/storagevolumes.py | 3 +++ docs/API.md | 2 ++ model/storagevolumes.py | 9 +++++++-- tests/test_model_storagevolume.py | 3 ++- tests/test_rest.py | 1 + 5 files changed, 15 insertions(+), 3 deletions(-) diff --git a/control/storagevolumes.py b/control/storagevolumes.py index a04ad35..08cd989 100644 --- a/control/storagevolumes.py +++ b/control/storagevolumes.py @@ -90,6 +90,9 @@ class StorageVolume(Resource): if val: res[key] = val + if self.info['format'] == 'iso': + res['has_permission'] = self.info.get('has_permission', False) + return res diff --git a/docs/API.md b/docs/API.md index 9d42c53..6afa6e4 100644 --- a/docs/API.md +++ b/docs/API.md @@ -613,6 +613,8 @@ A interface represents available network interface on VM. * bootable *(optional)*: True if iso image is bootable and not corrupted. * used_by: Name of vms which use this volume. * isvalid: True if is a valid volume. + * has_permission *(optional)*: qemu/libvirt user has the right permission to + to use the image * **DELETE**: Remove the Storage Volume * **POST**: *See Storage Volume Actions* diff --git a/model/storagevolumes.py b/model/storagevolumes.py index e037e35..9d4ac43 100644 --- a/model/storagevolumes.py +++ b/model/storagevolumes.py @@ -30,12 +30,14 @@ from lxml.builder import E from wok.exception import InvalidOperation, InvalidParameter, IsoFormatError from wok.exception import MissingParameter, NotFoundError, OperationFailed -from wok.utils import add_task, get_unique_file_name, wok_log +from wok.utils import add_task, get_unique_file_name +from wok.utils import probe_file_permission_as_user, wok_log from wok.xmlutils.utils import xpath_get_text from wok.model.tasks import TaskModel from wok.plugins.kimchi.config import READONLY_POOL_TYPE from wok.plugins.kimchi.isoinfo import IsoImage +from wok.plugins.kimchi.kvmusertests import UserTests from wok.plugins.kimchi.model.diskutils import get_disk_used_by from wok.plugins.kimchi.model.diskutils import set_disk_used_by from wok.plugins.kimchi.model.storagepools import StoragePoolModel @@ -347,9 +349,12 @@ class StorageVolumeModel(object): bootable = True except IsoFormatError: bootable = False + + user = UserTests().probe_user() + ret, _ = probe_file_permission_as_user(path, user) res.update( dict(os_distro=os_distro, os_version=os_version, path=path, - bootable=bootable)) + bootable=bootable, has_permission=ret)) return res def wipe(self, pool, name): diff --git a/tests/test_model_storagevolume.py b/tests/test_model_storagevolume.py index 7dbda97..bb7758f 100644 --- a/tests/test_model_storagevolume.py +++ b/tests/test_model_storagevolume.py @@ -266,7 +266,8 @@ class StorageVolumeTests(unittest.TestCase): all_keys = keys[:] vol_info = json.loads(resp.read()) if vol_info['format'] == 'iso': - all_keys.extend([u'os_distro', u'os_version', u'bootable']) + all_keys.extend([u'os_distro', u'os_version', u'bootable', + u'has_permission']) self.assertEquals(sorted(all_keys), sorted(vol_info.keys())) diff --git a/tests/test_rest.py b/tests/test_rest.py index b73d16c..516a38b 100644 --- a/tests/test_rest.py +++ b/tests/test_rest.py @@ -1174,6 +1174,7 @@ class RestTests(unittest.TestCase): self.assertEquals('17', storagevolume['os_version']) self.assertEquals('fedora', storagevolume['os_distro']) self.assertEquals(True, storagevolume['bootable']) + self.assertEquals(True, storagevolume['has_permission']) # Create a template # In real model os distro/version can be omitted -- 2.7.4