Browse Source

Fix handling of NULL SRV records in Cloudflare provider

pull/668/head
Mark Tearle 5 years ago
parent
commit
403be8bb83
3 changed files with 62 additions and 8 deletions
  1. +6
    -2
      octodns/provider/cloudflare.py
  2. +50
    -0
      tests/fixtures/cloudflare-dns_records-page-2.json
  3. +6
    -6
      tests/test_octodns_provider_cloudflare.py

+ 6
- 2
octodns/provider/cloudflare.py View File

@ -239,11 +239,13 @@ class CloudflareProvider(BaseProvider):
def _data_for_SRV(self, _type, records):
values = []
for r in records:
target = ('{}.'.format(r['data']['target'])
if r['data']['target'] != "." else ".")
values.append({
'priority': r['data']['priority'],
'weight': r['data']['weight'],
'port': r['data']['port'],
'target': '{}.'.format(r['data']['target']),
'target': target,
})
return {
'type': _type,
@ -405,6 +407,8 @@ class CloudflareProvider(BaseProvider):
name = subdomain
for value in record.values:
target = value.target[:-1] if value.target != "." else "."
yield {
'data': {
'service': service,
@ -413,7 +417,7 @@ class CloudflareProvider(BaseProvider):
'priority': value.priority,
'weight': value.weight,
'port': value.port,
'target': value.target[:-1],
'target': target,
}
}


+ 50
- 0
tests/fixtures/cloudflare-dns_records-page-2.json View File

@ -174,6 +174,56 @@
"auto_added": false
}
},
{
"id": "fc12ab34cd5611334422ab3322997656",
"type": "SRV",
"name": "_imap._tcp.unit.tests",
"data": {
"service": "_imap",
"proto": "_tcp",
"name": "unit.tests",
"priority": 0,
"weight": 0,
"port": 0,
"target": "."
},
"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": "_pop3._tcp.unit.tests",
"data": {
"service": "_imap",
"proto": "_pop3",
"name": "unit.tests",
"priority": 0,
"weight": 0,
"port": 0,
"target": "."
},
"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",


+ 6
- 6
tests/test_octodns_provider_cloudflare.py View File

@ -180,7 +180,7 @@ class TestCloudflareProvider(TestCase):
zone = Zone('unit.tests.', [])
provider.populate(zone)
self.assertEquals(13, len(zone.records))
self.assertEquals(15, len(zone.records))
changes = self.expected.changes(zone, provider)
@ -189,7 +189,7 @@ class TestCloudflareProvider(TestCase):
# re-populating the same zone/records comes out of cache, no calls
again = Zone('unit.tests.', [])
provider.populate(again)
self.assertEquals(13, len(again.records))
self.assertEquals(15, len(again.records))
def test_apply(self):
provider = CloudflareProvider('test', 'email', 'token', retry_period=0)
@ -203,12 +203,12 @@ class TestCloudflareProvider(TestCase):
'id': 42,
}
}, # zone create
] + [None] * 22 # individual record creates
] + [None] * 24 # individual record creates
# non-existent zone, create everything
plan = provider.plan(self.expected)
self.assertEquals(13, len(plan.changes))
self.assertEquals(13, provider.apply(plan))
self.assertEquals(15, len(plan.changes))
self.assertEquals(15, provider.apply(plan))
self.assertFalse(plan.exists)
provider._request.assert_has_calls([
@ -234,7 +234,7 @@ class TestCloudflareProvider(TestCase):
}),
], True)
# expected number of total calls
self.assertEquals(23, provider._request.call_count)
self.assertEquals(25, provider._request.call_count)
provider._request.reset_mock()


Loading…
Cancel
Save