Ejemplo n.º 1
0
    def update_dns_record(self, record):
        """
        Update DNS Record in DNSAAS

        Args:
            record: record cleaned data

        Returns:
            Validation error from API or None if update correct
        """
        url = self.build_url('records', id=record['pk'])
        data = {
            'name':
            record['name'],
            'type':
            RecordType.raw_from_id(int(record['type'])),
            'content':
            record['content'],
            'auto_ptr':
            (settings.DNSAAS_AUTO_PTR_ALWAYS
             if record['ptr'] and record['type'] == str(RecordType.a.id) else
             settings.DNSAAS_AUTO_PTR_NEVER),
            'owner':
            settings.DNSAAS_OWNER
        }
        response = self.session.patch(url, json=data)
        if response.status_code == 500:
            return {
                'non_field_errors': [_('Internal Server Error from DNSAAS')]
            }
        elif response.status_code != 200:
            return response.json()
Ejemplo n.º 2
0
    def get_dns_records(self, ipaddresses):
        """Gets DNS Records for `ipaddresses` by API call"""
        dns_records = []
        if not ipaddresses:
            return []
        ipaddresses = [('ip', i) for i in ipaddresses]
        url = self.build_url('records',
                             get_params=[('limit', 100),
                                         ('offset', 0)] + ipaddresses)
        api_results = self.get_api_result(url)
        ptrs = set([i['content'] for i in api_results if i['type'] == 'PTR'])

        for item in api_results:
            if item['type'] in {'A', 'CNAME', 'TXT'}:
                dns_records.append({
                    'pk':
                    item['id'],
                    'name':
                    item['name'],
                    'type':
                    RecordType.from_name(item['type'].lower()).id,
                    'content':
                    item['content'],
                    'ptr':
                    item['name'] in ptrs and item['type'] == 'A',
                    'owner':
                    settings.DNSAAS_OWNER
                })
        return sorted(dns_records, key=lambda x: x['type'])
Ejemplo n.º 3
0
    def update_dns_record(self, record):
        """
        Update DNS Record in DNSAAS

        Args:
            record: record cleaned data

        Returns:
            Validation error from API or None if update correct
        """
        url = self.build_url('records', id=record['pk'])
        data = {
            'name':
            record['name'],
            'type':
            RecordType.raw_from_id(int(record['type'])),
            'content':
            record['content'],
            'auto_ptr':
            (settings.DNSAAS_AUTO_PTR_ALWAYS
             if record['ptr'] and record['type'] == str(RecordType.a.id) else
             settings.DNSAAS_AUTO_PTR_NEVER),
            'owner':
            settings.DNSAAS_OWNER
        }

        status_code, response_data = self._patch(url, data)
        if status_code != 200:
            return response_data
Ejemplo n.º 4
0
    def create_dns_record(self, record, service=None):
        """
        Create new DNS record.

        Args:
            records: Record cleaned data

        Returns:
            Validation error from API or None if create correct
        """

        url = self.build_url('records')
        domain_name = record['name'].split('.', 1)
        domain = self.get_domain(domain_name[-1])
        if not domain:
            logger.error(
                'Domain not found for record {}'.format(record)
            )
            return {'name': [_('Domain not found.')]}

        data = {
            'name': record['name'],
            'type': RecordType.raw_from_id(int(record['type'])),
            'content': record['content'],
            'auto_ptr': (
                settings.DNSAAS_AUTO_PTR_ALWAYS if record['ptr'] and
                record['type'] == RecordType.a.id
                else settings.DNSAAS_AUTO_PTR_NEVER
            ),
            'domain': domain,
            'owner': settings.DNSAAS_OWNER
        }
        if service:
            data['service_uid'] = service.uid
        return self._post(url, data)[1]
Ejemplo n.º 5
0
    def create_dns_record(self, record):
        """
        Create new DNS record.

        Args:
            records: Record cleaned data

        Returns:
            Validation error from API or None if create correct
        """

        url = urljoin(settings.DNSAAS_URL, 'api/records/')
        domain_name = record['name'].split('.', 1)
        domain = self.get_domain(domain_name[-1])
        if not domain:
            logger.error('Domain not found for record {}'.format(record))
            return {'name': [_('Domain not found.')]}

        data = {
            'name':
            record['name'],
            'type':
            RecordType.raw_from_id(int(record['type'])),
            'content':
            record['content'],
            'auto_ptr': (settings.DNSAAS_AUTO_PTR_ALWAYS
                         if record['ptr'] and record['type'] == RecordType.a.id
                         else settings.DNSAAS_AUTO_PTR_NEVER),
            'domain':
            domain,
            'owner':
            settings.DNSAAS_OWNER
        }
        request = self.session.post(url, data=data)
        if request.status_code == 500:
            return {
                'non_field_errors': [_('Internal Server Error from DNSAAS')]
            }
        elif request.status_code != 201:
            return request.json()