Prepare to handle ha_chassis_group for LRP

Neutron has a goal to switch to ``ha_chassis_group`` [1].

This patch prepare octavia ovn provider to handle both ``gateway_chassis``
and ``ha_chassis_group`` for LRPs to make update seamless.

[0] https://man7.org/linux/man-pages/man5/ovn-nb.5.html
[1] https://bugs.launchpad.net/neutron/+bug/2092271

Related-Bug: #2092271

Change-Id: I9ce207e54c2988ad6d0f7fab7192be7eecaa0047
This commit is contained in:
Vasyl Saienko
2025-03-04 10:32:48 +00:00
parent 6834289717
commit 9cec2e6b7a
3 changed files with 20 additions and 2 deletions

View File

@ -1172,7 +1172,7 @@ class OvnProviderHelper():
def _find_ls_for_lr(self, router, ip_version):
ls = []
for port in router.ports:
if port.gateway_chassis:
if port.gateway_chassis or port.ha_chassis_group:
continue
if netaddr.IPNetwork(port.networks[0]).version != ip_version:
continue

View File

@ -209,7 +209,7 @@ class OvnNbIdlForLb(ovsdb_monitor.OvnIdl):
SCHEMA = "OVN_Northbound"
TABLES = ('Logical_Switch', 'Load_Balancer', 'Load_Balancer_Health_Check',
'Logical_Router', 'Logical_Switch_Port', 'Logical_Router_Port',
'Gateway_Chassis', 'NAT')
'Gateway_Chassis', 'NAT', 'HA_Chassis_Group')
def __init__(self, event_lock_name=None, notifier=True):
self.conn_string = config.get_ovn_nb_connection()

View File

@ -3036,11 +3036,13 @@ class TestOvnProviderHelper(ovn_base.TestOvnOctaviaBase):
def test__find_ls_for_lr(self):
p1 = fakes.FakeOVNPort.create_one_port(attrs={
'gateway_chassis': [],
'ha_chassis_group': [],
'external_ids': {
ovn_const.OVN_NETWORK_NAME_EXT_ID_KEY: 'foo1'},
'networks': ["10.0.0.1/24"]})
p2 = fakes.FakeOVNPort.create_one_port(attrs={
'gateway_chassis': [],
'ha_chassis_group': [],
'external_ids': {
ovn_const.OVN_NETWORK_NAME_EXT_ID_KEY: 'foo2'},
'networks': ["10.0.10.1/24"]})
@ -3052,11 +3054,13 @@ class TestOvnProviderHelper(ovn_base.TestOvnOctaviaBase):
def test__find_ls_for_lr_net_not_found(self):
p1 = fakes.FakeOVNPort.create_one_port(attrs={
'gateway_chassis': [],
'ha_chassis_group': [],
'external_ids': {
ovn_const.OVN_NETWORK_NAME_EXT_ID_KEY: 'foo1'},
'networks': ["10.0.0.1/24"]})
p2 = fakes.FakeOVNPort.create_one_port(attrs={
'gateway_chassis': [],
'ha_chassis_group': [],
'external_ids': {},
'networks': ["10.0.10.1/24"]})
self.router.ports.append(p2)
@ -3067,11 +3071,13 @@ class TestOvnProviderHelper(ovn_base.TestOvnOctaviaBase):
def test__find_ls_for_lr_different_ip_version(self):
p1 = fakes.FakeOVNPort.create_one_port(attrs={
'gateway_chassis': [],
'ha_chassis_group': [],
'external_ids': {
ovn_const.OVN_NETWORK_NAME_EXT_ID_KEY: 'foo1'},
'networks': ["10.0.0.1/24"]})
p2 = fakes.FakeOVNPort.create_one_port(attrs={
'gateway_chassis': [],
'ha_chassis_group': [],
'external_ids': {
ovn_const.OVN_NETWORK_NAME_EXT_ID_KEY: 'foo2'},
'networks': ["fdaa:4ad8:e8fb::/64"]})
@ -3085,6 +3091,18 @@ class TestOvnProviderHelper(ovn_base.TestOvnOctaviaBase):
def test__find_ls_for_lr_gw_port(self):
p1 = fakes.FakeOVNPort.create_one_port(attrs={
'gateway_chassis': ['foo-gw-chassis'],
'ha_chassis_group': [],
'external_ids': {
ovn_const.OVN_NETWORK_NAME_EXT_ID_KEY: 'foo1'},
'networks': ["10.0.0.1/24"]})
self.router.ports.append(p1)
result = self.helper._find_ls_for_lr(self.router, n_const.IP_VERSION_4)
self.assertListEqual([], result)
def test__find_ls_for_lr_gw_port_ha_chassis_group(self):
p1 = fakes.FakeOVNPort.create_one_port(attrs={
'gateway_chassis': [],
'ha_chassis_group': 'foo-chassis-group',
'external_ids': {
ovn_const.OVN_NETWORK_NAME_EXT_ID_KEY: 'foo1'},
'networks': ["10.0.0.1/24"]})