mirror of
https://github.com/github/octodns.git
synced 2024-05-11 05:55:00 +00:00
Add LOC record support to PowerDNS provider
This commit is contained in:
@@ -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),
|
||||
|
||||
16
tests/fixtures/powerdns-full-data.json
vendored
16
tests/fixtures/powerdns-full-data.json
vendored
@@ -32,6 +32,22 @@
|
||||
"ttl": 300,
|
||||
"type": "MX"
|
||||
},
|
||||
{
|
||||
"comments": [],
|
||||
"name": "loc.unit.tests.",
|
||||
"records": [
|
||||
{
|
||||
"content": "31 58 52.100 S 115 49 11.700 E 20.00m 10.00m 10.00m 2.00m",
|
||||
"disabled": false
|
||||
},
|
||||
{
|
||||
"content": "53 13 10.000 N 2 18 26.000 W 20.00m 10.00m 1000.00m 2.00m",
|
||||
"disabled": false
|
||||
}
|
||||
],
|
||||
"ttl": 300,
|
||||
"type": "LOC"
|
||||
},
|
||||
{
|
||||
"comments": [],
|
||||
"name": "sub.unit.tests.",
|
||||
|
||||
@@ -185,8 +185,8 @@ class TestPowerDnsProvider(TestCase):
|
||||
expected = Zone('unit.tests.', [])
|
||||
source = YamlProvider('test', join(dirname(__file__), 'config'))
|
||||
source.populate(expected)
|
||||
expected_n = len(expected.records) - 4
|
||||
self.assertEquals(16, expected_n)
|
||||
expected_n = len(expected.records) - 3
|
||||
self.assertEquals(17, expected_n)
|
||||
|
||||
# No diffs == no changes
|
||||
with requests_mock() as mock:
|
||||
@@ -194,7 +194,7 @@ class TestPowerDnsProvider(TestCase):
|
||||
|
||||
zone = Zone('unit.tests.', [])
|
||||
provider.populate(zone)
|
||||
self.assertEquals(16, len(zone.records))
|
||||
self.assertEquals(17, len(zone.records))
|
||||
changes = expected.changes(zone, provider)
|
||||
self.assertEquals(0, len(changes))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user