summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEndre Karlson <endre.karlson@hp.com>2015-09-29 19:50:32 +0200
committerEndre Karlson <endre.karlson@gmail.com>2015-10-05 14:06:00 +0000
commitbfe79196c9557559f351ae9a854c73ac757051ee (patch)
tree1f4a96e88b0c1e3759c652682575a70d7b333c7b
parent63a45b6a9010de9dacb9656a4fe20c1bdef1768d (diff)
downloaddesignate-1.0.0.tar.gz
Fix handling of Pool NS changes1.0.0.0rc21.0.0
Closes-Bug: #1500798 Change-Id: Ie697f35a523a63617ba386f0dcde63600ce5dac6 (cherry picked from commit c59a2a012e61a80ea4d985db04ac29a582c745d1)
-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'),