[aim-mapping] Preserve BD reference on PTG update
When updating the AIM EPG (on account of update to the corresponding PTG), the attributes that are not being updated also need to be populated in the AIM EPG resource before its passed to the AIM manager to perform the update (since we perform update as a create operation with override option). Change-Id: I9bbcfecea44a953204f8f4d2449fc7b96cd4d197 Closes-bug: 1631307
This commit is contained in:
parent
0a9192f568
commit
77bc49a420
|
@ -261,7 +261,7 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
|||
@log.log_method_call
|
||||
def update_policy_target_group_precommit(self, context):
|
||||
session = context._plugin_context.session
|
||||
provided_contracts, consumed_contracts = [], []
|
||||
provided_contracts, consumed_contracts = None, None
|
||||
if 'provided_policy_rule_sets' in context.current:
|
||||
provided_contracts = self._get_aim_contract_names(
|
||||
session, context.current['provided_policy_rule_sets'])
|
||||
|
@ -269,8 +269,13 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
|||
consumed_contracts = self._get_aim_contract_names(
|
||||
session, context.current['consumed_policy_rule_sets'])
|
||||
|
||||
if provided_contracts or consumed_contracts:
|
||||
aim_epg = self._aim_endpoint_group(session, context.current)
|
||||
aim_epg = self._get_aim_endpoint_group(session, context.current)
|
||||
if aim_epg and ((provided_contracts is not None) or (
|
||||
consumed_contracts is not None)):
|
||||
if provided_contracts is not None:
|
||||
aim_epg.provided_contract_names = provided_contracts
|
||||
if consumed_contracts is not None:
|
||||
aim_epg.consumed_contract_names = consumed_contracts
|
||||
ptg_db = context._plugin._get_policy_target_group(
|
||||
context._plugin_context, context.current['id'])
|
||||
if ptg_db['l2_policy_id']:
|
||||
|
@ -280,13 +285,6 @@ class AIMMappingDriver(nrd.CommonNeutronBase, aim_rpc.AIMMappingRPCMixin):
|
|||
# infra svc contracts
|
||||
self._add_implicit_svc_contracts_to_epg(context, l2p_db,
|
||||
aim_epg)
|
||||
provided_contracts += aim_epg.provided_contract_names
|
||||
consumed_contracts += aim_epg.consumed_contract_names
|
||||
|
||||
aim_ctx = self._get_aim_context(context)
|
||||
self.aim.update(aim_ctx, aim_epg,
|
||||
**{'provided_contract_names': provided_contracts,
|
||||
'consumed_contract_names': consumed_contracts})
|
||||
|
||||
@log.log_method_call
|
||||
def delete_policy_target_group_precommit(self, context):
|
||||
|
|
|
@ -674,12 +674,20 @@ class TestPolicyTargetGroup(AIMBaseTestCase):
|
|||
self._aim_context, aim_resource.ApplicationProfile,
|
||||
tenant_name=aim_tenant_name, name=aim_app_profile_name)
|
||||
self.assertEqual(1, len(aim_app_profiles))
|
||||
req = self.new_show_request('networks', l2p['network_id'],
|
||||
fmt=self.fmt)
|
||||
net = self.deserialize(self.fmt,
|
||||
req.get_response(self.api))['network']
|
||||
bd = self.aim_mgr.get(
|
||||
self._aim_context, aim_resource.BridgeDomain.from_dn(
|
||||
net['apic:distinguished_names']['BridgeDomain']))
|
||||
aim_epgs = self.aim_mgr.find(
|
||||
self._aim_context, aim_resource.EndpointGroup, name=aim_epg_name)
|
||||
self.assertEqual(1, len(aim_epgs))
|
||||
self.assertEqual(aim_epg_name, aim_epgs[0].name)
|
||||
self.assertEqual(aim_tenant_name, aim_epgs[0].tenant_name)
|
||||
self.assertEqual(ptg['name'], aim_epgs[0].display_name)
|
||||
self.assertEqual(bd.name, aim_epgs[0].bd_name)
|
||||
|
||||
self._validate_contracts(aim_epgs[0], prs_lists, l2p)
|
||||
|
||||
|
@ -705,6 +713,7 @@ class TestPolicyTargetGroup(AIMBaseTestCase):
|
|||
self.assertEqual(1, len(aim_epgs))
|
||||
self.assertEqual(aim_epg_name, aim_epgs[0].name)
|
||||
self._validate_contracts(aim_epgs[0], new_prs_lists, l2p)
|
||||
self.assertEqual(bd.name, aim_epgs[0].bd_name)
|
||||
|
||||
self.delete_policy_target_group(ptg_id, expected_res_status=204)
|
||||
self.show_policy_target_group(ptg_id, expected_res_status=404)
|
||||
|
@ -748,11 +757,19 @@ class TestPolicyTargetGroup(AIMBaseTestCase):
|
|||
self._aim_context, aim_resource.ApplicationProfile,
|
||||
tenant_name=aim_tenant_name, name=aim_app_profile_name)
|
||||
self.assertEqual(1, len(aim_app_profiles))
|
||||
req = self.new_show_request('networks', l2p['network_id'],
|
||||
fmt=self.fmt)
|
||||
net = self.deserialize(self.fmt,
|
||||
req.get_response(self.api))['network']
|
||||
bd = self.aim_mgr.get(
|
||||
self._aim_context, aim_resource.BridgeDomain.from_dn(
|
||||
net['apic:distinguished_names']['BridgeDomain']))
|
||||
aim_epgs = self.aim_mgr.find(
|
||||
self._aim_context, aim_resource.EndpointGroup, name=aim_epg_name)
|
||||
self.assertEqual(1, len(aim_epgs))
|
||||
self.assertEqual(aim_epg_name, aim_epgs[0].name)
|
||||
self.assertEqual(aim_tenant_name, aim_epgs[0].tenant_name)
|
||||
self.assertEqual(bd.name, aim_epgs[0].bd_name)
|
||||
|
||||
self.assertEqual(aim_epgs[0].dn,
|
||||
ptg['apic:distinguished_names']['EndpointGroup'])
|
||||
|
@ -760,6 +777,23 @@ class TestPolicyTargetGroup(AIMBaseTestCase):
|
|||
self.assertEqual(aim_epgs[0].dn,
|
||||
ptg_show['apic:distinguished_names']['EndpointGroup'])
|
||||
|
||||
new_name = 'new name'
|
||||
new_prs_lists = self._get_provided_consumed_prs_lists()
|
||||
self.update_policy_target_group(
|
||||
ptg_id, expected_res_status=200, name=new_name,
|
||||
provided_policy_rule_sets={new_prs_lists['provided']['id']:
|
||||
'scope'},
|
||||
consumed_policy_rule_sets={new_prs_lists['consumed']['id']:
|
||||
'scope'})['policy_target_group']
|
||||
aim_epg_name = str(self.name_mapper.policy_target_group(
|
||||
self._neutron_context.session, ptg_id, new_name))
|
||||
aim_epgs = self.aim_mgr.find(
|
||||
self._aim_context, aim_resource.EndpointGroup, name=aim_epg_name)
|
||||
self.assertEqual(1, len(aim_epgs))
|
||||
self.assertEqual(aim_epg_name, aim_epgs[0].name)
|
||||
self._validate_contracts(aim_epgs[0], new_prs_lists, l2p)
|
||||
self.assertEqual(bd.name, aim_epgs[0].bd_name)
|
||||
|
||||
self.delete_policy_target_group(ptg_id, expected_res_status=204)
|
||||
self.show_policy_target_group(ptg_id, expected_res_status=404)
|
||||
# Implicitly created subnet should be deleted
|
||||
|
|
Loading…
Reference in New Issue