summaryrefslogtreecommitdiff
path: root/tests/integration_tests
diff options
context:
space:
mode:
authorJames Falcon <james.falcon@canonical.com>2021-10-07 11:27:36 -0500
committerGitHub <noreply@github.com>2021-10-07 10:27:36 -0600
commit9c147e8341e287366790e60658f646cdcc59bef2 (patch)
tree7b4fe68c61d4e9630322e4903fc07f7e4b868cff /tests/integration_tests
parent3d2bac8bf6d0c53f56e14cb2c15b0c695cf0a647 (diff)
downloadvyos-cloud-init-9c147e8341e287366790e60658f646cdcc59bef2.tar.gz
vyos-cloud-init-9c147e8341e287366790e60658f646cdcc59bef2.zip
Allow disabling of network activation (SC-307) (#1048)
In #919 (81299de), we refactored some of the code used to bring up networks across distros. Previously, the call to bring up network interfaces during 'init' stage unintentionally resulted in a no-op such that network interfaces were NEVER brought up by cloud-init, even if new network interfaces were found after crawling the metadata. The code was altered to bring up these discovered network interfaces. On ubuntu, this results in a 'netplan apply' call during 'init' stage for any ubuntu-based distro on a datasource that has a NETWORK dependency. On GCE, this additional 'netplan apply' conflicts with the google-guest-agent service, resulting in an instance that can no be connected to. This commit adds a 'disable_network_activation' option that can be enabled in /etc/cloud.cfg to disable the activation of network interfaces in 'init' stage. LP: #1938299
Diffstat (limited to 'tests/integration_tests')
-rw-r--r--tests/integration_tests/datasources/test_network_dependency.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/tests/integration_tests/datasources/test_network_dependency.py b/tests/integration_tests/datasources/test_network_dependency.py
new file mode 100644
index 00000000..2e5e3121
--- /dev/null
+++ b/tests/integration_tests/datasources/test_network_dependency.py
@@ -0,0 +1,43 @@
+import pytest
+
+from tests.integration_tests.clouds import IntegrationCloud
+from tests.integration_tests.conftest import get_validated_source
+
+
+def _setup_custom_image(session_cloud: IntegrationCloud):
+ """Like `setup_image` in conftest.py, but with customized content."""
+ source = get_validated_source(session_cloud)
+ if not source.installs_new_version():
+ return
+ client = session_cloud.launch()
+
+ # Insert our "disable_network_activation" file here
+ client.write_to_file(
+ '/etc/cloud/cloud.cfg.d/99-disable-network-activation.cfg',
+ 'disable_network_activation: true\n',
+ )
+
+ client.install_new_cloud_init(source)
+ # Even if we're keeping instances, we don't want to keep this
+ # one around as it was just for image creation
+ client.destroy()
+
+
+# This test should be able to work on any cloud whose datasource specifies
+# a NETWORK dependency
+@pytest.mark.gce
+@pytest.mark.ubuntu # Because netplan
+def test_network_activation_disabled(session_cloud: IntegrationCloud):
+ """Test that the network is not activated during init mode."""
+ _setup_custom_image(session_cloud)
+ with session_cloud.launch() as client:
+ result = client.execute('systemctl status google-guest-agent.service')
+ if not result.ok:
+ raise AssertionError('google-guest-agent is not active:\n%s',
+ result.stdout)
+ log = client.read_from_file('/var/log/cloud-init.log')
+
+ assert "Running command ['netplan', 'apply']" not in log
+
+ assert 'Not bringing up newly configured network interfaces' in log
+ assert 'Bringing up newly configured network interfaces' not in log