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

Use uuid4 for zone name in GoogleCloudProvider

use uuid4().hex to ensure unique zone_name generation and thereby streamline with the other providers.
This commit is contained in:
Petter Hassberg
2017-10-14 19:32:24 +02:00
parent f45ff51062
commit 7958618f63
2 changed files with 3 additions and 42 deletions

View File

@@ -5,10 +5,10 @@
from __future__ import absolute_import, division, print_function, \
unicode_literals
import re
import shlex
import time
from logging import getLogger
from uuid import uuid4
from google.cloud import dns
@@ -128,21 +128,8 @@ class GoogleCloudProvider(BaseProvider):
"""
# Zone name must begin with a letter, end with a letter or digit,
# and only contain lowercase letters, digits or dashes
zone_name = re.sub("[^a-z0-9-]", "",
dns_name[:-1].replace('.', "-"))
# Check if there is another zone in google cloud which has the same
# name as the new one
while zone_name in [z.name for z in self.gcloud_zones.values()]:
# If there is a zone in google cloud alredy, then try suffixing the
# name with a -i where i is a number which keeps increasing until
# a free name has been reached.
m = re.match("^(.+)-([0-9]+$)", zone_name)
if m:
i = int(m.group(2)) + 1
zone_name = "{}-{!s}".format(m.group(1), i)
else:
zone_name += "-2"
zone_name = '{}-{}'.format(
dns_name[:-1].replace('.', '-'), uuid4().hex)
gcloud_zone = self.gcloud_client.zone(
name=zone_name,

View File

@@ -427,29 +427,3 @@ class TestGoogleCloudProvider(TestCase):
mock_zone.create.assert_called()
provider.gcloud_client.zone.assert_called()
provider.gcloud_client.zone.assert_called_once_with(
dns_name=u'nonexistant.zone.mock', name=u'nonexistant-zone-moc')
def test__create_zone_with_duplicate_names(self):
def _create_dummy_zone(name, dns_name):
return DummyGoogleCloudZone(name=name, dns_name=dns_name)
provider = self._get_provider()
provider.gcloud_client = Mock()
provider.gcloud_client.zone = Mock(side_effect=_create_dummy_zone)
provider.gcloud_client.list_zones = Mock(
return_value=DummyIterator([]))
_gcloud_zones = {
'unit-tests': DummyGoogleCloudZone("a.unit-tests.", "unit-tests")
}
provider._gcloud_zones = _gcloud_zones
test_zone_1 = provider._create_gcloud_zone("unit.tests.")
self.assertEqual(test_zone_1.name, "unit-tests-2")
test_zone_2 = provider._create_gcloud_zone("unit.tests.")
self.assertEqual(test_zone_2.name, "unit-tests-3")