|
|
|
@ -15,8 +15,8 @@ from .base import BaseProvider |
|
|
|
class PowerDnsBaseProvider(BaseProvider): |
|
|
|
SUPPORTS_GEO = False |
|
|
|
SUPPORTS_DYNAMIC = False |
|
|
|
SUPPORTS = set(('A', 'AAAA', 'ALIAS', 'CAA', 'CNAME', 'MX', 'NAPTR', 'NS', |
|
|
|
'PTR', 'SPF', 'SSHFP', 'SRV', 'TXT')) |
|
|
|
SUPPORTS = set(('A', 'AAAA', 'ALIAS', 'CAA', 'CNAME', 'LOC', 'MX', 'NAPTR', |
|
|
|
'NS', 'PTR', 'SPF', 'SSHFP', 'SRV', 'TXT')) |
|
|
|
TIMEOUT = 5 |
|
|
|
|
|
|
|
def __init__(self, id, host, api_key, port=8081, |
|
|
|
@ -102,6 +102,33 @@ class PowerDnsBaseProvider(BaseProvider): |
|
|
|
_data_for_SPF = _data_for_quoted |
|
|
|
_data_for_TXT = _data_for_quoted |
|
|
|
|
|
|
|
def _data_for_LOC(self, rrset): |
|
|
|
values = [] |
|
|
|
for record in rrset['records']: |
|
|
|
lat_degrees, lat_minutes, lat_seconds, lat_direction, \ |
|
|
|
long_degrees, long_minutes, long_seconds, long_direction, \ |
|
|
|
altitude, size, precision_horz, precision_vert = \ |
|
|
|
record['content'].replace('m', '').split(' ', 11) |
|
|
|
values.append({ |
|
|
|
'lat_degrees': int(lat_degrees), |
|
|
|
'lat_minutes': int(lat_minutes), |
|
|
|
'lat_seconds': float(lat_seconds), |
|
|
|
'lat_direction': lat_direction, |
|
|
|
'long_degrees': int(long_degrees), |
|
|
|
'long_minutes': int(long_minutes), |
|
|
|
'long_seconds': float(long_seconds), |
|
|
|
'long_direction': long_direction, |
|
|
|
'altitude': float(altitude), |
|
|
|
'size': float(size), |
|
|
|
'precision_horz': float(precision_horz), |
|
|
|
'precision_vert': float(precision_vert), |
|
|
|
}) |
|
|
|
return { |
|
|
|
'ttl': rrset['ttl'], |
|
|
|
'type': rrset['type'], |
|
|
|
'values': values |
|
|
|
} |
|
|
|
|
|
|
|
def _data_for_MX(self, rrset): |
|
|
|
values = [] |
|
|
|
for record in rrset['records']: |
|
|
|
@ -285,6 +312,27 @@ class PowerDnsBaseProvider(BaseProvider): |
|
|
|
_records_for_SPF = _records_for_quoted |
|
|
|
_records_for_TXT = _records_for_quoted |
|
|
|
|
|
|
|
def _records_for_LOC(self, record): |
|
|
|
return [{ |
|
|
|
'content': |
|
|
|
'%d %d %0.3f %s %d %d %.3f %s %0.2fm %0.2fm %0.2fm %0.2fm' % |
|
|
|
( |
|
|
|
int(v.lat_degrees), |
|
|
|
int(v.lat_minutes), |
|
|
|
float(v.lat_seconds), |
|
|
|
v.lat_direction, |
|
|
|
int(v.long_degrees), |
|
|
|
int(v.long_minutes), |
|
|
|
float(v.long_seconds), |
|
|
|
v.long_direction, |
|
|
|
float(v.altitude), |
|
|
|
float(v.size), |
|
|
|
float(v.precision_horz), |
|
|
|
float(v.precision_vert) |
|
|
|
), |
|
|
|
'disabled': False |
|
|
|
} for v in record.values] |
|
|
|
|
|
|
|
def _records_for_MX(self, record): |
|
|
|
return [{ |
|
|
|
'content': '{} {}'.format(v.preference, v.exchange), |
|
|
|
|