[Kimchi-devel] [PATCH 3/5] Update users/groups verification based on new API
Rodrigo Trujillo
rodrigo.trujillo at linux.vnet.ibm.com
Tue Apr 22 17:00:22 UTC 2014
Reviewed-by: Rodrigo Trujillo <rodrigo.trujillo at linux.vnet.ibm.com>
On 04/17/2014 06:04 PM, Aline Manera wrote:
> From: Aline Manera <alinefm at br.ibm.com>
>
> Use the APIs /host/users and /host/groups to check user input
> That way we can check the input data at once instead of checking item by item.
>
> Signed-off-by: Aline Manera <alinefm at br.ibm.com>
> ---
> src/kimchi/i18n.py | 4 ++--
> src/kimchi/mockmodel.py | 24 ++++++++++++++++++------
> src/kimchi/model/vms.py | 20 ++++++++++++--------
> 3 files changed, 32 insertions(+), 16 deletions(-)
>
> diff --git a/src/kimchi/i18n.py b/src/kimchi/i18n.py
> index 3fc3013..89bcd02 100644
> --- a/src/kimchi/i18n.py
> +++ b/src/kimchi/i18n.py
> @@ -84,8 +84,8 @@ messages = {
> "KCHVM0024E": _("User name must be a string"),
> "KCHVM0025E": _("Group names list must be an array"),
> "KCHVM0026E": _("Group name must be a string"),
> - "KCHVM0027E": _("User %(user)s does not exist"),
> - "KCHVM0028E": _("Group %(group)s does not exist"),
> + "KCHVM0027E": _("User(s) '%(users)s' do not exist"),
> + "KCHVM0028E": _("Group(s) '%(groups)s' do not exist"),
>
> "KCHVMIF0001E": _("Interface %(iface)s does not exist in virtual machine %(name)s"),
> "KCHVMIF0002E": _("Network %(network)s specified for virtual machine %(name)s does not exist"),
> diff --git a/src/kimchi/mockmodel.py b/src/kimchi/mockmodel.py
> index b235e1e..866ad2c 100644
> --- a/src/kimchi/mockmodel.py
> +++ b/src/kimchi/mockmodel.py
> @@ -91,14 +91,26 @@ class MockModel(object):
> if state == 'running' or params['name'] in self.vms_get_list():
> msg_args = {'name': dom.name, 'new_name': params['name']}
> raise InvalidParameter("KCHVM0003E", msg_args)
> - else:
> - del self._mock_vms[dom.name]
> - dom.name = params['name']
> - self._mock_vms[dom.name] = dom
> +
> + del self._mock_vms[dom.name]
> + dom.name = params['name']
> + self._mock_vms[dom.name] = dom
>
> for key, val in params.items():
> - if key in dom.info:
> - dom.info[key] = val
> + if key == 'users':
> + invalid_users = set(val) - set(self.users_get_list())
> + if len(invalid_users) != 0:
> + raise InvalidParameter("KCHVM0027E",
> + {'users': ", ".join(invalid_users)})
> +
> + elif key == 'groups':
> + invalid_groups = set(val) - set(self.groups_get_list())
> + if len(invalid_groups) != 0:
> + raise InvalidParameter("KCHVM0028E",
> + {'groups':
> + ", ".join(invalid_groups)})
> +
> + dom.info[key] = val
>
> def _live_vm_update(self, dom, params):
> pass
> diff --git a/src/kimchi/model/vms.py b/src/kimchi/model/vms.py
> index 90e9537..ede54a3 100644
> --- a/src/kimchi/model/vms.py
> +++ b/src/kimchi/model/vms.py
> @@ -29,7 +29,6 @@ from lxml.builder import E
>
> from kimchi import vnc
> from kimchi import xmlutils
> -from kimchi.auth import Group, User
> from kimchi.config import READONLY_POOL_TYPE
> from kimchi.exception import InvalidOperation, InvalidParameter
> from kimchi.exception import NotFoundError, OperationFailed
> @@ -37,7 +36,7 @@ from kimchi.model.config import CapabilitiesModel
> from kimchi.model.templates import TemplateModel
> from kimchi.model.utils import get_vm_name
> from kimchi.screenshot import VMScreenshot
> -from kimchi.utils import kimchi_log, run_setfacl_set_attr
> +from kimchi.utils import import_class, kimchi_log, run_setfacl_set_attr
> from kimchi.utils import template_name_from_uri
> from kimchi.xmlutils import xpath_get_text
>
> @@ -236,6 +235,8 @@ class VMModel(object):
> self.conn = kargs['conn']
> self.objstore = kargs['objstore']
> self.vmscreenshot = VMScreenshotModel(**kargs)
> + self.users = import_class('kimchi.model.host.UsersModel')(**kargs)
> + self.groups = import_class('kimchi.model.host.GroupsModel')(**kargs)
>
> def update(self, name, params):
> dom = self.get_vm(name, self.conn)
> @@ -264,14 +265,17 @@ class VMModel(object):
>
> for key, val in params.items():
> if key == 'users':
> - for user in val:
> - if not User(user).exists():
> - raise OperationFailed("KCHVM0027E", {'user': user})
> + invalid_users = set(val) - set(self.users.get_list())
> + if len(invalid_users) != 0:
> + raise InvalidParameter("KCHVM0027E",
> + {'users': ", ".join(invalid_users)})
> users = val
> elif key == 'groups':
> - for group in val:
> - if not Group(group).exists():
> - raise OperationFailed("KCHVM0028E", {'group': group})
> + invalid_groups = set(val) - set(self.groups.get_list())
> + if len(invalid_groups) != 0:
> + raise InvalidParameter("KCHVM0028E",
> + {'groups':
> + ", ".join(invalid_groups)})
> groups = val
> else:
> if key in VM_STATIC_UPDATE_PARAMS:
More information about the Kimchi-devel
mailing list