summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Harper <ryan.harper@canonical.com>2017-07-31 13:35:07 -0500
committerScott Moser <smoser@brickies.net>2017-08-01 12:31:06 -0400
commit56103567fbf486625cdf5bfe40eea5ddcb7e8e04 (patch)
tree15dd611d1b5120abf17d40a6e9743045ac420f6b
parent512145cd16b0dfa0cbbe8a20d732e6f2d943b869 (diff)
downloadvyos-cloud-init-56103567fbf486625cdf5bfe40eea5ddcb7e8e04.tar.gz
vyos-cloud-init-56103567fbf486625cdf5bfe40eea5ddcb7e8e04.zip
sysconfig: Dont repeat header when rendering resolv.conf
The sysconfig renderer duplicates the cloud-init header string when rendering resolv.conf file. This leads to resolv.conf file growing with every reboot of a system. Fix this by checking for the header when loading content from existing file. Update one of the sysconfig unittests with multiple render calls to simulate the reboot to check that we don't repeat the header. LP: #1701420
-rw-r--r--cloudinit/net/sysconfig.py6
-rw-r--r--tests/unittests/test_net.py3
2 files changed, 8 insertions, 1 deletions
diff --git a/cloudinit/net/sysconfig.py b/cloudinit/net/sysconfig.py
index a550f97c..f5727969 100644
--- a/cloudinit/net/sysconfig.py
+++ b/cloudinit/net/sysconfig.py
@@ -484,7 +484,11 @@ class Renderer(renderer.Renderer):
content.add_nameserver(nameserver)
for searchdomain in network_state.dns_searchdomains:
content.add_search_domain(searchdomain)
- return "\n".join([_make_header(';'), str(content)])
+ header = _make_header(';')
+ content_str = str(content)
+ if not content_str.startswith(header):
+ content_str = header + '\n' + content_str
+ return content_str
@staticmethod
def _render_networkmanager_conf(network_state):
diff --git a/tests/unittests/test_net.py b/tests/unittests/test_net.py
index e49abcc4..4653be1a 100644
--- a/tests/unittests/test_net.py
+++ b/tests/unittests/test_net.py
@@ -1683,6 +1683,9 @@ USERCTL=no
ns = network_state.parse_net_config_data(network_cfg,
skip_broken=False)
renderer = sysconfig.Renderer()
+ # render a multiple times to simulate reboots
+ renderer.render_network_state(ns, render_dir)
+ renderer.render_network_state(ns, render_dir)
renderer.render_network_state(ns, render_dir)
for fn, expected_content in os_sample.get('out_sysconfig', []):
with open(os.path.join(render_dir, fn)) as fh: