From 5b93048e0742907b2d1f9de42781af2af1b6c151 Mon Sep 17 00:00:00 2001 From: Viranch Mehta Date: Thu, 21 Oct 2021 13:24:45 -0700 Subject: [PATCH] Use null/empty instead of garbage values to invalidate broken dynamic records --- octodns/provider/azuredns.py | 42 +++++++++++-------------- tests/test_octodns_provider_azuredns.py | 12 +++---- 2 files changed, 24 insertions(+), 30 deletions(-) diff --git a/octodns/provider/azuredns.py b/octodns/provider/azuredns.py index aff7a25..bbc6973 100644 --- a/octodns/provider/azuredns.py +++ b/octodns/provider/azuredns.py @@ -650,14 +650,12 @@ class AzureProvider(BaseProvider): if azrecord.a_records is None: if azrecord.target_resource.id: return self._data_for_dynamic(azrecord) - else: - # dynamic record alias is broken, return dummy value and apply - # will likely overwrite/fix it - self.log.warn('_data_for_A: Missing Traffic Manager ' - 'alias for dynamic A record %s, forcing ' - 're-link by setting an invalid value', - azrecord.fqdn) - return {'values': ['255.255.255.255']} + + # dynamic record alias is broken, return dummy value and apply + # will likely overwrite/fix it + self.log.warn('_data_for_A: Missing Traffic Manager alias for ' + 'dynamic record %s', azrecord.fqdn) + return {'values': []} return {'values': [ar.ipv4_address for ar in azrecord.a_records]} @@ -665,14 +663,12 @@ class AzureProvider(BaseProvider): if azrecord.aaaa_records is None: if azrecord.target_resource.id: return self._data_for_dynamic(azrecord) - else: - # dynamic record alias is broken, return dummy value and apply - # will likely overwrite/fix it - self.log.warn('_data_for_AAAA: Missing Traffic Manager ' - 'alias for dynamic AAAA record %s, forcing ' - 're-link by setting an invalid value', - azrecord.fqdn) - return {'values': ['::1']} + + # dynamic record alias is broken, return dummy value and apply + # will likely overwrite/fix it + self.log.warn('_data_for_AAAA: Missing Traffic Manager alias for ' + 'dynamic record %s', azrecord.fqdn) + return {'values': []} return {'values': [ar.ipv6_address for ar in azrecord.aaaa_records]} @@ -692,14 +688,12 @@ class AzureProvider(BaseProvider): if azrecord.cname_record is None: if azrecord.target_resource.id: return self._data_for_dynamic(azrecord) - else: - # dynamic record alias is broken, return dummy value and apply - # will likely overwrite/fix it - self.log.warn('_data_for_CNAME: Missing Traffic Manager ' - 'alias for dynamic CNAME record %s, forcing ' - 're-link by setting an invalid value', - azrecord.fqdn) - return {'value': 'iam.invalid.'} + + # dynamic record alias is broken, return dummy value and apply + # will likely overwrite/fix it + self.log.warn('_data_for_CNAME: Missing Traffic Manager alias for ' + 'dynamic record %s', azrecord.fqdn) + return {'value': None} return {'value': _check_endswith_dot(azrecord.cname_record.cname)} diff --git a/tests/test_octodns_provider_azuredns.py b/tests/test_octodns_provider_azuredns.py index 708b229..64bd3ec 100644 --- a/tests/test_octodns_provider_azuredns.py +++ b/tests/test_octodns_provider_azuredns.py @@ -1934,8 +1934,8 @@ class TestAzureDnsProvider(TestCase): ttl=60, target_resource=SubResource(id=None)) azrecord.name = record.name or '@' azrecord.type = f'Microsoft.Network/dnszones/{record._type}' - record2 = provider._populate_record(zone, azrecord) - self.assertEqual(record2.values, ['255.255.255.255']) + record2 = provider._populate_record(zone, azrecord, lenient=True) + self.assertEqual(record2.values, []) # test that same record gets populated back from traffic managers tm_list = provider._tm_client.profiles.list_by_resource_group @@ -2016,8 +2016,8 @@ class TestAzureDnsProvider(TestCase): ttl=60, target_resource=SubResource(id=None)) azrecord.name = record.name or '@' azrecord.type = f'Microsoft.Network/dnszones/{record._type}' - record2 = provider._populate_record(zone, azrecord) - self.assertEqual(record2.values, ['::1']) + record2 = provider._populate_record(zone, azrecord, lenient=True) + self.assertEqual(record2.values, []) # test that same record gets populated back from traffic managers tm_list = provider._tm_client.profiles.list_by_resource_group @@ -2259,8 +2259,8 @@ class TestAzureDnsProvider(TestCase): azrecord.name = record1.name or '@' azrecord.type = f'Microsoft.Network/dnszones/{record1._type}' - record2 = provider._populate_record(zone, azrecord) - self.assertEqual(record2.value, 'iam.invalid.') + record2 = provider._populate_record(zone, azrecord, lenient=True) + self.assertIsNone(record2.value) change = Update(record2, record1) provider._apply_Update(change)