From e02a8b3858a66a11fb11c8e6482fc8979e689093 Mon Sep 17 00:00:00 2001 From: Pieter Lexis Date: Thu, 19 Nov 2020 09:39:33 +0100 Subject: [PATCH 1/3] PowerDNS: Support pre-release versions This commit strips any superfluous -alphaN (or beta or rc) from the version number's minor number so it can be cast to an int. This will allow octodns to sync to/from PowerDNS pre-releases. --- octodns/provider/powerdns.py | 3 ++- tests/test_octodns_provider_powerdns.py | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/octodns/provider/powerdns.py b/octodns/provider/powerdns.py index bcb6980..98ab7be 100644 --- a/octodns/provider/powerdns.py +++ b/octodns/provider/powerdns.py @@ -183,7 +183,8 @@ class PowerDnsBaseProvider(BaseProvider): version = resp.json()['version'] self.log.debug('powerdns_version: got version %s from server', version) - self._powerdns_version = [int(p) for p in version.split('.')] + self._powerdns_version = [ + int(p.split('-')[0]) for p in version.split('.')[:3]] return self._powerdns_version diff --git a/tests/test_octodns_provider_powerdns.py b/tests/test_octodns_provider_powerdns.py index c9b1d08..33b5e44 100644 --- a/tests/test_octodns_provider_powerdns.py +++ b/tests/test_octodns_provider_powerdns.py @@ -82,6 +82,20 @@ class TestPowerDnsProvider(TestCase): provider._powerdns_version = None self.assertNotEquals(provider.powerdns_version, [4, 1, 10]) + # Test version detection with pre-releases + with requests_mock() as mock: + # Reset version, so detection will try again + provider._powerdns_version = None + mock.get('http://non.existent:8081/api/v1/servers/localhost', + status_code=200, json={'version': "4.4.0-alpha1"}) + self.assertEquals(provider.powerdns_version, [4, 4, 0]) + + provider._powerdns_version = None + mock.get('http://non.existent:8081/api/v1/servers/localhost', + status_code=200, + json={'version': "4.5.0-alpha0.435.master.gcb114252b"}) + self.assertEquals(provider.powerdns_version, [4, 5, 0]) + def test_provider_version_config(self): provider = PowerDnsProvider('test', 'non.existent', 'api-key', nameserver_values=['8.8.8.8.', From 5e13d5009a45b5ac6d44329497d764aaea39b764 Mon Sep 17 00:00:00 2001 From: Ross McFarland Date: Thu, 19 Nov 2020 06:35:13 -0800 Subject: [PATCH 2/3] Add a comment about the `-` version split --- octodns/provider/powerdns.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/octodns/provider/powerdns.py b/octodns/provider/powerdns.py index 98ab7be..f2dd274 100644 --- a/octodns/provider/powerdns.py +++ b/octodns/provider/powerdns.py @@ -183,6 +183,8 @@ class PowerDnsBaseProvider(BaseProvider): version = resp.json()['version'] self.log.debug('powerdns_version: got version %s from server', version) + # The extra `-` split is to handle pre-release and source built + # versions like 4.5.0-alpha0.435.master.gcb114252b self._powerdns_version = [ int(p.split('-')[0]) for p in version.split('.')[:3]] From f822ef3d5fc557630c75bd3af31b0c0e39b88559 Mon Sep 17 00:00:00 2001 From: Ross McFarland Date: Thu, 19 Nov 2020 06:44:44 -0800 Subject: [PATCH 3/3] Removing trailing space --- octodns/provider/powerdns.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/octodns/provider/powerdns.py b/octodns/provider/powerdns.py index f2dd274..de7743c 100644 --- a/octodns/provider/powerdns.py +++ b/octodns/provider/powerdns.py @@ -183,7 +183,7 @@ class PowerDnsBaseProvider(BaseProvider): version = resp.json()['version'] self.log.debug('powerdns_version: got version %s from server', version) - # The extra `-` split is to handle pre-release and source built + # The extra `-` split is to handle pre-release and source built # versions like 4.5.0-alpha0.435.master.gcb114252b self._powerdns_version = [ int(p.split('-')[0]) for p in version.split('.')[:3]]