diff --git a/octodns/provider/azuredns.py b/octodns/provider/azuredns.py index 046ddfe..2fca5af 100644 --- a/octodns/provider/azuredns.py +++ b/octodns/provider/azuredns.py @@ -7,7 +7,6 @@ from __future__ import absolute_import, division, print_function, \ from azure.common.credentials import ServicePrincipalCredentials from azure.mgmt.dns import DnsManagementClient -from msrestazure.azure_exceptions import CloudError from azure.mgmt.dns.models import ARecord, AaaaRecord, CaaRecord, \ CnameRecord, MxRecord, SrvRecord, NsRecord, PtrRecord, TxtRecord, Zone @@ -359,7 +358,7 @@ class AzureProvider(BaseProvider): self.log.debug('azure_zones: loading') list_zones = self._dns_client.zones.list_by_resource_group for zone in list_zones(self._resource_group): - self._azure_zones.add(zone.name) + self._azure_zones.add(zone.name.rstrip('.')) def _check_zone(self, name, create=False): '''Checks whether a zone specified in a source exist in Azure server. @@ -374,29 +373,20 @@ class AzureProvider(BaseProvider): :type return: str or None ''' - self.log.debug('_check_zone: name=%s', name) - try: - if name in self._azure_zones: - return name - self._dns_client.zones.get(self._resource_group, name) + self.log.debug('_check_zone: name=%s create=%s', name, create) + # Check if the zone already exists in our set + if name in self._azure_zones: + return name + # If not, and its time to create, lets do it. + if create: + self.log.debug('_check_zone:no matching zone; creating %s', name) + create_zone = self._dns_client.zones.create_or_update + create_zone(self._resource_group, name, Zone(location='global')) self._azure_zones.add(name) return name - except CloudError as err: - msg = 'The Resource \'Microsoft.Network/dnszones/{}\''.format(name) - msg += ' under resource group \'{}\''.format(self._resource_group) - msg += ' was not found.' - if msg == err.message: - # Then the only error is that the zone doesn't currently exist - if create: - self.log.debug('_check_zone:no matching zone; creating %s', - name) - create_zone = self._dns_client.zones.create_or_update - create_zone(self._resource_group, name, - Zone(location='global')) - return name - else: - return - raise + else: + # Else return nothing (aka false) + return def populate(self, zone, target=False, lenient=False): '''Required function of manager.py to collect records from zone. diff --git a/octodns/source/axfr.py b/octodns/source/axfr.py index 1ca2c67..ed3f98f 100644 --- a/octodns/source/axfr.py +++ b/octodns/source/axfr.py @@ -229,14 +229,16 @@ class ZoneFileSource(AxfrBaseSource): self._zone_records = {} def _load_zone_file(self, zone_name): + + zone_filename = zone_name + if self.file_extension: + zone_filename = '{}{}'.format(zone_name, + self.file_extension.lstrip('.')) + zonefiles = listdir(self.directory) - if zone_name in zonefiles: + if zone_filename in zonefiles: try: - filename = zone_name - if self.file_extension: - filename = '{}{}'.format(zone_name, - self.file_extension.lstrip('.')) - z = dns.zone.from_file(join(self.directory, filename), + z = dns.zone.from_file(join(self.directory, zone_filename), zone_name, relativize=False, check_origin=self.check_origin) except DNSException as error: diff --git a/tests/test_octodns_provider_azuredns.py b/tests/test_octodns_provider_azuredns.py index 8f840f0..3a70898 100644 --- a/tests/test_octodns_provider_azuredns.py +++ b/tests/test_octodns_provider_azuredns.py @@ -501,32 +501,44 @@ class TestAzureDnsProvider(TestCase): record_list = provider._dns_client.record_sets.list_by_dns_zone record_list.return_value = rs + zone_list = provider._dns_client.zones.list_by_resource_group + zone_list.return_value = [zone] + exists = provider.populate(zone) - self.assertTrue(exists) + self.assertEquals(len(zone.records), 17) + self.assertTrue(exists) def test_populate_zone(self): provider = self._get_provider() zone_list = provider._dns_client.zones.list_by_resource_group - zone_list.return_value = [AzureZone(location='global'), - AzureZone(location='global')] + zone_1 = AzureZone(location='global') + # This is far from ideal but the + # zone constructor doesn't let me set it on creation + zone_1.name = "zone-1" + zone_2 = AzureZone(location='global') + # This is far from ideal but the + # zone constructor doesn't let me set it on creation + zone_2.name = "zone-2" + zone_list.return_value = [zone_1, + zone_2, + zone_1] provider._populate_zones() - self.assertEquals(len(provider._azure_zones), 1) + # This should be returning two zones since two zones are the same + self.assertEquals(len(provider._azure_zones), 2) def test_bad_zone_response(self): provider = self._get_provider() _get = provider._dns_client.zones.get _get.side_effect = CloudError(Mock(status=404), 'Azure Error') - trip = False - try: - provider._check_zone('unit.test', create=False) - except CloudError: - trip = True - self.assertEquals(trip, True) + self.assertEquals( + provider._check_zone('unit.test', create=False), + None + ) def test_apply(self): provider = self._get_provider() diff --git a/tests/test_octodns_source_axfr.py b/tests/test_octodns_source_axfr.py index f808166..a1d2e1c 100644 --- a/tests/test_octodns_source_axfr.py +++ b/tests/test_octodns_source_axfr.py @@ -45,12 +45,12 @@ class TestAxfrSource(TestCase): class TestZoneFileSource(TestCase): source = ZoneFileSource('test', './tests/zones') - source_extension = ZoneFileSource('test', './tests/zones', 'extension') def test_zonefiles_with_extension(self): + source = ZoneFileSource('test', './tests/zones', 'extension') # Load zonefiles with a specified file extension - valid = Zone('unit.tests.', []) - self.source_extension.populate(valid) + valid = Zone('ext.unit.tests.', []) + source.populate(valid) self.assertEquals(1, len(valid.records)) def test_populate(self): diff --git a/tests/zones/unit.tests.extension b/tests/zones/ext.unit.tests.extension similarity index 61% rename from tests/zones/unit.tests.extension rename to tests/zones/ext.unit.tests.extension index 2821d9a..2ed7ac6 100644 --- a/tests/zones/unit.tests.extension +++ b/tests/zones/ext.unit.tests.extension @@ -1,5 +1,5 @@ -$ORIGIN unit.tests. -@ 3600 IN SOA ns1.unit.tests. root.unit.tests. ( +$ORIGIN ext.unit.tests. +@ 3600 IN SOA ns1.ext.unit.tests. root.ext.unit.tests. ( 2018071501 ; Serial 3600 ; Refresh (1 hour) 600 ; Retry (10 minutes) @@ -8,5 +8,5 @@ $ORIGIN unit.tests. ) ; NS Records -@ 3600 IN NS ns1.unit.tests. -@ 3600 IN NS ns2.unit.tests. +@ 3600 IN NS ns1.ext.unit.tests. +@ 3600 IN NS ns2.ext.unit.tests.