Fix handling of Pool NS changes
Closes-Bug: #1500798 Change-Id: Ie697f35a523a63617ba386f0dcde63600ce5dac6
This commit is contained in:
parent
66613e9b2d
commit
c59a2a012e
|
@ -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(
|
||||
|
|
|
@ -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'),
|
||||
|
|
Loading…
Reference in New Issue