]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Add network to SubnetContext
authorJoe Mills <joe@midokura.com>
Mon, 17 Aug 2015 04:08:32 +0000 (04:08 +0000)
committerJoe Mills <joe@midokura.com>
Mon, 17 Aug 2015 05:35:20 +0000 (05:35 +0000)
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<joe@midokura.com>
Change-Id: I718c80512af0f2a43855efb16c2c0da69ef6b741

neutron/plugins/ml2/driver_context.py
neutron/plugins/ml2/plugin.py
neutron/tests/unit/plugins/ml2/drivers/mechanism_test.py

index ef418fe16e21770dc2569fcac7401ddc2c485736..72eccbf91d23846c5bd28e42eaf2355d18c7cb78 100644 (file)
@@ -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):
 
index 79741afba7f386e87fcc4d2a7f685633030cb44c..377581b93c8e5452b5b5f4267faa7a43422dc1be 100644 (file)
@@ -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)
 
index 57b5f6f5e2e8d963659c6256e8b52497703d9b0d..de2accc2d0a80e4b51d3a6d170ff4bd448e735ab 100644 (file)
@@ -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)