1
0
mirror of https://github.com/github/octodns.git synced 2024-05-11 05:55:00 +00:00

Merge branch 'master' into cloudflare-proxied

This commit is contained in:
Ross McFarland
2018-02-09 07:52:45 -05:00
committed by GitHub
4 changed files with 92 additions and 12 deletions

View File

@@ -150,7 +150,7 @@ The above command pulled the existing data out of Route53 and placed the results
| Provider | Record Support | GeoDNS Support | Notes |
|--|--|--|--|
| [AzureProvider](/octodns/provider/azuredns.py) | A, AAAA, CNAME, MX, NS, PTR, SRV, TXT | No | |
| [CloudflareProvider](/octodns/provider/cloudflare.py) | A, AAAA, ALIAS, CAA, CNAME, MX, NS, SPF, TXT | No | CAA tags restricted |
| [CloudflareProvider](/octodns/provider/cloudflare.py) | A, AAAA, ALIAS, CAA, CNAME, MX, NS, SPF, SRV, TXT | No | CAA tags restricted |
| [DigitalOceanProvider](/octodns/provider/digitalocean.py) | A, AAAA, CAA, CNAME, MX, NS, TXT, SRV | No | CAA tags restricted |
| [DnsMadeEasyProvider](/octodns/provider/dnsmadeeasy.py) | A, AAAA, CAA, CNAME, MX, NS, PTR, SPF, SRV, TXT | No | CAA tags restricted |
| [DnsimpleProvider](/octodns/provider/dnsimple.py) | All | No | CAA tags restricted |

View File

@@ -46,9 +46,8 @@ class CloudflareProvider(BaseProvider):
cdn: false
'''
SUPPORTS_GEO = False
# TODO: support SRV
SUPPORTS = set(('ALIAS', 'A', 'AAAA', 'CAA', 'CNAME', 'MX', 'NS', 'SPF',
'TXT'))
SUPPORTS = set(('ALIAS', 'A', 'AAAA', 'CAA', 'CNAME', 'MX', 'NS', 'SRV',
'SPF', 'TXT'))
MIN_TTL = 120
TIMEOUT = 15
@@ -174,6 +173,21 @@ class CloudflareProvider(BaseProvider):
'values': ['{}.'.format(r['content']) for r in records],
}
def _data_for_SRV(self, _type, records):
values = []
for r in records:
values.append({
'priority': r['data']['priority'],
'weight': r['data']['weight'],
'port': r['data']['port'],
'target': '{}.'.format(r['data']['target']),
})
return {
'type': _type,
'ttl': records[0]['ttl'],
'values': values
}
def zone_records(self, zone):
if zone.name not in self._zone_records:
zone_id = self.zones.get(zone.name, False)
@@ -290,6 +304,21 @@ class CloudflareProvider(BaseProvider):
'content': value.exchange
}
def _contents_for_SRV(self, record):
service, proto = record.name.split('.', 2)
for value in record.values:
yield {
'data': {
'service': service,
'proto': proto,
'name': record.zone.name,
'priority': value.priority,
'weight': value.weight,
'port': value.port,
'target': value.target[:-1],
}
}
def _gen_contents(self, record):
name = record.fqdn[:-1]
_type = record._type

View File

@@ -156,14 +156,64 @@
"meta": {
"auto_added": false
}
},
{
"id": "fc12ab34cd5611334422ab3322997656",
"type": "SRV",
"name": "_srv._tcp.unit.tests",
"data": {
"service": "_srv",
"proto": "_tcp",
"name": "unit.tests",
"priority": 12,
"weight": 20,
"port": 30,
"target": "foo-2.unit.tests"
},
"proxiable": true,
"proxied": false,
"ttl": 600,
"locked": false,
"zone_id": "ff12ab34cd5611334422ab3322997650",
"zone_name": "unit.tests",
"modified_on": "2017-03-11T18:01:43.940682Z",
"created_on": "2017-03-11T18:01:43.940682Z",
"meta": {
"auto_added": false
}
},
{
"id": "fc12ab34cd5611334422ab3322997656",
"type": "SRV",
"name": "_srv._tcp.unit.tests",
"data": {
"service": "_srv",
"proto": "_tcp",
"name": "unit.tests",
"priority": 10,
"weight": 20,
"port": 30,
"target": "foo-1.unit.tests"
},
"proxiable": true,
"proxied": false,
"ttl": 600,
"locked": false,
"zone_id": "ff12ab34cd5611334422ab3322997650",
"zone_name": "unit.tests",
"modified_on": "2017-03-11T18:01:43.940682Z",
"created_on": "2017-03-11T18:01:43.940682Z",
"meta": {
"auto_added": false
}
}
],
"result_info": {
"page": 2,
"per_page": 10,
"per_page": 11,
"total_pages": 2,
"count": 9,
"total_count": 19
"total_count": 21
},
"success": true,
"errors": [],

View File

@@ -137,15 +137,16 @@ class TestCloudflareProvider(TestCase):
zone = Zone('unit.tests.', [])
provider.populate(zone)
self.assertEquals(11, len(zone.records))
self.assertEquals(12, len(zone.records))
changes = self.expected.changes(zone, provider)
self.assertEquals(0, len(changes))
# re-populating the same zone/records comes out of cache, no calls
again = Zone('unit.tests.', [])
provider.populate(again)
self.assertEquals(11, len(again.records))
self.assertEquals(12, len(again.records))
def test_apply(self):
provider = CloudflareProvider('test', 'email', 'token')
@@ -159,12 +160,12 @@ class TestCloudflareProvider(TestCase):
'id': 42,
}
}, # zone create
] + [None] * 18 # individual record creates
] + [None] * 20 # individual record creates
# non-existant zone, create everything
plan = provider.plan(self.expected)
self.assertEquals(11, len(plan.changes))
self.assertEquals(11, provider.apply(plan))
self.assertEquals(12, len(plan.changes))
self.assertEquals(12, provider.apply(plan))
provider._request.assert_has_calls([
# created the domain
@@ -189,7 +190,7 @@ class TestCloudflareProvider(TestCase):
}),
], True)
# expected number of total calls
self.assertEquals(20, provider._request.call_count)
self.assertEquals(22, provider._request.call_count)
provider._request.reset_mock()