Skip to content

Commit 647afe7

Browse files
authored
Merge pull request #240 from stackhpc/upstream/2025.1-2025-11-24
Synchronise 2025.1 with upstream
2 parents 3ec5629 + 5b23019 commit 647afe7

File tree

7 files changed

+58
-14
lines changed

7 files changed

+58
-14
lines changed

neutron/plugins/ml2/drivers/openvswitch/agent/openflow/native/base_oskenapp.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,10 @@
2424

2525
class BaseNeutronAgentOSKenApp(app_manager.OSKenApp):
2626
OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]
27-
packet_in_handlers = []
27+
28+
def __init__(self):
29+
super().__init__()
30+
self.packet_in_handlers = []
2831

2932
def register_packet_in_handler(self, caller):
3033
self.packet_in_handlers.append(caller)

neutron/services/externaldns/drivers/designate/driver.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -165,8 +165,6 @@ def _get_ids_ips_to_delete(self, dns_domain, name, records,
165165
dns_domain, criterion={"name": "%s" % name})
166166
except (d_exc.NotFound, d_exc.Forbidden):
167167
raise dns_exc.DNSDomainNotFound(dns_domain=dns_domain)
168-
ids = [rec['id'] for rec in recordsets]
169-
ips = [str(ip) for rec in recordsets for ip in rec['records']]
170-
if set(ips) != set(records):
171-
raise dns_exc.DuplicateRecordSet(dns_name=name)
172-
return ids
168+
return [rec['id'] for rec in recordsets
169+
for ip in rec['records']
170+
if ip in records]

neutron/tests/functional/agent/ovsdb/native/test_helpers.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
# under the License.
1515

1616
from neutron_lib import constants as const
17+
from ovsdbapp.backend.ovs_idl import event
1718

1819
from neutron.agent.common import ovs_lib
1920
from neutron.agent.ovsdb.native import helpers
@@ -22,6 +23,16 @@
2223
from neutron.tests.functional import base
2324

2425

26+
class WaitOvsManagerEvent(event.WaitEvent):
27+
event_name = 'WaitOvsManagerEvent'
28+
29+
def __init__(self, manager_target):
30+
table = 'Manager'
31+
events = (self.ROW_CREATE,)
32+
conditions = (('target', '=', manager_target),)
33+
super().__init__(events, table, conditions, timeout=10)
34+
35+
2536
class EnableConnectionUriTestCase(base.BaseSudoTestCase):
2637

2738
def test_add_manager_appends(self):
@@ -39,10 +50,15 @@ def test_add_manager_appends(self):
3950
manager_connections.append('ptcp:%s:127.0.0.1' % _port)
4051

4152
for index, conn_uri in enumerate(ovsdb_cfg_connections):
53+
target_event = WaitOvsManagerEvent(manager_connections[index])
54+
ovs.ovsdb.idl.notify_handler.watch_event(target_event)
4255
helpers.enable_connection_uri(conn_uri)
4356
manager_removal.append(ovs.ovsdb.remove_manager(
4457
manager_connections[index]))
4558
self.addCleanup(manager_removal[index].execute)
59+
target_event.wait()
60+
# This check is redundant, the ``target_event`` ensures the
61+
# ``Manager`` register with the expected targer is created.
4662
self.assertIn(manager_connections[index],
4763
ovs.ovsdb.get_manager().execute())
4864

neutron/tests/unit/plugins/ml2/extensions/test_dns_domain_keywords.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,10 @@ def _update_port_for_test(self, port,
8484
new_dns_name=test_dns_integration.NEWDNSNAME,
8585
new_dns_domain=None, **kwargs):
8686
test_dns_integration.mock_client.reset_mock()
87-
ip_addresses = [netaddr.IPAddress(ip['ip_address'])
88-
for ip in port['fixed_ips']]
89-
records_v4 = [ip for ip in ip_addresses if ip.version == 4]
90-
records_v6 = [ip for ip in ip_addresses if ip.version == 6]
87+
records_v4 = [ip['ip_address'] for ip in port['fixed_ips']
88+
if netaddr.IPAddress(ip['ip_address']).version == 4]
89+
records_v6 = [ip['ip_address'] for ip in port['fixed_ips']
90+
if netaddr.IPAddress(ip['ip_address']).version == 6]
9191
recordsets = []
9292
if records_v4:
9393
recordsets.append({'id': test_dns_integration.V4UUID,

neutron/tests/unit/plugins/ml2/extensions/test_dns_integration.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,10 +126,10 @@ def _create_subnet_for_test(self, network_id, cidr):
126126
def _update_port_for_test(self, port, new_dns_name=NEWDNSNAME,
127127
new_dns_domain=None, **kwargs):
128128
mock_client.reset_mock()
129-
ip_addresses = [netaddr.IPAddress(ip['ip_address'])
130-
for ip in port['fixed_ips']]
131-
records_v4 = [ip for ip in ip_addresses if ip.version == 4]
132-
records_v6 = [ip for ip in ip_addresses if ip.version == 6]
129+
records_v4 = [ip['ip_address'] for ip in port['fixed_ips']
130+
if netaddr.IPAddress(ip['ip_address']).version == 4]
131+
records_v6 = [ip['ip_address'] for ip in port['fixed_ips']
132+
if netaddr.IPAddress(ip['ip_address']).version == 6]
133133
recordsets = []
134134
if records_v4:
135135
recordsets.append({'id': V4UUID, 'records': records_v4})

neutron/tests/unit/services/externaldns/drivers/designate/test_driver.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,31 @@ def test_delete_record_set(self):
169169
)
170170
self.admin_client.recordsets.delete.assert_not_called()
171171

172+
def test_delete_single_record_from_two_records(self):
173+
# Set up two records similar to test_delete_record_set
174+
self.client.recordsets.list.return_value = [
175+
{'id': 123, 'records': ['192.168.0.10']},
176+
{'id': 456, 'records': ['2001:db8:0:1::1']}
177+
]
178+
179+
cfg.CONF.set_override(
180+
'allow_reverse_dns_lookup', False, group='designate'
181+
)
182+
183+
# Delete only the first record (IPv4) out of the two
184+
self.driver.delete_record_set(
185+
self.context, 'example.test.', 'test',
186+
['192.168.0.10']
187+
)
188+
189+
# Verify that only the IPv4 record was deleted
190+
self.client.recordsets.delete.assert_called_once_with(
191+
'example.test.', 123
192+
)
193+
194+
# Admin client should not be called since reverse DNS is disabled
195+
self.admin_client.recordsets.delete.assert_not_called()
196+
172197
def test_delete_record_set_with_reverse_dns(self):
173198
self.client.recordsets.list.return_value = [
174199
{'id': 123, 'records': ['192.168.0.10']},

zuul.d/tempest-singlenode.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -702,6 +702,7 @@
702702
br-ex-tcpdump: true
703703
br-int-flows: true
704704
devstack_localrc:
705+
TEMPEST_BRANCH: 45.0.0
705706
TEMPEST_VENV_UPPER_CONSTRAINTS: '/opt/stack/requirements/upper-constraints.txt'
706707
devstack_local_conf:
707708
test-config:
@@ -720,6 +721,7 @@
720721
nslookup_target: 'opendev.org'
721722
configure_swap_size: 4096
722723
devstack_localrc:
724+
TEMPEST_BRANCH: 45.0.0
723725
TEMPEST_VENV_UPPER_CONSTRAINTS: '/opt/stack/requirements/upper-constraints.txt'
724726
devstack_local_conf:
725727
test-config:

0 commit comments

Comments
 (0)