Browse Source

Merge branch 'master' into rreichel3/lazy-load-azuredns-client

pull/669/head
Robert Reichel 5 years ago
committed by GitHub
parent
commit
9056c781c2
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 50 additions and 46 deletions
  1. +13
    -23
      octodns/provider/azuredns.py
  2. +8
    -6
      octodns/source/axfr.py
  3. +22
    -10
      tests/test_octodns_provider_azuredns.py
  4. +3
    -3
      tests/test_octodns_source_axfr.py
  5. +4
    -4
      tests/zones/ext.unit.tests.extension

+ 13
- 23
octodns/provider/azuredns.py View File

@ -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.


+ 8
- 6
octodns/source/axfr.py View File

@ -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:


+ 22
- 10
tests/test_octodns_provider_azuredns.py View File

@ -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()


+ 3
- 3
tests/test_octodns_source_axfr.py View File

@ -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):


tests/zones/unit.tests.extension → tests/zones/ext.unit.tests.extension View File


Loading…
Cancel
Save