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.db import models_v2
|
||||||
from quantum.extensions import l3
|
from quantum.extensions import l3
|
||||||
from quantum.openstack.common import log as logging
|
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.openstack.common import uuidutils
|
||||||
from quantum import policy
|
from quantum import policy
|
||||||
|
|
||||||
@ -352,8 +353,14 @@ class L3_NAT_db_mixin(l3.RouterPluginBase):
|
|||||||
|
|
||||||
routers = self.get_sync_data(context.elevated(), [router_id])
|
routers = self.get_sync_data(context.elevated(), [router_id])
|
||||||
l3_rpc_agent_api.L3AgentNofity.routers_updated(context, routers)
|
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']}
|
'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,
|
def _confirm_router_interface_not_in_use(self, context, router_id,
|
||||||
subnet_id):
|
subnet_id):
|
||||||
@ -391,9 +398,9 @@ class L3_NAT_db_mixin(l3.RouterPluginBase):
|
|||||||
raise q_exc.SubnetMismatchForPort(
|
raise q_exc.SubnetMismatchForPort(
|
||||||
port_id=port_id,
|
port_id=port_id,
|
||||||
subnet_id=interface_info['subnet_id'])
|
subnet_id=interface_info['subnet_id'])
|
||||||
|
subnet_id = port_db['fixed_ips'][0]['subnet_id']
|
||||||
self._confirm_router_interface_not_in_use(
|
self._confirm_router_interface_not_in_use(
|
||||||
context, router_id,
|
context, router_id, subnet_id)
|
||||||
port_db['fixed_ips'][0]['subnet_id'])
|
|
||||||
self.delete_port(context, port_db['id'], l3_port_check=False)
|
self.delete_port(context, port_db['id'], l3_port_check=False)
|
||||||
elif 'subnet_id' in interface_info:
|
elif 'subnet_id' in interface_info:
|
||||||
subnet_id = interface_info['subnet_id']
|
subnet_id = interface_info['subnet_id']
|
||||||
@ -412,6 +419,7 @@ class L3_NAT_db_mixin(l3.RouterPluginBase):
|
|||||||
|
|
||||||
for p in ports:
|
for p in ports:
|
||||||
if p['fixed_ips'][0]['subnet_id'] == subnet_id:
|
if p['fixed_ips'][0]['subnet_id'] == subnet_id:
|
||||||
|
port_id = p['id']
|
||||||
self.delete_port(context, p['id'], l3_port_check=False)
|
self.delete_port(context, p['id'], l3_port_check=False)
|
||||||
found = True
|
found = True
|
||||||
break
|
break
|
||||||
@ -423,6 +431,13 @@ class L3_NAT_db_mixin(l3.RouterPluginBase):
|
|||||||
subnet_id=subnet_id)
|
subnet_id=subnet_id)
|
||||||
routers = self.get_sync_data(context.elevated(), [router_id])
|
routers = self.get_sync_data(context.elevated(), [router_id])
|
||||||
l3_rpc_agent_api.L3AgentNofity.routers_updated(context, routers)
|
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):
|
def _get_floatingip(self, context, id):
|
||||||
try:
|
try:
|
||||||
|
@ -42,6 +42,8 @@ from quantum.extensions import l3
|
|||||||
from quantum import manager
|
from quantum import manager
|
||||||
from quantum.openstack.common import cfg
|
from quantum.openstack.common import cfg
|
||||||
from quantum.openstack.common import log as logging
|
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.openstack.common import uuidutils
|
||||||
from quantum.tests.unit import test_api_v2
|
from quantum.tests.unit import test_api_v2
|
||||||
from quantum.tests.unit import test_db_plugin
|
from quantum.tests.unit import test_db_plugin
|
||||||
@ -296,6 +298,14 @@ class L3NatDBTestCase(test_db_plugin.QuantumDbPluginV2TestCase):
|
|||||||
test_config['extension_manager'] = ext_mgr
|
test_config['extension_manager'] = ext_mgr
|
||||||
super(L3NatDBTestCase, self).setUp()
|
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,
|
def _create_router(self, fmt, tenant_id, name=None,
|
||||||
admin_state_up=None, set_context=False):
|
admin_state_up=None, set_context=False):
|
||||||
data = {'router': {'tenant_id': tenant_id}}
|
data = {'router': {'tenant_id': tenant_id}}
|
||||||
@ -477,6 +487,18 @@ class L3NatDBTestCase(test_db_plugin.QuantumDbPluginV2TestCase):
|
|||||||
body = self._show('ports', r_port_id,
|
body = self._show('ports', r_port_id,
|
||||||
expected_code=exc.HTTPNotFound.code)
|
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):
|
def test_router_add_interface_subnet_with_bad_tenant_returns_404(self):
|
||||||
with mock.patch('quantum.context.Context.to_dict') as tdict:
|
with mock.patch('quantum.context.Context.to_dict') as tdict:
|
||||||
tenant_id = _uuid()
|
tenant_id = _uuid()
|
||||||
|
Loading…
Reference in New Issue
Block a user