diff --git a/README.md b/README.md index b815fbc..25f5792 100644 --- a/README.md +++ b/README.md @@ -151,7 +151,7 @@ The above command pulled the existing data out of Route53 and placed the results | Provider | Requirements | Record Support | Dynamic/Geo Support | Notes | |--|--|--|--|--| -| [AzureProvider](/octodns/provider/azuredns.py) | azure-mgmt-dns | A, AAAA, CNAME, MX, NS, PTR, SRV, TXT | No | | +| [AzureProvider](/octodns/provider/azuredns.py) | azure-mgmt-dns | A, AAAA, CAA, CNAME, MX, NS, PTR, SRV, TXT | No | | | [CloudflareProvider](/octodns/provider/cloudflare.py) | | A, AAAA, ALIAS, CAA, CNAME, MX, NS, SPF, SRV, TXT | No | CAA tags restricted | | [DigitalOceanProvider](/octodns/provider/digitalocean.py) | | A, AAAA, CAA, CNAME, MX, NS, TXT, SRV | No | CAA tags restricted | | [DnsMadeEasyProvider](/octodns/provider/dnsmadeeasy.py) | | A, AAAA, ALIAS (ANAME), CAA, CNAME, MX, NS, PTR, SPF, SRV, TXT | No | CAA tags restricted | diff --git a/octodns/provider/azuredns.py b/octodns/provider/azuredns.py index 6eff4d7..0bca46d 100644 --- a/octodns/provider/azuredns.py +++ b/octodns/provider/azuredns.py @@ -9,8 +9,8 @@ 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, CnameRecord, MxRecord, \ - SrvRecord, NsRecord, PtrRecord, TxtRecord, Zone +from azure.mgmt.dns.models import ARecord, AaaaRecord, CaaRecord, \ + CnameRecord, MxRecord, SrvRecord, NsRecord, PtrRecord, TxtRecord, Zone import logging from functools import reduce @@ -40,6 +40,7 @@ class _AzureRecord(object): TYPE_MAP = { 'A': ARecord, 'AAAA': AaaaRecord, + 'CAA': CaaRecord, 'CNAME': CnameRecord, 'MX': MxRecord, 'SRV': SrvRecord, @@ -90,53 +91,82 @@ class _AzureRecord(object): self.params = self.params(record.data, key_name, azure_class) self.params['ttl'] = record.ttl - def _params(self, data, key_name, azure_class): + def _params_for_A(self, data, key_name, azure_class): try: values = data['values'] except KeyError: values = [data['value']] - return {key_name: [azure_class(v) for v in values]} + return {key_name: [azure_class(ipv4_address=v) for v in values]} - _params_for_A = _params - _params_for_AAAA = _params - _params_for_NS = _params - _params_for_PTR = _params + def _params_for_AAAA(self, data, key_name, azure_class): + try: + values = data['values'] + except KeyError: + values = [data['value']] + return {key_name: [azure_class(ipv6_address=v) for v in values]} + + def _params_for_CAA(self, data, key_name, azure_class): + params = [] + if 'values' in data: + for vals in data['values']: + params.append(azure_class(flags=vals['flags'], + tag=vals['tag'], + value=vals['value'])) + else: # Else there is a singular data point keyed by 'value'. + params.append(azure_class(flags=data['value']['flags'], + tag=data['value']['tag'], + value=data['value']['value'])) + return {key_name: params} def _params_for_CNAME(self, data, key_name, azure_class): - return {key_name: azure_class(data['value'])} + return {key_name: azure_class(cname=data['value'])} def _params_for_MX(self, data, key_name, azure_class): params = [] if 'values' in data: for vals in data['values']: - params.append(azure_class(vals['preference'], - vals['exchange'])) + params.append(azure_class(preference=vals['preference'], + exchange=vals['exchange'])) else: # Else there is a singular data point keyed by 'value'. - params.append(azure_class(data['value']['preference'], - data['value']['exchange'])) + params.append(azure_class(preference=data['value']['preference'], + exchange=data['value']['exchange'])) return {key_name: params} def _params_for_SRV(self, data, key_name, azure_class): params = [] if 'values' in data: for vals in data['values']: - params.append(azure_class(vals['priority'], - vals['weight'], - vals['port'], - vals['target'])) + params.append(azure_class(priority=vals['priority'], + weight=vals['weight'], + port=vals['port'], + target=vals['target'])) else: # Else there is a singular data point keyed by 'value'. - params.append(azure_class(data['value']['priority'], - data['value']['weight'], - data['value']['port'], - data['value']['target'])) + params.append(azure_class(priority=data['value']['priority'], + weight=data['value']['weight'], + port=data['value']['port'], + target=data['value']['target'])) return {key_name: params} + def _params_for_NS(self, data, key_name, azure_class): + try: + values = data['values'] + except KeyError: + values = [data['value']] + return {key_name: [azure_class(nsdname=v) for v in values]} + + def _params_for_PTR(self, data, key_name, azure_class): + try: + values = data['values'] + except KeyError: + values = [data['value']] + return {key_name: [azure_class(ptrdname=v) for v in values]} + def _params_for_TXT(self, data, key_name, azure_class): try: # API for TxtRecord has list of str, even for singleton values = [unescape_semicolon(v) for v in data['values']] except KeyError: values = [unescape_semicolon(data['value'])] - return {key_name: [azure_class([v]) for v in values]} + return {key_name: [azure_class(value=[v]) for v in values]} def _equals(self, b): '''Checks whether two records are equal by comparing all fields. @@ -250,7 +280,8 @@ class AzureProvider(BaseProvider): ''' SUPPORTS_GEO = False SUPPORTS_DYNAMIC = False - SUPPORTS = set(('A', 'AAAA', 'CNAME', 'MX', 'NS', 'PTR', 'SRV', 'TXT')) + SUPPORTS = set(('A', 'AAAA', 'CAA', 'CNAME', 'MX', 'NS', 'PTR', 'SRV', + 'TXT')) def __init__(self, id, client_id, key, directory_id, sub_id, resource_group, *args, **kwargs): @@ -302,7 +333,8 @@ class AzureProvider(BaseProvider): 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('global')) + create_zone(self._resource_group, name, + Zone(location='global')) return name else: return @@ -368,6 +400,12 @@ class AzureProvider(BaseProvider): def _data_for_AAAA(self, azrecord): return {'values': [ar.ipv6_address for ar in azrecord.aaaa_records]} + def _data_for_CAA(self, azrecord): + return {'values': [{'flags': ar.flags, + 'tag': ar.tag, + 'value': ar.value} + for ar in azrecord.caa_records]} + def _data_for_CNAME(self, azrecord): '''Parsing data from Azure DNS Client record call :param azrecord: a return of a call to list azure records diff --git a/requirements.txt b/requirements.txt index c56a6d7..d100c96 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,6 @@ PyYaml==4.2b1 -azure-common==1.1.9 -azure-mgmt-dns==1.2.0 +azure-common==1.1.18 +azure-mgmt-dns==2.1.0 boto3==1.7.5 botocore==1.10.5 dnspython==1.15.0 @@ -12,7 +12,7 @@ google-cloud-dns==0.29.0 incf.countryutils==1.0 ipaddress==1.0.22 jmespath==0.9.3 -msrestazure==0.4.27 +msrestazure==0.6.0 natsort==5.5.0 nsone==0.9.100 ovh==0.4.8 diff --git a/tests/test_octodns_provider_azuredns.py b/tests/test_octodns_provider_azuredns.py index bcf7a29..920c502 100644 --- a/tests/test_octodns_provider_azuredns.py +++ b/tests/test_octodns_provider_azuredns.py @@ -11,9 +11,9 @@ from octodns.provider.azuredns import _AzureRecord, AzureProvider, \ from octodns.zone import Zone from octodns.provider.base import Plan -from azure.mgmt.dns.models import ARecord, AaaaRecord, CnameRecord, MxRecord, \ - SrvRecord, NsRecord, PtrRecord, TxtRecord, RecordSet, SoaRecord, \ - Zone as AzureZone +from azure.mgmt.dns.models import ARecord, AaaaRecord, CaaRecord, \ + CnameRecord, MxRecord, SrvRecord, NsRecord, PtrRecord, TxtRecord, \ + RecordSet, SoaRecord, Zone as AzureZone from msrestazure.azure_exceptions import CloudError from unittest import TestCase @@ -38,6 +38,37 @@ octo_records.append(Record.new(zone, 'aaa', { 'ttl': 2, 'type': 'A', 'values': ['1.1.1.3']})) +octo_records.append(Record.new(zone, 'aaaa1', { + 'ttl': 300, + 'type': 'AAAA', + 'values': ['2601:644:500:e210:62f8:1dff:feb8:947a', + '2601:642:500:e210:62f8:1dff:feb8:947a'], +})) +octo_records.append(Record.new(zone, 'aaaa2', { + 'ttl': 300, + 'type': 'AAAA', + 'value': '2601:644:500:e210:62f8:1dff:feb8:947a' +})) +octo_records.append(Record.new(zone, 'caa1', { + 'ttl': 9, + 'type': 'CAA', + 'value': { + 'flags': 0, + 'tag': 'issue', + 'value': 'ca.unit.tests', + }})) +octo_records.append(Record.new(zone, 'caa2', { + 'ttl': 9, + 'type': 'CAA', + 'values': [{ + 'flags': 0, + 'tag': 'issue', + 'value': 'ca1.unit.tests', + }, { + 'flags': 0, + 'tag': 'issue', + 'value': 'ca2.unit.tests', + }]})) octo_records.append(Record.new(zone, 'cname', { 'ttl': 3, 'type': 'CNAME', @@ -67,6 +98,10 @@ octo_records.append(Record.new(zone, 'foo', { 'ttl': 5, 'type': 'NS', 'value': 'ns1.unit.tests.'})) +octo_records.append(Record.new(zone, 'ptr1', { + 'ttl': 5, + 'type': 'PTR', + 'value': 'ptr1.unit.tests.'})) octo_records.append(Record.new(zone, '_srv._tcp', { 'ttl': 6, 'type': 'SRV', @@ -105,7 +140,8 @@ _base0.zone_name = 'unit.tests' _base0.relative_record_set_name = '@' _base0.record_type = 'A' _base0.params['ttl'] = 0 -_base0.params['arecords'] = [ARecord('1.2.3.4'), ARecord('10.10.10.10')] +_base0.params['arecords'] = [ARecord(ipv4_address='1.2.3.4'), + ARecord(ipv4_address='10.10.10.10')] azure_records.append(_base0) _base1 = _AzureRecord('TestAzure', octo_records[1]) @@ -113,7 +149,8 @@ _base1.zone_name = 'unit.tests' _base1.relative_record_set_name = 'a' _base1.record_type = 'A' _base1.params['ttl'] = 1 -_base1.params['arecords'] = [ARecord('1.2.3.4'), ARecord('1.1.1.1')] +_base1.params['arecords'] = [ARecord(ipv4_address='1.2.3.4'), + ARecord(ipv4_address='1.1.1.1')] azure_records.append(_base1) _base2 = _AzureRecord('TestAzure', octo_records[2]) @@ -121,7 +158,7 @@ _base2.zone_name = 'unit.tests' _base2.relative_record_set_name = 'aa' _base2.record_type = 'A' _base2.params['ttl'] = 9001 -_base2.params['arecords'] = ARecord('1.2.4.3') +_base2.params['arecords'] = ARecord(ipv4_address='1.2.4.3') azure_records.append(_base2) _base3 = _AzureRecord('TestAzure', octo_records[3]) @@ -129,85 +166,146 @@ _base3.zone_name = 'unit.tests' _base3.relative_record_set_name = 'aaa' _base3.record_type = 'A' _base3.params['ttl'] = 2 -_base3.params['arecords'] = ARecord('1.1.1.3') +_base3.params['arecords'] = ARecord(ipv4_address='1.1.1.3') azure_records.append(_base3) _base4 = _AzureRecord('TestAzure', octo_records[4]) _base4.zone_name = 'unit.tests' -_base4.relative_record_set_name = 'cname' -_base4.record_type = 'CNAME' -_base4.params['ttl'] = 3 -_base4.params['cname_record'] = CnameRecord('a.unit.tests.') +_base4.relative_record_set_name = 'aaaa1' +_base4.record_type = 'AAAA' +_base4.params['ttl'] = 300 +aaaa1 = AaaaRecord(ipv6_address='2601:644:500:e210:62f8:1dff:feb8:947a') +aaaa2 = AaaaRecord(ipv6_address='2601:642:500:e210:62f8:1dff:feb8:947a') +_base4.params['aaaa_records'] = [aaaa1, aaaa2] azure_records.append(_base4) _base5 = _AzureRecord('TestAzure', octo_records[5]) _base5.zone_name = 'unit.tests' -_base5.relative_record_set_name = 'mx1' -_base5.record_type = 'MX' -_base5.params['ttl'] = 3 -_base5.params['mx_records'] = [MxRecord(10, 'mx1.unit.tests.'), - MxRecord(20, 'mx2.unit.tests.')] +_base5.relative_record_set_name = 'aaaa2' +_base5.record_type = 'AAAA' +_base5.params['ttl'] = 300 +_base5.params['aaaa_records'] = [aaaa1] azure_records.append(_base5) _base6 = _AzureRecord('TestAzure', octo_records[6]) _base6.zone_name = 'unit.tests' -_base6.relative_record_set_name = 'mx2' -_base6.record_type = 'MX' -_base6.params['ttl'] = 3 -_base6.params['mx_records'] = [MxRecord(10, 'mx1.unit.tests.')] +_base6.relative_record_set_name = 'caa1' +_base6.record_type = 'CAA' +_base6.params['ttl'] = 9 +_base6.params['caa_records'] = [CaaRecord(flags=0, + tag='issue', + value='ca.unit.tests')] azure_records.append(_base6) _base7 = _AzureRecord('TestAzure', octo_records[7]) _base7.zone_name = 'unit.tests' -_base7.relative_record_set_name = '@' -_base7.record_type = 'NS' -_base7.params['ttl'] = 4 -_base7.params['ns_records'] = [NsRecord('ns1.unit.tests.'), - NsRecord('ns2.unit.tests.')] +_base7.relative_record_set_name = 'caa2' +_base7.record_type = 'CAA' +_base7.params['ttl'] = 9 +_base7.params['caa_records'] = [CaaRecord(flags=0, + tag='issue', + value='ca1.unit.tests'), + CaaRecord(flags=0, + tag='issue', + value='ca2.unit.tests')] azure_records.append(_base7) _base8 = _AzureRecord('TestAzure', octo_records[8]) _base8.zone_name = 'unit.tests' -_base8.relative_record_set_name = 'foo' -_base8.record_type = 'NS' -_base8.params['ttl'] = 5 -_base8.params['ns_records'] = [NsRecord('ns1.unit.tests.')] +_base8.relative_record_set_name = 'cname' +_base8.record_type = 'CNAME' +_base8.params['ttl'] = 3 +_base8.params['cname_record'] = CnameRecord(cname='a.unit.tests.') azure_records.append(_base8) _base9 = _AzureRecord('TestAzure', octo_records[9]) _base9.zone_name = 'unit.tests' -_base9.relative_record_set_name = '_srv._tcp' -_base9.record_type = 'SRV' -_base9.params['ttl'] = 6 -_base9.params['srv_records'] = [SrvRecord(10, 20, 30, 'foo-1.unit.tests.'), - SrvRecord(12, 30, 30, 'foo-2.unit.tests.')] +_base9.relative_record_set_name = 'mx1' +_base9.record_type = 'MX' +_base9.params['ttl'] = 3 +_base9.params['mx_records'] = [MxRecord(preference=10, + exchange='mx1.unit.tests.'), + MxRecord(preference=20, + exchange='mx2.unit.tests.')] azure_records.append(_base9) _base10 = _AzureRecord('TestAzure', octo_records[10]) _base10.zone_name = 'unit.tests' -_base10.relative_record_set_name = '_srv2._tcp' -_base10.record_type = 'SRV' -_base10.params['ttl'] = 7 -_base10.params['srv_records'] = [SrvRecord(12, 17, 1, 'srvfoo.unit.tests.')] +_base10.relative_record_set_name = 'mx2' +_base10.record_type = 'MX' +_base10.params['ttl'] = 3 +_base10.params['mx_records'] = [MxRecord(preference=10, + exchange='mx1.unit.tests.')] azure_records.append(_base10) _base11 = _AzureRecord('TestAzure', octo_records[11]) _base11.zone_name = 'unit.tests' -_base11.relative_record_set_name = 'txt1' -_base11.record_type = 'TXT' -_base11.params['ttl'] = 8 -_base11.params['txt_records'] = [TxtRecord(['txt singleton test'])] +_base11.relative_record_set_name = '@' +_base11.record_type = 'NS' +_base11.params['ttl'] = 4 +_base11.params['ns_records'] = [NsRecord(nsdname='ns1.unit.tests.'), + NsRecord(nsdname='ns2.unit.tests.')] azure_records.append(_base11) _base12 = _AzureRecord('TestAzure', octo_records[12]) _base12.zone_name = 'unit.tests' -_base12.relative_record_set_name = 'txt2' -_base12.record_type = 'TXT' -_base12.params['ttl'] = 9 -_base12.params['txt_records'] = [TxtRecord(['txt multiple test']), - TxtRecord(['txt multiple test 2'])] +_base12.relative_record_set_name = 'foo' +_base12.record_type = 'NS' +_base12.params['ttl'] = 5 +_base12.params['ns_records'] = [NsRecord(nsdname='ns1.unit.tests.')] azure_records.append(_base12) +_base13 = _AzureRecord('TestAzure', octo_records[13]) +_base13.zone_name = 'unit.tests' +_base13.relative_record_set_name = 'ptr1' +_base13.record_type = 'PTR' +_base13.params['ttl'] = 5 +_base13.params['ptr_records'] = [PtrRecord(ptrdname='ptr1.unit.tests.')] +azure_records.append(_base13) + +_base14 = _AzureRecord('TestAzure', octo_records[14]) +_base14.zone_name = 'unit.tests' +_base14.relative_record_set_name = '_srv._tcp' +_base14.record_type = 'SRV' +_base14.params['ttl'] = 6 +_base14.params['srv_records'] = [SrvRecord(priority=10, + weight=20, + port=30, + target='foo-1.unit.tests.'), + SrvRecord(priority=12, + weight=30, + port=30, + target='foo-2.unit.tests.')] +azure_records.append(_base14) + +_base15 = _AzureRecord('TestAzure', octo_records[15]) +_base15.zone_name = 'unit.tests' +_base15.relative_record_set_name = '_srv2._tcp' +_base15.record_type = 'SRV' +_base15.params['ttl'] = 7 +_base15.params['srv_records'] = [SrvRecord(priority=12, + weight=17, + port=1, + target='srvfoo.unit.tests.')] +azure_records.append(_base15) + +_base16 = _AzureRecord('TestAzure', octo_records[16]) +_base16.zone_name = 'unit.tests' +_base16.relative_record_set_name = 'txt1' +_base16.record_type = 'TXT' +_base16.params['ttl'] = 8 +_base16.params['txt_records'] = [TxtRecord(value=['txt singleton test'])] +azure_records.append(_base16) + +_base17 = _AzureRecord('TestAzure', octo_records[17]) +_base17.zone_name = 'unit.tests' +_base17.relative_record_set_name = 'txt2' +_base17.record_type = 'TXT' +_base17.params['ttl'] = 9 +_base17.params['txt_records'] = [TxtRecord(value=['txt multiple test']), + TxtRecord(value=['txt multiple test 2'])] +azure_records.append(_base17) + class Test_AzureRecord(TestCase): def test_azure_record(self): @@ -258,62 +356,91 @@ class TestAzureDnsProvider(TestCase): provider = self._get_provider() rs = [] - recordSet = RecordSet(arecords=[ARecord('1.1.1.1')]) + recordSet = RecordSet(arecords=[ARecord(ipv4_address='1.1.1.1')]) recordSet.name, recordSet.ttl, recordSet.type = 'a1', 0, 'A' rs.append(recordSet) - recordSet = RecordSet(arecords=[ARecord('1.1.1.1'), - ARecord('2.2.2.2')]) + recordSet = RecordSet(arecords=[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) - recordSet = RecordSet(aaaa_records=[AaaaRecord('1:1ec:1::1')]) + aaaa1 = AaaaRecord(ipv6_address='1:1ec:1::1') + recordSet = RecordSet(aaaa_records=[aaaa1]) recordSet.name, recordSet.ttl, recordSet.type = 'aaaa1', 2, 'AAAA' rs.append(recordSet) - recordSet = RecordSet(aaaa_records=[AaaaRecord('1:1ec:1::1'), - AaaaRecord('1:1ec:1::2')]) + aaaa2 = AaaaRecord(ipv6_address='1:1ec:1::2') + recordSet = RecordSet(aaaa_records=[aaaa1, + aaaa2]) recordSet.name, recordSet.ttl, recordSet.type = 'aaaa2', 3, 'AAAA' rs.append(recordSet) - recordSet = RecordSet(cname_record=CnameRecord('cname.unit.test.')) - recordSet.name, recordSet.ttl, recordSet.type = 'cname1', 4, 'CNAME' + recordSet = RecordSet(caa_records=[CaaRecord(flags=0, + tag='issue', + value='caa1.unit.tests')]) + recordSet.name, recordSet.ttl, recordSet.type = 'caa1', 4, 'CAA' + rs.append(recordSet) + recordSet = RecordSet(caa_records=[CaaRecord(flags=0, + tag='issue', + value='caa1.unit.tests'), + CaaRecord(flags=0, + tag='issue', + value='caa2.unit.tests')]) + recordSet.name, recordSet.ttl, recordSet.type = 'caa2', 4, 'CAA' + rs.append(recordSet) + cname1 = CnameRecord(cname='cname.unit.test.') + recordSet = RecordSet(cname_record=cname1) + recordSet.name, recordSet.ttl, recordSet.type = 'cname1', 5, 'CNAME' rs.append(recordSet) recordSet = RecordSet(cname_record=None) - recordSet.name, recordSet.ttl, recordSet.type = 'cname2', 5, 'CNAME' + recordSet.name, recordSet.ttl, recordSet.type = 'cname2', 6, 'CNAME' rs.append(recordSet) - recordSet = RecordSet(mx_records=[MxRecord(10, 'mx1.unit.test.')]) - recordSet.name, recordSet.ttl, recordSet.type = 'mx1', 6, 'MX' + recordSet = RecordSet(mx_records=[MxRecord(preference=10, + exchange='mx1.unit.test.')]) + recordSet.name, recordSet.ttl, recordSet.type = 'mx1', 7, 'MX' rs.append(recordSet) - recordSet = RecordSet(mx_records=[MxRecord(10, 'mx1.unit.test.'), - MxRecord(11, 'mx2.unit.test.')]) - recordSet.name, recordSet.ttl, recordSet.type = 'mx2', 7, 'MX' + recordSet = RecordSet(mx_records=[MxRecord(preference=10, + exchange='mx1.unit.test.'), + MxRecord(preference=11, + exchange='mx2.unit.test.')]) + recordSet.name, recordSet.ttl, recordSet.type = 'mx2', 8, 'MX' rs.append(recordSet) - recordSet = RecordSet(ns_records=[NsRecord('ns1.unit.test.')]) - recordSet.name, recordSet.ttl, recordSet.type = 'ns1', 8, 'NS' + recordSet = RecordSet(ns_records=[NsRecord(nsdname='ns1.unit.test.')]) + recordSet.name, recordSet.ttl, recordSet.type = 'ns1', 9, 'NS' rs.append(recordSet) - recordSet = RecordSet(ns_records=[NsRecord('ns1.unit.test.'), - NsRecord('ns2.unit.test.')]) - recordSet.name, recordSet.ttl, recordSet.type = 'ns2', 9, 'NS' + recordSet = RecordSet(ns_records=[NsRecord(nsdname='ns1.unit.test.'), + NsRecord(nsdname='ns2.unit.test.')]) + recordSet.name, recordSet.ttl, recordSet.type = 'ns2', 10, 'NS' rs.append(recordSet) - recordSet = RecordSet(ptr_records=[PtrRecord('ptr1.unit.test.')]) - recordSet.name, recordSet.ttl, recordSet.type = 'ptr1', 10, 'PTR' + ptr1 = PtrRecord(ptrdname='ptr1.unit.test.') + recordSet = RecordSet(ptr_records=[ptr1]) + recordSet.name, recordSet.ttl, recordSet.type = 'ptr1', 11, 'PTR' rs.append(recordSet) - recordSet = RecordSet(ptr_records=[PtrRecord(None)]) - recordSet.name, recordSet.ttl, recordSet.type = 'ptr2', 11, 'PTR' + recordSet = RecordSet(ptr_records=[PtrRecord(ptrdname=None)]) + recordSet.name, recordSet.ttl, recordSet.type = 'ptr2', 12, 'PTR' rs.append(recordSet) - recordSet = RecordSet(srv_records=[SrvRecord(1, 2, 3, '1unit.tests.')]) - recordSet.name, recordSet.ttl, recordSet.type = '_srv1._tcp', 12, 'SRV' + recordSet = RecordSet(srv_records=[SrvRecord(priority=1, + weight=2, + port=3, + target='1unit.tests.')]) + recordSet.name, recordSet.ttl, recordSet.type = '_srv1._tcp', 13, 'SRV' rs.append(recordSet) - recordSet = RecordSet(srv_records=[SrvRecord(1, 2, 3, '1unit.tests.'), - SrvRecord(4, 5, 6, '2unit.tests.')]) - recordSet.name, recordSet.ttl, recordSet.type = '_srv2._tcp', 13, 'SRV' + recordSet = RecordSet(srv_records=[SrvRecord(priority=1, + weight=2, + port=3, + target='1unit.tests.'), + SrvRecord(priority=4, + weight=5, + port=6, + target='2unit.tests.')]) + recordSet.name, recordSet.ttl, recordSet.type = '_srv2._tcp', 14, 'SRV' rs.append(recordSet) - recordSet = RecordSet(txt_records=[TxtRecord('sample text1')]) - recordSet.name, recordSet.ttl, recordSet.type = 'txt1', 14, 'TXT' + recordSet = RecordSet(txt_records=[TxtRecord(value='sample text1')]) + recordSet.name, recordSet.ttl, recordSet.type = 'txt1', 15, 'TXT' rs.append(recordSet) - recordSet = RecordSet(txt_records=[TxtRecord('sample text1'), - TxtRecord('sample text2')]) - recordSet.name, recordSet.ttl, recordSet.type = 'txt2', 15, 'TXT' + recordSet = RecordSet(txt_records=[TxtRecord(value='sample text1'), + TxtRecord(value='sample text2')]) + recordSet.name, recordSet.ttl, recordSet.type = 'txt2', 16, 'TXT' rs.append(recordSet) recordSet = RecordSet(soa_record=[SoaRecord()]) - recordSet.name, recordSet.ttl, recordSet.type = '', 16, 'SOA' + recordSet.name, recordSet.ttl, recordSet.type = '', 17, 'SOA' rs.append(recordSet) record_list = provider._dns_client.record_sets.list_by_dns_zone @@ -322,7 +449,7 @@ class TestAzureDnsProvider(TestCase): exists = provider.populate(zone) self.assertTrue(exists) - self.assertEquals(len(zone.records), 16) + self.assertEquals(len(zone.records), 18) def test_populate_zone(self): provider = self._get_provider() @@ -356,9 +483,9 @@ class TestAzureDnsProvider(TestCase): changes.append(Create(i)) deletes.append(Delete(i)) - self.assertEquals(13, provider.apply(Plan(None, zone, + self.assertEquals(18, provider.apply(Plan(None, zone, changes, True))) - self.assertEquals(13, provider.apply(Plan(zone, zone, + self.assertEquals(18, provider.apply(Plan(zone, zone, deletes, True))) def test_create_zone(self): @@ -374,18 +501,18 @@ class TestAzureDnsProvider(TestCase): _get = provider._dns_client.zones.get _get.side_effect = CloudError(Mock(status=404), err_msg) - self.assertEquals(13, provider.apply(Plan(None, desired, changes, + self.assertEquals(18, provider.apply(Plan(None, desired, changes, True))) def test_check_zone_no_create(self): provider = self._get_provider() rs = [] - recordSet = RecordSet(arecords=[ARecord('1.1.1.1')]) + recordSet = RecordSet(arecords=[ARecord(ipv4_address='1.1.1.1')]) recordSet.name, recordSet.ttl, recordSet.type = 'a1', 0, 'A' rs.append(recordSet) - recordSet = RecordSet(arecords=[ARecord('1.1.1.1'), - ARecord('2.2.2.2')]) + recordSet = RecordSet(arecords=[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)