diff --git a/etc/quantum/plugins/cisco/cisco_plugins.ini b/etc/quantum/plugins/cisco/cisco_plugins.ini index d5c7e41917b..d5897086866 100644 --- a/etc/quantum/plugins/cisco/cisco_plugins.ini +++ b/etc/quantum/plugins/cisco/cisco_plugins.ini @@ -1,6 +1,7 @@ [PLUGINS] #ucs_plugin=quantum.plugins.cisco.ucs.cisco_ucs_plugin_v2.UCSVICPlugin #nexus_plugin=quantum.plugins.cisco.nexus.cisco_nexus_plugin_v2.NexusPlugin +vswitch_plugin=quantum.plugins.openvswitch.ovs_quantum_plugin.OVSQuantumPluginV2 [INVENTORY] #ucs_plugin=quantum.plugins.cisco.ucs.cisco_ucs_inventory_v2.UCSInventory diff --git a/etc/quantum/plugins/cisco/l2network_plugin.ini b/etc/quantum/plugins/cisco/l2network_plugin.ini index 218e1e37240..848ab218364 100644 --- a/etc/quantum/plugins/cisco/l2network_plugin.ini +++ b/etc/quantum/plugins/cisco/l2network_plugin.ini @@ -13,8 +13,8 @@ max_port_profiles=65568 max_networks=65568 [MODEL] -#model_class=quantum.plugins.cisco.models.l2network_multi_blade.L2NetworkMultiBlade -model_class=quantum.plugins.cisco.models.network_multi_blade_v2.NetworkMultiBladeV2 +#model_class=quantum.plugins.cisco.models.network_multi_blade_v2.NetworkMultiBladeV2 +model_class=quantum.plugins.cisco.models.virt_phy_sw_v2.VirtualPhysicalSwitchModelV2 [SEGMENTATION] manager_class=quantum.plugins.cisco.segmentation.l2network_vlan_mgr_v2.L2NetworkVLANMgr diff --git a/quantum/plugins/cisco/db/network_db_v2.py b/quantum/plugins/cisco/db/network_db_v2.py index ab0c67df558..0c3bea8ef19 100644 --- a/quantum/plugins/cisco/db/network_db_v2.py +++ b/quantum/plugins/cisco/db/network_db_v2.py @@ -28,6 +28,7 @@ from quantum.plugins.cisco.db import network_models_v2 from quantum.plugins.cisco.db import nexus_models_v2 from quantum.plugins.cisco.db import ucs_models_v2 from quantum.plugins.cisco import l2network_plugin_configuration as conf +from quantum.plugins.openvswitch import ovs_models_v2 def initialize(): @@ -525,3 +526,14 @@ def update_credential(tenant_id, credential_id, except exc.NoResultFound: raise c_exc.CredentialNotFound(credential_id=credential_id, tenant_id=tenant_id) + + +def get_ovs_vlans(): + session = db.get_session() + try: + bindings = (session.query(ovs_models_v2.VlanAllocation). + filter_by(allocated=True). + all()) + except exc.NoResultFound: + return [] + return [binding.vlan_id for binding in bindings] diff --git a/quantum/plugins/cisco/models/virt_phy_sw_v2.py b/quantum/plugins/cisco/models/virt_phy_sw_v2.py index 91cdddb4c58..60f83a5f6df 100644 --- a/quantum/plugins/cisco/models/virt_phy_sw_v2.py +++ b/quantum/plugins/cisco/models/virt_phy_sw_v2.py @@ -163,6 +163,10 @@ class VirtualPhysicalSwitchModelV2(quantum_plugin_base_v2.QuantumPluginBaseV2): else: return func(*args) + def _get_segmentation_id(self, network_id): + binding_seg_id = odb.get_network_binding(None, network_id) + return binding_seg_id.segmentation_id + def create_network(self, context, network): """ Perform this operation in the context of the configured device @@ -174,12 +178,12 @@ class VirtualPhysicalSwitchModelV2(quantum_plugin_base_v2.QuantumPluginBaseV2): ovs_output = self._invoke_plugin_per_device(const.VSWITCH_PLUGIN, self._func_name(), args) - vlan_id = odb.get_vlan(ovs_output[0]['id']) + vlan_id = self._get_segmentation_id(ovs_output[0]['id']) vlan_name = conf.VLAN_NAME_PREFIX + str(vlan_id) - vlan_ids = odb.get_vlans() + vlan_ids = cdb.get_ovs_vlans() vlanids = '' for v_id in vlan_ids: - vlanids = str(v_id[0]) + ',' + vlanids + vlanids = str(v_id) + ',' + vlanids vlanids = vlanids.strip(',') args = [ovs_output[0]['tenant_id'], ovs_output[0]['name'], ovs_output[0]['id'], vlan_name, vlan_id, @@ -202,7 +206,7 @@ class VirtualPhysicalSwitchModelV2(quantum_plugin_base_v2.QuantumPluginBaseV2): args = [context, networks] ovs_output = self._plugins[ const.VSWITCH_PLUGIN].create_network_bulk(context, networks) - vlan_ids = odb.get_vlans() + vlan_ids = cdb.get_ovs_vlans() vlanids = '' for v_id in vlan_ids: vlanids = str(v_id[0]) + ',' + vlanids @@ -210,7 +214,7 @@ class VirtualPhysicalSwitchModelV2(quantum_plugin_base_v2.QuantumPluginBaseV2): LOG.debug("ovs_output: %s\n " % ovs_output) ovs_networks = ovs_output for ovs_network in ovs_networks: - vlan_id = odb.get_vlan(ovs_network['id']) + vlan_id = self._get_segmentation_id(ovs_network['id']) vlan_name = conf.VLAN_NAME_PREFIX + str(vlan_id) args = [ovs_network['tenant_id'], ovs_network['name'], ovs_network['id'], vlan_name, vlan_id, @@ -232,8 +236,8 @@ class VirtualPhysicalSwitchModelV2(quantum_plugin_base_v2.QuantumPluginBaseV2): ovs_output = self._invoke_plugin_per_device(const.VSWITCH_PLUGIN, self._func_name(), args) - vlan_id = odb.get_vlan(ovs_output[0]['id']) - vlan_ids = ','.join(str(vlan[0]) for vlan in odb.get_vlans()) + vlan_id = self._get_segmentation_id(ovs_output[0]['id']) + vlan_ids = ','.join(str(vlan[0]) for vlan in cdb.get_ovs_vlans()) args = [ovs_output[0]['tenant_id'], id, {'vlan_id': vlan_id}, {'net_admin_state': ovs_output[0]['admin_state_up']}, {'vlan_ids': vlan_ids}] @@ -251,7 +255,7 @@ class VirtualPhysicalSwitchModelV2(quantum_plugin_base_v2.QuantumPluginBaseV2): base_plugin_ref = QuantumManager.get_plugin() n = base_plugin_ref.get_network(context, id) tenant_id = n['tenant_id'] - vlan_id = odb.get_vlan(id) + vlan_id = self._get_segmentation_id(id) output = [] args = [tenant_id, id, {const.VLANID:vlan_id}, {const.CONTEXT:context}, diff --git a/quantum/tests/unit/cisco/test_network_plugin.py b/quantum/tests/unit/cisco/test_network_plugin.py index 87137ab803b..00f7448fb49 100644 --- a/quantum/tests/unit/cisco/test_network_plugin.py +++ b/quantum/tests/unit/cisco/test_network_plugin.py @@ -22,11 +22,13 @@ from quantum.common import config from quantum.common.test_lib import test_config from quantum import context from quantum.db import api as db +from quantum.db import l3_db from quantum.extensions import _quotav2_model as quotav2_model from quantum.manager import QuantumManager from quantum.plugins.cisco.common import cisco_constants as const from quantum.plugins.cisco.db import network_db_v2 from quantum.plugins.cisco.db import network_models_v2 +from quantum.plugins.openvswitch import ovs_models_v2 from quantum.openstack.common import cfg from quantum.tests.unit import test_db_plugin from quantum.wsgi import JSONDeserializer @@ -39,38 +41,13 @@ class CiscoNetworkPluginV2TestCase(test_db_plugin.QuantumDbPluginV2TestCase): _plugin_name = 'quantum.plugins.cisco.network_plugin.PluginV2' def setUp(self): - super(CiscoNetworkPluginV2TestCase, self).setUp() - db._ENGINE = None - db._MAKER = None - QuantumManager._instance = None - # Update the plugin - cfg.CONF.set_override('core_plugin', self._plugin_name) - def new_init(): db.configure_db({'sql_connection': 'sqlite://', 'base': network_models_v2.model_base.BASEV2}) with mock.patch.object(network_db_v2, 'initialize', new=new_init): - self.api = APIRouter() - - def _is_native_bulk_supported(): - plugin_obj = QuantumManager.get_plugin() - native_bulk_attr_name = ("_%s__native_bulk_support" - % plugin_obj.__class__.__name__) - return getattr(plugin_obj, native_bulk_attr_name, False) - - self._skip_native_bulk = not _is_native_bulk_supported() - - LOG.debug("%s.%s.%s done" % (__name__, self.__class__.__name__, - inspect.stack()[0][3])) - - def tearDown(self): - db.clear_db(network_models_v2.model_base.BASEV2) - db._ENGINE = None - db._MAKER = None - - cfg.CONF.reset() + super(CiscoNetworkPluginV2TestCase, self).setUp(self._plugin_name) def _get_plugin_ref(self): plugin_obj = QuantumManager.get_plugin()