From 283c0931879acc876c7f053f561efc383b7a0da1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Costin=20Gamen=C8=9B?= Date: Wed, 11 Oct 2017 14:24:13 +0200 Subject: [PATCH] Generate stack name as a valid hostname Truncate cluster name to 30 characters, map ('_', '.') to '-' and remove non alpha-numeric characters. Change-Id: Ibb2bddc5b602a34d0e2bebd1f6bb197669bf21ec Close-Bug: #1718947 --- magnum/drivers/heat/driver.py | 15 ++++++++++++++- .../handlers/test_k8s_cluster_conductor.py | 6 +++--- .../notes/bug-1718947-0d4e67529e2817d7.yaml | 6 ++++++ 3 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 releasenotes/notes/bug-1718947-0d4e67529e2817d7.yaml diff --git a/magnum/drivers/heat/driver.py b/magnum/drivers/heat/driver.py index e9a34ac0ae..132a47b633 100755 --- a/magnum/drivers/heat/driver.py +++ b/magnum/drivers/heat/driver.py @@ -14,6 +14,9 @@ import abc import os import six +from string import ascii_letters +from string import digits + from oslo_config import cfg from oslo_log import log as logging from oslo_utils import importutils @@ -109,8 +112,18 @@ class HeatDriver(driver.Driver): env_files) tpl_files.update(env_map) + # Make sure we end up with a valid hostname + valid_chars = set(ascii_letters + digits + '-') + + # valid hostnames are 63 chars long, leaving enough room + # to add the random id (for uniqueness) + stack_name = cluster.name[:30] + stack_name = stack_name.replace('_', '-') + stack_name = stack_name.replace('.', '-') + stack_name = ''.join(filter(valid_chars.__contains__, stack_name)) + # Make sure no duplicate stack name - stack_name = '%s-%s' % (cluster.name, short_id.generate_id()) + stack_name = '%s-%s' % (stack_name, short_id.generate_id()) if cluster_create_timeout: heat_timeout = cluster_create_timeout else: diff --git a/magnum/tests/unit/conductor/handlers/test_k8s_cluster_conductor.py b/magnum/tests/unit/conductor/handlers/test_k8s_cluster_conductor.py index cef6d0c56b..2fc0725ecb 100644 --- a/magnum/tests/unit/conductor/handlers/test_k8s_cluster_conductor.py +++ b/magnum/tests/unit/conductor/handlers/test_k8s_cluster_conductor.py @@ -755,7 +755,7 @@ class TestClusterConductorWithK8s(base.TestCase): mock_generate_id): mock_generate_id.return_value = 'xx-xx-xx-xx' - expected_stack_name = 'expected_stack_name-xx-xx-xx-xx' + expected_stack_name = 'expected-stack-name-xx-xx-xx-xx' expected_template_contents = 'template_contents' dummy_cluster_name = 'expected_stack_name' expected_timeout = 15 @@ -796,7 +796,7 @@ class TestClusterConductorWithK8s(base.TestCase): mock_generate_id): mock_generate_id.return_value = 'xx-xx-xx-xx' - expected_stack_name = 'expected_stack_name-xx-xx-xx-xx' + expected_stack_name = 'expected-stack-name-xx-xx-xx-xx' expected_template_contents = 'template_contents' dummy_cluster_name = 'expected_stack_name' expected_timeout = CONF.cluster_heat.create_timeout @@ -836,7 +836,7 @@ class TestClusterConductorWithK8s(base.TestCase): mock_generate_id): mock_generate_id.return_value = 'xx-xx-xx-xx' - expected_stack_name = 'expected_stack_name-xx-xx-xx-xx' + expected_stack_name = 'expected-stack-name-xx-xx-xx-xx' expected_template_contents = 'template_contents' dummy_cluster_name = 'expected_stack_name' cluster_timeout = 0 diff --git a/releasenotes/notes/bug-1718947-0d4e67529e2817d7.yaml b/releasenotes/notes/bug-1718947-0d4e67529e2817d7.yaml new file mode 100644 index 0000000000..008e87252d --- /dev/null +++ b/releasenotes/notes/bug-1718947-0d4e67529e2817d7.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - | + From now on, server names are prefixed with the cluster name. + The cluster name is truncated to 30 characters, ('_', '.') are mapped to '-' + and non alpha-numeric characters are removed to ensure FQDN compatibility.