Daily 22.04: lxd_container #73
110-daily-integration-22.04-lxd_container.yml
on: schedule
jammy-lxd_container
/
integration-test
59m 7s
Annotations
5 errors and 1 warning
|
Failed Test: test_default_user_settings_override
test_default_user_settings_override: AssertionError: assert None
+ where None = <function search at 0x7fda24055580>('^ubuntu\\s+P\\b', 'ubuntu L 08/23/2026 0 99999 7 -1')
+ where <function search at 0x7fda24055580> = re.search - client = <tests.integration_tests.instances.IntegrationInstance object at 0x7fda149e7cb0>
@pytest.mark.ci
@pytest.mark.skipif(not IS_UBUNTU, reason="Test is Ubuntu specific")
@pytest.mark.user_data(USER_DATA_OVERRIDE)
def test_default_user_settings_override(client: IntegrationInstance):
"""
Test that the default user settings are correctly overridden.
"""
# Check shell
shell_set = (
client.execute(["getent", "passwd", "ubuntu"])
.stdout.strip()
.split(":")[-1]
)
if CLOUD_INIT_SOURCE in ["NONE", "IN_PLACE"]:
assert (
"/bin/sh" == shell_set
), "Shell setting not overriden even though the user is new"
else:
assert (
"/bin/bash" == shell_set
), "Shell setting overriden even though user already exists"
# Check password is not locked
passwd_status = client.execute(["passwd", "-S", "ubuntu"]).stdout
> assert re.search(r"^ubuntu\s+P\b", passwd_status)
E AssertionError: assert None
E + where None = <function search at 0x7fda24055580>('^ubuntu\\s+P\\b', 'ubuntu L 08/23/2026 0 99999 7 -1')
E + where <function search at 0x7fda24055580> = re.search
tests/integration_tests/modules/test_users_groups.py:243: AssertionError
|
|
Failed Test: test_cli
test_cli: AssertionError: Unexpected return code (0) while running 'cloud-init status --long', expected 2. Command produced stdout:
status: done
extended_status: degraded done
boot_status_code: enabled-by-generator
last_update: Thu, 01 Jan 1970 00:00:05 +0000
detail: DataSourceLXD
errors: []
recoverable_errors:
DEPRECATED:
- Deprecated cloud-config provided: users.1.sudo: Changed in version 22.2. The value ``false`` is deprecated for this key, use ``null`` instead.
stderr:
assert 2 == 0
+ where 0 = 'status: done\r\nextended_status: degraded done\r\nboot_status_code: enabled-by-generator\r\nlast_update: Thu, 01 Jan 1970 00:00:05 +0000\r\ndetail: DataSourceLXD\r\nerrors: []\r\nrecoverable_errors:\r\nDEPRECATED:\r\n\t- Deprecated cloud-config provided: users.1.sudo: Changed in version 22.2. The value ``false`` is deprecated for this key, use ``null`` instead.'.return_code - self = <test_combined.TestCombined object at 0x7fda182557c0>
class_client = <tests.integration_tests.instances.IntegrationInstance object at 0x7fda14d63ef0>
def test_cli(self, class_client: IntegrationInstance):
"""Check that various commands work as expected
The following checks are pretty quick and check a couple of basic
expectations for the happy path of these commands. The strategy
employed is not to test every possible combination, but to test
each one individually as well as at least one call with a
combination of flags and arguments.
"""
for command in [
# collect-logs generate file in expected location
(
"cloud-init collect-logs --redact-sensitive --tarfile "
"/root/redacted.tar.gz"
),
"ls /root/redacted.tar.gz",
# single subcommands
"cloud-init single --name cc_write_files --frequency always",
"cloud-init single --name cc_write_files --frequency instance",
"cloud-init single --name cc_write_files --frequency once",
(
"cloud-init single --name cc_write_files --frequency once "
"--report"
),
# single subcommands
"cloud-init schema --system",
"cloud-init schema --system --annotate",
"cloud-init schema --config-file /dev/null",
"cloud-init schema --config-file /dev/null --annotate",
(
"cloud-init schema --config-file /dev/null --annotate "
"--instance-data /run/cloud-init/instance-data.json"
),
(
"cloud-init schema "
"--config-file /etc/netplan/50-cloud-init.yaml "
"--schema-type network-config"
),
# analyze subcommands
"cloud-init analyze blame",
"cloud-init analyze show",
"cloud-init analyze dump",
# query subcommands
"cloud-init query userdata",
"cloud-init query --list-keys",
"cloud-init query --format '{{v1.cloud_name}}'",
(
"cloud-init query userdata --instance-data "
"/run/cloud-init/instance-data.json"
),
(
"cloud-init query userdata --vendor-data "
"/var/lib/cloud/instance/vendor-data.txt"
),
(
"cloud-init query userdata --user-data "
"/var/lib/cloud/instance/user-data.txt"
),
(
"cloud-init query userdata --format '{{v1.cloud_name}}' "
"--instance-data /run/cloud-init/instance-data.json "
"--vendor-data /var/lib/cloud/instance/vendor-data.txt "
"--user-data /var/lib/cloud/instance/user-data.txt"
),
]:
check_for_unwanted(
class_client.execute(command),
command,
text=UNWANTED_WORDS,
)
# status subcommands
for command in
|
|
Failed Test: test_analyze_boot_ordered_timestamps
test_analyze_boot_ordered_timestamps: AssertionError: cloud-init analyze boot unexpected exit [1]
assert False
+ where False = '-- Most Recent Container Boot Record --\n Container started at: 2026-08-23 22:14:30.897119+00:00\n Cloud-init activated by systemd at: 2026-08-23 22:14:31.316006+00:00\n Cloud-init start: 2026-08-23 22:14:31.533000+00:00'.ok - self = <test_analyze.TestAnalyzeCommand object at 0x7fda1889f590>
module_client = <tests.integration_tests.instances.IntegrationInstance object at 0x7fda1804cbc0>
@pytest.mark.skipif(not uses_systemd(), reason="Relies on systemd output")
@pytest.mark.skipif(
PLATFORM != "lxd_container",
reason="Testing lxdcontainer-specific behavior",
)
def test_analyze_boot_ordered_timestamps(self, module_client):
"""
Confirm that analyze boot is working correctly in lxd containers
and that the correct zero-point is used for the monotonic clock used
to determine when cloud-init was activated by systemd
"""
assert module_client.execute("cloud-init status --wait --long").ok
result = module_client.execute("cloud-init analyze boot")
> assert (
result.ok
), f"cloud-init analyze boot unexpected exit [{result.return_code}]"
E AssertionError: cloud-init analyze boot unexpected exit [1]
E assert False
E + where False = '-- Most Recent Container Boot Record --\n Container started at: 2026-08-23 22:14:30.897119+00:00\n Cloud-init activated by systemd at: 2026-08-23 22:14:31.316006+00:00\n Cloud-init start: 2026-08-23 22:14:31.533000+00:00'.ok
tests/integration_tests/cmd/test_analyze.py:25: AssertionError
|
|
Failed Test: test_mount_point_with_space_is_escaped
test_mount_point_with_space_is_escaped: AssertionError: assert '/mnt/Cdrom\\040Drive' in 'server.example:/export\t/mnt/Cdrom Drive\tnfs\tdefaults,noauto,comment=cloudconfig\t0\t0' - client = <tests.integration_tests.instances.IntegrationInstance object at 0x7fda18021310>
@pytest.mark.user_data(USER_DATA)
def test_mount_point_with_space_is_escaped(client: IntegrationInstance):
# cloud-init should have configured mounts without any errors.
log = client.read_from_file("/var/log/cloud-init.log")
verify_clean_log(log)
assert "SUCCESS: config-mounts ran successfully" in log
# The space must be octal-escaped (\040) in the /etc/fstab entry.
fstab = client.read_from_file("/etc/fstab")
> assert "/mnt/Cdrom\\040Drive" in fstab
E AssertionError: assert '/mnt/Cdrom\\040Drive' in 'server.example:/export\t/mnt/Cdrom Drive\tnfs\tdefaults,noauto,comment=cloudconfig\t0\t0'
tests/integration_tests/bugs/test_gh3603.py:42: AssertionError
|
|
jammy-lxd_container / integration-test
Process completed with exit code 1.
|
|
jammy-lxd_container / integration-test
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: ctrf-io/github-test-reporter@024bc4b64d997ca9da86833c6b9548c55c620e40. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
Artifacts
Produced during runtime
| Name | Size | Digest | |
|---|---|---|---|
|
ctrf-report-lxd_container-jammy
|
21.6 KB |
sha256:2d3d701a951578711d40dde6c8e2bdc7ca4b49d2b709ad1a7ee63acadb971b25
|
|
|
failure-integration-test
|
759 KB |
sha256:da3e40674ee6504fc3c81912006916b133be96d91e7f5a8ac53fb524141bdf8f
|
|