From: Julien Danjou Date: Fri, 4 Jan 2013 15:29:20 +0000 (+0100) Subject: Send notification on router interface create/delete X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=c4004b6d97e995a8375affbb70cc5884da5214bc;p=openstack-build%2Fneutron-build.git Send notification on router interface create/delete This fixes bug #1060985 for Quantum Change-Id: I39d2d15340913dd0fad753c3e95fb74d329481a9 Signed-off-by: Julien Danjou --- diff --git a/quantum/db/l3_db.py b/quantum/db/l3_db.py index 576e62c9d..a5701c350 100644 --- a/quantum/db/l3_db.py +++ b/quantum/db/l3_db.py @@ -32,6 +32,7 @@ from quantum.db import model_base from quantum.db import models_v2 from quantum.extensions import l3 from quantum.openstack.common import log as logging +from quantum.openstack.common.notifier import api as notifier_api from quantum.openstack.common import uuidutils from quantum import policy @@ -352,8 +353,14 @@ class L3_NAT_db_mixin(l3.RouterPluginBase): routers = self.get_sync_data(context.elevated(), [router_id]) l3_rpc_agent_api.L3AgentNofity.routers_updated(context, routers) - return {'port_id': port['id'], + info = {'port_id': port['id'], 'subnet_id': port['fixed_ips'][0]['subnet_id']} + notifier_api.notify(context, + notifier_api.publisher_id('network'), + 'router.interface.create', + notifier_api.CONF.default_notification_level, + {'router.interface': info}) + return info def _confirm_router_interface_not_in_use(self, context, router_id, subnet_id): @@ -391,9 +398,9 @@ class L3_NAT_db_mixin(l3.RouterPluginBase): raise q_exc.SubnetMismatchForPort( port_id=port_id, subnet_id=interface_info['subnet_id']) + subnet_id = port_db['fixed_ips'][0]['subnet_id'] self._confirm_router_interface_not_in_use( - context, router_id, - port_db['fixed_ips'][0]['subnet_id']) + context, router_id, subnet_id) self.delete_port(context, port_db['id'], l3_port_check=False) elif 'subnet_id' in interface_info: subnet_id = interface_info['subnet_id'] @@ -412,6 +419,7 @@ class L3_NAT_db_mixin(l3.RouterPluginBase): for p in ports: if p['fixed_ips'][0]['subnet_id'] == subnet_id: + port_id = p['id'] self.delete_port(context, p['id'], l3_port_check=False) found = True break @@ -423,6 +431,13 @@ class L3_NAT_db_mixin(l3.RouterPluginBase): subnet_id=subnet_id) routers = self.get_sync_data(context.elevated(), [router_id]) l3_rpc_agent_api.L3AgentNofity.routers_updated(context, routers) + notifier_api.notify(context, + notifier_api.publisher_id('network'), + 'router.interface.delete', + notifier_api.CONF.default_notification_level, + {'router.interface': + {'port_id': port_id, + 'subnet_id': subnet_id}}) def _get_floatingip(self, context, id): try: diff --git a/quantum/tests/unit/test_l3_plugin.py b/quantum/tests/unit/test_l3_plugin.py index 26039b373..ce954e2d5 100644 --- a/quantum/tests/unit/test_l3_plugin.py +++ b/quantum/tests/unit/test_l3_plugin.py @@ -42,6 +42,8 @@ from quantum.extensions import l3 from quantum import manager from quantum.openstack.common import cfg from quantum.openstack.common import log as logging +from quantum.openstack.common.notifier import test_notifier +from quantum.openstack.common.notifier import api as notifier_api from quantum.openstack.common import uuidutils from quantum.tests.unit import test_api_v2 from quantum.tests.unit import test_db_plugin @@ -296,6 +298,14 @@ class L3NatDBTestCase(test_db_plugin.QuantumDbPluginV2TestCase): test_config['extension_manager'] = ext_mgr super(L3NatDBTestCase, self).setUp() + # Set to None to reload the drivers + notifier_api._drivers = None + cfg.CONF.set_override("notification_driver", [test_notifier.__name__]) + + def tearDown(self): + test_notifier.NOTIFICATIONS = [] + super(L3NatDBTestCase, self).tearDown() + def _create_router(self, fmt, tenant_id, name=None, admin_state_up=None, set_context=False): data = {'router': {'tenant_id': tenant_id}} @@ -477,6 +487,18 @@ class L3NatDBTestCase(test_db_plugin.QuantumDbPluginV2TestCase): body = self._show('ports', r_port_id, expected_code=exc.HTTPNotFound.code) + self.assertEqual(len(test_notifier.NOTIFICATIONS), 8) + self.assertEqual( + set(n['event_type'] for n in test_notifier.NOTIFICATIONS), + set(['router.create.start', + 'router.create.end', + 'network.create.start', + 'network.create.end', + 'subnet.create.start', + 'subnet.create.end', + 'router.interface.create', + 'router.interface.delete'])) + def test_router_add_interface_subnet_with_bad_tenant_returns_404(self): with mock.patch('quantum.context.Context.to_dict') as tdict: tenant_id = _uuid()