[ovn] Add helper for retrieving LR associated with LRP
This will be used in the next patch set to implement anti-affinity scheduling for routers with multiple LRPs. Partial-Bug: #2002687 Signed-off-by: Frode Nordahl <frode.nordahl@canonical.com> Change-Id: Iff958195f229f7e0714f1285bb3d53497aeec9aa
This commit is contained in:
parent
0bae4b70b6
commit
898498ca3b
|
@ -785,6 +785,31 @@ class OvsdbNbOvnIdl(nb_impl_idl.OvnNbApiIdlImpl, Backend):
|
|||
gw_ports.append(lrp)
|
||||
return gw_ports
|
||||
|
||||
def get_lrouter_by_lrouter_port(self, lrp_name):
|
||||
"""Get LR by name of LRP.
|
||||
|
||||
:param lrp_name: Name of LRP.
|
||||
:type lrp_name: str
|
||||
:returns: LR associated with LRP as represented by lrp_name.
|
||||
:rtype: Optional[ovs_idl.rowview.RowView]
|
||||
"""
|
||||
lrp = self.get_lrouter_port(lrp_name)
|
||||
if not lrp:
|
||||
return None
|
||||
|
||||
# NOTE(fnordahl) This could be replaced by something like:
|
||||
#
|
||||
# lr = self.db_find_rows(
|
||||
# 'Logical_Router',
|
||||
# ('ports', '{>}', lrp.uuid))
|
||||
#
|
||||
# However, ovsdbapp does not currently support the '{>}' operator.
|
||||
for lr in self._tables['Logical_Router'].rows.values():
|
||||
lr_ports = getattr(lr, 'ports', set())
|
||||
if lrp in lr_ports:
|
||||
return lr
|
||||
return None
|
||||
|
||||
def delete_lrouter_ext_gw(self, lrouter_name, if_exists=True):
|
||||
return cmd.DeleteLRouterExtGwCommand(self, lrouter_name, if_exists)
|
||||
|
||||
|
|
|
@ -166,6 +166,7 @@ class FakeOvsdbNbOvnIdl(object):
|
|||
self.get_schema_version = mock.Mock(return_value='3.6.0')
|
||||
self.get_lrouter_port = mock.Mock()
|
||||
self.schedule_unhosted_gateways = mock.Mock()
|
||||
self.get_lrouter_by_lrouter_port = mock.Mock()
|
||||
|
||||
|
||||
class FakeOvsdbSbOvnIdl(object):
|
||||
|
|
|
@ -913,6 +913,19 @@ class TestNBImplIdlOvn(TestDBImplIdlOvn):
|
|||
utils.ovn_name('lr-id-f'))
|
||||
self.assertEqual([gw1_row], gw_ports)
|
||||
|
||||
def test_get_lrouter_by_lrouter_port(self):
|
||||
self.assertIsNone(
|
||||
self.nb_ovn_idl.get_lrouter_by_lrouter_port('not_there'))
|
||||
self._load_nb_db()
|
||||
self.assertIsNone(
|
||||
self.nb_ovn_idl.get_lrouter_by_lrouter_port('not_there'))
|
||||
lr_row = self._find_ovsdb_fake_row(
|
||||
self.lrouter_table,
|
||||
'name',
|
||||
utils.ovn_name('lr-id-a'))
|
||||
lr = self.nb_ovn_idl.get_lrouter_by_lrouter_port('lrp-orp-id-a1')
|
||||
self.assertEqual(lr.uuid, lr_row.uuid)
|
||||
|
||||
|
||||
class TestSBImplIdlOvnBase(TestDBImplIdlOvn):
|
||||
|
||||
|
|
Loading…
Reference in New Issue