]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Add support to the port binding extension for the NVP plugin.
authorarmando-migliaccio <amigliaccio@nicira.com>
Tue, 4 Jun 2013 22:45:06 +0000 (15:45 -0700)
committerarmando-migliaccio <amigliaccio@nicira.com>
Tue, 23 Jul 2013 19:19:11 +0000 (12:19 -0700)
Also, this patch removes the non-serializable object for
port profile. This went undetected for quite some time.

Implements blueprint nvp-port-binding-extension

Change-Id: I380570f08e92f75d6431dcda6fac2a770887bb48

neutron/db/migration/alembic_migrations/versions/176a85fc7d79_add_portbindings_db.py
neutron/db/portbindings_db.py
neutron/plugins/nicira/NeutronPlugin.py
neutron/tests/unit/nicira/test_nicira_plugin.py

index 560861c289e7634f04857ac97476ab9f1308f0c3..6834838c7cd7d97e18347a47847b7f4ab661c51a 100644 (file)
@@ -32,6 +32,7 @@ down_revision = 'grizzly'
 migration_for_plugins = [
     'neutron.plugins.openvswitch.ovs_neutron_plugin.OVSNeutronPluginV2',
     'neutron.plugins.linuxbridge.lb_neutron_plugin.LinuxBridgePluginV2',
+    'neutron.plugins.nicira.NeutronPlugin.NvpPluginV2',
 ]
 
 from alembic import op
index 4a2c5302bf6469056d34f4095a4c544cc7e9f702..a551064648d92f91394ee9f788e92c504438a233 100644 (file)
@@ -70,6 +70,10 @@ class PortBindingMixin(object):
 
     def _process_portbindings_create_and_update(self, context, port_data,
                                                 port):
+        binding_profile = port.get(portbindings.PROFILE)
+        binding_profile_set = attributes.is_attr_set(binding_profile)
+        if not binding_profile_set and binding_profile is not None:
+            del port[portbindings.PROFILE]
         host = port_data.get(portbindings.HOST_ID)
         host_set = attributes.is_attr_set(host)
         if not host_set:
index b5f50c3d26fe6c08aa79596c218829550f77028c..597c5aa7516f589220d8643b4c8e1797522370a1 100644 (file)
@@ -46,11 +46,13 @@ from neutron.db import extraroute_db
 from neutron.db import l3_db
 from neutron.db import l3_gwmode_db
 from neutron.db import models_v2
+from neutron.db import portbindings_db
 from neutron.db import portsecurity_db
 from neutron.db import quota_db  # noqa
 from neutron.db import securitygroups_db
 from neutron.extensions import extraroute
 from neutron.extensions import l3
+from neutron.extensions import portbindings as pbin
 from neutron.extensions import portsecurity as psec
 from neutron.extensions import providernet as pnet
 from neutron.extensions import securitygroup as ext_sg
@@ -130,6 +132,7 @@ class NVPRpcCallbacks(dhcp_rpc_base.DhcpRpcCallbackMixin):
 class NvpPluginV2(db_base_plugin_v2.NeutronDbPluginV2,
                   extraroute_db.ExtraRoute_db_mixin,
                   l3_gwmode_db.L3_NAT_db_mixin,
+                  portbindings_db.PortBindingMixin,
                   portsecurity_db.PortSecurityDbMixin,
                   securitygroups_db.SecurityGroupDbMixin,
                   mac_db.MacLearningDbMixin,
@@ -145,6 +148,7 @@ class NvpPluginV2(db_base_plugin_v2.NeutronDbPluginV2,
     """
 
     supported_extension_aliases = ["agent",
+                                   "binding",
                                    "dhcp_agent_scheduler",
                                    "ext_gw_mode",
                                    "extraroute",
@@ -196,6 +200,12 @@ class NvpPluginV2(db_base_plugin_v2.NeutronDbPluginV2,
                                           self.nvp_opts.concurrent_connections,
                                           self.nvp_opts.nvp_gen_timeout)
 
+        self.extra_binding_dict = {
+            pbin.VIF_TYPE: pbin.VIF_TYPE_OVS,
+            pbin.CAPABILITIES: {
+                pbin.CAP_PORT_FILTER:
+                'security-group' in self.supported_extension_aliases}}
+
         db.configure_db()
         # Extend the fault map
         self._extend_fault_map()
@@ -1079,8 +1089,7 @@ class NvpPluginV2(db_base_plugin_v2.NeutronDbPluginV2,
         return net
 
     def get_ports(self, context, filters=None, fields=None):
-        if filters is None:
-            filters = {}
+        filters = filters or {}
         with context.session.begin(subtransactions=True):
             neutron_lports = super(NvpPluginV2, self).get_ports(
                 context, filters)
@@ -1256,6 +1265,8 @@ class NvpPluginV2(db_base_plugin_v2.NeutronDbPluginV2,
             del port_data[ext_qos.QUEUE]
             self._extend_port_port_security_dict(context, port_data)
             self._extend_port_qos_queue(context, port_data)
+            self._process_portbindings_create_and_update(context,
+                                                         port, port_data)
         net = self.get_network(context, port_data['network_id'])
         self.schedule_network(context, net)
         if notify_dhcp_agent:
@@ -1360,6 +1371,9 @@ class NvpPluginV2(db_base_plugin_v2.NeutronDbPluginV2,
             # remove since it will be added in extend based on policy
             del ret_port[ext_qos.QUEUE]
             self._extend_port_qos_queue(context, ret_port)
+            self._process_portbindings_create_and_update(context,
+                                                         port['port'],
+                                                         port)
         return ret_port
 
     def delete_port(self, context, id, l3_port_check=True,
index bf7c6cc9254e286babd390434d91a0e56093d89a..8884550ddcb5e994806c8f6378fa4b818009ac71 100644 (file)
@@ -25,6 +25,7 @@ from neutron.common import constants
 import neutron.common.test_lib as test_lib
 from neutron import context
 from neutron.extensions import l3
+from neutron.extensions import portbindings
 from neutron.extensions import providernet as pnet
 from neutron.extensions import securitygroup as secgrp
 from neutron import manager
@@ -36,6 +37,7 @@ from neutron.plugins.nicira import NeutronPlugin
 from neutron.plugins.nicira import NvpApiClient
 from neutron.plugins.nicira.NvpApiClient import NVPVersion
 from neutron.plugins.nicira import nvplib
+from neutron.tests.unit import _test_extension_portbindings as test_bindings
 from neutron.tests.unit.nicira import fake_nvpapiclient
 import neutron.tests.unit.nicira.test_networkgw as test_l2_gw
 import neutron.tests.unit.test_db_plugin as test_plugin
@@ -105,7 +107,12 @@ class TestNiciraV2HTTPResponse(test_plugin.TestV2HTTPResponse,
     pass
 
 
-class TestNiciraPortsV2(test_plugin.TestPortsV2, NiciraPluginV2TestCase):
+class TestNiciraPortsV2(test_plugin.TestPortsV2,
+                        NiciraPluginV2TestCase,
+                        test_bindings.PortBindingsTestCase):
+
+    VIF_TYPE = portbindings.VIF_TYPE_OVS
+    HAS_PORT_FILTER = True
 
     def test_exhaust_ports_overlay_network(self):
         cfg.CONF.set_override('max_lp_per_overlay_ls', 1, group='NVP')