diff options
author | Ryan Harper <ryan.harper@canonical.com> | 2017-07-31 13:35:07 -0500 |
---|---|---|
committer | Scott Moser <smoser@brickies.net> | 2017-08-01 12:31:06 -0400 |
commit | 56103567fbf486625cdf5bfe40eea5ddcb7e8e04 (patch) | |
tree | 15dd611d1b5120abf17d40a6e9743045ac420f6b | |
parent | 512145cd16b0dfa0cbbe8a20d732e6f2d943b869 (diff) | |
download | vyos-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.py | 6 | ||||
-rw-r--r-- | tests/unittests/test_net.py | 3 |
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: |