]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Send notification on router interface create/delete
authorJulien Danjou <julien@danjou.info>
Fri, 4 Jan 2013 15:29:20 +0000 (16:29 +0100)
committerJulien Danjou <julien@danjou.info>
Thu, 17 Jan 2013 10:26:02 +0000 (11:26 +0100)
This fixes bug #1060985 for Quantum

Change-Id: I39d2d15340913dd0fad753c3e95fb74d329481a9
Signed-off-by: Julien Danjou <julien@danjou.info>
quantum/db/l3_db.py
quantum/tests/unit/test_l3_plugin.py

index 576e62c9db907c9b3186eb447a991d0e6107cb55..a5701c3504cc2bb9337574c6e25b8de3aa20da2d 100644 (file)
@@ -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:
index 26039b3739237c97341032cea0eae776d5ada826..ce954e2d564115205bc5fe6c4aada396cde7a58a 100644 (file)
@@ -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()