diff options
author | Endre Karlson <endre.karlson@hp.com> | 2015-09-29 19:50:32 +0200 |
---|---|---|
committer | Endre Karlson <endre.karlson@gmail.com> | 2015-10-05 14:06:00 +0000 |
commit | bfe79196c9557559f351ae9a854c73ac757051ee (patch) | |
tree | 1f4a96e88b0c1e3759c652682575a70d7b333c7b | |
parent | 63a45b6a9010de9dacb9656a4fe20c1bdef1768d (diff) | |
download | designate-bfe79196c9557559f351ae9a854c73ac757051ee.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.py | 17 | ||||
-rw-r--r-- | designate/tests/unit/test_central/test_basic.py | 38 |
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'), |