Allowed Address Pairs support in NEC plugin
Closes-Bug: #1230184 Change-Id: I84d4dda9f88f7bbb524e173b0274db013f69b7e3
This commit is contained in:
parent
ba835ab38c
commit
4e167f6bc7
@ -25,6 +25,7 @@ from neutron.common import rpc as q_rpc
|
|||||||
from neutron.common import topics
|
from neutron.common import topics
|
||||||
from neutron.db import agents_db
|
from neutron.db import agents_db
|
||||||
from neutron.db import agentschedulers_db
|
from neutron.db import agentschedulers_db
|
||||||
|
from neutron.db import allowedaddresspairs_db as addr_pair_db
|
||||||
from neutron.db import db_base_plugin_v2
|
from neutron.db import db_base_plugin_v2
|
||||||
from neutron.db import dhcp_rpc_base
|
from neutron.db import dhcp_rpc_base
|
||||||
from neutron.db import external_net_db
|
from neutron.db import external_net_db
|
||||||
@ -33,6 +34,7 @@ from neutron.db import portbindings_base
|
|||||||
from neutron.db import portbindings_db
|
from neutron.db import portbindings_db
|
||||||
from neutron.db import quota_db # noqa
|
from neutron.db import quota_db # noqa
|
||||||
from neutron.db import securitygroups_rpc_base as sg_db_rpc
|
from neutron.db import securitygroups_rpc_base as sg_db_rpc
|
||||||
|
from neutron.extensions import allowedaddresspairs as addr_pair
|
||||||
from neutron.extensions import portbindings
|
from neutron.extensions import portbindings
|
||||||
from neutron.openstack.common import importutils
|
from neutron.openstack.common import importutils
|
||||||
from neutron.openstack.common import log as logging
|
from neutron.openstack.common import log as logging
|
||||||
@ -58,7 +60,8 @@ class NECPluginV2(db_base_plugin_v2.NeutronDbPluginV2,
|
|||||||
agentschedulers_db.DhcpAgentSchedulerDbMixin,
|
agentschedulers_db.DhcpAgentSchedulerDbMixin,
|
||||||
nec_router.L3AgentSchedulerDbMixin,
|
nec_router.L3AgentSchedulerDbMixin,
|
||||||
packet_filter.PacketFilterMixin,
|
packet_filter.PacketFilterMixin,
|
||||||
portbindings_db.PortBindingMixin):
|
portbindings_db.PortBindingMixin,
|
||||||
|
addr_pair_db.AllowedAddressPairsMixin):
|
||||||
"""NECPluginV2 controls an OpenFlow Controller.
|
"""NECPluginV2 controls an OpenFlow Controller.
|
||||||
|
|
||||||
The Neutron NECPluginV2 maps L2 logical networks to L2 virtualized networks
|
The Neutron NECPluginV2 maps L2 logical networks to L2 virtualized networks
|
||||||
@ -72,6 +75,7 @@ class NECPluginV2(db_base_plugin_v2.NeutronDbPluginV2,
|
|||||||
information to and from the plugin.
|
information to and from the plugin.
|
||||||
"""
|
"""
|
||||||
_supported_extension_aliases = ["agent",
|
_supported_extension_aliases = ["agent",
|
||||||
|
"allowed-address-pairs",
|
||||||
"binding",
|
"binding",
|
||||||
"dhcp_agent_scheduler",
|
"dhcp_agent_scheduler",
|
||||||
"external-net",
|
"external-net",
|
||||||
@ -516,6 +520,10 @@ class NECPluginV2(db_base_plugin_v2.NeutronDbPluginV2,
|
|||||||
self._process_portbindings_create(context, port_data, port)
|
self._process_portbindings_create(context, port_data, port)
|
||||||
self._process_port_create_security_group(
|
self._process_port_create_security_group(
|
||||||
context, port, sgids)
|
context, port, sgids)
|
||||||
|
port[addr_pair.ADDRESS_PAIRS] = (
|
||||||
|
self._process_create_allowed_address_pairs(
|
||||||
|
context, port,
|
||||||
|
port_data.get(addr_pair.ADDRESS_PAIRS)))
|
||||||
self.notify_security_groups_member_updated(context, port)
|
self.notify_security_groups_member_updated(context, port)
|
||||||
|
|
||||||
handler = self._get_port_handler('create', port['device_owner'])
|
handler = self._get_port_handler('create', port['device_owner'])
|
||||||
@ -568,12 +576,22 @@ class NECPluginV2(db_base_plugin_v2.NeutronDbPluginV2,
|
|||||||
"id=%(id)s port=%(port)s ."),
|
"id=%(id)s port=%(port)s ."),
|
||||||
{'id': id, 'port': port})
|
{'id': id, 'port': port})
|
||||||
need_port_update_notify = False
|
need_port_update_notify = False
|
||||||
|
changed_fixed_ips = 'fixed_ips' in port['port']
|
||||||
with context.session.begin(subtransactions=True):
|
with context.session.begin(subtransactions=True):
|
||||||
old_port = super(NECPluginV2, self).get_port(context, id)
|
old_port = super(NECPluginV2, self).get_port(context, id)
|
||||||
new_port = super(NECPluginV2, self).update_port(context, id, port)
|
new_port = super(NECPluginV2, self).update_port(context, id, port)
|
||||||
portinfo_changed = self._process_portbindings_update(
|
portinfo_changed = self._process_portbindings_update(
|
||||||
context, port['port'], new_port)
|
context, port['port'], new_port)
|
||||||
need_port_update_notify = self.update_security_group_on_port(
|
if addr_pair.ADDRESS_PAIRS in port['port']:
|
||||||
|
self._delete_allowed_address_pairs(context, id)
|
||||||
|
self._process_create_allowed_address_pairs(
|
||||||
|
context, new_port,
|
||||||
|
port['port'][addr_pair.ADDRESS_PAIRS])
|
||||||
|
need_port_update_notify = True
|
||||||
|
elif changed_fixed_ips:
|
||||||
|
self._check_fixed_ips_and_address_pairs_no_overlap(
|
||||||
|
context, new_port)
|
||||||
|
need_port_update_notify |= self.update_security_group_on_port(
|
||||||
context, id, port, old_port, new_port)
|
context, id, port, old_port, new_port)
|
||||||
|
|
||||||
need_port_update_notify |= self.is_security_group_member_updated(
|
need_port_update_notify |= self.is_security_group_member_updated(
|
||||||
|
@ -46,13 +46,28 @@ class NecSecurityGroupsTestCase(test_sg.SecurityGroupDBTestCase):
|
|||||||
RESOURCE_ATTRIBUTE_MAP[item].
|
RESOURCE_ATTRIBUTE_MAP[item].
|
||||||
copy())
|
copy())
|
||||||
super(NecSecurityGroupsTestCase, self).setUp(PLUGIN_NAME)
|
super(NecSecurityGroupsTestCase, self).setUp(PLUGIN_NAME)
|
||||||
self.notifier = manager.NeutronManager.get_plugin().notifier
|
plugin = manager.NeutronManager.get_plugin()
|
||||||
|
self.notifier = plugin.notifier
|
||||||
|
self.rpc = plugin.callback_sg
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
super(NecSecurityGroupsTestCase, self).tearDown()
|
super(NecSecurityGroupsTestCase, self).tearDown()
|
||||||
attributes.RESOURCE_ATTRIBUTE_MAP = self._attribute_map_bk_
|
attributes.RESOURCE_ATTRIBUTE_MAP = self._attribute_map_bk_
|
||||||
|
|
||||||
|
|
||||||
|
class TestNecSGServerRpcCallBack(
|
||||||
|
test_sg_rpc.SGServerRpcCallBackMixinTestCase,
|
||||||
|
NecSecurityGroupsTestCase):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
# TODO(amotoki): The test is blocked by 1229954
|
||||||
|
# class TestNecSGServerRpcCallBackXML(
|
||||||
|
# test_sg_rpc.SGServerRpcCallBackMixinTestCaseXML,
|
||||||
|
# NecSecurityGroupsTestCase):
|
||||||
|
# pass
|
||||||
|
|
||||||
|
|
||||||
class TestNecSecurityGroups(NecSecurityGroupsTestCase,
|
class TestNecSecurityGroups(NecSecurityGroupsTestCase,
|
||||||
test_sg.TestSecurityGroups,
|
test_sg.TestSecurityGroups,
|
||||||
test_sg_rpc.SGNotificationTestMixin):
|
test_sg_rpc.SGNotificationTestMixin):
|
||||||
|
Loading…
Reference in New Issue
Block a user