Browse Source

Merge pull request #705 from omarkilani/master

Update the AzureProvider to support azure-mgmt-dns 8.0.0 and azure-identity.
pull/709/head
Ross McFarland 5 years ago
committed by GitHub
parent
commit
056cec8935
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 31 additions and 30 deletions
  1. +1
    -1
      README.md
  2. +13
    -13
      octodns/provider/azuredns.py
  3. +3
    -2
      requirements.txt
  4. +14
    -14
      tests/test_octodns_provider_azuredns.py

+ 1
- 1
README.md View File

@ -192,7 +192,7 @@ The above command pulled the existing data out of Route53 and placed the results
| Provider | Requirements | Record Support | Dynamic | Notes |
|--|--|--|--|--|
| [AzureProvider](/octodns/provider/azuredns.py) | azure-mgmt-dns | A, AAAA, CAA, CNAME, MX, NS, PTR, SRV, TXT | No | |
| [AzureProvider](/octodns/provider/azuredns.py) | azure-identity, azure-mgmt-dns | A, AAAA, CAA, CNAME, MX, NS, PTR, SRV, TXT | No | |
| [Akamai](/octodns/provider/edgedns.py) | edgegrid-python | A, AAAA, CNAME, MX, NAPTR, NS, PTR, SPF, SRV, SSHFP, TXT | No | |
| [CloudflareProvider](/octodns/provider/cloudflare.py) | | A, AAAA, ALIAS, CAA, CNAME, LOC, MX, NS, PTR, SPF, SRV, TXT | No | CAA tags restricted |
| [ConstellixProvider](/octodns/provider/constellix.py) | | A, AAAA, ALIAS (ANAME), CAA, CNAME, MX, NS, PTR, SPF, SRV, TXT | No | CAA tags restricted |


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

