Fix handling of Pool NS changes
Closes-Bug: #1500798 Change-Id: Ie697f35a523a63617ba386f0dcde63600ce5dac6
This commit is contained in:
parent
78a83cca4a
commit
c034c93086
|
@ -558,13 +558,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 [r for r in rs.records if r.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(
|
||||
|
|
|
@ -2571,6 +2571,54 @@ class CentralServiceTest(CentralTestCase):
|
|||
self.assertEqual(set([n.hostname for n in pool.ns_records]),
|
||||
set([n.data for n in ns_recordset.records]))
|
||||
|
||||
def test_update_pool_add_ns_record_with_existing_ns_in_zone(self):
|
||||
# Create a server pool and domain
|
||||
pool = self.create_pool(fixture=0)
|
||||
domain = self.create_domain(pool_id=pool.id)
|
||||
|
||||
records = [
|
||||
objects.Record(data="ns-1.example.com."),
|
||||
objects.Record(data="ns-2.example.com.")
|
||||
]
|
||||
recordset = objects.RecordSet(
|
||||
name="nsx.%s" % domain.name,
|
||||
type="NS",
|
||||
records=records
|
||||
)
|
||||
|
||||
self.central_service.create_recordset(
|
||||
self.admin_context, domain.id, recordset)
|
||||
|
||||
ns_record_count = len(pool.ns_records)
|
||||
new_ns_record = objects.PoolNsRecord(
|
||||
priority=10,
|
||||
hostname='ns-new.example.org.')
|
||||
|
||||
# Update and save the pool
|
||||
pool.ns_records.append(new_ns_record)
|
||||
self.central_service.update_pool(self.admin_context, pool)
|
||||
|
||||
# Fetch the pool
|
||||
pool = self.central_service.get_pool(self.admin_context, pool.id)
|
||||
|
||||
# Verify that the pool was updated correctly
|
||||
self.assertEqual(ns_record_count + 1, len(pool.ns_records))
|
||||
self.assertIn(new_ns_record.hostname,
|
||||
[n.hostname for n in pool.ns_records])
|
||||
|
||||
# Fetch the domains NS recordset
|
||||
ns_recordsets = self.central_service.find_recordsets(
|
||||
self.admin_context,
|
||||
criterion={'domain_id': domain.id, 'type': "NS"})
|
||||
|
||||
# It should have 2
|
||||
self.assertEqual(2, len(ns_recordsets))
|
||||
|
||||
# Verify that the doamins NS records ware updated correctly
|
||||
managed = [i for i in ns_recordsets if i.managed][0]
|
||||
self.assertEqual(set([n.hostname for n in pool.ns_records]),
|
||||
set([n.data for n in managed.records]))
|
||||
|
||||
def test_update_pool_remove_ns_record(self):
|
||||
# Create a server pool and domain
|
||||
pool = self.create_pool(fixture=0)
|
||||
|
|
Loading…
Reference in New Issue