VIF_TYPE_802_QBG = '802.1qbg'
VIF_TYPE_802_QBH = '802.1qbh'
VIF_TYPE_HYPERV = 'hyperv'
+VIF_TYPE_MIDONET = 'midonet'
VIF_TYPE_OTHER = 'other'
VIF_TYPES = [VIF_TYPE_UNBOUND, VIF_TYPE_BINDING_FAILED, VIF_TYPE_OVS,
VIF_TYPE_IVS, VIF_TYPE_BRIDGE, VIF_TYPE_802_QBG,
- VIF_TYPE_802_QBH, VIF_TYPE_HYPERV, VIF_TYPE_OTHER]
+ VIF_TYPE_802_QBH, VIF_TYPE_HYPERV, VIF_TYPE_MIDONET,
+ VIF_TYPE_OTHER]
EXTENDED_ATTRIBUTES_2_0 = {
from neutron.db import external_net_db
from neutron.db import l3_db
from neutron.db import models_v2
+from neutron.db import portbindings_db
from neutron.db import securitygroups_db
from neutron.extensions import external_net as ext_net
from neutron.extensions import l3
+from neutron.extensions import portbindings
from neutron.extensions import securitygroup as ext_sg
from neutron.openstack.common import excutils
from neutron.openstack.common import log as logging
class MidonetPluginV2(db_base_plugin_v2.NeutronDbPluginV2,
+ portbindings_db.PortBindingMixin,
external_net_db.External_net_db_mixin,
l3_db.L3_NAT_db_mixin,
agentschedulers_db.DhcpAgentSchedulerDbMixin,
securitygroups_db.SecurityGroupDbMixin):
supported_extension_aliases = ['external-net', 'router', 'security-group',
- 'agent' 'dhcp_agent_scheduler']
+ 'agent' 'dhcp_agent_scheduler', 'binding']
__native_bulk_support = False
def __init__(self):
self.setup_rpc()
db.configure_db()
+ self.base_binding_dict = {
+ portbindings.VIF_TYPE: portbindings.VIF_TYPE_MIDONET,
+ portbindings.CAPABILITIES: {
+ portbindings.CAP_PORT_FILTER:
+ 'security-group' in self.supported_extension_aliases}}
+
def _get_provider_router(self):
if self.provider_router is None:
self.provider_router = self.client.get_router(
if _is_vif_port(port_data):
# Bind security groups to the port
sg_ids = self._get_security_groups_on_port(context, port)
- self._bind_port_to_sgs(context, port_data, sg_ids)
+ self._bind_port_to_sgs(context, new_port, sg_ids)
# Create port chains
port_chains = {}
self.client.add_dhcp_route_option(bridge, cidr, ip,
METADATA_DEFAULT_IP)
+ self._process_portbindings_create_and_update(context,
+ port_data, new_port)
except Exception as ex:
# Try removing the MidoNet port before raising an exception.
with excutils.save_and_reraise_exception():
{"net_id": port_data["network_id"], "err": ex})
self.client.delete_port(bridge_port.get_id())
- LOG.debug(_("MidonetPluginV2.create_port exiting: port=%r"), port_data)
- return port_data
+ LOG.debug(_("MidonetPluginV2.create_port exiting: port=%r"), new_port)
+ return new_port
def get_port(self, context, id, fields=None):
"""Retrieve port."""
sg_ids = self._get_security_groups_on_port(context, port)
self._bind_port_to_sgs(context, p, sg_ids)
+ self._process_portbindings_create_and_update(context,
+ port['port'],
+ p)
return p
def create_router(self, context, router):
import sys
import neutron.common.test_lib as test_lib
+from neutron.extensions import portbindings
+from neutron.tests.unit import _test_extension_portbindings as test_bindings
import neutron.tests.unit.midonet.mock_lib as mock_lib
import neutron.tests.unit.test_db_plugin as test_plugin
import neutron.tests.unit.test_extension_security_group as sg
def test_requested_subnet_id_v4_and_v6(self):
pass
+
+ def test_vif_port_binding(self):
+ with self.port(name='myname') as port:
+ self.assertEqual('midonet', port['port']['binding:vif_type'])
+ self.assertTrue(port['port']['admin_state_up'])
+
+
+class TestMidonetPluginPortBinding(test_bindings.PortBindingsTestCase,
+ MidonetPluginV2TestCase):
+
+ VIF_TYPE = portbindings.VIF_TYPE_MIDONET
+ HAS_PORT_FILTER = True
+
+ def setUp(self):
+ super(TestMidonetPluginPortBinding, self).setUp()