File 0001-Consider-domain-when-truncating-hostnames.patch of Package openstack-nova
commit b5e706c6f8d05a8a6c39e445bb013afcbe904d84
Author: Johannes Grassler <johannes.grassler@suse.com>
Upstream: Fix proposed for master
References: https://review.openstack.org/#/c/356561/
Date: Wed Aug 17 17:42:58 2016 +0200
Allow for domain in truncated hostnames
Inside an instance, the host name set by cloud-init will have the domain
part configured in Nova's DEFAULT/dhcp_domain setting appended. This
commit leaves additional room for this domain part when truncating host
names.
Change-Id: I3468057e0485adef06540782980d58ebd143d95b
Closes-Bug: 1614148
Index: nova-13.1.2.dev23/nova/tests/unit/test_utils.py
===================================================================
--- nova-13.1.2.dev23.orig/nova/tests/unit/test_utils.py
+++ nova-13.1.2.dev23/nova/tests/unit/test_utils.py
@@ -108,7 +108,7 @@ class GenericUtilsTestCase(test.NoDBTest
def test_hostname_empty_has_default_too_long(self):
hostname = u"\u7684"
defaultname = "a" * 64
- self.assertEqual("a" * 63, utils.sanitize_hostname(hostname,
+ self.assertEqual("a" * 53, utils.sanitize_hostname(hostname,
defaultname))
def test_hostname_empty_no_default(self):
@@ -125,14 +125,14 @@ class GenericUtilsTestCase(test.NoDBTest
def test_hostname_too_long(self):
hostname = "a" * 64
- self.assertEqual(63, len(utils.sanitize_hostname(hostname)))
+ self.assertEqual(53, len(utils.sanitize_hostname(hostname)))
def test_hostname_truncated_no_hyphen(self):
- hostname = "a" * 62
+ hostname = "a" * 52
hostname = hostname + '-' + 'a'
res = utils.sanitize_hostname(hostname)
- # we trim to 63 and then trim the trailing dash
- self.assertEqual(62, len(res))
+ # we trim to 53 (to allow for .novalocal), then trim the trailing dash
+ self.assertEqual(53, len(res))
self.assertFalse(res.endswith('-'), 'The hostname ends with a -')
def test_generate_password(self):
Index: nova-13.1.2.dev23/nova/utils.py
===================================================================
--- nova-13.1.2.dev23.orig/nova/utils.py
+++ nova-13.1.2.dev23/nova/utils.py
@@ -789,11 +789,19 @@ def sanitize_hostname(hostname, default_
"""
def truncate_hostname(name):
- if len(name) > 63:
+ if CONF.dhcp_domain != '':
+ _name = name + '.' + CONF.dhcp_domain
+ else:
+ _name = name
+ if len(_name) > 63:
+ # number of characters to strip from unqualified host name
+ strip_chars = len(_name) - 63
LOG.warning(_LW("Hostname %(hostname)s is longer than 63, "
"truncate it to %(truncated_name)s"),
- {'hostname': name, 'truncated_name': name[:63]})
- return name[:63]
+ {'hostname': _name, 'truncated_name': _name[-63:]})
+ else:
+ strip_chars = 0
+ return name[strip_chars:]
if isinstance(hostname, six.text_type):
# Remove characters outside the Unicode range U+0000-U+00FF