Merge "Make network-driver check based on COE type"

This commit is contained in:
Jenkins 2015-09-29 15:31:05 +00:00 committed by Gerrit Code Review
commit 413764cbe2
3 changed files with 17 additions and 13 deletions

View File

@ -308,7 +308,7 @@ class BayModelsController(rest.RestController):
@policy.enforce_wsgi("baymodel", "create")
@expose.expose(BayModel, body=BayModel, status_code=201)
@validation.enforce_network_driver_types('flannel')
@validation.enforce_network_driver_types(kubernetes=['flannel'])
def post(self, baymodel):
"""Create a new baymodel.
@ -335,7 +335,7 @@ class BayModelsController(rest.RestController):
@policy.enforce_wsgi("baymodel", "update")
@wsme.validate(types.uuid, [BayModelPatchType])
@expose.expose(BayModel, types.uuid, body=[BayModelPatchType])
@validation.enforce_network_driver_types('flannel')
@validation.enforce_network_driver_types(kubernetes=['flannel'])
def patch(self, baymodel_uuid, patch):
"""Update an existing baymodel.

View File

@ -39,19 +39,22 @@ def enforce_bay_types(*bay_types):
return wrapper
def enforce_network_driver_types(*network_driver_types):
def enforce_network_driver_types(**network_driver_types):
@decorator.decorator
def wrapper(func, *args, **kwargs):
obj = args[1]
if hasattr(obj, 'network_driver'):
# Post operation: baymodel API instance has been passed
driver = obj.network_driver
coe = obj.coe
else:
# Patch operation: baymodel UUID has been passed
baymodel = objects.BayModel.get_by_uuid(pecan.request.context,
obj)
driver = baymodel.network_driver
if driver not in network_driver_types:
coe = baymodel.coe
if (coe in network_driver_types and
driver not in network_driver_types[coe]):
raise exception.InvalidParameterValue(
'Cannot fulfill request with a '
'%(network_driver_type)s network_driver, '

View File

@ -108,14 +108,14 @@ class TestValidation(base.BaseTestCase):
allowed_network_driver_types,
assert_raised=False):
@v.enforce_network_driver_types(*allowed_network_driver_types)
@v.enforce_network_driver_types(**allowed_network_driver_types)
def test(self, baymodel):
pass
baymodel = mock.MagicMock()
baymodel.name = 'test_baymodel'
baymodel.network_driver = network_driver_type
baymodel.coe = 'kubernetes'
if assert_raised:
self.assertRaises(exception.InvalidParameterValue,
test, self, baymodel)
@ -125,17 +125,17 @@ class TestValidation(base.BaseTestCase):
def test_enforce_network_driver_types_one_allowed_post(self):
self._test_enforce_network_driver_types_post(
network_driver_type = 'type1',
allowed_network_driver_types = ['type1'])
allowed_network_driver_types = {'kubernetes': ['type1']})
def test_enforce_network_driver_types_two_allowed_post(self):
self._test_enforce_network_driver_types_post(
network_driver_type = 'type1',
allowed_network_driver_types = ['type1', 'type2'])
allowed_network_driver_types = {'kubernetes': ['type1', 'type2']})
def test_enforce_network_driver_types_not_allowed_post(self):
self._test_enforce_network_driver_types_post(
network_driver_type = 'type1',
allowed_network_driver_types = ['type2'],
allowed_network_driver_types = {'kubernetes': ['type2']},
assert_raised=True)
@mock.patch('pecan.request')
@ -148,7 +148,7 @@ class TestValidation(base.BaseTestCase):
allowed_network_driver_types,
assert_raised=False):
@v.enforce_network_driver_types(*allowed_network_driver_types)
@v.enforce_network_driver_types(**allowed_network_driver_types)
def test(self, baymodel_uuid):
pass
@ -156,6 +156,7 @@ class TestValidation(base.BaseTestCase):
baymodel_uuid = 'test_uuid'
baymodel = mock.MagicMock()
baymodel.network_driver = network_driver_type
baymodel.coe = 'kubernetes'
mock_baymodel_get_by_uuid.return_value = baymodel
if assert_raised:
@ -169,15 +170,15 @@ class TestValidation(base.BaseTestCase):
def test_enforce_network_driver_types_one_allowed_patch(self):
self._test_enforce_network_driver_types_patch(
network_driver_type = 'type1',
allowed_network_driver_types = ['type1'])
allowed_network_driver_types = {'kubernetes': ['type1']})
def test_enforce_network_driver_types_two_allowed_patch(self):
self._test_enforce_network_driver_types_patch(
network_driver_type = 'type1',
allowed_network_driver_types = ['type1', 'type2'])
allowed_network_driver_types = {'kubernetes': ['type1', 'type2']})
def test_enforce_network_driver_types_not_allowed_patch(self):
self._test_enforce_network_driver_types_patch(
network_driver_type = 'type1',
allowed_network_driver_types = ['type2'],
allowed_network_driver_types = {'kubernetes': ['type2']},
assert_raised=True)