@ -5,7 +5,7 @@
from __future__ import absolute_import, division, print_function, \
unicode_literals
from azure.common.credentials import ServicePrincipalCredentials
from azure.identity import ClientSecretCredential
from azure.mgmt.dns import DnsManagementClient
from azure.mgmt.dns.models import ARecord, AaaaRecord, CaaRecord, \
@ -71,10 +71,11 @@ class _AzureRecord(object):
'''Constructor for _AzureRecord.
Notes on Azure records: An Azure record set has the form
RecordSet(name=<...>, type=<...>, arecords=[...], aaaa_records, ..)
RecordSet(name=<...>, type=<...>, a_records=[...],
aaaa_records=[...], ...)
When constructing an azure record as done in self._apply_Create,
the argument parameters for an A record would be
parameters={'ttl': <int>, 'arecords': [ARecord(<str ip>),]}.
parameters={'ttl': <int>, 'a_records': [ARecord(<str ip>),]}.
As another example for CNAME record:
parameters={'ttl': <int>, 'cname_record': CnameRecord(<str>)}.
@ -101,8 +102,7 @@ class _AzureRecord(object):
return
# Refer to function docstring for key_name and class_name.
format_u_s = '' if record._type == 'A' else '_'
key_name = '{}{}records'.format(self.record_type, format_u_s).lower()
key_name = '{}_records'.format(self.record_type).lower()
if record._type == 'CNAME':
key_name = key_name[:len(key_name) - 1]
azure_class = self.TYPE_MAP[self.record_type]
@ -263,7 +263,7 @@ def _parse_azure_type(string):
def _check_for_alias(azrecord):
if (azrecord.target_resource.id and not azrecord.arecords and not
if (azrecord.target_resource.id and not azrecord.a_records and not
azrecord.cname_record):
return True
return False
@ -343,14 +343,14 @@ class AzureProvider(BaseProvider):
@property
def _dns_client(self):
if self.__dns_client is None:
credentials = ServicePrincipalCredentials(
self._dns_client_client_id,
secret=self._dns_client_key,
tenant=self._dns_client_directory_id
credential = ClientSecretCredential(
client_id=self._dns_client_client_id,
client_secret=self._dns_client_key,
tenant_id=self._dns_client_directory_id
)
self.__dns_client = DnsManagementClient(
credentials,
self._dns_client_subscription_id
credential=credential,
subscription_id=self._dns_client_subscription_id
)
return self.__dns_client
@ -452,7 +452,7 @@ class AzureProvider(BaseProvider):
return exists
def _data_for_A(self, azrecord):
return {'values': [ar.ipv4_address for ar in azrecord.arecords]}
return {'values': [ar.ipv4_address for ar in azrecord.a_records]}
def _data_for_AAAA(self, azrecord):
return {'values': [ar.ipv6_address for ar in azrecord.aaaa_records]}


+ 3
- 2
requirements.txt View File

@ -1,6 +1,7 @@
PyYaml==5.4
azure-common==1.1.25
azure-mgmt-dns==3.0.0
azure-common==1.1.27
azure-identity==1.5.0
azure-mgmt-dns==8.0.0
boto3==1.15.9
botocore==1.18.9
dnspython==1.16.0


+ 14
- 14
tests/test_octodns_provider_azuredns.py View File

@ -152,8 +152,8 @@ _base0.zone_name = 'unit.tests'
_base0.relative_record_set_name = '@'
_base0.record_type = 'A'
_base0.params['ttl'] = 0
_base0.params['arecords'] = [ARecord(ipv4_address='1.2.3.4'),
ARecord(ipv4_address='10.10.10.10')]
_base0.params['a_records'] = [ARecord(ipv4_address='1.2.3.4'),
ARecord(ipv4_address='10.10.10.10')]
azure_records.append(_base0)
_base1 = _AzureRecord('TestAzure', octo_records[1])
@ -161,8 +161,8 @@ _base1.zone_name = 'unit.tests'
_base1.relative_record_set_name = 'a'
_base1.record_type = 'A'
_base1.params['ttl'] = 1
_base1.params['arecords'] = [ARecord(ipv4_address='1.2.3.4'),
ARecord(ipv4_address='1.1.1.1')]
_base1.params['a_records'] = [ARecord(ipv4_address='1.2.3.4'),
ARecord(ipv4_address='1.1.1.1')]
azure_records.append(_base1)
_base2 = _AzureRecord('TestAzure', octo_records[2])
@ -170,7 +170,7 @@ _base2.zone_name = 'unit.tests'
_base2.relative_record_set_name = 'aa'
_base2.record_type = 'A'
_base2.params['ttl'] = 9001
_base2.params['arecords'] = ARecord(ipv4_address='1.2.4.3')
_base2.params['a_records'] = ARecord(ipv4_address='1.2.4.3')
azure_records.append(_base2)
_base3 = _AzureRecord('TestAzure', octo_records[3])
@ -178,7 +178,7 @@ _base3.zone_name = 'unit.tests'
_base3.relative_record_set_name = 'aaa'
_base3.record_type = 'A'
_base3.params['ttl'] = 2
_base3.params['arecords'] = ARecord(ipv4_address='1.1.1.3')
_base3.params['a_records'] = ARecord(ipv4_address='1.1.1.3')
azure_records.append(_base3)
_base4 = _AzureRecord('TestAzure', octo_records[4])
@ -366,7 +366,7 @@ class Test_CheckAzureAlias(TestCase):
alias_record = type('C', (object,), {})
alias_record.target_resource = type('C', (object,), {})
alias_record.target_resource.id = "/subscriptions/x/resourceGroups/y/z"
alias_record.arecords = None
alias_record.a_records = None
alias_record.cname_record = None
self.assertEquals(_check_for_alias(alias_record), True)
@ -377,7 +377,7 @@ class TestAzureDnsProvider(TestCase):
return self._get_provider('mock_spc', 'mock_dns_client')
@patch('octodns.provider.azuredns.DnsManagementClient')
@patch('octodns.provider.azuredns.ServicePrincipalCredentials')
@patch('octodns.provider.azuredns.ClientSecretCredential')
def _get_provider(self, mock_spc, mock_dns_client):
'''Returns a mock AzureProvider object to use in testing.
@ -399,12 +399,12 @@ class TestAzureDnsProvider(TestCase):
provider = self._get_provider()
rs = []
recordSet = RecordSet(arecords=[ARecord(ipv4_address='1.1.1.1')])
recordSet = RecordSet(a_records=[ARecord(ipv4_address='1.1.1.1')])
recordSet.name, recordSet.ttl, recordSet.type = 'a1', 0, 'A'
recordSet.target_resource = SubResource()
rs.append(recordSet)
recordSet = RecordSet(arecords=[ARecord(ipv4_address='1.1.1.1'),
ARecord(ipv4_address='2.2.2.2')])
recordSet = RecordSet(a_records=[ARecord(ipv4_address='1.1.1.1'),
ARecord(ipv4_address='2.2.2.2')])
recordSet.name, recordSet.ttl, recordSet.type = 'a2', 1, 'A'
recordSet.target_resource = SubResource()
rs.append(recordSet)
@ -575,11 +575,11 @@ class TestAzureDnsProvider(TestCase):
provider = self._get_provider()
rs = []
recordSet = RecordSet(arecords=[ARecord(ipv4_address='1.1.1.1')])
recordSet = RecordSet(a_records=[ARecord(ipv4_address='1.1.1.1')])
recordSet.name, recordSet.ttl, recordSet.type = 'a1', 0, 'A'
rs.append(recordSet)
recordSet = RecordSet(arecords=[ARecord(ipv4_address='1.1.1.1'),
ARecord(ipv4_address='2.2.2.2')])
recordSet = RecordSet(a_records=[ARecord(ipv4_address='1.1.1.1'),
ARecord(ipv4_address='2.2.2.2')])
recordSet.name, recordSet.ttl, recordSet.type = 'a2', 1, 'A'
rs.append(recordSet)


Loading…
Cancel
Save