Send notification on router interface create/delete
This fixes bug #1060985 for Quantum Change-Id: I39d2d15340913dd0fad753c3e95fb74d329481a9 Signed-off-by: Julien Danjou <julien@danjou.info>
This commit is contained in:
parent
0f6d26b1ac
commit
58d39cccf2
@ -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:
|
||||
|
@ -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()
|
||||
|
Loading…
Reference in New Issue
Block a user