validate l2p update at plugin level
No driver currently supports updating a PTG's L2P, we should validate this at the plugin level to avoid code duplication. Change-Id: Iecd061f1ade16b57e0588ae984a4c570730956e1 Closes-Bug: 1500641
This commit is contained in:
@@ -552,19 +552,6 @@ class ResourceMappingDriver(api.PolicyDriver, local_api.LocalAPI,
|
||||
|
||||
@log.log
|
||||
def update_policy_target_group_precommit(self, context):
|
||||
# REVISIT(rkukura): We could potentially allow updates to
|
||||
# l2_policy_id when no policy targets exist. This would
|
||||
# involve removing each old subnet from the l3_policy's
|
||||
# router, deleting each old subnet, creating a new subnet on
|
||||
# the new l2_policy's network, and adding that subnet to the
|
||||
# l3_policy's router in postcommit. Its also possible that new
|
||||
# subnet[s] would be provided explicitly as part of the
|
||||
# update.
|
||||
old_l2p = context.original['l2_policy_id']
|
||||
new_l2p = context.current['l2_policy_id']
|
||||
if old_l2p and old_l2p != new_l2p:
|
||||
raise exc.L2PolicyUpdateOfPolicyTargetGroupNotSupported()
|
||||
|
||||
if set(context.original['subnets']) - set(context.current['subnets']):
|
||||
raise exc.PolicyTargetGroupSubnetRemovalNotSupported()
|
||||
|
||||
|
||||
@@ -460,6 +460,19 @@ class GroupPolicyPlugin(group_policy_mapping_db.GroupPolicyMappingDbPlugin):
|
||||
updated_policy_target_group = super(
|
||||
GroupPolicyPlugin, self).update_policy_target_group(
|
||||
context, policy_target_group_id, policy_target_group)
|
||||
# REVISIT(rkukura): We could potentially allow updates to
|
||||
# l2_policy_id when no policy targets exist. This would
|
||||
# involve removing each old subnet from the l3_policy's
|
||||
# router, deleting each old subnet, creating a new subnet on
|
||||
# the new l2_policy's network, and adding that subnet to the
|
||||
# l3_policy's router in postcommit. Its also possible that new
|
||||
# subnet[s] would be provided explicitly as part of the
|
||||
# update.
|
||||
old_l2p = original_policy_target_group['l2_policy_id']
|
||||
new_l2p = updated_policy_target_group['l2_policy_id']
|
||||
if old_l2p and old_l2p != new_l2p:
|
||||
raise gp_exc.L2PolicyUpdateOfPolicyTargetGroupNotSupported()
|
||||
|
||||
self.extension_manager.process_update_policy_target_group(
|
||||
session, policy_target_group, updated_policy_target_group)
|
||||
self._validate_shared_update(
|
||||
|
||||
@@ -654,6 +654,17 @@ class TestPolicyTargetGroup(GroupPolicyPluginTestCase):
|
||||
self.assertEqual('ManagementPolicyTargetGroupExists',
|
||||
res['NeutronError']['type'])
|
||||
|
||||
def test_update_l2p_rejectet(self):
|
||||
l2p_1 = self.create_l2_policy()['l2_policy']
|
||||
l2p_2 = self.create_l2_policy()['l2_policy']
|
||||
ptg = self.create_policy_target_group(
|
||||
l2_policy_id=l2p_1['id'],
|
||||
expected_res_status=201)['policy_target_group']
|
||||
res = self.update_policy_target_group(
|
||||
ptg['id'], l2_policy_id=l2p_2['id'], expected_res_status=400)
|
||||
self.assertEqual('L2PolicyUpdateOfPolicyTargetGroupNotSupported',
|
||||
res['NeutronError']['type'])
|
||||
|
||||
|
||||
class TestExternalSegment(GroupPolicyPluginTestCase):
|
||||
|
||||
|
||||
@@ -108,39 +108,7 @@ class TestImplicitL2Policy(ImplicitPolicyTestCase):
|
||||
res = req.get_response(self.ext_api)
|
||||
self.assertEqual(res.status_int, webob.exc.HTTPOk.code)
|
||||
|
||||
def test_update_from_implicit(self):
|
||||
# Create policy_target group with implicit L2 policy.
|
||||
ptg = self.create_policy_target_group()
|
||||
ptg_id = ptg['policy_target_group']['id']
|
||||
l2p1_id = ptg['policy_target_group']['l2_policy_id']
|
||||
req = self.new_show_request('l2_policies', l2p1_id, fmt=self.fmt)
|
||||
l2p1 = self.deserialize(self.fmt, req.get_response(self.ext_api))
|
||||
self.assertEqual(ptg['policy_target_group']['name'],
|
||||
l2p1['l2_policy']['name'])
|
||||
|
||||
# Update policy_target group to explicit L2 policy.
|
||||
l2p2 = self.create_l2_policy()
|
||||
l2p2_id = l2p2['l2_policy']['id']
|
||||
data = {'policy_target_group': {'l2_policy_id': l2p2_id}}
|
||||
req = self.new_update_request('policy_target_groups', data, ptg_id)
|
||||
ptg = self.deserialize(self.fmt, req.get_response(self.ext_api))
|
||||
self.assertEqual(l2p2_id, ptg['policy_target_group']['l2_policy_id'])
|
||||
|
||||
# Verify old L2 policy was cleaned up.
|
||||
req = self.new_show_request('l2_policies', l2p1_id, fmt=self.fmt)
|
||||
res = req.get_response(self.ext_api)
|
||||
self.assertEqual(res.status_int, webob.exc.HTTPNotFound.code)
|
||||
|
||||
# Verify deleting policy_target group does not cleanup new L2
|
||||
# policy.
|
||||
req = self.new_delete_request('policy_target_groups', ptg_id)
|
||||
res = req.get_response(self.ext_api)
|
||||
self.assertEqual(res.status_int, webob.exc.HTTPNoContent.code)
|
||||
req = self.new_show_request('l2_policies', l2p2_id, fmt=self.fmt)
|
||||
res = req.get_response(self.ext_api)
|
||||
self.assertEqual(res.status_int, webob.exc.HTTPOk.code)
|
||||
|
||||
def test_update_to_implicit(self):
|
||||
def test_delete_from_implicit(self):
|
||||
# Create policy_target group with explicit L2 policy.
|
||||
l2p1 = self.create_l2_policy()
|
||||
l2p1_id = l2p1['l2_policy']['id']
|
||||
@@ -148,31 +116,14 @@ class TestImplicitL2Policy(ImplicitPolicyTestCase):
|
||||
ptg_id = ptg['policy_target_group']['id']
|
||||
self.assertEqual(l2p1_id, ptg['policy_target_group']['l2_policy_id'])
|
||||
|
||||
# Update policy_target group to implicit L2 policy.
|
||||
data = {'policy_target_group': {'l2_policy_id': None}}
|
||||
req = self.new_update_request('policy_target_groups', data, ptg_id)
|
||||
ptg = self.deserialize(self.fmt, req.get_response(self.ext_api))
|
||||
l2p2_id = ptg['policy_target_group']['l2_policy_id']
|
||||
self.assertNotEqual(l2p1_id, l2p2_id)
|
||||
self.assertIsNotNone(l2p2_id)
|
||||
req = self.new_show_request('l2_policies', l2p2_id, fmt=self.fmt)
|
||||
l2p2 = self.deserialize(self.fmt, req.get_response(self.ext_api))
|
||||
self.assertEqual(ptg['policy_target_group']['name'],
|
||||
l2p2['l2_policy']['name'])
|
||||
# Delete PTG
|
||||
self.delete_policy_target_group(ptg_id, expected_res_status=204)
|
||||
|
||||
# Verify old L2 policy was not cleaned up.
|
||||
req = self.new_show_request('l2_policies', l2p1_id, fmt=self.fmt)
|
||||
res = req.get_response(self.ext_api)
|
||||
self.assertEqual(res.status_int, webob.exc.HTTPOk.code)
|
||||
|
||||
# Verify deleting policy_target group does cleanup new L2 policy.
|
||||
req = self.new_delete_request('policy_target_groups', ptg_id)
|
||||
res = req.get_response(self.ext_api)
|
||||
self.assertEqual(res.status_int, webob.exc.HTTPNoContent.code)
|
||||
req = self.new_show_request('l2_policies', l2p2_id, fmt=self.fmt)
|
||||
res = req.get_response(self.ext_api)
|
||||
self.assertEqual(res.status_int, webob.exc.HTTPNotFound.code)
|
||||
|
||||
|
||||
class TestImplicitL3Policy(ImplicitPolicyTestCase):
|
||||
|
||||
|
||||
Reference in New Issue
Block a user