def add_dns_a_record(record_set_name, ip): from azure.mgmt.dns.models import (ARecord, RecordSet) ncf = get_dns_client().record_sets record = ARecord(ipv4_address=ip) record_type = 'a' record_set = RecordSet(name=record_set_name, type=record_type, ttl=3600) record_set.arecords = [record] return ncf.create_or_update(DNS_RESOURCE_GROUP, INSTANCE_DNS_ZONE, record_set_name, record_type, record_set)
def test_cleanup_existing(self): self.mock_client.record_sets.get.return_value = RecordSet( txt_records=[TxtRecord(value=['someexistingkey'])]) # Extract zone TXT record name and value zone1_req = SINGLE_DOMAIN[0] zone1_domain_name = zone1_req.validation_domain_name(zone1_req.domain) zone1_relative_record = zone1_domain_name.replace('example.com', '').strip('.') zone1_key = zone1_req.validation(zone1_req.account_key) # _attempt_cleanup | pylint: disable=protected-access self.auth._attempt_cleanup = True self.auth.cleanup(SINGLE_DOMAIN) # Check azure client call counts self.assertEqual(self.mock_client.record_sets.get.call_count, 1) self.assertEqual(self.mock_client.record_sets.delete.call_count, 0) self.assertEqual( self.mock_client.record_sets.create_or_update.call_count, 1) # Check recordset is updated to not include key zone1_call = self.mock_client.record_sets.create_or_update.call_args_list[ 0] self.assertEqual(zone1_call[1]['zone_name'], "example.com") self.assertEqual(zone1_call[1]['record_type'], "TXT") self.assertEqual(zone1_call[1]['relative_record_set_name'], zone1_relative_record) zone1_txt_records = zone1_call[1]['parameters'].txt_records self.assertEqual(len(zone1_txt_records), 1) txt_values = zone1_txt_records[0].value self.assertNotIn(zone1_key, txt_values) self.assertIn('someexistingkey', txt_values)
def test_cleanup_multiple(self): self.mock_client.record_sets.get.return_value = RecordSet( txt_records=[]) # Extract zone TXT record name and value zone1_req, zone2_req = MULTI_DOMAIN zone1_domain_name = zone1_req.validation_domain_name(zone1_req.domain) zone2_domain_name = zone2_req.validation_domain_name(zone2_req.domain) zone1_relative_record = zone1_domain_name.replace('example.com', '').strip('.') zone2_relative_record = zone2_domain_name.replace('example.org', '').strip('.') # _attempt_cleanup | pylint: disable=protected-access self.auth._attempt_cleanup = True self.auth.cleanup(MULTI_DOMAIN) # Check azure client call counts self.assertEqual(self.mock_client.record_sets.get.call_count, 2) self.assertEqual(self.mock_client.record_sets.delete.call_count, 2) zone1_call, zone2_call = self.mock_client.record_sets.delete.call_args_list self.assertEqual(zone1_call[1]['zone_name'], "example.com") self.assertEqual(zone1_call[1]['record_type'], "TXT") self.assertEqual(zone1_call[1]['relative_record_set_name'], zone1_relative_record) self.assertEqual(zone2_call[1]['zone_name'], "example.org") self.assertEqual(zone2_call[1]['record_type'], "TXT") self.assertEqual(zone2_call[1]['relative_record_set_name'], zone2_relative_record)
def test_perform_subdomain(self): self.mock_client.record_sets.get.return_value = RecordSet( txt_records=[]) # Extract zone TXT record name and value zone1_req = SUB_DOMAIN[0] zone1_domain_name = zone1_req.validation_domain_name(zone1_req.domain) zone1_key = zone1_req.validation(zone1_req.account_key) # example.com is azure zone in config relative_record = zone1_domain_name.replace('example.com', '').strip('.') self.auth.perform(SUB_DOMAIN) # Check azure client call counts self.assertEqual(self.mock_client.record_sets.get.call_count, 1) self.assertEqual( self.mock_client.record_sets.create_or_update.call_count, 1) # zone1_call = self.mock_client.record_sets.create_or_update.call_args_list[ 0] self.assertEqual(zone1_call[1]['zone_name'], "example.com") self.assertEqual(zone1_call[1]['record_type'], "TXT") self.assertEqual(zone1_call[1]['relative_record_set_name'], relative_record) zone1_txt_records = zone1_call[1]['parameters'].txt_records self.assertEqual(len(zone1_txt_records), 1) self.assertEqual(zone1_txt_records[0].value[0], zone1_key)
def add_txt_record(self, domain, record_content, record_ttl): """ Add a TXT record using the supplied information. :param str domain: The fqdn (typically beginning with '_acme-challenge.'). :param str record_content: The record content (typically the challenge validation). :param int record_ttl: The record TTL (number of seconds that the record may be cached). :raises certbot.errors.PluginError: if an error occurs communicating with the Azure API """ try: zone = self._find_managed_zone(domain) relative_record_name = ".".join(domain.split('.')[0:-len(zone.split('.'))]) try: record = self.dns_client.record_sets.get(self.resource_group, zone, relative_record_name, 'TXT') record.txt_records.append(TxtRecord(value=[record_content])) except azure.core.exceptions.ResourceNotFoundError: record = RecordSet(ttl=record_ttl, txt_records=[TxtRecord(value=[record_content])]) self.dns_client.record_sets.create_or_update( self.resource_group, zone, relative_record_name, 'TXT', record ) except CloudError as e: logger.error('Encountered error adding TXT record: %s', e) raise errors.PluginError('Error communicating with the Azure DNS API: {0}'.format(e))
def test_check_zone_no_create(self): provider = self._get_provider() rs = [] rs.append(RecordSet(name='a1', ttl=0, type='A', arecords=[ARecord('1.1.1.1')])) rs.append(RecordSet(name='a2', ttl=1, type='A', arecords=[ARecord('1.1.1.1'), ARecord('2.2.2.2')])) record_list = provider._dns_client.record_sets.list_by_dns_zone record_list.return_value = rs err_msg = 'The Resource \'Microsoft.Network/dnszones/unit3.test\' ' err_msg += 'under resource group \'mock_rg\' was not found.' _get = provider._dns_client.zones.get _get.side_effect = CloudError(Mock(status=404), err_msg) provider.populate(Zone('unit3.test.', [])) self.assertEquals(len(zone.records), 0)
def test_perform_existing(self): self.mock_client.record_sets.get.return_value = RecordSet( txt_records=[TxtRecord(value=['someexistingkey'])]) # Extract zone TXT record name and value zone1_req = SINGLE_DOMAIN[0] zone1_domain_name = zone1_req.validation_domain_name(zone1_req.domain) zone1_relative_record = zone1_domain_name.replace('example.com', '').strip('.') zone1_key = zone1_req.validation(zone1_req.account_key) self.auth.perform(SINGLE_DOMAIN) # Check azure client call counts self.assertEqual(self.mock_client.record_sets.get.call_count, 1) self.assertEqual( self.mock_client.record_sets.create_or_update.call_count, 1) # expected = [ self.mock_client.record_sets.create_or_update.call( resource_group_name='dns1', zone_name='example.com', relative_record_set_name=zone1_domain_name, parameters=RecordSet(txt_records=TxtRecord( value=[zone1_key, 'someexistingkey']))) ] zone1_call = self.mock_client.record_sets.create_or_update.call_args_list[ 0] self.assertEqual(zone1_call[1]['zone_name'], "example.com") self.assertEqual(zone1_call[1]['record_type'], "TXT") self.assertEqual(zone1_call[1]['relative_record_set_name'], zone1_relative_record) zone1_txt_records = zone1_call[1]['parameters'].txt_records self.assertEqual(len(zone1_txt_records), 1) txt_values = zone1_txt_records[0].value self.assertIn(zone1_key, txt_values) self.assertIn('someexistingkey', txt_values)
def _cleanup(self, domain, validation_name, validation): if self.credential is None: self._setup_credentials() azure_domain, subscription_id, resource_group_name = self._get_ids_for_domain( domain) relative_validation_name = self._get_relative_domain( validation_name, azure_domain) client = self._get_azure_client(subscription_id) txt_value = set() try: existing_rr = client.record_sets.get( resource_group_name=resource_group_name, zone_name=azure_domain, relative_record_set_name=relative_validation_name, record_type='TXT') for record in existing_rr.txt_records: for value in record.value: txt_value.add(value) except CloudError as err: if err.status_code != 404: # Ignore RR not found raise errors.PluginError( 'Failed to check TXT record for domain ' '{}, error: {}'.format(domain, err)) txt_value -= {validation} try: if txt_value: client.record_sets.create_or_update( resource_group_name=resource_group_name, zone_name=azure_domain, relative_record_set_name=relative_validation_name, record_type='TXT', parameters=RecordSet( ttl=self.ttl, txt_records=[TxtRecord(value=list(txt_value))])) else: client.record_sets.delete( resource_group_name=resource_group_name, zone_name=azure_domain, relative_record_set_name=relative_validation_name, record_type='TXT') except CloudError as err: if err.status_code != 404: # Ignore RR not found raise errors.PluginError( 'Failed to remove TXT record for domain ' '{}, error: {}'.format(domain, err))
def _setup_dns_challenge( self, record_set_name: str, value: str, ): self._dns_client.record_sets.create_or_update( resource_group_name=self.options.azure_dns_zone_resource_group, zone_name=self.options.azure_dns_zone, relative_record_set_name=record_set_name, record_type=RecordType.TXT, parameters=RecordSet( ttl=ACME_CHALLENGE_TXT_RECORD_TTL, txt_records=[TxtRecord(value=[value])], ), )
def turn_to_input(self, curr_record): val = turn_to_long(self.time_to_live) if self.record_type == 'A': x = RecordSet(arecords=curr_record, type=self.record_type, ttl=val) elif self.record_type == 'AAAA': x = RecordSet(aaaa_records=curr_record, type=self.record_type, ttl=val) elif self.record_type == 'CNAME': x = RecordSet(cname_record=curr_record, type=self.record_type, ttl=val) elif self.record_type == 'MX': x = RecordSet(mx_records=curr_record, type=self.record_type, ttl=val) elif self.record_type == 'NS': x = RecordSet(ns_records=curr_record, type=self.record_type, ttl=val) elif self.record_type == 'SRV': x = RecordSet(srv_records=curr_record, type=self.record_type, ttl=val) elif self.record_type == 'TXT': x = RecordSet(txt_records=curr_record, type=self.record_type, ttl=val) elif self.record_type == 'PTR': x = RecordSet(ptr_records=curr_record, type=self.record_type, ttl=val) return x
def _create_dns_record(self, tag: str, subdomain: str): """ Creates a subdomain record in Azure DNS and points it to Traffic Manager Profile by tag. """ logging.debug( "Create a dns record for subdomain %s and point to traffic manager with tag %s", subdomain, tag, ) tm_profile = self._get_traffic_manager_profile(tag) record = RecordSet( ttl=DNS_RECORD_TTL, target_resource=tm_profile, ) self.dns.record_sets.create_or_update( resource_group_name=self.options.azure_dns_resource_group, zone_name=self.options.azure_dns_zone, relative_record_set_name=subdomain, record_type="CNAME", parameters=record, )
def _perform(self, domain, validation_name, validation): azure_domain, subscription_id, resource_group_name = self._get_ids_for_domain( domain) client = self._get_azure_client(subscription_id) relative_validation_name = self._get_relative_domain( validation_name, azure_domain) # Check to see if there are any existing TXT validation record values txt_value = {validation} try: existing_rr = client.record_sets.get( resource_group_name=resource_group_name, zone_name=azure_domain, relative_record_set_name=relative_validation_name, record_type='TXT') for record in existing_rr.txt_records: for value in record.value: txt_value.add(value) except CloudError as err: if err.status_code != 404: # Ignore RR not found raise errors.PluginError( 'Failed to check TXT record for domain ' '{}, error: {}'.format(domain, err)) try: client.record_sets.create_or_update( resource_group_name=resource_group_name, zone_name=azure_domain, relative_record_set_name=relative_validation_name, record_type='TXT', parameters=RecordSet( ttl=self.ttl, txt_records=[TxtRecord(value=list(txt_value))])) except CloudError as err: raise errors.PluginError('Failed to add TXT record to domain ' '{}, error: {}'.format(domain, err))
def exec_module(self, **kwargs): for key in self.module_arg_spec.keys(): setattr(self, key, kwargs[key]) # retrieve resource group to make sure it exists self.get_resource_group(self.resource_group) zone = self.dns_client.zones.get(self.resource_group, self.zone_name) if not zone: self.fail( 'The zone {0} does not exist in the resource group {1}'.format( self.zone_name, self.resource_group)) try: self.log('Fetching Record Set {0}'.format(self.relative_name)) record_set = self.dns_client.record_sets.get( self.resource_group, self.zone_name, self.relative_name, self.record_type) except CloudError as ce: record_set = None # FUTURE: fail on anything other than ResourceNotFound # FUTURE: implement diff mode if self.state == 'present': # convert the input records to SDK objects self.input_sdk_records = self.create_sdk_records(self.records) if not record_set: changed = True else: # and use it to get the type-specific records server_records = getattr(record_set, self.record_type_metadata['attrname']) # compare the input records to the server records changed = self.records_changed(self.input_sdk_records, server_records) # also check top-level recordset properties changed |= record_set.ttl != self.time_to_live # FUTURE: add metadata/tag check on recordset self.results['changed'] |= changed elif self.state == 'absent': if record_set: self.results['changed'] = True if self.check_mode: return self.results if self.results['changed']: if self.state == 'present': record_set_args = dict(ttl=self.time_to_live) if not self.record_type_metadata['is_list']: records_to_create_or_update = self.input_sdk_records[0] elif self.record_mode == 'append' and record_set: # append mode, merge with existing values before update records_to_create_or_update = set( self.input_sdk_records).union(set(server_records)) else: records_to_create_or_update = self.input_sdk_records record_set_args[self.record_type_metadata[ 'attrname']] = records_to_create_or_update record_set = RecordSet(**record_set_args) rsout = self.dns_client.record_sets.create_or_update( self.resource_group, self.zone_name, self.relative_name, self.record_type, record_set) elif self.state == 'absent': # delete record set self.delete_record_set() return self.results
def test_populate_records(self): provider = self._get_provider() rs = [] 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(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) 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) 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(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', 6, 'CNAME' rs.append(recordSet) 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(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(nsdname='ns1.unit.test.')]) recordSet.name, recordSet.ttl, recordSet.type = 'ns1', 9, 'NS' rs.append(recordSet) 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) 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(ptrdname=None)]) recordSet.name, recordSet.ttl, recordSet.type = 'ptr2', 12, 'PTR' rs.append(recordSet) 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(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(value='sample text1')]) recordSet.name, recordSet.ttl, recordSet.type = 'txt1', 15, 'TXT' rs.append(recordSet) 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 = '', 17, 'SOA' rs.append(recordSet) record_list = provider._dns_client.record_sets.list_by_dns_zone record_list.return_value = rs exists = provider.populate(zone) self.assertTrue(exists) self.assertEquals(len(zone.records), 18)
def test_populate_records(self): provider = self._get_provider() rs = [] rs.append(RecordSet(name='a1', ttl=0, type='A', arecords=[ARecord('1.1.1.1')])) rs.append(RecordSet(name='a2', ttl=1, type='A', arecords=[ARecord('1.1.1.1'), ARecord('2.2.2.2')])) rs.append(RecordSet(name='aaaa1', ttl=2, type='AAAA', aaaa_records=[AaaaRecord('1:1ec:1::1')])) rs.append(RecordSet(name='aaaa2', ttl=3, type='AAAA', aaaa_records=[AaaaRecord('1:1ec:1::1'), AaaaRecord('1:1ec:1::2')])) rs.append(RecordSet(name='cname1', ttl=4, type='CNAME', cname_record=CnameRecord('cname.unit.test.'))) rs.append(RecordSet(name='cname2', ttl=5, type='CNAME', cname_record=None)) rs.append(RecordSet(name='mx1', ttl=6, type='MX', mx_records=[MxRecord(10, 'mx1.unit.test.')])) rs.append(RecordSet(name='mx2', ttl=7, type='MX', mx_records=[MxRecord(10, 'mx1.unit.test.'), MxRecord(11, 'mx2.unit.test.')])) rs.append(RecordSet(name='ns1', ttl=8, type='NS', ns_records=[NsRecord('ns1.unit.test.')])) rs.append(RecordSet(name='ns2', ttl=9, type='NS', ns_records=[NsRecord('ns1.unit.test.'), NsRecord('ns2.unit.test.')])) rs.append(RecordSet(name='ptr1', ttl=10, type='PTR', ptr_records=[PtrRecord('ptr1.unit.test.')])) rs.append(RecordSet(name='ptr2', ttl=11, type='PTR', ptr_records=[PtrRecord(None)])) rs.append(RecordSet(name='_srv1._tcp', ttl=12, type='SRV', srv_records=[SrvRecord(1, 2, 3, '1unit.tests.')])) rs.append(RecordSet(name='_srv2._tcp', ttl=13, type='SRV', srv_records=[SrvRecord(1, 2, 3, '1unit.tests.'), SrvRecord(4, 5, 6, '2unit.tests.')])) rs.append(RecordSet(name='txt1', ttl=14, type='TXT', txt_records=[TxtRecord('sample text1')])) rs.append(RecordSet(name='txt2', ttl=15, type='TXT', txt_records=[TxtRecord('sample text1'), TxtRecord('sample text2')])) rs.append(RecordSet(name='', ttl=16, type='SOA', soa_record=[SoaRecord()])) record_list = provider._dns_client.record_sets.list_by_dns_zone record_list.return_value = rs provider.populate(zone) self.assertEquals(len(zone.records), 16)
def test_populate_records(self): provider = self._get_provider() rs = [] recordSet = RecordSet(arecords=[ARecord('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.name, recordSet.ttl, recordSet.type = 'a2', 1, 'A' rs.append(recordSet) recordSet = RecordSet(aaaa_records=[AaaaRecord('1:1ec:1::1')]) 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')]) 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' rs.append(recordSet) recordSet = RecordSet(cname_record=None) recordSet.name, recordSet.ttl, recordSet.type = 'cname2', 5, 'CNAME' rs.append(recordSet) recordSet = RecordSet(mx_records=[MxRecord(10, 'mx1.unit.test.')]) recordSet.name, recordSet.ttl, recordSet.type = 'mx1', 6, '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' rs.append(recordSet) recordSet = RecordSet(ns_records=[NsRecord('ns1.unit.test.')]) recordSet.name, recordSet.ttl, recordSet.type = 'ns1', 8, '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' rs.append(recordSet) recordSet = RecordSet(ptr_records=[PtrRecord('ptr1.unit.test.')]) recordSet.name, recordSet.ttl, recordSet.type = 'ptr1', 10, 'PTR' rs.append(recordSet) recordSet = RecordSet(ptr_records=[PtrRecord(None)]) recordSet.name, recordSet.ttl, recordSet.type = 'ptr2', 11, 'PTR' rs.append(recordSet) recordSet = RecordSet(srv_records=[SrvRecord(1, 2, 3, '1unit.tests.')]) recordSet.name, recordSet.ttl, recordSet.type = '_srv1._tcp', 12, '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' rs.append(recordSet) recordSet = RecordSet(txt_records=[TxtRecord('sample text1')]) recordSet.name, recordSet.ttl, recordSet.type = 'txt1', 14, 'TXT' rs.append(recordSet) recordSet = RecordSet( txt_records=[TxtRecord('sample text1'), TxtRecord('sample text2')]) recordSet.name, recordSet.ttl, recordSet.type = 'txt2', 15, 'TXT' rs.append(recordSet) recordSet = RecordSet(soa_record=[SoaRecord()]) recordSet.name, recordSet.ttl, recordSet.type = '', 16, 'SOA' rs.append(recordSet) record_list = provider._dns_client.record_sets.list_by_dns_zone record_list.return_value = rs exists = provider.populate(zone) self.assertTrue(exists) self.assertEquals(len(zone.records), 16)
def test_populate_records(self): provider = self._get_provider() rs = [] recordSet = RecordSet(arecords=[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.name, recordSet.ttl, recordSet.type = 'a2', 1, 'A' recordSet.target_resource = SubResource() rs.append(recordSet) aaaa1 = AaaaRecord(ipv6_address='1:1ec:1::1') recordSet = RecordSet(aaaa_records=[aaaa1]) recordSet.name, recordSet.ttl, recordSet.type = 'aaaa1', 2, 'AAAA' recordSet.target_resource = SubResource() rs.append(recordSet) aaaa2 = AaaaRecord(ipv6_address='1:1ec:1::2') recordSet = RecordSet(aaaa_records=[aaaa1, aaaa2]) recordSet.name, recordSet.ttl, recordSet.type = 'aaaa2', 3, 'AAAA' recordSet.target_resource = SubResource() rs.append(recordSet) 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' recordSet.target_resource = SubResource() rs.append(recordSet) 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(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(nsdname='ns1.unit.test.')]) recordSet.name, recordSet.ttl, recordSet.type = 'ns1', 9, 'NS' rs.append(recordSet) 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) 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(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(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(value='sample text1')]) recordSet.name, recordSet.ttl, recordSet.type = 'txt1', 15, 'TXT' recordSet.target_resource = SubResource() rs.append(recordSet) recordSet = RecordSet(txt_records=[ TxtRecord(value='sample text1'), TxtRecord(value='sample text2') ]) recordSet.name, recordSet.ttl, recordSet.type = 'txt2', 16, 'TXT' recordSet.target_resource = SubResource() rs.append(recordSet) recordSet = RecordSet(soa_record=[SoaRecord()]) recordSet.name, recordSet.ttl, recordSet.type = '', 17, 'SOA' rs.append(recordSet) long_txt = "v=spf1 ip4:10.10.0.0/24 ip4:10.10.1.0/24 ip4:10.10.2.0/24" long_txt += " ip4:10.10.3.0/24 ip4:10.10.4.0/24 ip4:10.10.5.0/24 " long_txt += " 10.6.0/24 ip4:10.10.7.0/24 ip4:10.10.8.0/24 " long_txt += " ip4:10.10.10.0/24 ip4:10.10.11.0/24 ip4:10.10.12.0/24" long_txt += " ip4:10.10.13.0/24 ip4:10.10.14.0/24 ip4:10.10.15.0/24" long_txt += " ip4:10.10.16.0/24 ip4:10.10.17.0/24 ip4:10.10.18.0/24" long_txt += " ip4:10.10.19.0/24 ip4:10.10.20.0/24 ~all" recordSet = RecordSet(txt_records=[ TxtRecord(value='sample value1'), TxtRecord(value=long_txt) ]) recordSet.name, recordSet.ttl, recordSet.type = 'txt3', 18, 'TXT' recordSet.target_resource = SubResource() rs.append(recordSet) 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.assertEquals(len(zone.records), 17) self.assertTrue(exists)