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

Fix handling of NULL SRV records in Cloudflare provider

This commit is contained in:
Mark Tearle
2020-12-09 19:13:17 +08:00
parent 45d5da23cf
commit 403be8bb83
3 changed files with 62 additions and 8 deletions

View File

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

View File

@@ -174,6 +174,56 @@
"auto_added": false "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", "id": "fc12ab34cd5611334422ab3322997656",
"type": "SRV", "type": "SRV",

View File

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