mirror of
https://github.com/github/octodns.git
synced 2024-05-11 05:55:00 +00:00
Merge branch 'master' into route53-max-attempts
This commit is contained in:
@@ -81,16 +81,16 @@ class _AzureRecord(object):
|
|||||||
self.params['ttl'] = record.ttl
|
self.params['ttl'] = record.ttl
|
||||||
|
|
||||||
def _params(self, data, key_name, azure_class):
|
def _params(self, data, key_name, azure_class):
|
||||||
if 'values' in data:
|
try:
|
||||||
return {key_name: [azure_class(v) for v in data['values']]}
|
values = data['values']
|
||||||
else: # Else there is a singular data point keyed by 'value'.
|
except KeyError:
|
||||||
return {key_name: [azure_class(data['value'])]}
|
values = [data['value']]
|
||||||
|
return {key_name: [azure_class(v) for v in values]}
|
||||||
|
|
||||||
_params_for_A = _params
|
_params_for_A = _params
|
||||||
_params_for_AAAA = _params
|
_params_for_AAAA = _params
|
||||||
_params_for_NS = _params
|
_params_for_NS = _params
|
||||||
_params_for_PTR = _params
|
_params_for_PTR = _params
|
||||||
_params_for_TXT = _params
|
|
||||||
|
|
||||||
def _params_for_CNAME(self, data, key_name, azure_class):
|
def _params_for_CNAME(self, data, key_name, azure_class):
|
||||||
return {key_name: azure_class(data['value'])}
|
return {key_name: azure_class(data['value'])}
|
||||||
@@ -121,6 +121,13 @@ class _AzureRecord(object):
|
|||||||
data['value']['target']))
|
data['value']['target']))
|
||||||
return {key_name: params}
|
return {key_name: params}
|
||||||
|
|
||||||
|
def _params_for_TXT(self, data, key_name, azure_class):
|
||||||
|
try: # API for TxtRecord has list of str, even for singleton
|
||||||
|
values = data['values']
|
||||||
|
except KeyError:
|
||||||
|
values = [data['value']]
|
||||||
|
return {key_name: [azure_class([v]) for v in values]}
|
||||||
|
|
||||||
def _equals(self, b):
|
def _equals(self, b):
|
||||||
'''Checks whether two records are equal by comparing all fields.
|
'''Checks whether two records are equal by comparing all fields.
|
||||||
:param b: Another _AzureRecord object
|
:param b: Another _AzureRecord object
|
||||||
|
|||||||
@@ -18,11 +18,13 @@ class PowerDnsBaseProvider(BaseProvider):
|
|||||||
'SPF', 'SSHFP', 'SRV', 'TXT'))
|
'SPF', 'SSHFP', 'SRV', 'TXT'))
|
||||||
TIMEOUT = 5
|
TIMEOUT = 5
|
||||||
|
|
||||||
def __init__(self, id, host, api_key, port=8081, *args, **kwargs):
|
def __init__(self, id, host, api_key, port=8081, scheme="http", *args,
|
||||||
|
**kwargs):
|
||||||
super(PowerDnsBaseProvider, self).__init__(id, *args, **kwargs)
|
super(PowerDnsBaseProvider, self).__init__(id, *args, **kwargs)
|
||||||
|
|
||||||
self.host = host
|
self.host = host
|
||||||
self.port = port
|
self.port = port
|
||||||
|
self.scheme = scheme
|
||||||
|
|
||||||
sess = Session()
|
sess = Session()
|
||||||
sess.headers.update({'X-API-Key': api_key})
|
sess.headers.update({'X-API-Key': api_key})
|
||||||
@@ -31,8 +33,8 @@ class PowerDnsBaseProvider(BaseProvider):
|
|||||||
def _request(self, method, path, data=None):
|
def _request(self, method, path, data=None):
|
||||||
self.log.debug('_request: method=%s, path=%s', method, path)
|
self.log.debug('_request: method=%s, path=%s', method, path)
|
||||||
|
|
||||||
url = 'http://{}:{}/api/v1/servers/localhost/{}' \
|
url = '{}://{}:{}/api/v1/servers/localhost/{}' \
|
||||||
.format(self.host, self.port, path)
|
.format(self.scheme, self.host, self.port, path)
|
||||||
resp = self._sess.request(method, url, json=data, timeout=self.TIMEOUT)
|
resp = self._sess.request(method, url, json=data, timeout=self.TIMEOUT)
|
||||||
self.log.debug('_request: status=%d', resp.status_code)
|
self.log.debug('_request: status=%d', resp.status_code)
|
||||||
resp.raise_for_status()
|
resp.raise_for_status()
|
||||||
|
|||||||
@@ -90,6 +90,14 @@ octo_records.append(Record.new(zone, '_srv2._tcp', {
|
|||||||
'port': 1,
|
'port': 1,
|
||||||
'target': 'srvfoo.unit.tests.',
|
'target': 'srvfoo.unit.tests.',
|
||||||
}]}))
|
}]}))
|
||||||
|
octo_records.append(Record.new(zone, 'txt1', {
|
||||||
|
'ttl': 8,
|
||||||
|
'type': 'TXT',
|
||||||
|
'value': 'txt singleton test'}))
|
||||||
|
octo_records.append(Record.new(zone, 'txt2', {
|
||||||
|
'ttl': 9,
|
||||||
|
'type': 'TXT',
|
||||||
|
'values': ['txt multiple test', 'txt multiple test 2']}))
|
||||||
|
|
||||||
azure_records = []
|
azure_records = []
|
||||||
_base0 = _AzureRecord('TestAzure', octo_records[0])
|
_base0 = _AzureRecord('TestAzure', octo_records[0])
|
||||||
@@ -183,6 +191,23 @@ _base10.params['ttl'] = 7
|
|||||||
_base10.params['srv_records'] = [SrvRecord(12, 17, 1, 'srvfoo.unit.tests.')]
|
_base10.params['srv_records'] = [SrvRecord(12, 17, 1, 'srvfoo.unit.tests.')]
|
||||||
azure_records.append(_base10)
|
azure_records.append(_base10)
|
||||||
|
|
||||||
|
_base11 = _AzureRecord('TestAzure', octo_records[11])
|
||||||
|
_base11.zone_name = 'unit.tests'
|
||||||
|
_base11.relative_record_set_name = 'txt1'
|
||||||
|
_base11.record_type = 'TXT'
|
||||||
|
_base11.params['ttl'] = 8
|
||||||
|
_base11.params['txt_records'] = [TxtRecord(['txt singleton test'])]
|
||||||
|
azure_records.append(_base11)
|
||||||
|
|
||||||
|
_base12 = _AzureRecord('TestAzure', octo_records[12])
|
||||||
|
_base12.zone_name = 'unit.tests'
|
||||||
|
_base12.relative_record_set_name = 'txt2'
|
||||||
|
_base12.record_type = 'TXT'
|
||||||
|
_base12.params['ttl'] = 9
|
||||||
|
_base12.params['txt_records'] = [TxtRecord(['txt multiple test']),
|
||||||
|
TxtRecord(['txt multiple test 2'])]
|
||||||
|
azure_records.append(_base12)
|
||||||
|
|
||||||
|
|
||||||
class Test_AzureRecord(TestCase):
|
class Test_AzureRecord(TestCase):
|
||||||
def test_azure_record(self):
|
def test_azure_record(self):
|
||||||
@@ -190,8 +215,6 @@ class Test_AzureRecord(TestCase):
|
|||||||
for i in range(len(azure_records)):
|
for i in range(len(azure_records)):
|
||||||
octo = _AzureRecord('TestAzure', octo_records[i])
|
octo = _AzureRecord('TestAzure', octo_records[i])
|
||||||
assert(azure_records[i]._equals(octo))
|
assert(azure_records[i]._equals(octo))
|
||||||
string = str(azure_records[i])
|
|
||||||
assert(('Ttl: ' in string))
|
|
||||||
|
|
||||||
|
|
||||||
class Test_ParseAzureType(TestCase):
|
class Test_ParseAzureType(TestCase):
|
||||||
@@ -315,8 +338,8 @@ class TestAzureDnsProvider(TestCase):
|
|||||||
changes.append(Create(i))
|
changes.append(Create(i))
|
||||||
deletes.append(Delete(i))
|
deletes.append(Delete(i))
|
||||||
|
|
||||||
self.assertEquals(11, provider.apply(Plan(None, zone, changes)))
|
self.assertEquals(13, provider.apply(Plan(None, zone, changes)))
|
||||||
self.assertEquals(11, provider.apply(Plan(zone, zone, deletes)))
|
self.assertEquals(13, provider.apply(Plan(zone, zone, deletes)))
|
||||||
|
|
||||||
def test_create_zone(self):
|
def test_create_zone(self):
|
||||||
provider = self._get_provider()
|
provider = self._get_provider()
|
||||||
@@ -331,7 +354,7 @@ class TestAzureDnsProvider(TestCase):
|
|||||||
_get = provider._dns_client.zones.get
|
_get = provider._dns_client.zones.get
|
||||||
_get.side_effect = CloudError(Mock(status=404), err_msg)
|
_get.side_effect = CloudError(Mock(status=404), err_msg)
|
||||||
|
|
||||||
self.assertEquals(11, provider.apply(Plan(None, desired, changes)))
|
self.assertEquals(13, provider.apply(Plan(None, desired, changes)))
|
||||||
|
|
||||||
def test_check_zone_no_create(self):
|
def test_check_zone_no_create(self):
|
||||||
provider = self._get_provider()
|
provider = self._get_provider()
|
||||||
|
|||||||
Reference in New Issue
Block a user