Support Port Binding Extension in BigSwitch plugin
Bug #1100395 Change-Id: I7097c9f0df8742f947860098d4928d9fd328e14b
This commit is contained in:
parent
9cb412eb88
commit
d0c5befd00
@ -63,10 +63,12 @@ from quantum.db import db_base_plugin_v2
|
|||||||
from quantum.db import dhcp_rpc_base
|
from quantum.db import dhcp_rpc_base
|
||||||
from quantum.db import l3_db
|
from quantum.db import l3_db
|
||||||
from quantum.extensions import l3
|
from quantum.extensions import l3
|
||||||
|
from quantum.extensions import portbindings
|
||||||
from quantum.openstack.common import lockutils
|
from quantum.openstack.common import lockutils
|
||||||
from quantum.openstack.common import log as logging
|
from quantum.openstack.common import log as logging
|
||||||
from quantum.openstack.common import rpc
|
from quantum.openstack.common import rpc
|
||||||
from quantum.plugins.bigswitch.version import version_string_with_vcs
|
from quantum.plugins.bigswitch.version import version_string_with_vcs
|
||||||
|
from quantum import policy
|
||||||
|
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
@ -281,7 +283,10 @@ class RpcProxy(dhcp_rpc_base.DhcpRpcCallbackMixin):
|
|||||||
class QuantumRestProxyV2(db_base_plugin_v2.QuantumDbPluginV2,
|
class QuantumRestProxyV2(db_base_plugin_v2.QuantumDbPluginV2,
|
||||||
l3_db.L3_NAT_db_mixin):
|
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):
|
def __init__(self):
|
||||||
LOG.info(_('QuantumRestProxy: Starting plugin. Version=%s'),
|
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
|
# Set port state up and return that port
|
||||||
port_update = {"port": {"admin_state_up": True}}
|
port_update = {"port": {"admin_state_up": True}}
|
||||||
return super(QuantumRestProxyV2, self).update_port(context,
|
new_port = super(QuantumRestProxyV2, self).update_port(context,
|
||||||
new_port["id"],
|
new_port["id"],
|
||||||
port_update)
|
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):
|
def update_port(self, context, port_id, port):
|
||||||
"""Update values of a port.
|
"""Update values of a port.
|
||||||
@ -611,7 +632,7 @@ class QuantumRestProxyV2(db_base_plugin_v2.QuantumDbPluginV2,
|
|||||||
raise
|
raise
|
||||||
|
|
||||||
# return new_port
|
# 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):
|
def delete_port(self, context, port_id, l3_port_check=True):
|
||||||
"""Delete a port.
|
"""Delete a port.
|
||||||
@ -1200,3 +1221,17 @@ class QuantumRestProxyV2(db_base_plugin_v2.QuantumDbPluginV2,
|
|||||||
}
|
}
|
||||||
|
|
||||||
return data
|
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
|
||||||
|
@ -20,7 +20,9 @@ import os
|
|||||||
from mock import patch
|
from mock import patch
|
||||||
|
|
||||||
import quantum.common.test_lib as test_lib
|
import quantum.common.test_lib as test_lib
|
||||||
|
from quantum.extensions import portbindings
|
||||||
from quantum.manager import QuantumManager
|
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
|
import quantum.tests.unit.test_db_plugin as test_plugin
|
||||||
|
|
||||||
|
|
||||||
@ -87,9 +89,11 @@ class TestBigSwitchProxyV2HTTPResponse(test_plugin.TestV2HTTPResponse,
|
|||||||
|
|
||||||
|
|
||||||
class TestBigSwitchProxyPortsV2(test_plugin.TestPortsV2,
|
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,
|
class TestBigSwitchProxyNetworksV2(test_plugin.TestNetworksV2,
|
||||||
|
Loading…
Reference in New Issue
Block a user