Merge "[OVN] Fix RowNotFound exception while waiting for metadata networks" into stable/ussuri
This commit is contained in:
commit
f35981130e
|
@ -849,7 +849,12 @@ class OvsdbSbOvnIdl(sb_impl_idl.OvnSbApiIdlImpl, Backend):
|
||||||
|
|
||||||
def get_chassis_metadata_networks(self, chassis_name):
|
def get_chassis_metadata_networks(self, chassis_name):
|
||||||
"""Return a list with the metadata networks the chassis is hosting."""
|
"""Return a list with the metadata networks the chassis is hosting."""
|
||||||
chassis = self.lookup('Chassis', chassis_name)
|
try:
|
||||||
|
chassis = self.lookup('Chassis', chassis_name)
|
||||||
|
except idlutils.RowNotFound:
|
||||||
|
LOG.warning("Couldn't find Chassis named %s in OVN while looking "
|
||||||
|
"for metadata networks", chassis_name)
|
||||||
|
return []
|
||||||
proxy_networks = chassis.external_ids.get(
|
proxy_networks = chassis.external_ids.get(
|
||||||
'neutron-metadata-proxy-networks', None)
|
'neutron-metadata-proxy-networks', None)
|
||||||
return proxy_networks.split(',') if proxy_networks else []
|
return proxy_networks.split(',') if proxy_networks else []
|
||||||
|
|
|
@ -410,6 +410,7 @@ class FakeOvsdbTable(FakeResource):
|
||||||
ovsdb_table_attrs = {
|
ovsdb_table_attrs = {
|
||||||
'rows': {},
|
'rows': {},
|
||||||
'columns': {},
|
'columns': {},
|
||||||
|
'indexes': [],
|
||||||
}
|
}
|
||||||
|
|
||||||
# Overwrite default attributes.
|
# Overwrite default attributes.
|
||||||
|
|
|
@ -17,6 +17,8 @@ import uuid
|
||||||
|
|
||||||
import mock
|
import mock
|
||||||
|
|
||||||
|
from ovsdbapp.backend import ovs_idl
|
||||||
|
|
||||||
from neutron.common.ovn import constants as ovn_const
|
from neutron.common.ovn import constants as ovn_const
|
||||||
from neutron.common.ovn import utils
|
from neutron.common.ovn import utils
|
||||||
from neutron.plugins.ml2.drivers.ovn.mech_driver.ovsdb import impl_idl_ovn
|
from neutron.plugins.ml2.drivers.ovn.mech_driver.ovsdb import impl_idl_ovn
|
||||||
|
@ -758,3 +760,51 @@ class TestNBImplIdlOvn(TestDBImplIdlOvn):
|
||||||
self._tables.pop('Port_Group', None)
|
self._tables.pop('Port_Group', None)
|
||||||
port_groups = self.nb_ovn_idl.get_port_groups()
|
port_groups = self.nb_ovn_idl.get_port_groups()
|
||||||
self.assertEqual({}, port_groups)
|
self.assertEqual({}, port_groups)
|
||||||
|
|
||||||
|
|
||||||
|
class TestSBImplIdlOvn(TestDBImplIdlOvn):
|
||||||
|
|
||||||
|
fake_set = {
|
||||||
|
'chassis': [
|
||||||
|
{'name': 'fake-chassis',
|
||||||
|
'external_ids': {'neutron-metadata-proxy-networks': 'fake-id'}}],
|
||||||
|
}
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super(TestSBImplIdlOvn, self).setUp()
|
||||||
|
self.chassis_table = fakes.FakeOvsdbTable.create_one_ovsdb_table()
|
||||||
|
|
||||||
|
self._tables = {}
|
||||||
|
self._tables['Chassis'] = self.chassis_table
|
||||||
|
|
||||||
|
with mock.patch.object(impl_idl_ovn.OvsdbSbOvnIdl, 'from_worker',
|
||||||
|
return_value=mock.Mock()):
|
||||||
|
with mock.patch.object(ovs_idl.Backend, 'autocreate_indices',
|
||||||
|
create=True):
|
||||||
|
impl_idl_ovn.OvsdbSbOvnIdl.ovsdb_connection = None
|
||||||
|
self.sb_ovn_idl = impl_idl_ovn.OvsdbSbOvnIdl(mock.MagicMock())
|
||||||
|
|
||||||
|
self.sb_ovn_idl.idl.tables = self._tables
|
||||||
|
|
||||||
|
def _load_sb_db(self):
|
||||||
|
fake_chassis = TestSBImplIdlOvn.fake_set['chassis']
|
||||||
|
self._load_ovsdb_fake_rows(self.chassis_table, fake_chassis)
|
||||||
|
|
||||||
|
@mock.patch.object(impl_idl_ovn.LOG, 'warning')
|
||||||
|
def test_get_chassis_metadata_networks_chassis_empty(self, mock_log):
|
||||||
|
chassis_name = 'fake-chassis'
|
||||||
|
result = self.sb_ovn_idl.get_chassis_metadata_networks(chassis_name)
|
||||||
|
|
||||||
|
mock_log.assert_called_once_with(
|
||||||
|
"Couldn't find Chassis named %s in OVN while looking "
|
||||||
|
"for metadata networks", chassis_name)
|
||||||
|
self.assertEqual([], result)
|
||||||
|
|
||||||
|
@mock.patch.object(impl_idl_ovn.LOG, 'warning')
|
||||||
|
def test_get_chassis_metadata_networks(self, mock_log):
|
||||||
|
chassis_name = 'fake-chassis'
|
||||||
|
self._load_sb_db()
|
||||||
|
result = self.sb_ovn_idl.get_chassis_metadata_networks(chassis_name)
|
||||||
|
|
||||||
|
self.assertFalse(mock_log.called)
|
||||||
|
self.assertEqual(['fake-id'], result)
|
||||||
|
|
Loading…
Reference in New Issue