]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Support Port Binding Extension in BigSwitch plugin
authorSumit Naiksatam <sumitnaiksatam@gmail.com>
Mon, 18 Feb 2013 20:58:04 +0000 (12:58 -0800)
committerSumit Naiksatam <sumitnaiksatam@gmail.com>
Tue, 19 Feb 2013 17:14:12 +0000 (09:14 -0800)
Bug #1100395

Change-Id: I7097c9f0df8742f947860098d4928d9fd328e14b

quantum/plugins/bigswitch/plugin.py
quantum/tests/unit/bigswitch/test_restproxy_plugin.py

index dfb0b5c252d5ab61b9f669d56e073bd0e6c5e5e7..0a01d4ae812e6b3fdf675efae9e4a4870fc0db7c 100644 (file)
@@ -63,10 +63,12 @@ from quantum.db import db_base_plugin_v2
 from quantum.db import dhcp_rpc_base
 from quantum.db import l3_db
 from quantum.extensions import l3
+from quantum.extensions import portbindings
 from quantum.openstack.common import lockutils
 from quantum.openstack.common import log as logging
 from quantum.openstack.common import rpc
 from quantum.plugins.bigswitch.version import version_string_with_vcs
+from quantum import policy
 
 
 LOG = logging.getLogger(__name__)
@@ -281,7 +283,10 @@ class RpcProxy(dhcp_rpc_base.DhcpRpcCallbackMixin):
 class QuantumRestProxyV2(db_base_plugin_v2.QuantumDbPluginV2,
                          l3_db.L3_NAT_db_mixin):
 
-    supported_extension_aliases = ["router"]
+    supported_extension_aliases = ["router", "binding"]
+
+    binding_view = "extension:port_binding:view"
+    binding_set = "extension:port_binding:set"
 
     def __init__(self):
         LOG.info(_('QuantumRestProxy: Starting plugin. Version=%s'),
@@ -540,9 +545,25 @@ class QuantumRestProxyV2(db_base_plugin_v2.QuantumDbPluginV2,
 
         # Set port state up and return that port
         port_update = {"port": {"admin_state_up": True}}
-        return super(QuantumRestProxyV2, self).update_port(context,
-                                                           new_port["id"],
-                                                           port_update)
+        new_port = super(QuantumRestProxyV2, self).update_port(context,
+                                                               new_port["id"],
+                                                               port_update)
+        return self._extend_port_dict_binding(context, new_port)
+
+    def get_port(self, context, id, fields=None):
+        with context.session.begin(subtransactions=True):
+            port = super(QuantumRestProxyV2, self).get_port(context, id,
+                                                            fields)
+            self._extend_port_dict_binding(context, port)
+        return self._fields(port, fields)
+
+    def get_ports(self, context, filters=None, fields=None):
+        with context.session.begin(subtransactions=True):
+            ports = super(QuantumRestProxyV2, self).get_ports(context, filters,
+                                                              fields)
+            for port in ports:
+                self._extend_port_dict_binding(context, port)
+        return [self._fields(port, fields) for port in ports]
 
     def update_port(self, context, port_id, port):
         """Update values of a port.
@@ -611,7 +632,7 @@ class QuantumRestProxyV2(db_base_plugin_v2.QuantumDbPluginV2,
             raise
 
         # return new_port
-        return new_port
+        return self._extend_port_dict_binding(context, new_port)
 
     def delete_port(self, context, port_id, l3_port_check=True):
         """Delete a port.
@@ -1200,3 +1221,17 @@ class QuantumRestProxyV2(db_base_plugin_v2.QuantumDbPluginV2,
         }
 
         return data
+
+    def _check_view_auth(self, context, resource, action):
+        return policy.check(context, action, resource)
+
+    def _enforce_set_auth(self, context, resource, action):
+        policy.enforce(context, action, resource)
+
+    def _extend_port_dict_binding(self, context, port):
+        if self._check_view_auth(context, port, self.binding_view):
+            port[portbindings.VIF_TYPE] = portbindings.VIF_TYPE_OVS
+            port[portbindings.CAPABILITIES] = {
+                portbindings.CAP_PORT_FILTER:
+                'security-group' in self.supported_extension_aliases}
+        return port
index f41d6385a250cae6b2e293a5a021f39e3a3c5543..72829ec7c640768d888890200c8fa4a7998660d6 100644 (file)
@@ -20,7 +20,9 @@ import os
 from mock import patch
 
 import quantum.common.test_lib as test_lib
+from quantum.extensions import portbindings
 from quantum.manager import QuantumManager
+from quantum.tests.unit import _test_extension_portbindings as test_bindings
 import quantum.tests.unit.test_db_plugin as test_plugin
 
 
@@ -87,9 +89,11 @@ class TestBigSwitchProxyV2HTTPResponse(test_plugin.TestV2HTTPResponse,
 
 
 class TestBigSwitchProxyPortsV2(test_plugin.TestPortsV2,
-                                BigSwitchProxyPluginV2TestCase):
+                                BigSwitchProxyPluginV2TestCase,
+                                test_bindings.PortBindingsTestCase):
 
-    pass
+    VIF_TYPE = portbindings.VIF_TYPE_OVS
+    HAS_PORT_FILTER = False
 
 
 class TestBigSwitchProxyNetworksV2(test_plugin.TestNetworksV2,