From 096785855415636c0502a037d82c1cdf230f7048 Mon Sep 17 00:00:00 2001 From: Brian E Clow Date: Wed, 23 Jun 2021 13:38:58 -0700 Subject: [PATCH] Accounting for CloudFlare TTL alias --- octodns/provider/cloudflare.py | 21 ++++++++++++--------- tests/test_octodns_provider_cloudflare.py | 8 ++++++++ 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/octodns/provider/cloudflare.py b/octodns/provider/cloudflare.py index 4f9ba64..9c206c0 100644 --- a/octodns/provider/cloudflare.py +++ b/octodns/provider/cloudflare.py @@ -170,6 +170,9 @@ class CloudflareProvider(BaseProvider): return self._zones + def _ttl_data(self, ttl): + return 300 if ttl == 1 else ttl + def _data_for_cdn(self, name, _type, records): self.log.info('CDN rewrite for %s', records[0]['name']) _type = "CNAME" @@ -177,14 +180,14 @@ class CloudflareProvider(BaseProvider): _type = "ALIAS" return { - 'ttl': records[0]['ttl'], + 'ttl': self._ttl_data(records[0]['ttl']), 'type': _type, 'value': '{}.cdn.cloudflare.net.'.format(records[0]['name']), } def _data_for_multiple(self, _type, records): return { - 'ttl': records[0]['ttl'], + 'ttl': self._ttl_data(records[0]['ttl']), 'type': _type, 'values': [r['content'] for r in records], } @@ -195,7 +198,7 @@ class CloudflareProvider(BaseProvider): def _data_for_TXT(self, _type, records): return { - 'ttl': records[0]['ttl'], + 'ttl': self._ttl_data(records[0]['ttl']), 'type': _type, 'values': [r['content'].replace(';', '\\;') for r in records], } @@ -206,7 +209,7 @@ class CloudflareProvider(BaseProvider): data = r['data'] values.append(data) return { - 'ttl': records[0]['ttl'], + 'ttl': self._ttl_data(records[0]['ttl']), 'type': _type, 'values': values, } @@ -214,7 +217,7 @@ class CloudflareProvider(BaseProvider): def _data_for_CNAME(self, _type, records): only = records[0] return { - 'ttl': only['ttl'], + 'ttl': self._ttl_data(only['ttl']), 'type': _type, 'value': '{}.'.format(only['content']) } @@ -241,7 +244,7 @@ class CloudflareProvider(BaseProvider): 'precision_vert': float(r['precision_vert']), }) return { - 'ttl': records[0]['ttl'], + 'ttl': self._ttl_data(records[0]['ttl']), 'type': _type, 'values': values } @@ -254,14 +257,14 @@ class CloudflareProvider(BaseProvider): 'exchange': '{}.'.format(r['content']), }) return { - 'ttl': records[0]['ttl'], + 'ttl': self._ttl_data(records[0]['ttl']), 'type': _type, 'values': values, } def _data_for_NS(self, _type, records): return { - 'ttl': records[0]['ttl'], + 'ttl': self._ttl_data(records[0]['ttl']), 'type': _type, 'values': ['{}.'.format(r['content']) for r in records], } @@ -279,7 +282,7 @@ class CloudflareProvider(BaseProvider): }) return { 'type': _type, - 'ttl': records[0]['ttl'], + 'ttl': self._ttl_data(records[0]['ttl']), 'values': values } diff --git a/tests/test_octodns_provider_cloudflare.py b/tests/test_octodns_provider_cloudflare.py index 8843843..52c261e 100644 --- a/tests/test_octodns_provider_cloudflare.py +++ b/tests/test_octodns_provider_cloudflare.py @@ -1410,3 +1410,11 @@ class TestCloudflareProvider(TestCase): with self.assertRaises(CloudflareRateLimitError) as ctx: provider.zone_records(zone) self.assertEquals('last', text_type(ctx.exception)) + + def test_ttl_mapping(self): + provider = CloudflareProvider('test', 'email', 'token') + + self.assertEquals(120, provider._ttl_data(120)) + self.assertEquals(120, provider._ttl_data(120)) + self.assertEquals(3600, provider._ttl_data(3600)) + self.assertEquals(300, provider._ttl_data(1))