Retry on case of sqlite3.InterfaceError on FT

Following the steps done in [1] additional retries have added after
decompose in a soft refactor main methods that call to Neutron.

To clarify the refactor, the following changes have been made in FT
base methods:
- The method _create_subnet_from_net was previously responsible for
creating subnet, ports, and attaching to the router. Now, these three
actions are individual methods.
- FT calls to base methods are sorted in the following sequence:
    - Create net
    - Create subnet
    - Create port
    - Create router
    - Attach router to subnet
- Retry mechanisms have been added to all methods that make calls to
the L3_plugin for creation of resources.

As this way every small method can be cover by retry in case Neutron
reports a exception.

NOTE: due to a cross depedency with fix done in [2], some tests have
been skipped, but it will be restored in [2].

[1] https://review.opendev.org/c/openstack/ovn-octavia-provider/+/883662
[2] https://review.opendev.org/c/openstack/ovn-octavia-provider/+/911701

Related-Bug: #2020195
Change-Id: I98aad143556ff0ec7ecb365de99fd58a6dcb734e
This commit is contained in:
Fernando Royo 2024-03-08 11:32:00 +01:00
parent 40ac510729
commit 1e45693bca
4 changed files with 284 additions and 178 deletions

View File

@ -280,21 +280,28 @@ class TestOvnOctaviaBase(base.TestOVNFunctionalBase,
router = self.l3_plugin.create_router(self.context, router) router = self.l3_plugin.create_router(self.context, router)
return router['id'] return router['id']
@tenacity.retry(
retry=tenacity.retry_if_exception_type(odb_exc.DBError),
wait=tenacity.wait_exponential(),
stop=tenacity.stop_after_attempt(3),
reraise=True)
def _create_net(self, name): def _create_net(self, name):
n1 = self._make_network(self.fmt, name, True) n1 = self._make_network(self.fmt, name, True)
return n1 return n1
def _create_subnet_from_net(self, net, cidr, router_id=None, @tenacity.retry(
retry=tenacity.retry_if_exception_type(odb_exc.DBError),
wait=tenacity.wait_exponential(),
stop=tenacity.stop_after_attempt(3),
reraise=True)
def _create_subnet_from_net(self, net, cidr,
ip_version=n_const.IP_VERSION_4): ip_version=n_const.IP_VERSION_4):
res = self._create_subnet(self.fmt, net['network']['id'], res = self._create_subnet(self.fmt, net['network']['id'],
cidr, ip_version=ip_version) cidr, ip_version=ip_version)
subnet = self.deserialize(self.fmt, res)['subnet'] subnet = self.deserialize(self.fmt, res)['subnet']
self._local_net_cache[subnet['id']] = net['network']['id'] self._local_net_cache[subnet['id']] = net['network']['id']
self._local_cidr_cache[subnet['id']] = subnet['cidr'] self._local_cidr_cache[subnet['id']] = subnet['cidr']
if router_id: return net['network']['id'], subnet['id']
self._attach_router_to_subnet(subnet['id'], router_id)
port_address, port_id = self._create_port_on_network(net)
return (net['network']['id'], subnet['id'], port_address, port_id)
@tenacity.retry( @tenacity.retry(
retry=tenacity.retry_if_exception_type(odb_exc.DBError), retry=tenacity.retry_if_exception_type(odb_exc.DBError),
@ -302,9 +309,8 @@ class TestOvnOctaviaBase(base.TestOVNFunctionalBase,
stop=tenacity.stop_after_attempt(3), stop=tenacity.stop_after_attempt(3),
reraise=True) reraise=True)
def _attach_router_to_subnet(self, subnet_id, router_id): def _attach_router_to_subnet(self, subnet_id, router_id):
if router_id: self.l3_plugin.add_router_interface(
self.l3_plugin.add_router_interface( self.context, router_id, {'subnet_id': subnet_id})
self.context, router_id, {'subnet_id': subnet_id})
@tenacity.retry( @tenacity.retry(
retry=tenacity.retry_if_exception_type(odb_exc.DBError), retry=tenacity.retry_if_exception_type(odb_exc.DBError),
@ -325,6 +331,8 @@ class TestOvnOctaviaBase(base.TestOVNFunctionalBase,
if add_ref: if add_ref:
if net_id not in lb_data[ovn_const.LB_EXT_IDS_LS_REFS_KEY]: if net_id not in lb_data[ovn_const.LB_EXT_IDS_LS_REFS_KEY]:
lb_data[ovn_const.LB_EXT_IDS_LS_REFS_KEY][net_id] = 1 lb_data[ovn_const.LB_EXT_IDS_LS_REFS_KEY][net_id] = 1
else:
lb_data[ovn_const.LB_EXT_IDS_LS_REFS_KEY][net_id] += 1
else: else:
ref_ct = lb_data[ovn_const.LB_EXT_IDS_LS_REFS_KEY][net_id] ref_ct = lb_data[ovn_const.LB_EXT_IDS_LS_REFS_KEY][net_id]
if ref_ct <= 0: if ref_ct <= 0:
@ -385,22 +393,29 @@ class TestOvnOctaviaBase(base.TestOVNFunctionalBase,
force_retry_ls_to_lr_assoc=True): force_retry_ls_to_lr_assoc=True):
self._o_driver_lib.update_loadbalancer_status.reset_mock() self._o_driver_lib.update_loadbalancer_status.reset_mock()
r_id = self._create_router(
'r' + uuidutils.generate_uuid()[:4]) if create_router else None
net_info = [] net_info = []
net = self._create_net('n' + uuidutils.generate_uuid()[:4]) net1 = self._create_net('n' + uuidutils.generate_uuid()[:4])
subnet_info = self._create_subnet_from_net( network_id1, subnet_id1 = self._create_subnet_from_net(
net, '10.0.1.0/24', router_id=r_id) net1, '10.0.1.0/24')
net_info.append(subnet_info) port_address1, port_id1 = self._create_port_on_network(net1)
net = self._create_net('n' + uuidutils.generate_uuid()[:4]) net_info.append((network_id1, subnet_id1, port_address1, port_id1))
subnet_info = self._create_subnet_from_net( net2 = self._create_net('n' + uuidutils.generate_uuid()[:4])
net, '10.0.2.0/24', router_id=r_id) network_id2, subnet_id2 = self._create_subnet_from_net(
net_info.append(subnet_info) net2, '10.0.2.0/24')
net = self._create_net('n' + uuidutils.generate_uuid()[:4]) port_address2, port_id2 = self._create_port_on_network(net2)
subnet_info = self._create_subnet_from_net( net_info.append((network_id2, subnet_id2, port_address2, port_id2))
net, '10.0.3.0/24', router_id=r_id) net3 = self._create_net('n' + uuidutils.generate_uuid()[:4])
net_info.append(subnet_info) network_id3, subnet_id3 = self._create_subnet_from_net(
net3, '10.0.3.0/24')
port_address3, port_id3 = self._create_port_on_network(net3)
net_info.append((network_id3, subnet_id3, port_address3, port_id3))
r_id = self._create_router(
'r' + uuidutils.generate_uuid()[:4]) if create_router else None
self._attach_router_to_subnet(subnet_id1, r_id)
self._attach_router_to_subnet(subnet_id2, r_id)
self._attach_router_to_subnet(subnet_id3, r_id)
lb_data = {} lb_data = {}
lb_data['model'] = self._create_lb_model( lb_data['model'] = self._create_lb_model(
@ -461,7 +476,8 @@ class TestOvnOctaviaBase(base.TestOVNFunctionalBase,
return lb_data return lb_data
def _create_load_balancer_and_validate(self, subnet_info, def _create_load_balancer_and_validate(self, network_id, subnet_id,
port_address, port_id,
admin_state_up=True, admin_state_up=True,
only_model=False, only_model=False,
router_id=None, router_id=None,
@ -472,15 +488,16 @@ class TestOvnOctaviaBase(base.TestOVNFunctionalBase,
if router_id: if router_id:
lb_data[ovn_const.LB_EXT_IDS_LR_REF_KEY] = ( lb_data[ovn_const.LB_EXT_IDS_LR_REF_KEY] = (
ovn_const.LR_REF_KEY_HEADER + router_id) ovn_const.LR_REF_KEY_HEADER + router_id)
lb_data['vip_net_info'] = subnet_info lb_data['vip_net_info'] = (
network_id, subnet_id, port_address, port_id)
lb_data['model'] = self._create_lb_model( lb_data['model'] = self._create_lb_model(
vip=subnet_info[2], vip_network_id=subnet_info[0], vip=port_address, vip_network_id=network_id,
vip_subnet_id=subnet_info[1], vip_port_id=subnet_info[3], vip_subnet_id=subnet_id, vip_port_id=port_id,
admin_state_up=admin_state_up, additional_vips=additional_vips) admin_state_up=admin_state_up, additional_vips=additional_vips)
lb_data[ovn_const.LB_EXT_IDS_LS_REFS_KEY] = {} lb_data[ovn_const.LB_EXT_IDS_LS_REFS_KEY] = {}
lb_data['listeners'] = [] lb_data['listeners'] = []
lb_data['pools'] = [] lb_data['pools'] = []
self._update_ls_refs(lb_data, subnet_info[0]) self._update_ls_refs(lb_data, network_id)
if only_model: if only_model:
return lb_data return lb_data
@ -489,7 +506,7 @@ class TestOvnOctaviaBase(base.TestOVNFunctionalBase,
name = '%s%s' % (ovn_const.LB_VIP_PORT_PREFIX, name = '%s%s' % (ovn_const.LB_VIP_PORT_PREFIX,
lb_data['model'].loadbalancer_id) lb_data['model'].loadbalancer_id)
self.driver.update_port( self.driver.update_port(
self.context, subnet_info[3], {'port': {'name': name}}) self.context, port_id, {'port': {'name': name}})
if additional_vips: if additional_vips:
for index, add_vip in enumerate(additional_vips, start=1): for index, add_vip in enumerate(additional_vips, start=1):
@ -522,7 +539,7 @@ class TestOvnOctaviaBase(base.TestOVNFunctionalBase,
self.assertTrue( self.assertTrue(
self._is_lb_associated_to_ls( self._is_lb_associated_to_ls(
lb_data['model'].loadbalancer_id, lb_data['model'].loadbalancer_id,
ovn_const.LR_REF_KEY_HEADER + subnet_info[0])) ovn_const.LR_REF_KEY_HEADER + network_id))
return lb_data return lb_data
def _update_load_balancer_and_validate(self, lb_data, def _update_load_balancer_and_validate(self, lb_data,
@ -667,7 +684,6 @@ class TestOvnOctaviaBase(base.TestOVNFunctionalBase,
lb.get('external_ids')[ lb.get('external_ids')[
ovn_const.LB_EXT_IDS_LR_REF_KEY] = lb_data[ ovn_const.LB_EXT_IDS_LR_REF_KEY] = lb_data[
ovn_const.LB_EXT_IDS_LR_REF_KEY] ovn_const.LB_EXT_IDS_LR_REF_KEY]
pool_info = {} pool_info = {}
for p in lb_data.get('pools', []): for p in lb_data.get('pools', []):
member_status = {} member_status = {}

View File

@ -18,6 +18,7 @@ import multiprocessing as mp
from neutron.common import utils as n_utils from neutron.common import utils as n_utils
from oslo_utils import uuidutils from oslo_utils import uuidutils
import testtools
from ovn_octavia_provider import agent as ovn_agent from ovn_octavia_provider import agent as ovn_agent
from ovn_octavia_provider.common import config as ovn_config from ovn_octavia_provider.common import config as ovn_config
@ -51,29 +52,39 @@ class TestOvnOctaviaProviderAgent(ovn_base.TestOvnOctaviaBase):
def _test_lrp_event_handler(self, cascade=False): def _test_lrp_event_handler(self, cascade=False):
# Create Network N1 on router R1 and LBA on N1 # Create Network N1 on router R1 and LBA on N1
r1_id = self._create_router('r' + uuidutils.generate_uuid()[:4])
network_N1 = self._create_net('N' + uuidutils.generate_uuid()[:4]) network_N1 = self._create_net('N' + uuidutils.generate_uuid()[:4])
sbnet_info = self._create_subnet_from_net(network_N1, '10.0.0.0/24', network_id, subnet_id = self._create_subnet_from_net(
router_id=r1_id) network_N1, '10.0.0.0/24')
lba_data = self._create_load_balancer_and_validate(sbnet_info, port_address, port_id = self._create_port_on_network(network_N1)
router_id=r1_id)
# Create Network N2, connect it to R1 # Create Network N2, connect it to R1
network_N2 = self._create_net('N' + uuidutils.generate_uuid()[:4]) network_N2 = self._create_net('N' + uuidutils.generate_uuid()[:4])
sbnet_info2 = self._create_subnet_from_net( network_id2, subnet2_id = self._create_subnet_from_net(
network_N2, "10.0.1.0/24", router_id=r1_id) network_N2, '10.0.1.0/24')
port_address2, port_id2 = self._create_port_on_network(network_N2)
# Create Network N3
network_N3 = self._create_net('N' + uuidutils.generate_uuid()[:4])
network_id3, subnet3_id = self._create_subnet_from_net(
network_N3, '10.0.2.0/24')
port_address3, port_id3 = self._create_port_on_network(network_N3)
r1_id = self._create_router('r' + uuidutils.generate_uuid()[:4])
self._attach_router_to_subnet(subnet_id, r1_id)
self._attach_router_to_subnet(subnet2_id, r1_id)
lba_data = self._create_load_balancer_and_validate(
network_id, subnet_id, port_address, port_id, router_id=r1_id)
# Check if LBA exists in N2 LS # Check if LBA exists in N2 LS
n_utils.wait_until_true( n_utils.wait_until_true(
lambda: self._is_lb_associated_to_ls( lambda: self._is_lb_associated_to_ls(
lba_data['model'].loadbalancer_id, lba_data['model'].loadbalancer_id,
ovn_const.LR_REF_KEY_HEADER + sbnet_info2[0]), ovn_const.LR_REF_KEY_HEADER + network_id2),
timeout=10) timeout=10)
network_N3 = self._create_net('N' + uuidutils.generate_uuid()[:4])
sbnet_info3 = self._create_subnet_from_net(
network_N3, '10.0.2.0/24')
# Create Network N3
lbb_data = self._create_load_balancer_and_validate( lbb_data = self._create_load_balancer_and_validate(
sbnet_info3, multiple_lb=True) network_id3, subnet3_id, port_address3, port_id3, multiple_lb=True)
# Add N3 to R1 # Add N3 to R1
self.l3_plugin.add_router_interface( self.l3_plugin.add_router_interface(
self.context, lba_data[ self.context, lba_data[
@ -103,7 +114,7 @@ class TestOvnOctaviaProviderAgent(ovn_base.TestOvnOctaviaBase):
n_utils.wait_until_true( n_utils.wait_until_true(
lambda: self._is_lb_associated_to_ls( lambda: self._is_lb_associated_to_ls(
lbb_data['model'].loadbalancer_id, lbb_data['model'].loadbalancer_id,
ovn_const.LR_REF_KEY_HEADER + sbnet_info2[0]), ovn_const.LR_REF_KEY_HEADER + network_id2),
timeout=10) timeout=10)
lbb_id = lbb_data['model'].loadbalancer_id lbb_id = lbb_data['model'].loadbalancer_id
@ -133,7 +144,7 @@ class TestOvnOctaviaProviderAgent(ovn_base.TestOvnOctaviaBase):
# Check LBB not connected to N2 # Check LBB not connected to N2
n_utils.wait_until_true( n_utils.wait_until_true(
lambda: not self._is_lb_associated_to_ls( lambda: not self._is_lb_associated_to_ls(
lbb_id, ovn_const.LR_REF_KEY_HEADER + sbnet_info2[0]), lbb_id, ovn_const.LR_REF_KEY_HEADER + network_id2),
timeout=10) timeout=10)
def test_lrp_event_handler_with_interface_delete(self): def test_lrp_event_handler_with_interface_delete(self):
@ -142,14 +153,22 @@ class TestOvnOctaviaProviderAgent(ovn_base.TestOvnOctaviaBase):
def test_lrp_event_handler_with_loadbalancer_cascade_delete(self): def test_lrp_event_handler_with_loadbalancer_cascade_delete(self):
self._test_lrp_event_handler(cascade=True) self._test_lrp_event_handler(cascade=True)
# NOTE(froyo): Test skipped by cross depedency among this patch with this
# https://review.opendev.org/c/openstack/ovn-octavia-provider/+/911701.
# The mentioned one will enable again this test.
@testtools.skip(
'https://review.opendev.org/c/openstack/ovn-octavia-provider/+/911701')
def test_lrp_event_handler_lrp_with_external_gateway(self): def test_lrp_event_handler_lrp_with_external_gateway(self):
# Create Network N1 on router R1 and LBA on N1 # Create Network N1 on router R1 and LBA on N1
r1_id = self._create_router('r' + uuidutils.generate_uuid()[:4])
network_N1 = self._create_net('N' + uuidutils.generate_uuid()[:4]) network_N1 = self._create_net('N' + uuidutils.generate_uuid()[:4])
sbnet_info = self._create_subnet_from_net(network_N1, '10.0.0.0/24', network_id, subnet_id = self._create_subnet_from_net(
router_id=r1_id) network_N1, '10.0.0.0/24')
lba_data = self._create_load_balancer_and_validate(sbnet_info, port_address, port_id = self._create_port_on_network(network_N1)
router_id=r1_id) r1_id = self._create_router('r' + uuidutils.generate_uuid()[:4])
self._attach_router_to_subnet(subnet_id, r1_id)
lba_data = self._create_load_balancer_and_validate(
network_id, subnet_id, port_address, port_id, router_id=r1_id)
# Create provider network N2, connect it to R1 # Create provider network N2, connect it to R1
provider_net, provider_subnet = self._create_provider_network() provider_net, provider_subnet = self._create_provider_network()
@ -172,6 +191,11 @@ class TestOvnOctaviaProviderAgent(ovn_base.TestOvnOctaviaBase):
ovn_const.LR_REF_KEY_HEADER + provider_net['network']['id']), ovn_const.LR_REF_KEY_HEADER + provider_net['network']['id']),
timeout=10) timeout=10)
# NOTE(froyo): Test skipped by cross depedency among this patch with this
# https://review.opendev.org/c/openstack/ovn-octavia-provider/+/911701.
# The mentioned one will enable again this test.
@testtools.skip(
'https://review.opendev.org/c/openstack/ovn-octavia-provider/+/911701')
def test_fip_on_lb_vip(self): def test_fip_on_lb_vip(self):
"""This test checks if FIP on LB VIP is configured. """This test checks if FIP on LB VIP is configured.
@ -179,13 +203,16 @@ class TestOvnOctaviaProviderAgent(ovn_base.TestOvnOctaviaBase):
consist Floating IP address that is configured consist Floating IP address that is configured
on LB VIP port. on LB VIP port.
""" """
r1_id = self._create_router('r' + uuidutils.generate_uuid()[:4])
network_N1 = self._create_net('N' + uuidutils.generate_uuid()[:4]) network_N1 = self._create_net('N' + uuidutils.generate_uuid()[:4])
sbnet_info = self._create_subnet_from_net(network_N1, '10.0.0.0/24', network_id, subnet_id = self._create_subnet_from_net(
router_id=r1_id) network_N1, '10.0.0.0/24')
# Create LB port_address, port_id = self._create_port_on_network(network_N1)
lb_data = self._create_load_balancer_and_validate(sbnet_info, r1_id = self._create_router('r' + uuidutils.generate_uuid()[:4])
router_id=r1_id) self._attach_router_to_subnet(subnet_id, r1_id)
lb_data = self._create_load_balancer_and_validate(
network_id, subnet_id, port_address, port_id, router_id=r1_id)
# Create a pool # Create a pool
self._create_pool_and_validate(lb_data, "p1") self._create_pool_and_validate(lb_data, "p1")
pool_id = lb_data['pools'][0].pool_id pool_id = lb_data['pools'][0].pool_id
@ -245,6 +272,11 @@ class TestOvnOctaviaProviderAgent(ovn_base.TestOvnOctaviaBase):
# Make sure that LB1 is not added to provider net - e1 LS # Make sure that LB1 is not added to provider net - e1 LS
self.assertListEqual([], ls.load_balancer) self.assertListEqual([], ls.load_balancer)
# NOTE(froyo): Test skipped by cross depedency among this patch with this
# https://review.opendev.org/c/openstack/ovn-octavia-provider/+/911701.
# The mentioned one will enable again this test.
@testtools.skip(
'https://review.opendev.org/c/openstack/ovn-octavia-provider/+/911701')
def test_fip_on_lb_additional_vip(self): def test_fip_on_lb_additional_vip(self):
"""This test checks if FIP on LB additional VIP is configured. """This test checks if FIP on LB additional VIP is configured.
@ -252,21 +284,29 @@ class TestOvnOctaviaProviderAgent(ovn_base.TestOvnOctaviaBase):
consist Floating IP address that is configured consist Floating IP address that is configured
on LB additional VIP port. on LB additional VIP port.
""" """
r1_id = self._create_router('r' + uuidutils.generate_uuid()[:4])
network_N1 = self._create_net('N' + uuidutils.generate_uuid()[:4]) network_N1 = self._create_net('N' + uuidutils.generate_uuid()[:4])
sbnet_info = self._create_subnet_from_net(network_N1, '10.0.0.0/24', network_id, subnet_id = self._create_subnet_from_net(
router_id=r1_id) network_N1, '10.0.0.0/24')
sbnet_additional_info = self._create_subnet_from_net( port_address, port_id = self._create_port_on_network(network_N1)
network_N1, '10.0.1.0/24', router_id=r1_id)
network_ida, subnet_ida = self._create_subnet_from_net(
network_N1, '10.0.1.0/24')
port_addressa, port_ida = self._create_port_on_network(network_N1)
additional_vips_list = [{ additional_vips_list = [{
'ip_address': sbnet_additional_info[2], 'ip_address': port_addressa,
'port_id': sbnet_additional_info[3], 'port_id': port_ida,
'network_id': sbnet_additional_info[0], 'network_id': network_ida,
'subnet_id': sbnet_additional_info[1] 'subnet_id': subnet_ida
}] }]
r1_id = self._create_router('r' + uuidutils.generate_uuid()[:4])
self._attach_router_to_subnet(subnet_id, r1_id)
self._attach_router_to_subnet(subnet_ida, r1_id)
# Create LB # Create LB
lb_data = self._create_load_balancer_and_validate( lb_data = self._create_load_balancer_and_validate(
sbnet_info, router_id=r1_id, additional_vips=additional_vips_list) network_id, subnet_id, port_address, port_id, router_id=r1_id,
additional_vips=additional_vips_list)
# Create a pool # Create a pool
self._create_pool_and_validate(lb_data, "p1") self._create_pool_and_validate(lb_data, "p1")
pool_id = lb_data['pools'][0].pool_id pool_id = lb_data['pools'][0].pool_id

View File

@ -24,29 +24,35 @@ from ovn_octavia_provider.tests.functional import base as ovn_base
class TestOvnOctaviaProviderDriver(ovn_base.TestOvnOctaviaBase): class TestOvnOctaviaProviderDriver(ovn_base.TestOvnOctaviaBase):
def test_loadbalancer(self): def test_loadbalancer(self):
r1_id = self._create_router('r' + uuidutils.generate_uuid()[:4])
network_N1 = self._create_net('N' + uuidutils.generate_uuid()[:4]) network_N1 = self._create_net('N' + uuidutils.generate_uuid()[:4])
sbnet_info = self._create_subnet_from_net(network_N1, '10.0.0.0/24', network_id, subnet_id = self._create_subnet_from_net(
router_id=r1_id) network_N1, '10.0.0.0/24')
sbnet_additional_info = self._create_subnet_from_net( port_address, port_id = self._create_port_on_network(network_N1)
network_N1, '2001:db8:0:1::/64', router_id=r1_id,
ip_version=n_const.IP_VERSION_6) network_ida, subnet_ida = self._create_subnet_from_net(
network_N1, '2001:db8:0:1::/64', ip_version=n_const.IP_VERSION_6)
port_addressa, port_ida = self._create_port_on_network(network_N1)
additional_vips_list = [{ additional_vips_list = [{
'ip_address': sbnet_additional_info[2], 'ip_address': port_addressa,
'port_id': sbnet_additional_info[3], 'port_id': port_ida,
'network_id': sbnet_additional_info[0], 'network_id': network_ida,
'subnet_id': sbnet_additional_info[1] 'subnet_id': subnet_ida
}] }]
r1_id = self._create_router('r' + uuidutils.generate_uuid()[:4])
self._attach_router_to_subnet(subnet_id, r1_id)
self._attach_router_to_subnet(subnet_ida, r1_id)
# Create LB # Create LB
lb_data = self._create_load_balancer_and_validate( lb_data = self._create_load_balancer_and_validate(
sbnet_info, router_id=r1_id, additional_vips=additional_vips_list) network_id, subnet_id, port_address, port_id, router_id=r1_id,
additional_vips=additional_vips_list)
self._update_load_balancer_and_validate(lb_data, admin_state_up=False) self._update_load_balancer_and_validate(lb_data, admin_state_up=False)
self._update_load_balancer_and_validate(lb_data, admin_state_up=True) self._update_load_balancer_and_validate(lb_data, admin_state_up=True)
self._delete_load_balancer_and_validate(lb_data) self._delete_load_balancer_and_validate(lb_data)
# create load balance with admin state down # create load balance with admin state down
lb_data = self._create_load_balancer_and_validate( lb_data = self._create_load_balancer_and_validate(
sbnet_info, router_id=r1_id, admin_state_up=False) network_id, subnet_id, port_address, port_id, router_id=r1_id,
admin_state_up=False)
self._delete_load_balancer_and_validate(lb_data) self._delete_load_balancer_and_validate(lb_data)
def test_create_lb_custom_network(self): def test_create_lb_custom_network(self):
@ -61,14 +67,17 @@ class TestOvnOctaviaProviderDriver(ovn_base.TestOvnOctaviaBase):
def test_delete_lb_on_nonexisting_lb(self): def test_delete_lb_on_nonexisting_lb(self):
# LoadBalancer doesnt exist anymore, so just create a model and delete # LoadBalancer doesnt exist anymore, so just create a model and delete
r1_id = self._create_router('r' + uuidutils.generate_uuid()[:4])
network_N1 = self._create_net('N' + uuidutils.generate_uuid()[:4]) network_N1 = self._create_net('N' + uuidutils.generate_uuid()[:4])
sbnet_info = self._create_subnet_from_net(network_N1, '19.0.0.0/24', network_id, subnet_id = self._create_subnet_from_net(
router_id=r1_id) network_N1, '19.0.0.0/24')
port_address, port_id = self._create_port_on_network(network_N1)
r1_id = self._create_router('r' + uuidutils.generate_uuid()[:4])
self._attach_router_to_subnet(subnet_id, r1_id)
# Create LB # Create LB
lb_data = self._create_load_balancer_and_validate(sbnet_info, lb_data = self._create_load_balancer_and_validate(
router_id=r1_id, network_id, subnet_id, port_address, port_id, router_id=r1_id,
only_model=True) only_model=True)
self.ovn_driver.loadbalancer_delete(lb_data['model']) self.ovn_driver.loadbalancer_delete(lb_data['model'])
expected_status = { expected_status = {
'loadbalancers': [{"id": lb_data['model'].loadbalancer_id, 'loadbalancers': [{"id": lb_data['model'].loadbalancer_id,
@ -82,13 +91,15 @@ class TestOvnOctaviaProviderDriver(ovn_base.TestOvnOctaviaBase):
self._wait_for_status_and_validate(lb_data, [expected_status]) self._wait_for_status_and_validate(lb_data, [expected_status])
def test_pool(self): def test_pool(self):
r1_id = self._create_router('r' + uuidutils.generate_uuid()[:4])
network_N1 = self._create_net('N' + uuidutils.generate_uuid()[:4]) network_N1 = self._create_net('N' + uuidutils.generate_uuid()[:4])
sbnet_info = self._create_subnet_from_net(network_N1, '10.0.0.0/24', network_id, subnet_id = self._create_subnet_from_net(
router_id=r1_id) network_N1, '10.0.0.0/24')
port_address, port_id = self._create_port_on_network(network_N1)
r1_id = self._create_router('r' + uuidutils.generate_uuid()[:4])
self._attach_router_to_subnet(subnet_id, r1_id)
# Create LB # Create LB
lb_data = self._create_load_balancer_and_validate(sbnet_info, lb_data = self._create_load_balancer_and_validate(
router_id=r1_id) network_id, subnet_id, port_address, port_id, router_id=r1_id)
self._create_pool_and_validate(lb_data, "p_TCP_1", protocol='TCP') self._create_pool_and_validate(lb_data, "p_TCP_1", protocol='TCP')
self._update_pool_and_validate(lb_data, "p_TCP_1") self._update_pool_and_validate(lb_data, "p_TCP_1")
self._create_pool_and_validate(lb_data, "p_UDP_1", protocol='UDP') self._create_pool_and_validate(lb_data, "p_UDP_1", protocol='UDP')
@ -108,13 +119,28 @@ class TestOvnOctaviaProviderDriver(ovn_base.TestOvnOctaviaBase):
self._delete_load_balancer_and_validate(lb_data) self._delete_load_balancer_and_validate(lb_data)
def test_member(self): def test_member(self):
net1 = self._create_net('N' + uuidutils.generate_uuid()[:4])
network_id, subnet_id = self._create_subnet_from_net(
net1, '10.0.0.0/24')
port_address, port_id = self._create_port_on_network(net1)
net2 = self._create_net('N' + uuidutils.generate_uuid()[:4])
network_id2, subnet_id2 = self._create_subnet_from_net(
net2, '20.0.0.0/24')
self._create_port_on_network(net2)
net3 = self._create_net('N' + uuidutils.generate_uuid()[:4])
network_id3, subnet_id3 = self._create_subnet_from_net(
net3, '30.0.0.0/24')
self._create_port_on_network(net3)
r1_id = self._create_router('r' + uuidutils.generate_uuid()[:4]) r1_id = self._create_router('r' + uuidutils.generate_uuid()[:4])
network_N1 = self._create_net('N' + uuidutils.generate_uuid()[:4]) self._attach_router_to_subnet(subnet_id, r1_id)
sbnet_info = self._create_subnet_from_net(network_N1, '10.0.0.0/24', self._attach_router_to_subnet(subnet_id2, r1_id)
router_id=r1_id) self._attach_router_to_subnet(subnet_id3, r1_id)
# Create LB # Create LB
lb_data = self._create_load_balancer_and_validate( lb_data = self._create_load_balancer_and_validate(
sbnet_info, router_id=r1_id) network_id, subnet_id, port_address, port_id, router_id=r1_id)
# TCP Pool # TCP Pool
self._create_pool_and_validate(lb_data, "p_TCP", protocol='TCP') self._create_pool_and_validate(lb_data, "p_TCP", protocol='TCP')
@ -181,24 +207,14 @@ class TestOvnOctaviaProviderDriver(ovn_base.TestOvnOctaviaBase):
lb_data, pool_TCP_id, lb_data['vip_net_info'][1], lb_data, pool_TCP_id, lb_data['vip_net_info'][1],
lb_data['vip_net_info'][0], '10.0.0.10') lb_data['vip_net_info'][0], '10.0.0.10')
# Create new networks and add member to TCP pool from it. self._create_member_and_validate(lb_data, pool_TCP_id, subnet_id2,
net2 = self._create_net('N' + uuidutils.generate_uuid()[:4]) network_id2, '20.0.0.4')
subnet20_info = self._create_subnet_from_net( self._create_member_and_validate(lb_data, pool_TCP_id, subnet_id2,
net2, '20.0.0.0/24', router_id=r1_id) network_id2, '20.0.0.6')
net20 = subnet20_info[0]
subnet20 = subnet20_info[1] self._create_member_and_validate(lb_data, pool_TCP_id, subnet_id3,
self._create_member_and_validate(lb_data, pool_TCP_id, subnet20, net20, network_id3, '30.0.0.6')
'20.0.0.4') self._delete_member_and_validate(lb_data, pool_TCP_id, network_id2,
self._create_member_and_validate(lb_data, pool_TCP_id, subnet20, net20,
'20.0.0.6')
net3 = self._create_net('N' + uuidutils.generate_uuid()[:4])
subnet30_info = self._create_subnet_from_net(
net3, '30.0.0.0/24', router_id=r1_id)
net30 = subnet30_info[0]
subnet30 = subnet30_info[1]
self._create_member_and_validate(lb_data, pool_TCP_id, subnet30, net30,
'30.0.0.6')
self._delete_member_and_validate(lb_data, pool_TCP_id, net20,
'20.0.0.6') '20.0.0.6')
# Deleting the pool should also delete the members. # Deleting the pool should also delete the members.
@ -217,13 +233,16 @@ class TestOvnOctaviaProviderDriver(ovn_base.TestOvnOctaviaBase):
self.assertRaises(o_exceptions.UnsupportedOptionError, self.assertRaises(o_exceptions.UnsupportedOptionError,
self.ovn_driver.member_create, m_member) self.ovn_driver.member_create, m_member)
r1_id = self._create_router('r' + uuidutils.generate_uuid()[:4])
network_N1 = self._create_net('N' + uuidutils.generate_uuid()[:4]) network_N1 = self._create_net('N' + uuidutils.generate_uuid()[:4])
sbnet_info = self._create_subnet_from_net(network_N1, '10.0.0.0/24', network_id, subnet_id = self._create_subnet_from_net(
router_id=r1_id) network_N1, '10.0.0.0/24')
port_address, port_id = self._create_port_on_network(network_N1)
r1_id = self._create_router('r' + uuidutils.generate_uuid()[:4])
self._attach_router_to_subnet(subnet_id, r1_id)
# Create LB # Create LB
lb_data = self._create_load_balancer_and_validate(sbnet_info, lb_data = self._create_load_balancer_and_validate(
router_id=r1_id) network_id, subnet_id, port_address, port_id, router_id=r1_id)
# TCP Pool # TCP Pool
self._create_pool_and_validate(lb_data, "p_TCP", protocol='TCP') self._create_pool_and_validate(lb_data, "p_TCP", protocol='TCP')
@ -262,22 +281,29 @@ class TestOvnOctaviaProviderDriver(ovn_base.TestOvnOctaviaBase):
self._delete_load_balancer_and_validate(lb_data) self._delete_load_balancer_and_validate(lb_data)
def test_hm(self): def test_hm(self):
r1_id = self._create_router('r' + uuidutils.generate_uuid()[:4])
network_N1 = self._create_net('N' + uuidutils.generate_uuid()[:4]) network_N1 = self._create_net('N' + uuidutils.generate_uuid()[:4])
sbnet_info = self._create_subnet_from_net(network_N1, '10.0.0.0/24', network_id, subnet_id = self._create_subnet_from_net(
router_id=r1_id) network_N1, '10.0.0.0/24')
sbnet_additional_info = self._create_subnet_from_net( port_address, port_id = self._create_port_on_network(network_N1)
network_N1, '2001:db8:0:1::/64', router_id=r1_id,
ip_version=n_const.IP_VERSION_6) network_ida, subnet_ida = self._create_subnet_from_net(
network_N1, '2001:db8:0:1::/64', ip_version=n_const.IP_VERSION_6)
port_addressa, port_ida = self._create_port_on_network(network_N1)
additional_vips_list = [{ additional_vips_list = [{
'ip_address': sbnet_additional_info[2], 'ip_address': port_addressa,
'port_id': sbnet_additional_info[3], 'port_id': port_ida,
'network_id': sbnet_additional_info[0], 'network_id': network_ida,
'subnet_id': sbnet_additional_info[1] 'subnet_id': subnet_ida
}] }]
r1_id = self._create_router('r' + uuidutils.generate_uuid()[:4])
self._attach_router_to_subnet(subnet_id, r1_id)
self._attach_router_to_subnet(subnet_ida, r1_id)
# Create LB # Create LB
lb_data = self._create_load_balancer_and_validate( lb_data = self._create_load_balancer_and_validate(
sbnet_info, router_id=r1_id, additional_vips=additional_vips_list) network_id, subnet_id, port_address, port_id, router_id=r1_id,
additional_vips=additional_vips_list)
# TCP Pool # TCP Pool
self._create_pool_and_validate(lb_data, "p_TCP", self._create_pool_and_validate(lb_data, "p_TCP",
@ -308,46 +334,51 @@ class TestOvnOctaviaProviderDriver(ovn_base.TestOvnOctaviaBase):
self._delete_pool_and_validate(lb_data, "p_TCP") self._delete_pool_and_validate(lb_data, "p_TCP")
def test_listener(self): def test_listener(self):
r1_id = self._create_router('r' + uuidutils.generate_uuid()[:4])
network_N1 = self._create_net('N' + uuidutils.generate_uuid()[:4]) network_N1 = self._create_net('N' + uuidutils.generate_uuid()[:4])
sbnet_info = self._create_subnet_from_net(network_N1, '10.1.0.0/24', network_id, subnet_id = self._create_subnet_from_net(
router_id=r1_id) network_N1, '10.1.0.0/24')
port_address, port_id = self._create_port_on_network(network_N1)
network_N2 = self._create_net('N' + uuidutils.generate_uuid()[:4])
network_id2, subnet_id2 = self._create_subnet_from_net(
network_N2, '20.1.0.0/24')
self._create_port_on_network(network_N2)
r1_id = self._create_router('r' + uuidutils.generate_uuid()[:4])
self._attach_router_to_subnet(subnet_id, r1_id)
self._attach_router_to_subnet(subnet_id2, r1_id)
# Create LB # Create LB
lb_data = self._create_load_balancer_and_validate(sbnet_info, lb_data = self._create_load_balancer_and_validate(
router_id=r1_id) network_id, subnet_id, port_address, port_id, router_id=r1_id)
self._create_pool_and_validate(lb_data, "p_TCP", protocol='TCP') self._create_pool_and_validate(lb_data, "p_TCP", protocol='TCP')
self._create_pool_and_validate(lb_data, "p_UDP", protocol='UDP') self._create_pool_and_validate(lb_data, "p_UDP", protocol='UDP')
self._create_pool_and_validate(lb_data, "p_SCTP", protocol='SCTP') self._create_pool_and_validate(lb_data, "p_SCTP", protocol='SCTP')
pool_TCP_id = lb_data['pools'][0].pool_id pool_TCP_id = lb_data['pools'][0].pool_id
pool_UDP_id = lb_data['pools'][1].pool_id pool_UDP_id = lb_data['pools'][1].pool_id
pool_SCTP_id = lb_data['pools'][2].pool_id pool_SCTP_id = lb_data['pools'][2].pool_id
network_N2 = self._create_net('N' + uuidutils.generate_uuid()[:4])
subnet_info = self._create_subnet_from_net(
network_N2, '20.1.0.0/24', router_id=r1_id)
# Create member in TCP pool # Create member in TCP pool
self._create_member_and_validate( self._create_member_and_validate(
lb_data, pool_TCP_id, lb_data['vip_net_info'][1], lb_data, pool_TCP_id, lb_data['vip_net_info'][1],
lb_data['vip_net_info'][0], '10.1.0.4') lb_data['vip_net_info'][0], '10.1.0.4')
self._create_member_and_validate(lb_data, pool_TCP_id, self._create_member_and_validate(
subnet_info[1], subnet_info[0], lb_data, pool_TCP_id, subnet_id2, network_id2, '20.1.0.4',)
'20.1.0.4')
# Create member in UDP pool # Create member in UDP pool
self._create_member_and_validate( self._create_member_and_validate(
lb_data, pool_UDP_id, lb_data['vip_net_info'][1], lb_data, pool_UDP_id, lb_data['vip_net_info'][1],
lb_data['vip_net_info'][0], '10.1.0.4') lb_data['vip_net_info'][0], '10.1.0.5')
self._create_member_and_validate(lb_data, pool_UDP_id, self._create_member_and_validate(lb_data, pool_UDP_id,
subnet_info[1], subnet_info[0], subnet_id2, network_id2,
'20.1.0.4') '20.1.0.5')
# Create member in SCTP pool # Create member in SCTP pool
self._create_member_and_validate( self._create_member_and_validate(
lb_data, pool_SCTP_id, lb_data['vip_net_info'][1], lb_data, pool_SCTP_id, lb_data['vip_net_info'][1],
lb_data['vip_net_info'][0], '10.1.0.4') lb_data['vip_net_info'][0], '10.1.0.6')
self._create_member_and_validate(lb_data, pool_SCTP_id, self._create_member_and_validate(lb_data, pool_SCTP_id,
subnet_info[1], subnet_info[0], subnet_id2, network_id2,
'20.1.0.4') '20.1.0.6')
# Play around first listener linked to TCP pool # Play around first listener linked to TCP pool
self._create_listener_and_validate( self._create_listener_and_validate(
@ -395,7 +426,7 @@ class TestOvnOctaviaProviderDriver(ovn_base.TestOvnOctaviaBase):
lb_data, protocol_port=80, protocol='TCP') lb_data, protocol_port=80, protocol='TCP')
# Delete TCP pool members # Delete TCP pool members
self._delete_member_and_validate(lb_data, pool_TCP_id, self._delete_member_and_validate(lb_data, pool_TCP_id,
subnet_info[0], '20.1.0.4') network_id2, '20.1.0.4')
self._delete_member_and_validate(lb_data, pool_TCP_id, self._delete_member_and_validate(lb_data, pool_TCP_id,
lb_data['vip_net_info'][0], lb_data['vip_net_info'][0],
'10.1.0.4') '10.1.0.4')
@ -405,13 +436,16 @@ class TestOvnOctaviaProviderDriver(ovn_base.TestOvnOctaviaBase):
self._delete_load_balancer_and_validate(lb_data) self._delete_load_balancer_and_validate(lb_data)
def _test_cascade_delete(self, pool=True, listener=True, member=True): def _test_cascade_delete(self, pool=True, listener=True, member=True):
r1_id = self._create_router('r' + uuidutils.generate_uuid()[:4])
network_N1 = self._create_net('N' + uuidutils.generate_uuid()[:4]) network_N1 = self._create_net('N' + uuidutils.generate_uuid()[:4])
sbnet_info = self._create_subnet_from_net(network_N1, '10.0.0.0/24', network_id, subnet_id = self._create_subnet_from_net(
router_id=r1_id) network_N1, '10.0.0.0/24')
port_address, port_id = self._create_port_on_network(network_N1)
r1_id = self._create_router('r' + uuidutils.generate_uuid()[:4])
self._attach_router_to_subnet(subnet_id, r1_id)
# Create LB # Create LB
lb_data = self._create_load_balancer_and_validate(sbnet_info, lb_data = self._create_load_balancer_and_validate(
router_id=r1_id) network_id, subnet_id, port_address, port_id, router_id=r1_id)
if pool: if pool:
self._create_pool_and_validate(lb_data, "p_TCP", protocol='TCP') self._create_pool_and_validate(lb_data, "p_TCP", protocol='TCP')
@ -450,13 +484,16 @@ class TestOvnOctaviaProviderDriver(ovn_base.TestOvnOctaviaBase):
self._test_cascade_delete() self._test_cascade_delete()
def test_hm_unsupported_protocol(self): def test_hm_unsupported_protocol(self):
r1_id = self._create_router('r' + uuidutils.generate_uuid()[:4])
network_N1 = self._create_net('N' + uuidutils.generate_uuid()[:4]) network_N1 = self._create_net('N' + uuidutils.generate_uuid()[:4])
sbnet_info = self._create_subnet_from_net(network_N1, '10.0.0.0/24', network_id, subnet_id = self._create_subnet_from_net(
router_id=r1_id) network_N1, '10.0.0.0/24')
port_address, port_id = self._create_port_on_network(network_N1)
r1_id = self._create_router('r' + uuidutils.generate_uuid()[:4])
self._attach_router_to_subnet(subnet_id, r1_id)
# Create LB # Create LB
lb_data = self._create_load_balancer_and_validate(sbnet_info, lb_data = self._create_load_balancer_and_validate(
router_id=r1_id) network_id, subnet_id, port_address, port_id, router_id=r1_id)
self._create_pool_and_validate(lb_data, "p_SCTP", self._create_pool_and_validate(lb_data, "p_SCTP",
protocol=o_constants.PROTOCOL_SCTP) protocol=o_constants.PROTOCOL_SCTP)
@ -471,13 +508,16 @@ class TestOvnOctaviaProviderDriver(ovn_base.TestOvnOctaviaBase):
self._delete_load_balancer_and_validate(lb_data) self._delete_load_balancer_and_validate(lb_data)
def test_for_unsupported_options(self): def test_for_unsupported_options(self):
r1_id = self._create_router('r' + uuidutils.generate_uuid()[:4])
network_N1 = self._create_net('N' + uuidutils.generate_uuid()[:4]) network_N1 = self._create_net('N' + uuidutils.generate_uuid()[:4])
sbnet_info = self._create_subnet_from_net(network_N1, '10.0.0.0/24', network_id, subnet_id = self._create_subnet_from_net(
router_id=r1_id) network_N1, '10.0.0.0/24')
port_address, port_id = self._create_port_on_network(network_N1)
r1_id = self._create_router('r' + uuidutils.generate_uuid()[:4])
self._attach_router_to_subnet(subnet_id, r1_id)
# Create LB # Create LB
lb_data = self._create_load_balancer_and_validate(sbnet_info, lb_data = self._create_load_balancer_and_validate(
router_id=r1_id) network_id, subnet_id, port_address, port_id, router_id=r1_id)
m_pool = self._create_pool_model(lb_data['model'].loadbalancer_id, m_pool = self._create_pool_model(lb_data['model'].loadbalancer_id,
'lb1') 'lb1')
@ -498,13 +538,16 @@ class TestOvnOctaviaProviderDriver(ovn_base.TestOvnOctaviaBase):
self._delete_load_balancer_and_validate(lb_data) self._delete_load_balancer_and_validate(lb_data)
def test_lb_listener_pool_workflow(self): def test_lb_listener_pool_workflow(self):
r1_id = self._create_router('r' + uuidutils.generate_uuid()[:4])
network_N1 = self._create_net('N' + uuidutils.generate_uuid()[:4]) network_N1 = self._create_net('N' + uuidutils.generate_uuid()[:4])
sbnet_info = self._create_subnet_from_net(network_N1, '10.0.0.0/24', network_id, subnet_id = self._create_subnet_from_net(
router_id=r1_id) network_N1, '10.0.0.0/24')
port_address, port_id = self._create_port_on_network(network_N1)
r1_id = self._create_router('r' + uuidutils.generate_uuid()[:4])
self._attach_router_to_subnet(subnet_id, r1_id)
# Create LB # Create LB
lb_data = self._create_load_balancer_and_validate(sbnet_info, lb_data = self._create_load_balancer_and_validate(
router_id=r1_id) network_id, subnet_id, port_address, port_id, router_id=r1_id)
self._create_listener_and_validate(lb_data) self._create_listener_and_validate(lb_data)
self._create_pool_and_validate( self._create_pool_and_validate(
lb_data, "p1", listener_id=lb_data['listeners'][0].listener_id) lb_data, "p1", listener_id=lb_data['listeners'][0].listener_id)
@ -515,13 +558,16 @@ class TestOvnOctaviaProviderDriver(ovn_base.TestOvnOctaviaBase):
def test_lb_member_batch_update(self): def test_lb_member_batch_update(self):
# Create a LoadBalancer # Create a LoadBalancer
r1_id = self._create_router('r' + uuidutils.generate_uuid()[:4])
network_N1 = self._create_net('N' + uuidutils.generate_uuid()[:4]) network_N1 = self._create_net('N' + uuidutils.generate_uuid()[:4])
sbnet_info = self._create_subnet_from_net(network_N1, '10.0.0.0/24', network_id, subnet_id = self._create_subnet_from_net(
router_id=r1_id) network_N1, '10.0.0.0/24')
port_address, port_id = self._create_port_on_network(network_N1)
r1_id = self._create_router('r' + uuidutils.generate_uuid()[:4])
self._attach_router_to_subnet(subnet_id, r1_id)
# Create LB # Create LB
lb_data = self._create_load_balancer_and_validate(sbnet_info, lb_data = self._create_load_balancer_and_validate(
router_id=r1_id) network_id, subnet_id, port_address, port_id, router_id=r1_id)
# Create a pool # Create a pool
self._create_pool_and_validate(lb_data, "p1") self._create_pool_and_validate(lb_data, "p1")
pool_id = lb_data['pools'][0].pool_id pool_id = lb_data['pools'][0].pool_id

View File

@ -71,12 +71,15 @@ class TestOvnOctaviaProviderIntegration(ovn_base.TestOvnOctaviaBase):
def _loadbalancer_operation(self, lb_data=None, update=False, def _loadbalancer_operation(self, lb_data=None, update=False,
delete=False): delete=False):
if not lb_data: if not lb_data:
r1_id = self._create_router('r' + uuidutils.generate_uuid()[:4])
network_N1 = self._create_net('N' + uuidutils.generate_uuid()[:4]) network_N1 = self._create_net('N' + uuidutils.generate_uuid()[:4])
sbnet_info = self._create_subnet_from_net( network_id, subnet_id = self._create_subnet_from_net(
network_N1, '10.0.0.0/24', router_id=r1_id) network_N1, '10.0.0.0/24')
port_address, port_id = self._create_port_on_network(network_N1)
r1_id = self._create_router('r' + uuidutils.generate_uuid()[:4])
self._attach_router_to_subnet(subnet_id, r1_id)
lb_data = self._create_load_balancer_and_validate( lb_data = self._create_load_balancer_and_validate(
sbnet_info, router_id=r1_id) network_id, subnet_id, port_address, port_id, router_id=r1_id)
if update: if update:
self._update_load_balancer_and_validate(lb_data, self._update_load_balancer_and_validate(lb_data,
admin_state_up=False) admin_state_up=False)
@ -110,13 +113,14 @@ class TestOvnOctaviaProviderIntegration(ovn_base.TestOvnOctaviaBase):
'network_id': ext_net['id'], 'network_id': ext_net['id'],
'external_fixed_ips': [ 'external_fixed_ips': [
{'ip_address': '100.0.0.2', 'subnet_id': ext_subnet['id']}]} {'ip_address': '100.0.0.2', 'subnet_id': ext_subnet['id']}]}
router_id = self._create_router('routertest', gw_info=gw_info)
# Create Network N2, connect it to router # Create Network N2, connect it to router
network_N1 = self._create_net('N' + uuidutils.generate_uuid()[:4]) network_N1 = self._create_net('N' + uuidutils.generate_uuid()[:4])
n2_id, sub2_id, p1_ip, p1_id = self._create_subnet_from_net( n2_id, sub2_id = self._create_subnet_from_net(
network_N1, "10.0.1.0/24", router_id) network_N1, "10.0.1.0/24")
router_id = self._create_router('routertest', gw_info=gw_info)
self._attach_router_to_subnet(sub2_id, router_id)
p1_ip, p1_id = self._create_port_on_network(network_N1)
fip_info = {'floatingip': { fip_info = {'floatingip': {
'tenant_id': self._tenant_id, 'tenant_id': self._tenant_id,
'floating_network_id': ext_net['id'], 'floating_network_id': ext_net['id'],