Update NB driver to re-use new methods and make code cleaner
Change-Id: I6c3520dfe9bddb30008f61bbbf0d1bc2f4ed30a2
This commit is contained in:
parent
6e0d576650
commit
31c241ce6c
ovn_bgp_agent
@ -58,7 +58,7 @@ class NBOVNBGPDriver(driver_api.AgentDriverBase):
|
||||
self._post_start_event = threading.Event()
|
||||
|
||||
@property
|
||||
def nb_idl(self):
|
||||
def nb_idl(self) -> ovn.OvsdbNbOvnIdl:
|
||||
if not self._nb_idl:
|
||||
self._post_start_event.wait()
|
||||
return self._nb_idl
|
||||
@ -83,7 +83,7 @@ class NBOVNBGPDriver(driver_api.AgentDriverBase):
|
||||
|
||||
self.ovn_routing_tables = {} # {'br-ex': 200}
|
||||
# {'br-ex': [route1, route2]}
|
||||
self.ovn_routing_tables_routes = collections.defaultdict()
|
||||
self.ovn_routing_tables_routes = collections.defaultdict(list)
|
||||
|
||||
self.ovn_local_cr_lrps = {}
|
||||
self.ovn_local_lrps = {}
|
||||
@ -223,28 +223,12 @@ class NBOVNBGPDriver(driver_api.AgentDriverBase):
|
||||
|
||||
logical_switch = port.external_ids.get(
|
||||
constants.OVN_LS_NAME_EXT_ID_KEY)
|
||||
if not logical_switch:
|
||||
return
|
||||
if self.ovn_tenant_ls.get(logical_switch):
|
||||
if not self.is_ls_provider(logical_switch):
|
||||
return
|
||||
|
||||
bridge_info = self.ovn_provider_ls.get(logical_switch)
|
||||
if bridge_info:
|
||||
# already known provider ls
|
||||
bridge_device = bridge_info['bridge_device']
|
||||
bridge_vlan = bridge_info['bridge_vlan']
|
||||
else:
|
||||
localnet, bridge_device, bridge_vlan = self._get_ls_localnet_info(
|
||||
logical_switch)
|
||||
if not bridge_device:
|
||||
# This means it is not a provider network
|
||||
self.ovn_tenant_ls[logical_switch] = True
|
||||
return False
|
||||
if not self.ovn_provider_ls.get(logical_switch):
|
||||
self.ovn_provider_ls[logical_switch] = {
|
||||
'bridge_device': bridge_device,
|
||||
'bridge_vlan': bridge_vlan,
|
||||
'localnet': localnet}
|
||||
_, bridge_device, bridge_vlan = self._get_provider_ls_info(
|
||||
logical_switch)
|
||||
|
||||
ips = port.addresses[0].strip().split(' ')[1:]
|
||||
mac = port.addresses[0].strip().split(' ')[0]
|
||||
self._expose_ip(ips, mac, logical_switch, bridge_device, bridge_vlan,
|
||||
@ -257,18 +241,12 @@ class NBOVNBGPDriver(driver_api.AgentDriverBase):
|
||||
|
||||
logical_switch = port.external_ids.get(
|
||||
constants.OVN_LS_NAME_EXT_ID_KEY)
|
||||
if not logical_switch:
|
||||
if not self.is_ls_provider(logical_switch):
|
||||
return
|
||||
localnet, bridge_device, bridge_vlan = self._get_ls_localnet_info(
|
||||
|
||||
_, bridge_device, bridge_vlan = self._get_provider_ls_info(
|
||||
logical_switch)
|
||||
|
||||
if not bridge_device:
|
||||
return
|
||||
|
||||
self.ovn_provider_ls[logical_switch] = {
|
||||
'bridge_device': bridge_device,
|
||||
'bridge_vlan': bridge_vlan,
|
||||
'localnet': localnet}
|
||||
ips = [net.split("/")[0] for net in port.networks]
|
||||
router = port.external_ids.get(constants.OVN_LR_NAME_EXT_ID_KEY)
|
||||
self._expose_ip(ips, port.mac, logical_switch, bridge_device,
|
||||
@ -401,30 +379,12 @@ class NBOVNBGPDriver(driver_api.AgentDriverBase):
|
||||
- VM IP on the provider network
|
||||
'''
|
||||
logical_switch = ips_info.get('logical_switch')
|
||||
if not logical_switch:
|
||||
if not self.is_ls_provider(logical_switch):
|
||||
return False
|
||||
|
||||
bridge_info = self.ovn_provider_ls.get(logical_switch)
|
||||
if bridge_info:
|
||||
# already known provider ls
|
||||
bridge_device = bridge_info['bridge_device']
|
||||
bridge_vlan = bridge_info['bridge_vlan']
|
||||
localnet = bridge_info['localnet']
|
||||
else:
|
||||
localnet, bridge_device, bridge_vlan = self._get_ls_localnet_info(
|
||||
logical_switch)
|
||||
if not bridge_device:
|
||||
# This means it is not a provider network
|
||||
self.ovn_tenant_ls[logical_switch] = True
|
||||
return False
|
||||
if bridge_device not in self.ovn_bridge_mappings.values():
|
||||
# This node is not properly configured, no need to expose it
|
||||
return False
|
||||
if not self.ovn_provider_ls.get(logical_switch):
|
||||
self.ovn_provider_ls[logical_switch] = {
|
||||
'bridge_device': bridge_device,
|
||||
'bridge_vlan': bridge_vlan,
|
||||
'localnet': localnet}
|
||||
_, bridge_device, bridge_vlan = self._get_provider_ls_info(
|
||||
logical_switch)
|
||||
|
||||
mac = ips_info.get('mac')
|
||||
return self._expose_ip(ips, mac, logical_switch, bridge_device,
|
||||
bridge_vlan, port_type=ips_info['type'],
|
||||
@ -592,26 +552,12 @@ class NBOVNBGPDriver(driver_api.AgentDriverBase):
|
||||
return self._expose_fip(ip, mac, logical_switch, row)
|
||||
|
||||
def _expose_fip(self, ip, mac, logical_switch, row):
|
||||
bridge_info = self.ovn_provider_ls.get(logical_switch)
|
||||
if bridge_info:
|
||||
# already known provider ls
|
||||
bridge_device = bridge_info['bridge_device']
|
||||
bridge_vlan = bridge_info['bridge_vlan']
|
||||
localnet = bridge_info['localnet']
|
||||
else:
|
||||
localnet, bridge_device, bridge_vlan = self._get_ls_localnet_info(
|
||||
logical_switch)
|
||||
if not bridge_device:
|
||||
# This means it is not a provider network
|
||||
return False
|
||||
if bridge_device not in self.ovn_bridge_mappings.values():
|
||||
# This node is not properly configured, no need to expose it
|
||||
return False
|
||||
if not self.ovn_provider_ls.get(logical_switch):
|
||||
self.ovn_provider_ls[logical_switch] = {
|
||||
'bridge_device': bridge_device,
|
||||
'bridge_vlan': bridge_vlan,
|
||||
'localnet': localnet}
|
||||
if not self.is_ls_provider(logical_switch):
|
||||
return False
|
||||
|
||||
localnet, bridge_device, bridge_vlan = self._get_provider_ls_info(
|
||||
logical_switch)
|
||||
|
||||
tenant_logical_switch = row.external_ids.get(
|
||||
constants.OVN_LS_NAME_EXT_ID_KEY)
|
||||
if not tenant_logical_switch:
|
||||
@ -861,7 +807,7 @@ class NBOVNBGPDriver(driver_api.AgentDriverBase):
|
||||
self._expose_remote_ip([vip_ip], ips_info)
|
||||
else:
|
||||
# It is a VIP on a provider network
|
||||
localnet, bridge_device, bridge_vlan = self._get_ls_localnet_info(
|
||||
localnet, bridge_device, bridge_vlan = self._get_provider_ls_info(
|
||||
vip_net)
|
||||
self._expose_provider_port([vip_ip], None, vip_net, bridge_device,
|
||||
bridge_vlan, localnet)
|
||||
|
@ -273,11 +273,11 @@ class TestNBOVNBGPDriver(test_base.TestCase):
|
||||
|
||||
@mock.patch.object(linux_net, 'get_ip_version')
|
||||
def test__ensure_lsp_exposed_no_fip_no_tenant_ls(self, mock_ip_version):
|
||||
port0 = fakes.create_object({
|
||||
'name': 'port-0',
|
||||
'addresses': ["fake_mac 192.168.0.10"],
|
||||
'type': constants.OVN_VM_VIF_PORT_TYPE,
|
||||
'external_ids': {constants.OVN_LS_NAME_EXT_ID_KEY: "test-ls"}})
|
||||
port0 = utils.create_row(
|
||||
name='port-0',
|
||||
addresses=["fake_mac 192.168.0.10"],
|
||||
type=constants.OVN_VM_VIF_PORT_TYPE,
|
||||
external_ids={constants.OVN_LS_NAME_EXT_ID_KEY: "test-ls"})
|
||||
|
||||
self.nb_bgp_driver.ovn_tenant_ls = {}
|
||||
self.nb_bgp_driver.ovn_provider_ls = {}
|
||||
@ -289,6 +289,8 @@ class TestNBOVNBGPDriver(test_base.TestCase):
|
||||
mock_expose_ip = mock.patch.object(
|
||||
self.nb_bgp_driver, '_expose_ip').start()
|
||||
mock_expose_ip.return_value = ['192.168.0.10']
|
||||
mock_is_ls_provider = mock.patch.object(
|
||||
self.nb_bgp_driver, 'is_ls_provider', return_value=True).start()
|
||||
mock_get_ls_localnet_info = mock.patch.object(
|
||||
self.nb_bgp_driver, '_get_ls_localnet_info').start()
|
||||
mock_get_ls_localnet_info.return_value = ('fake-localnet', 'br-ex', 10)
|
||||
@ -297,6 +299,7 @@ class TestNBOVNBGPDriver(test_base.TestCase):
|
||||
self.nb_bgp_driver._ensure_lsp_exposed(port0)
|
||||
|
||||
mock_get_port_external_ip_and_ls.assert_not_called()
|
||||
mock_is_ls_provider.assert_called_once_with('test-ls')
|
||||
mock_get_ls_localnet_info.assert_called_once_with('test-ls')
|
||||
mock_expose_fip.assert_not_called()
|
||||
mock_expose_ip.assert_called_once_with(
|
||||
@ -315,9 +318,12 @@ class TestNBOVNBGPDriver(test_base.TestCase):
|
||||
mock_get_ls_localnet_info.return_value = ('fake-localnet', 'br-ex', 10)
|
||||
mock_expose_ip = mock.patch.object(
|
||||
self.nb_bgp_driver, '_expose_ip').start()
|
||||
mock_is_ls_provider = mock.patch.object(
|
||||
self.nb_bgp_driver, 'is_ls_provider', return_value=True).start()
|
||||
|
||||
self.nb_bgp_driver._ensure_crlrp_exposed(port)
|
||||
|
||||
mock_is_ls_provider.assert_called_once_with('test-ls')
|
||||
mock_expose_ip.assert_called_once_with(
|
||||
['172.24.16.2'], 'fake_mac', 'test-ls', 'br-ex', 10,
|
||||
constants.OVN_CR_LRP_PORT_TYPE, ['172.24.16.2/24'], router=None)
|
||||
@ -446,6 +452,15 @@ class TestNBOVNBGPDriver(test_base.TestCase):
|
||||
self.assertEqual(bridge_device, None)
|
||||
self.assertEqual(bridge_vlan, None)
|
||||
|
||||
def test_is_ip_exposed(self):
|
||||
self.nb_bgp_driver._exposed_ips['fake-switch'] = {'fake-ip': {}}
|
||||
self.assertTrue(self.nb_bgp_driver.is_ip_exposed('fake-switch',
|
||||
'fake-ip'))
|
||||
self.assertFalse(self.nb_bgp_driver.is_ip_exposed('no-switch',
|
||||
'fake-ip'))
|
||||
self.assertFalse(self.nb_bgp_driver.is_ip_exposed('fake-switch',
|
||||
'other-ip'))
|
||||
|
||||
def _test_expose_ip(self, ips, ips_info):
|
||||
mock_expose_provider_port = mock.patch.object(
|
||||
self.nb_bgp_driver, '_expose_provider_port').start()
|
||||
|
Loading…
x
Reference in New Issue
Block a user