Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
    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))
Exemplo n.º 4
0
 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
Exemplo n.º 5
0
 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
Exemplo n.º 6
0
    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
Exemplo n.º 7
0
    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