Merge "Make network-driver check based on COE type"
This commit is contained in:
commit
413764cbe2
|
@ -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.
|
||||
|
||||
|
|
|
@ -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, '
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue