Merge "Implement enforcement model logic in Manager"
This commit is contained in:
commit
fabba3b74f
@ -18,6 +18,7 @@ from keystone.common import manager
|
||||
from keystone.common import provider_api
|
||||
import keystone.conf
|
||||
from keystone import exception
|
||||
from keystone.limit import models
|
||||
|
||||
|
||||
CONF = keystone.conf.CONF
|
||||
@ -35,6 +36,10 @@ class Manager(manager.Manager):
|
||||
unified_limit_driver = CONF.unified_limit.driver
|
||||
super(Manager, self).__init__(unified_limit_driver)
|
||||
|
||||
self.enforcement_model = models.get_enforcement_model_from_config(
|
||||
CONF.unified_limit.enforcement_model
|
||||
)
|
||||
|
||||
def _assert_resource_exist(self, unified_limit, target):
|
||||
try:
|
||||
service_id = unified_limit.get('service_id')
|
||||
@ -56,6 +61,13 @@ class Manager(manager.Manager):
|
||||
raise exception.ValidationError(attribute='project_id',
|
||||
target=target)
|
||||
|
||||
def get_model(self):
|
||||
"""Return information of the configured enforcement model."""
|
||||
return {
|
||||
'name': self.enforcement_model.name,
|
||||
'description': self.enforcement_model.description
|
||||
}
|
||||
|
||||
def create_registered_limits(self, registered_limits):
|
||||
for registered_limit in registered_limits:
|
||||
self._assert_resource_exist(registered_limit, 'registered_limit')
|
||||
|
29
keystone/limit/models/__init__.py
Normal file
29
keystone/limit/models/__init__.py
Normal file
@ -0,0 +1,29 @@
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from keystone.limit.models import flat
|
||||
|
||||
|
||||
def get_enforcement_model_from_config(enforcement_model):
|
||||
"""Factory that returns an enforcement model object based on configuration.
|
||||
|
||||
:param enforcement_model str: A string, usually from a configuration
|
||||
option, representing the name of the
|
||||
enforcement model
|
||||
:returns: an `Model` object
|
||||
|
||||
"""
|
||||
# NOTE(lbragstad): The configuration option set is strictly checked by the
|
||||
# ``oslo.config`` object. If someone passes in a garbage value, it will
|
||||
# fail before it gets to this point.
|
||||
if enforcement_model == 'flat':
|
||||
return flat.Model()
|
22
keystone/limit/models/flat.py
Normal file
22
keystone/limit/models/flat.py
Normal file
@ -0,0 +1,22 @@
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
|
||||
# TODO(lbragstad): This should inherit from an abstract interface so that we
|
||||
# ensure all models implement the same things.
|
||||
class Model(object):
|
||||
|
||||
name = 'flat'
|
||||
description = (
|
||||
'Limit enforcement and validation does not take project hierarchy '
|
||||
'into consideration.'
|
||||
)
|
@ -394,6 +394,20 @@ class RegisteredLimitTests(object):
|
||||
|
||||
class LimitTests(object):
|
||||
|
||||
def test_default_enforcement_model_is_flat(self):
|
||||
expected = {
|
||||
'description': ('Limit enforcement and validation does not take '
|
||||
'project hierarchy into consideration.'),
|
||||
'name': 'flat'
|
||||
}
|
||||
self.assertEqual(expected, PROVIDERS.unified_limit_api.get_model())
|
||||
|
||||
def test_registering_unsupported_enforcement_model_fails(self):
|
||||
self.assertRaises(
|
||||
ValueError, self.config_fixture.config, group='unified_limit',
|
||||
enforcement_model=uuid.uuid4().hex
|
||||
)
|
||||
|
||||
def test_create_limit(self):
|
||||
# create one, return it.
|
||||
limit_1 = unit.new_limit_ref(
|
||||
|
Loading…
x
Reference in New Issue
Block a user