summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrett Holman <brett.holman@canonical.com>2023-02-02 08:57:22 -0700
committerGitHub <noreply@github.com>2023-02-02 09:57:22 -0600
commit80931b531aa992b5bde355f26321c2b402c68c6f (patch)
treef92d4158cb7b384e4334250948017f7b6e27ede0
parent30a71f368bc38c37afa36e7be830dd8a6002fbe8 (diff)
downloadcloud-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.py2
-rw-r--r--tests/unittests/test_stages.py20
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(