コード例 #1
0
ファイル: app.py プロジェクト: yolocs/prompt
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)
コード例 #2
0
    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)
コード例 #3
0
    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)
コード例 #4
0
    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)
コード例 #5
0
    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))
コード例 #6
0
    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)
コード例 #7
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)
コード例 #8
0
    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))
コード例 #9
0
 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])],
         ),
     )
コード例 #10
0
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
コード例 #11
0
 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,
     )
コード例 #12
0
    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))
コード例 #13
0
    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
コード例 #14
0
    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)
コード例 #15
0
    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)
コード例 #16
0
    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)
コード例 #17
0
    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)