From 2621940ded76b30333beb3369bb4214301ee7d78 Mon Sep 17 00:00:00 2001 From: Joe Mills Date: Mon, 17 Aug 2015 04:08:32 +0000 Subject: [PATCH] Add network to SubnetContext The network context is useful in the subnet context so that mechanism drivers can access information such as the provider network type. Closes-Bug: #1481882 Signed-off-by: Joe Mills Change-Id: I718c80512af0f2a43855efb16c2c0da69ef6b741 --- neutron/plugins/ml2/driver_context.py | 9 ++++++++- neutron/plugins/ml2/plugin.py | 12 +++++++++--- .../tests/unit/plugins/ml2/drivers/mechanism_test.py | 3 +++ 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/neutron/plugins/ml2/driver_context.py b/neutron/plugins/ml2/driver_context.py index ef418fe16..72eccbf91 100644 --- a/neutron/plugins/ml2/driver_context.py +++ b/neutron/plugins/ml2/driver_context.py @@ -60,10 +60,13 @@ class NetworkContext(MechanismDriverContext, api.NetworkContext): class SubnetContext(MechanismDriverContext, api.SubnetContext): - def __init__(self, plugin, plugin_context, subnet, original_subnet=None): + def __init__(self, plugin, plugin_context, subnet, network, + original_subnet=None): super(SubnetContext, self).__init__(plugin, plugin_context) self._subnet = subnet self._original_subnet = original_subnet + self._network_context = NetworkContext(plugin, plugin_context, + network) @property def current(self): @@ -73,6 +76,10 @@ class SubnetContext(MechanismDriverContext, api.SubnetContext): def original(self): return self._original_subnet + @property + def network(self): + return self._network_context + class PortContext(MechanismDriverContext, api.PortContext): diff --git a/neutron/plugins/ml2/plugin.py b/neutron/plugins/ml2/plugin.py index 79741afba..377581b93 100644 --- a/neutron/plugins/ml2/plugin.py +++ b/neutron/plugins/ml2/plugin.py @@ -801,7 +801,9 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, result = super(Ml2Plugin, self).create_subnet(context, subnet) self.extension_manager.process_create_subnet( context, subnet[attributes.SUBNET], result) - mech_context = driver_context.SubnetContext(self, context, result) + network = self.get_network(context, result['network_id']) + mech_context = driver_context.SubnetContext(self, context, + result, network) self.mechanism_manager.create_subnet_precommit(mech_context) return result, mech_context @@ -829,8 +831,10 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, context, id, subnet) self.extension_manager.process_update_subnet( context, subnet[attributes.SUBNET], updated_subnet) + network = self.get_network(context, updated_subnet['network_id']) mech_context = driver_context.SubnetContext( - self, context, updated_subnet, original_subnet=original_subnet) + self, context, updated_subnet, network, + original_subnet=original_subnet) self.mechanism_manager.update_subnet_precommit(mech_context) # TODO(apech) - handle errors raised by update_subnet, potentially @@ -907,8 +911,10 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, # If allocated is None, then all the IPAllocation were # correctly deleted during the previous pass. if not allocated: + network = self.get_network(context, subnet['network_id']) mech_context = driver_context.SubnetContext(self, context, - subnet) + subnet, + network) self.mechanism_manager.delete_subnet_precommit( mech_context) diff --git a/neutron/tests/unit/plugins/ml2/drivers/mechanism_test.py b/neutron/tests/unit/plugins/ml2/drivers/mechanism_test.py index 57b5f6f5e..de2accc2d 100644 --- a/neutron/tests/unit/plugins/ml2/drivers/mechanism_test.py +++ b/neutron/tests/unit/plugins/ml2/drivers/mechanism_test.py @@ -62,6 +62,9 @@ class TestMechanismDriver(api.MechanismDriver): assert(context.current['id'] == context.original['id']) else: assert(not context.original) + network_context = context.network + assert(isinstance(network_context, api.NetworkContext)) + self._check_network_context(network_context, False) def create_subnet_precommit(self, context): self._check_subnet_context(context, False) -- 2.45.2