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
openSUSE Build Service is sponsored by