From 2488f0bc4ef14711a2b3e81c0f6e5a8d8f05d5d3 Mon Sep 17 00:00:00 2001 From: Alexander Diana Date: Tue, 12 May 2020 17:40:20 -0400 Subject: [PATCH] fix pool NS update (deletion step) when tenants create their own sub NS records by filtering for managed records also fix NS record deletion, as deepcopy may not be equivilent for the purposes of remove() --- designate/central/service.py | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/designate/central/service.py b/designate/central/service.py index 85ce106fb..46dfe7c5c 100644 --- a/designate/central/service.py +++ b/designate/central/service.py @@ -590,12 +590,27 @@ def _add_ns(self, context, zone, ns_record): set_delayed_notify=True) def _delete_ns(self, context, zone, ns_record): - ns_recordset = self.find_recordset( - context, criterion={'zone_id': zone['id'], 'type': "NS"}) + recordsets = self.find_recordsets( + context, criterion={'zone_id': zone['id'], 'type': "NS"} + ) - for record in copy.deepcopy(ns_recordset.records): + managed = [] + for rs in recordsets: + if rs.managed: + managed.append(rs) + + if len(managed) != 1: + raise exceptions.RecordSetNotFound("No valid recordset found") + + ns_recordset = managed[0] + + to_remove = [] + for record in ns_recordset.records: if record.data == ns_record: - ns_recordset.records.remove(record) + to_remove.append(record) + + for record in to_remove: + ns_recordset.records.remove(record) self._update_recordset_in_storage(context, zone, ns_recordset, set_delayed_notify=True)