summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--designate/central/service.py17
-rw-r--r--designate/tests/unit/test_central/test_basic.py38
2 files changed, 47 insertions, 8 deletions
diff --git a/designate/central/service.py b/designate/central/service.py
index 7c0412c5..c0cde389 100644
--- a/designate/central/service.py
+++ b/designate/central/service.py
@@ -609,13 +609,22 @@ class Service(service.RPCService, service.Service):
def _add_ns(self, context, zone, ns_record):
# Get NS recordset
# If the zone doesn't have an NS recordset yet, create one
- try:
- ns_recordset = self.find_recordset(
- context, criterion={'domain_id': zone['id'], 'type': "NS"})
+ recordsets = self.find_recordsets(
+ context, criterion={'domain_id': zone['id'], 'type': "NS"}
+ )
- except exceptions.RecordSetNotFound:
+ managed = []
+ for rs in recordsets:
+ if rs.managed:
+ managed.append(rs)
+
+ if len(managed) == 0:
self._create_ns(context, zone, [ns_record])
return
+ elif len(managed) != 1:
+ raise exceptions.RecordSetNotFound("No valid recordset found")
+
+ ns_recordset = managed[0]
# Add new record to recordset based on the new nameserver
ns_recordset.records.append(
diff --git a/designate/tests/unit/test_central/test_basic.py b/designate/tests/unit/test_central/test_basic.py
index 42c90b90..a6763861 100644
--- a/designate/tests/unit/test_central/test_basic.py
+++ b/designate/tests/unit/test_central/test_basic.py
@@ -677,9 +677,11 @@ class CentralDomainTestCase(CentralBasic):
def test__add_ns_creation(self):
self.service._create_ns = Mock()
- self.service.find_recordset = Mock(
- side_effect=exceptions.RecordSetNotFound
+
+ self.service.find_recordsets = Mock(
+ return_value=[]
)
+
self.service._add_ns(
self.context,
RoObject(id='1'),
@@ -690,9 +692,37 @@ class CentralDomainTestCase(CentralBasic):
def test__add_ns(self):
self.service._update_recordset_in_storage = Mock()
- self.service.find_recordset = Mock(
- return_value=RoObject(records=[])
+
+ recordsets = [
+ RoObject(records=[], managed=True)
+ ]
+ self.service.find_recordsets = Mock(
+ return_value=recordsets
+ )
+
+ self.service._add_ns(
+ self.context,
+ RoObject(id='1'),
+ RoObject(name='bar')
)
+ ctx, zone, rset = \
+ self.service._update_recordset_in_storage.call_args[0]
+ self.assertEqual(len(rset.records), 1)
+ self.assertTrue(rset.records[0].managed)
+ self.assertEqual(rset.records[0].data.name, 'bar')
+
+ def test__add_ns_with_other_ns_rs(self):
+ self.service._update_recordset_in_storage = Mock()
+
+ recordsets = [
+ RoObject(records=[], managed=True),
+ RoObject(records=[], managed=False)
+ ]
+
+ self.service.find_recordsets = Mock(
+ return_value=recordsets
+ )
+
self.service._add_ns(
self.context,
RoObject(id='1'),