diff options
author | Brett Holman <brett.holman@canonical.com> | 2023-02-02 08:57:22 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-02 09:57:22 -0600 |
commit | 80931b531aa992b5bde355f26321c2b402c68c6f (patch) | |
tree | f92d4158cb7b384e4334250948017f7b6e27ede0 | |
parent | 30a71f368bc38c37afa36e7be830dd8a6002fbe8 (diff) | |
download | cloud-init-git-80931b531aa992b5bde355f26321c2b402c68c6f.tar.gz |
Warn on empty network key (#1990)
It is possible to create an empty network key that fails
over to fallback network config without warning. Fix it.
-rw-r--r-- | cloudinit/stages.py | 2 | ||||
-rw-r--r-- | tests/unittests/test_stages.py | 20 |
2 files changed, 22 insertions, 0 deletions
diff --git a/cloudinit/stages.py b/cloudinit/stages.py index 58b53d96..9494a0bf 100644 --- a/cloudinit/stages.py +++ b/cloudinit/stages.py @@ -853,6 +853,8 @@ class Init: return (None, cfg_source) if ncfg: return (ncfg, cfg_source) + if not self.cfg.get("network", True): + LOG.warning("Empty network config found") return ( self.distro.generate_fallback_config(), NetworkConfigSource.FALLBACK, diff --git a/tests/unittests/test_stages.py b/tests/unittests/test_stages.py index 7fde2bac..15a7e973 100644 --- a/tests/unittests/test_stages.py +++ b/tests/unittests/test_stages.py @@ -356,6 +356,26 @@ class TestInit: ) == self.init._find_networking_config() assert "network config disabled" not in caplog.text + @mock.patch(M_PATH + "cmdline.read_initramfs_config", return_value={}) + @mock.patch(M_PATH + "cmdline.read_kernel_cmdline_config", return_value={}) + def test_warn_on_empty_network(self, m_cmdline, m_initramfs, caplog): + """funky whitespace can lead to a network key that is None, which then + causes fallback. Test warning log on empty network key. + """ + m_cmdline.return_value = {} # Kernel doesn't disable networking + m_initramfs.return_value = {} # no initramfs network config + # Neither datasource nor system_info disable or provide network + self.init._cfg = { + "system_info": {"paths": {"cloud_dir": self.tmpdir}}, + "network": None, + } + self.init.datasource = FakeDataSource(network_config={"network": None}) + + self.init.distro.generate_fallback_config = lambda: {} + + self.init._find_networking_config() + assert "Empty network config found" in caplog.text + def test_apply_network_config_disabled(self, caplog): """Log when network is disabled by upgraded-network.""" disable_file = os.path.join( |