[apic-mapping] notify all ports in a cluster

Change-Id: I5fa5daf76db600230d5ac2d9a39bbeafe87b4d30
This commit is contained in:
Ivar Lazzaro 2016-08-25 16:16:13 -07:00 committed by Subrahmanyam Ongole
parent 0696748490
commit 8a28222094
2 changed files with 31 additions and 0 deletions

View File

@ -2454,6 +2454,16 @@ class ApicMappingDriver(api.ResourceMappingDriver,
pointing_pts = self.gbp_plugin.get_policy_targets(
plugin_context.elevated(),
{'description': [PROXY_PORT_PREFIX + port_id]})
pt = self._port_id_to_pt(plugin_context, port_id)
if pt:
# Notify ports in cluster
cluster_ids = [pt['id']]
if pt.get('cluster_id') and pt.get('cluster_id') != pt['id']:
cluster_ids.append(pt.get('cluster_id'))
pointing_pts.extend(
self.gbp_plugin.get_policy_targets(
plugin_context.elevated(),
{'cluster_id': cluster_ids}))
ports = self._get_ports(
plugin_context, {'id': [port_id] +
[x['port_id'] for x in pointing_pts]})

View File

@ -1176,6 +1176,27 @@ class TestPolicyTarget(ApicMappingTestCase):
self.update_policy_target_group(
ptg['id'], description='opflex_eoc:', expected_res_status=400)
def test_cluster_id_notify(self):
ptg = self.create_policy_target_group(
name="ptg1")['policy_target_group']
pt1 = self.create_policy_target(
policy_target_group_id=ptg['id'])['policy_target']
# Same cluster
pt2 = self.create_policy_target(
policy_target_group_id=ptg['id'],
cluster_id=pt1['id'])['policy_target']
self.create_policy_target(
name='pt3', policy_target_group_id=ptg['id'], cluster_id=pt1['id'])
self._bind_port_to_host(pt2['port_id'], 'h1')
port = self.driver._get_port(context.get_admin_context(),
pt2['port_id'])
self.driver.notifier.port_update = mock.Mock()
self.driver._notify_port_update(context.get_admin_context(),
pt1['port_id'])
self.driver.notifier.port_update.assert_called_once_with(mock.ANY,
port)
# The above guarantees that pt3 wasn't notified
class TestPolicyTargetVlanNetwork(ApicMappingVlanTestCase,
TestPolicyTarget):