def _get_share_types(self, req): """Helper function that returns a list of type dicts.""" filters = {} context = req.environ['manila.context'] if context.is_admin: # Only admin has query access to all share types filters['is_public'] = self._parse_is_public( req.params.get('is_public')) else: filters['is_public'] = True extra_specs = req.params.get('extra_specs', {}) extra_specs_disallowed = (req.api_version_request < api_version.APIVersionRequest("2.43")) if extra_specs and extra_specs_disallowed: msg = _("Filter by 'extra_specs' is not supported by this " "microversion. Use 2.43 or greater microversion to " "be able to use filter search by 'extra_specs.") raise webob.exc.HTTPBadRequest(explanation=msg) elif extra_specs: extra_specs = ast.literal_eval(extra_specs) filters['extra_specs'] = share_types.sanitize_extra_specs( extra_specs) limited_types = share_types.get_all_types( context, search_opts=filters).values() return list(limited_types)
def _get_share_types(self, req): """Helper function that returns a list of type dicts.""" filters = {} context = req.environ['manila.context'] if context.is_admin: # Only admin has query access to all share types filters['is_public'] = self._parse_is_public( req.params.get('is_public')) else: filters['is_public'] = True extra_specs = req.params.get('extra_specs', {}) extra_specs_disallowed = (req.api_version_request < api_version.APIVersionRequest("2.43")) if extra_specs and extra_specs_disallowed: msg = _("Filter by 'extra_specs' is not supported by this " "microversion. Use 2.43 or greater microversion to " "be able to use filter search by 'extra_specs.") raise webob.exc.HTTPBadRequest(explanation=msg) elif extra_specs: extra_specs = ast.literal_eval(extra_specs) filters['extra_specs'] = share_types.sanitize_extra_specs( extra_specs) limited_types = share_types.get_all_types( context, search_opts=filters).values() return list(limited_types)
def test_sanitize_extra_specs(self, spec_value): extra_specs = { constants.ExtraSpecs.DRIVER_HANDLES_SHARE_SERVERS: 'True', constants.ExtraSpecs.SNAPSHOT_SUPPORT: 'True', constants.ExtraSpecs.CREATE_SHARE_FROM_SNAPSHOT_SUPPORT: 'False' } expected_specs = copy.copy(extra_specs) if spec_value is not None: extra_specs[constants.ExtraSpecs.AVAILABILITY_ZONES] = spec_value expected_specs['availability_zones'] = 'az 1,az2,az 3' self.assertDictEqual(expected_specs, share_types.sanitize_extra_specs(extra_specs))
def update(self, req, type_id, id, body=None): context = req.environ['manila.context'] if not body: expl = _('Request body empty') raise webob.exc.HTTPBadRequest(explanation=expl) self._check_type(context, type_id) if id not in body: expl = _('Request body and URI mismatch') raise webob.exc.HTTPBadRequest(explanation=expl) if len(body) > 1: expl = _('Request body contains too many items') raise webob.exc.HTTPBadRequest(explanation=expl) self._verify_extra_specs(body, False) specs = share_types.sanitize_extra_specs(body) db.share_type_extra_specs_update_or_create(context, type_id, specs) notifier_info = dict(type_id=type_id, id=id) notifier = rpc.get_notifier('shareTypeExtraSpecs') notifier.info(context, 'share_type_extra_specs.update', notifier_info) return specs
def update(self, req, type_id, id, body=None): context = req.environ['manila.context'] if not body: expl = _('Request body empty') raise webob.exc.HTTPBadRequest(explanation=expl) self._check_type(context, type_id) if id not in body: expl = _('Request body and URI mismatch') raise webob.exc.HTTPBadRequest(explanation=expl) if len(body) > 1: expl = _('Request body contains too many items') raise webob.exc.HTTPBadRequest(explanation=expl) self._verify_extra_specs(body, False) specs = share_types.sanitize_extra_specs(body) db.share_type_extra_specs_update_or_create(context, type_id, specs) notifier_info = dict(type_id=type_id, id=id) notifier = rpc.get_notifier('shareTypeExtraSpecs') notifier.info(context, 'share_type_extra_specs.update', notifier_info) return specs
def create(self, req, type_id, body=None): context = req.environ['manila.context'] if not self.is_valid_body(body, 'extra_specs'): raise webob.exc.HTTPBadRequest() self._check_type(context, type_id) specs = body['extra_specs'] try: self._verify_extra_specs(specs, False) except exception.InvalidExtraSpec as e: raise webob.exc.HTTPBadRequest(e.message) self._check_key_names(specs.keys()) specs = share_types.sanitize_extra_specs(specs) db.share_type_extra_specs_update_or_create(context, type_id, specs) notifier_info = dict(type_id=type_id, specs=specs) notifier = rpc.get_notifier('shareTypeExtraSpecs') notifier.info(context, 'share_type_extra_specs.create', notifier_info) return body
def create(self, req, type_id, body=None): context = req.environ['manila.context'] if not self.is_valid_body(body, 'extra_specs'): raise webob.exc.HTTPBadRequest() self._check_type(context, type_id) specs = body['extra_specs'] try: self._verify_extra_specs(specs, False) except exception.InvalidExtraSpec as e: raise webob.exc.HTTPBadRequest(e.message) self._check_key_names(specs.keys()) specs = share_types.sanitize_extra_specs(specs) db.share_type_extra_specs_update_or_create(context, type_id, specs) notifier_info = dict(type_id=type_id, specs=specs) notifier = rpc.get_notifier('shareTypeExtraSpecs') notifier.info(context, 'share_type_extra_specs.create', notifier_info) return body