From b8bd08194192035a13083539b31cbcaebfe4c577 Mon Sep 17 00:00:00 2001
From: Manuel Aguilera <manuelisimo@users.noreply.github.com>
Date: Tue, 27 Oct 2020 07:19:51 -0700
Subject: gentoo: fix hostname rendering when value has a comment (#611)

Gentoo's hostname file format instead of being just the host name
is hostname=thename". The old code works fine when the file has no comments
but if there is a comment the line

```
gentoo_hostname_config = 'hostname="%s"' % conf
```

can render an invalid hostname file that looks similar to

```
hostname="#This is the host namehello"
```

The fix inserts the hostname in a gentoo friendly way so that it gets
handled by HostnameConf as a whole and comments are handled and preserved
---
 tests/unittests/test_distros/test_gentoo.py | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)
 create mode 100644 tests/unittests/test_distros/test_gentoo.py

(limited to 'tests/unittests/test_distros')

diff --git a/tests/unittests/test_distros/test_gentoo.py b/tests/unittests/test_distros/test_gentoo.py
new file mode 100644
index 00000000..37a4f51f
--- /dev/null
+++ b/tests/unittests/test_distros/test_gentoo.py
@@ -0,0 +1,26 @@
+# This file is part of cloud-init. See LICENSE file for license information.
+
+from cloudinit import util
+from cloudinit import atomic_helper
+from cloudinit.tests.helpers import CiTestCase
+from . import _get_distro
+
+
+class TestGentoo(CiTestCase):
+
+    def test_write_hostname(self):
+        distro = _get_distro("gentoo")
+        hostname = "myhostname"
+        hostfile = self.tmp_path("hostfile")
+        distro._write_hostname(hostname, hostfile)
+        self.assertEqual('hostname="myhostname"\n', util.load_file(hostfile))
+
+    def test_write_existing_hostname_with_comments(self):
+        distro = _get_distro("gentoo")
+        hostname = "myhostname"
+        contents = '#This is the hostname\nhostname="localhost"'
+        hostfile = self.tmp_path("hostfile")
+        atomic_helper.write_file(hostfile, contents, omode="w")
+        distro._write_hostname(hostname, hostfile)
+        self.assertEqual('#This is the hostname\nhostname="myhostname"\n',
+                         util.load_file(hostfile))
-- 
cgit v1.2.3