diff --git a/designate/central/service.py b/designate/central/service.py index 9df81db1f..3fdf8c553 100644 --- a/designate/central/service.py +++ b/designate/central/service.py @@ -1143,7 +1143,7 @@ class Service(service.RPCService): context, zone, increment_serial=increment_serial) # Fire off a XFR - if 'masters' in changes: + if zone.type == 'SECONDARY' and 'masters' in changes: self.mdns_api.perform_zone_xfr(context, zone) self.zone_api.update_zone(context, zone) diff --git a/designate/tests/test_central/test_service.py b/designate/tests/test_central/test_service.py index 163a396e1..330a7d300 100644 --- a/designate/tests/test_central/test_service.py +++ b/designate/tests/test_central/test_service.py @@ -889,6 +889,42 @@ class CentralServiceTest(CentralTestCase): self.assertIsInstance(notified_zone, objects.Zone) self.assertEqual(zone.id, notified_zone.id) + def test_update_zone_master_for_primary_zone(self): + # Create a zone + zone = self.create_zone(email='info@example.org') + + # Update the masters + zone.masters = objects.ZoneMasterList() + + mdns = mock.Mock() + with mock.patch.object(mdns_api.MdnsAPI, + 'get_instance') as get_worker: + get_worker.return_value = mdns + self.central_service.update_zone(self.admin_context, zone) + + # Make sure we don't try to trigger an axfr for a primary zone. + self.assertFalse(mdns.perform_zone_xfr.called) + + def test_update_zone_master_for_secondary_zone(self): + fixture = self.get_zone_fixture('SECONDARY', 0) + fixture['email'] = cfg.CONF['service:central'].managed_resource_email + fixture['masters'] = [{'host': '192.0.2.10', 'port': 53}] + + # Create a zone + zone = self.create_zone(**fixture) + + # Update the masters + zone.masters = objects.ZoneMasterList() + + mdns = mock.Mock() + with mock.patch.object(mdns_api.MdnsAPI, + 'get_instance') as get_mdns: + get_mdns.return_value = mdns + self.central_service.update_zone(self.admin_context, zone) + + # Make sure we trigger an axfr for a secondary zone. + self.assertTrue(mdns.perform_zone_xfr.called) + def test_update_zone_without_id(self): # Create a zone zone = self.create_zone(email='info@example.org')