mirror of
https://github.com/github/octodns.git
synced 2024-05-11 05:55:00 +00:00
Merge pull request #705 from omarkilani/master
Update the AzureProvider to support azure-mgmt-dns 8.0.0 and azure-identity.
This commit is contained in:
@@ -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 |
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user