Fix handling of Pool NS changes

Closes-Bug: #1500798

Change-Id: Ie697f35a523a63617ba386f0dcde63600ce5dac6
This commit is contained in:
Endre Karlson 2015-09-29 19:50:32 +02:00
parent 66613e9b2d
commit c59a2a012e
2 changed files with 47 additions and 8 deletions

View File

@ -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(

View File

@ -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'),