Merge "Treat MLAG pairs as a single physical network"
This commit is contained in:
commit
fc46b04ad7
@ -27,6 +27,9 @@ from oslo_utils import excutils
|
|||||||
import requests
|
import requests
|
||||||
from six import add_metaclass
|
from six import add_metaclass
|
||||||
|
|
||||||
|
from neutron.db import api as db_api
|
||||||
|
from neutron.db.models.plugins.ml2 import vlanallocation
|
||||||
|
|
||||||
from networking_arista._i18n import _, _LI, _LW, _LE
|
from networking_arista._i18n import _, _LI, _LW, _LE
|
||||||
from networking_arista.common import db_lib
|
from networking_arista.common import db_lib
|
||||||
from networking_arista.common import exceptions as arista_exc
|
from networking_arista.common import exceptions as arista_exc
|
||||||
@ -84,6 +87,21 @@ class AristaRPCWrapperBase(object):
|
|||||||
self.security_group_driver = arista_sec_gp.AristaSecGroupSwitchDriver(
|
self.security_group_driver = arista_sec_gp.AristaSecGroupSwitchDriver(
|
||||||
self._ndb)
|
self._ndb)
|
||||||
|
|
||||||
|
# We denote mlag_pair physnets as peer1_peer2 in the physnet name, the
|
||||||
|
# following builds a mapping of peer name to physnet name for use
|
||||||
|
# during port binding
|
||||||
|
self.mlag_pairs = {}
|
||||||
|
session = db_api.get_reader_session()
|
||||||
|
with session.begin():
|
||||||
|
physnets = session.query(
|
||||||
|
vlanallocation.VlanAllocation.physical_network
|
||||||
|
).distinct().all()
|
||||||
|
for (physnet,) in physnets:
|
||||||
|
if '_' in physnet:
|
||||||
|
peers = physnet.split('_')
|
||||||
|
self.mlag_pairs[peers[0]] = physnet
|
||||||
|
self.mlag_pairs[peers[1]] = physnet
|
||||||
|
|
||||||
# Indication of CVX availabililty in the driver.
|
# Indication of CVX availabililty in the driver.
|
||||||
self._cvx_available = True
|
self._cvx_available = True
|
||||||
|
|
||||||
@ -1989,6 +2007,10 @@ class AristaRPCWrapperEapi(AristaRPCWrapperBase):
|
|||||||
if hostname:
|
if hostname:
|
||||||
switch_id = response[1]['hosts'][hostname]['name']
|
switch_id = response[1]['hosts'][hostname]['name']
|
||||||
|
|
||||||
|
# Check if the switch is part of an MLAG pair, and lookup the
|
||||||
|
# pair's physnet name if so
|
||||||
|
physnet = self.mlag_pairs.get(physnet, physnet)
|
||||||
|
|
||||||
for k in response[1]['hosts']:
|
for k in response[1]['hosts']:
|
||||||
mac_to_hostname[response[1]['hosts'][k]['name']] = k
|
mac_to_hostname[response[1]['hosts'][k]['name']] = k
|
||||||
|
|
||||||
|
@ -271,7 +271,8 @@ class AristaDriver(driver_api.MechanismDriver):
|
|||||||
mac_to_hostname = physnet_info.get('mac_to_hostname', {})
|
mac_to_hostname = physnet_info.get('mac_to_hostname', {})
|
||||||
for link in link_info:
|
for link in link_info:
|
||||||
if link.get('switch_id') in mac_to_hostname:
|
if link.get('switch_id') in mac_to_hostname:
|
||||||
return mac_to_hostname.get(link.get('switch_id'))
|
physnet = mac_to_hostname.get(link.get('switch_id'))
|
||||||
|
return self.rpc.mlag_pairs.get(physnet, physnet)
|
||||||
|
|
||||||
def _bind_port_to_baremetal(self, context, segment, physnet_info):
|
def _bind_port_to_baremetal(self, context, segment, physnet_info):
|
||||||
|
|
||||||
|
@ -1559,7 +1559,7 @@ class AristaRPCWrapperInvalidConfigTestCase(base.BaseTestCase):
|
|||||||
arista_ml2.AristaRPCWrapperEapi, ndb)
|
arista_ml2.AristaRPCWrapperEapi, ndb)
|
||||||
|
|
||||||
|
|
||||||
class NegativeRPCWrapperTestCase(base.BaseTestCase):
|
class NegativeRPCWrapperTestCase(testlib_api.SqlTestCase):
|
||||||
"""Negative test cases to test the RPC between Arista Driver and EOS."""
|
"""Negative test cases to test the RPC between Arista Driver and EOS."""
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
@ -21,7 +21,6 @@ from oslo_config import cfg
|
|||||||
|
|
||||||
from neutron.db import api as db_api
|
from neutron.db import api as db_api
|
||||||
from neutron.db.models.plugins.ml2 import vlanallocation
|
from neutron.db.models.plugins.ml2 import vlanallocation
|
||||||
from neutron.tests import base
|
|
||||||
from neutron.tests.unit import testlib_api
|
from neutron.tests.unit import testlib_api
|
||||||
|
|
||||||
from networking_arista.ml2.drivers.driver_helpers import VlanSyncService
|
from networking_arista.ml2.drivers.driver_helpers import VlanSyncService
|
||||||
@ -33,7 +32,7 @@ EAPI_SEND_FUNC = ('networking_arista.ml2.arista_ml2.AristaRPCWrapperEapi'
|
|||||||
'._send_eapi_req')
|
'._send_eapi_req')
|
||||||
|
|
||||||
|
|
||||||
class AristaTypeDriverTest(base.BaseTestCase):
|
class AristaTypeDriverTest(testlib_api.SqlTestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(AristaTypeDriverTest, self).setUp()
|
super(AristaTypeDriverTest, self).setUp()
|
||||||
|
Loading…
Reference in New Issue
Block a user