Skip to content

Commit de11eab

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "Ignore designate NotFound errors during PTR delete" into stable/2026.1
2 parents 5eb8af0 + 07853af commit de11eab

2 files changed

Lines changed: 45 additions & 1 deletion

File tree

  • neutron

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,15 @@ def delete_record_set(self, context, dns_domain, dns_name, records):
156156
for record in records:
157157
in_addr_name = netaddr.IPAddress(record).reverse_dns
158158
in_addr_zone_name = self._get_in_addr_zone_name(in_addr_name)
159-
admin_client.recordsets.delete(in_addr_zone_name, in_addr_name)
159+
try:
160+
admin_client.recordsets.delete(in_addr_zone_name, in_addr_name)
161+
except d_exc.NotFound:
162+
LOG.warning(
163+
"While deleting PTR record, either zone %(zone)s "
164+
"or recordset %(recordset)s could not be found. "
165+
"Double check that they were not left as orphans.",
166+
{"zone": in_addr_zone_name, "recordset": in_addr_name}
167+
)
160168

161169
def _get_ids_ips_to_delete(self, dns_domain, name, records,
162170
designate_client):

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

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,42 @@ def test_delete_record_set_with_reverse_dns(self):
226226
]
227227
)
228228

229+
def test_delete_record_set_with_reverse_dns_not_found(self):
230+
self.admin_client.recordsets.delete.side_effect = [
231+
d_exc.NotFound, None]
232+
self.client.recordsets.list.return_value = [
233+
{'id': 123, 'records': ['192.168.0.10']},
234+
{'id': 456, 'records': ['2001:db8:0:1::1']}
235+
]
236+
237+
with mock.patch.object(driver, "LOG") as log_mock:
238+
self.driver.delete_record_set(
239+
self.context, 'example.test.', 'test',
240+
['192.168.0.10', '2001:db8:0:1::1']
241+
)
242+
log_mock.warning.assert_called_once()
243+
244+
self.client.recordsets.delete.assert_has_calls(
245+
[
246+
mock.call('example.test.', 123),
247+
mock.call('example.test.', 456)
248+
]
249+
)
250+
251+
self.admin_client.recordsets.delete.assert_has_calls(
252+
[
253+
mock.call(
254+
'0.168.192.in-addr.arpa.', '10.0.168.192.in-addr.arpa.'
255+
),
256+
mock.call(
257+
'0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0.0.0.0.0.0.0.8.b.d.0.1.0.'
258+
'0.2.ip6.arpa.',
259+
'1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0.0.0.0.0.0.0.8.b.d.0.'
260+
'1.0.0.2.ip6.arpa.'
261+
)
262+
]
263+
)
264+
229265
def test_create_record_set_zone_not_found(self):
230266
self.client.recordsets.create.side_effect = d_exc.NotFound
231267

0 commit comments

Comments
 (0)