From 8b1f91e9c4ad5b18ac1c79e76b67ac74e38dbd19 Mon Sep 17 00:00:00 2001 From: James Falcon Date: Fri, 4 Dec 2020 10:45:11 -0600 Subject: [PATCH 1/2] Integration test for #570. Test that we can add optional vendor-data to the seedfrom file in a NoCloud environment --- tests/integration_tests/bugs/test_gh570.py | 38 ++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 tests/integration_tests/bugs/test_gh570.py diff --git a/tests/integration_tests/bugs/test_gh570.py b/tests/integration_tests/bugs/test_gh570.py new file mode 100644 index 00000000000..5340bce2fb4 --- /dev/null +++ b/tests/integration_tests/bugs/test_gh570.py @@ -0,0 +1,38 @@ +"""Integration test for #570. + +Test that we can add optional vendor-data to the seedfrom file in a +NoCloud environment +""" + +from tests.integration_tests.instances import IntegrationInstance +import pytest + +VENDOR_DATA = """\ +#cloud-config +runcmd: + - touch /var/tmp/seeded_vendordata_test_file +""" + + +# Only running on LXD because we need NoCloud for this test +@pytest.mark.sru_2020_11 +@pytest.mark.lxd_container +@pytest.mark.lxd_vm +def test_nocloud_seedfrom_vendordata(client: IntegrationInstance): + seed_dir = '/var/tmp/test_seed_dir' + result = client.execute( + "mkdir {seed_dir} && " + "touch {seed_dir}/user-data && " + "touch {seed_dir}/meta-data && " + "echo 'seedfrom: {seed_dir}/' > " + "/var/lib/cloud/seed/nocloud-net/meta-data".format(seed_dir=seed_dir) + ) + assert result.return_code == 0 + + client.write_to_file( + '{}/vendor-data'.format(seed_dir), + VENDOR_DATA, + ) + client.execute('cloud-init clean --logs') + client.restart() + assert 'seeded_vendordata_test_file' in client.execute('ls /var/tmp') From c4ebf4eb6fee89b838161105aff1bcaee7c1d1c0 Mon Sep 17 00:00:00 2001 From: James Falcon Date: Fri, 4 Dec 2020 13:51:27 -0600 Subject: [PATCH 2/2] [squash] Add ability to raise_on_cloudinit_failure during restart --- tests/integration_tests/bugs/test_gh570.py | 2 +- tests/integration_tests/bugs/test_lp1900837.py | 2 +- tests/integration_tests/instances.py | 6 ++++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/tests/integration_tests/bugs/test_gh570.py b/tests/integration_tests/bugs/test_gh570.py index 5340bce2fb4..b8866edd968 100644 --- a/tests/integration_tests/bugs/test_gh570.py +++ b/tests/integration_tests/bugs/test_gh570.py @@ -34,5 +34,5 @@ def test_nocloud_seedfrom_vendordata(client: IntegrationInstance): VENDOR_DATA, ) client.execute('cloud-init clean --logs') - client.restart() + client.restart(raise_on_cloudinit_failure=True) assert 'seeded_vendordata_test_file' in client.execute('ls /var/tmp') diff --git a/tests/integration_tests/bugs/test_lp1900837.py b/tests/integration_tests/bugs/test_lp1900837.py index 18b00475780..395cace0999 100644 --- a/tests/integration_tests/bugs/test_lp1900837.py +++ b/tests/integration_tests/bugs/test_lp1900837.py @@ -22,7 +22,7 @@ def test_permissions_unchanged(self, client): assert "600" == _get_log_perms(client) # Reboot - client.restart() + client.restart(raise_on_cloudinit_failure=True) # Check that permissions are not reset on reboot assert "600" == _get_log_perms(client) diff --git a/tests/integration_tests/instances.py b/tests/integration_tests/instances.py index c68ee7532e5..f8f98e42d37 100644 --- a/tests/integration_tests/instances.py +++ b/tests/integration_tests/instances.py @@ -35,7 +35,7 @@ def __init__(self, cloud: 'IntegrationCloud', instance: BaseInstance, def destroy(self): self.instance.delete() - def restart(self): + def restart(self, raise_on_cloudinit_failure=False): """Restart this instance (via cloud mechanism) and wait for boot. This wraps pycloudlib's `BaseInstance.restart` to pass @@ -44,7 +44,9 @@ def restart(self): """ self.instance.restart(wait=False) log.info("Instance restarted; waiting for boot") - self.instance.wait(raise_on_cloudinit_failure=False) + self.instance.wait( + raise_on_cloudinit_failure=raise_on_cloudinit_failure + ) def execute(self, command, *, use_sudo=True) -> Result: if self.instance.username == 'root' and use_sudo is False: