>>> cloud-init: Building community/cloud-init 24.3.1-r2 (using abuild 3.15.0-r0) started Thu, 09 Oct 2025 03:06:21 +0000 >>> cloud-init: Validating /home/udu/aports/community/cloud-init/APKBUILD... >>> cloud-init: Analyzing dependencies... >>> cloud-init: Installing for build: build-base blkid cloud-utils-growpart iproute2-minimal python3 py3-configobj py3-jinja2 py3-jsonpatch py3-jsonschema py3-requests py3-yaml shadow tzdata eudev-dev py3-setuptools bash coreutils grep lsblk parted procps-ng py3-netifaces py3-passlib py3-pyserial py3-pytest py3-pytest-mock py3-responses py3-tox sfdisk sgdisk WARNING: opening /home/udu/packages//community: No such file or directory WARNING: opening /home/udu/packages//main: No such file or directory fetch http://dl-cdn.alpinelinux.org/alpine/v3.22/main/x86_64/APKINDEX.tar.gz fetch http://dl-cdn.alpinelinux.org/alpine/v3.22/community/x86_64/APKINDEX.tar.gz (1/118) Installing libeconf (0.6.3-r0) (2/118) Installing libblkid (2.41-r9) (3/118) Installing blkid (2.41-r9) (4/118) Installing libsmartcols (2.41-r9) (5/118) Installing partx (2.41-r9) (6/118) Installing libuuid (2.41-r9) (7/118) Installing libfdisk (2.41-r9) (8/118) Installing sfdisk (2.41-r9) (9/118) Installing cloud-utils-growpart (0.33-r1) (10/118) Installing libelf (0.193-r0) (11/118) Installing libmnl (1.0.5-r2) (12/118) Installing iproute2-minimal (6.15.0-r0) (13/118) Installing py3-six (1.17.0-r0) (14/118) Installing py3-six-pyc (1.17.0-r0) (15/118) Installing py3-configobj (5.0.9-r0) (16/118) Installing py3-configobj-pyc (5.0.9-r0) (17/118) Installing py3-markupsafe (3.0.2-r0) (18/118) Installing py3-markupsafe-pyc (3.0.2-r0) (19/118) Installing py3-jinja2 (3.1.6-r0) (20/118) Installing py3-jinja2-pyc (3.1.6-r0) (21/118) Installing py3-jsonpointer (3.0.0-r0) (22/118) Installing py3-jsonpointer-pyc (3.0.0-r0) (23/118) Installing py3-jsonpatch (1.33-r3) (24/118) Installing py3-jsonpatch-pyc (1.33-r3) (25/118) Installing py3-attrs (25.3.0-r0) (26/118) Installing py3-attrs-pyc (25.3.0-r0) (27/118) Installing py3-rpds-py (0.25.1-r0) (28/118) Installing py3-rpds-py-pyc (0.25.1-r0) (29/118) Installing py3-typing-extensions (4.13.2-r0) (30/118) Installing py3-typing-extensions-pyc (4.13.2-r0) (31/118) Installing py3-referencing (0.36.2-r1) (32/118) Installing py3-referencing-pyc (0.36.2-r1) (33/118) Installing py3-jsonschema-specifications (2025.4.1-r0) (34/118) Installing py3-jsonschema-specifications-pyc (2025.4.1-r0) (35/118) Installing py3-jsonschema (4.23.0-r0) (36/118) Installing py3-jsonschema-pyc (4.23.0-r0) (37/118) Installing py3-certifi (2025.4.26-r0) (38/118) Installing py3-certifi-pyc (2025.4.26-r0) (39/118) Installing py3-charset-normalizer (3.4.2-r0) (40/118) Installing py3-charset-normalizer-pyc (3.4.2-r0) (41/118) Installing py3-idna (3.10-r0) (42/118) Installing py3-idna-pyc (3.10-r0) (43/118) Installing py3-urllib3 (1.26.20-r0) (44/118) Installing py3-urllib3-pyc (1.26.20-r0) (45/118) Installing py3-requests (2.32.5-r0) (46/118) Installing py3-requests-pyc (2.32.5-r0) (47/118) Installing yaml (0.2.5-r2) (48/118) Installing py3-yaml (6.0.2-r0) (49/118) Installing py3-yaml-pyc (6.0.2-r0) (50/118) Installing libmd (1.1.0-r0) (51/118) Installing libbsd (0.12.2-r0) (52/118) Installing skalibs-libs (2.14.4.0-r0) (53/118) Installing utmps-libs (0.1.3.1-r0) (54/118) Installing linux-pam (1.7.0-r4) (55/118) Installing shadow (4.17.3-r0) (56/118) Installing tzdata (2025b-r0) (57/118) Installing eudev-libs (3.2.14-r5) (58/118) Installing eudev-dev (3.2.14-r5) (59/118) Installing py3-parsing (3.2.3-r0) (60/118) Installing py3-parsing-pyc (3.2.3-r0) (61/118) Installing py3-packaging (25.0-r0) (62/118) Installing py3-packaging-pyc (25.0-r0) (63/118) Installing py3-setuptools (80.9.0-r0) (64/118) Installing py3-setuptools-pyc (80.9.0-r0) (65/118) Installing coreutils-env (9.7-r1) (66/118) Installing coreutils-fmt (9.7-r1) (67/118) Installing coreutils-sha512sum (9.7-r1) (68/118) Installing libattr (2.5.2-r2) (69/118) Installing coreutils (9.7-r1) (70/118) Installing grep (3.12-r0) (71/118) Installing libmount (2.41-r9) (72/118) Installing lsblk (2.41-r9) (73/118) Installing device-mapper-libs (2.03.32-r0) (74/118) Installing parted (3.6-r2) (75/118) Installing libproc2 (4.0.4-r3) (76/118) Installing procps-ng (4.0.4-r3) (77/118) Installing py3-netifaces (0.11.0-r3) (78/118) Installing py3-passlib (1.7.4-r7) (79/118) Installing py3-passlib-pyc (1.7.4-r7) (80/118) Installing py3-pyserial (3.5-r7) (81/118) Installing py3-pyserial-pyc (3.5-r7) (82/118) Installing py3-iniconfig (2.1.0-r0) (83/118) Installing py3-iniconfig-pyc (2.1.0-r0) (84/118) Installing py3-pluggy (1.5.0-r0) (85/118) Installing py3-pluggy-pyc (1.5.0-r0) (86/118) Installing py3-py (1.11.0-r4) (87/118) Installing py3-py-pyc (1.11.0-r4) (88/118) Installing py3-pytest (8.3.5-r0) (89/118) Installing py3-pytest-pyc (8.3.5-r0) (90/118) Installing py3-mock (5.2.0-r0) (91/118) Installing py3-mock-pyc (5.2.0-r0) (92/118) Installing py3-pytest-mock (3.10.0-r3) (93/118) Installing py3-pytest-mock-pyc (3.10.0-r3) (94/118) Installing py3-toml (0.10.2-r7) (95/118) Installing py3-toml-pyc (0.10.2-r7) (96/118) Installing py3-responses (0.25.0-r1) (97/118) Installing py3-responses-pyc (0.25.0-r1) (98/118) Installing py3-cachetools (5.5.2-r0) (99/118) Installing py3-cachetools-pyc (5.5.2-r0) (100/118) Installing py3-chardet (5.2.0-r1) (101/118) Installing py3-chardet-pyc (5.2.0-r1) (102/118) Installing py3-colorama (0.4.6-r5) (103/118) Installing py3-colorama-pyc (0.4.6-r5) (104/118) Installing py3-filelock (3.16.1-r1) (105/118) Installing py3-filelock-pyc (3.16.1-r1) (106/118) Installing py3-platformdirs (4.3.8-r0) (107/118) Installing py3-platformdirs-pyc (4.3.8-r0) (108/118) Installing py3-pyproject-api (1.9.0-r1) (109/118) Installing py3-pyproject-api-pyc (1.9.0-r1) (110/118) Installing py3-distlib (0.3.9-r0) (111/118) Installing py3-distlib-pyc (0.3.9-r0) (112/118) Installing py3-virtualenv (20.31.2-r0) (113/118) Installing py3-virtualenv-pyc (20.31.2-r0) (114/118) Installing py3-tox (4.6.4-r1) (115/118) Installing py3-tox-pyc (4.6.4-r1) (116/118) Installing popt (1.19-r4) (117/118) Installing sgdisk (1.0.10-r1) (118/118) Installing .makedepends-cloud-init (20251009.030621) Executing busybox-1.37.0-r19.trigger OK: 340 MiB in 207 packages >>> cloud-init: Cleaning up srcdir >>> cloud-init: Cleaning up pkgdir >>> cloud-init: Cleaning up tmpdir >>> cloud-init: Fetching cloud-init-24.3.1.tar.gz::https://github.com/canonical/cloud-init/archive/refs/tags/24.3.1.tar.gz >>> cloud-init: Fetching cloud-init-24.3.1.tar.gz::https://github.com/canonical/cloud-init/archive/refs/tags/24.3.1.tar.gz >>> cloud-init: Checking sha512sums... cloud-init-24.3.1.tar.gz: OK 01-oauthlib-remove.patch: OK 02-disable-irrelevant-modules.patch: OK 04-set-default-datasource-list.patch: OK cloud-init-hotplugd: OK cloud-init-hotplugd.initd: OK cloud-init.logrotate: OK interfaces: OK setup-cloud-init: OK README.Alpine: OK >>> cloud-init: Unpacking /var/cache/distfiles/cloud-init-24.3.1.tar.gz... >>> cloud-init: 01-oauthlib-remove.patch patching file requirements.txt >>> cloud-init: 02-disable-irrelevant-modules.patch patching file config/cloud.cfg.tmpl Hunk #1 succeeded at 203 with fuzz 1. >>> cloud-init: 04-set-default-datasource-list.patch patching file config/cloud.cfg.tmpl Hunk #1 succeeded at 88 (offset 1 line). /home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/setup.py:191: SyntaxWarning: invalid escape sequence '\o' if cpe_data[1] == "\o": # noqa: W605 /home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/tools/read-dependencies:52: SyntaxWarning: invalid escape sequence '\.' sed -i 's/download\.fedoraproject\.org/dl.fedoraproject.org/g' /etc/yum.repos.d/*.repo running build running build_py creating build/lib/cloudinit copying cloudinit/importer.py -> build/lib/cloudinit copying cloudinit/helpers.py -> build/lib/cloudinit copying cloudinit/atomic_helper.py -> build/lib/cloudinit copying cloudinit/settings.py -> build/lib/cloudinit copying cloudinit/lifecycle.py -> build/lib/cloudinit copying cloudinit/dmi.py -> build/lib/cloudinit copying cloudinit/gpg.py -> build/lib/cloudinit copying cloudinit/socket.py -> build/lib/cloudinit copying cloudinit/type_utils.py -> build/lib/cloudinit copying cloudinit/event.py -> build/lib/cloudinit copying cloudinit/apport.py -> build/lib/cloudinit copying cloudinit/simpletable.py -> build/lib/cloudinit copying cloudinit/util.py -> build/lib/cloudinit copying cloudinit/templater.py -> build/lib/cloudinit copying cloudinit/temp_utils.py -> build/lib/cloudinit copying cloudinit/netinfo.py -> build/lib/cloudinit copying cloudinit/log.py -> build/lib/cloudinit copying cloudinit/user_data.py -> build/lib/cloudinit copying cloudinit/signal_handler.py -> build/lib/cloudinit copying cloudinit/version.py -> build/lib/cloudinit copying cloudinit/__init__.py -> build/lib/cloudinit copying cloudinit/subp.py -> build/lib/cloudinit copying cloudinit/registry.py -> build/lib/cloudinit copying cloudinit/cloud.py -> build/lib/cloudinit copying cloudinit/persistence.py -> build/lib/cloudinit copying cloudinit/stages.py -> build/lib/cloudinit copying cloudinit/url_helper.py -> build/lib/cloudinit copying cloudinit/features.py -> build/lib/cloudinit copying cloudinit/warnings.py -> build/lib/cloudinit copying cloudinit/ssh_util.py -> build/lib/cloudinit copying cloudinit/safeyaml.py -> build/lib/cloudinit creating build/lib/cloudinit/filters copying cloudinit/filters/launch_index.py -> build/lib/cloudinit/filters copying cloudinit/filters/__init__.py -> build/lib/cloudinit/filters creating build/lib/cloudinit/cmd copying cloudinit/cmd/status.py -> build/lib/cloudinit/cmd copying cloudinit/cmd/clean.py -> build/lib/cloudinit/cmd copying cloudinit/cmd/cloud_id.py -> build/lib/cloudinit/cmd copying cloudinit/cmd/query.py -> build/lib/cloudinit/cmd copying cloudinit/cmd/__init__.py -> build/lib/cloudinit/cmd copying cloudinit/cmd/main.py -> build/lib/cloudinit/cmd creating build/lib/cloudinit/config copying cloudinit/config/cc_set_passwords.py -> build/lib/cloudinit/config copying cloudinit/config/cc_ca_certs.py -> build/lib/cloudinit/config copying cloudinit/config/cc_scripts_vendor.py -> build/lib/cloudinit/config copying cloudinit/config/cc_growpart.py -> build/lib/cloudinit/config copying cloudinit/config/cc_phone_home.py -> build/lib/cloudinit/config copying cloudinit/config/cc_lxd.py -> build/lib/cloudinit/config copying cloudinit/config/cc_timezone.py -> build/lib/cloudinit/config copying cloudinit/config/cc_zypper_add_repo.py -> build/lib/cloudinit/config copying cloudinit/config/cc_reset_rmc.py -> build/lib/cloudinit/config copying cloudinit/config/cc_ntp.py -> build/lib/cloudinit/config copying cloudinit/config/cc_salt_minion.py -> build/lib/cloudinit/config copying cloudinit/config/cc_scripts_per_once.py -> build/lib/cloudinit/config copying cloudinit/config/cc_ssh.py -> build/lib/cloudinit/config copying cloudinit/config/cc_scripts_per_boot.py -> build/lib/cloudinit/config copying cloudinit/config/cc_yum_add_repo.py -> build/lib/cloudinit/config copying cloudinit/config/cc_ssh_import_id.py -> build/lib/cloudinit/config copying cloudinit/config/cc_rh_subscription.py -> build/lib/cloudinit/config copying cloudinit/config/cc_grub_dpkg.py -> build/lib/cloudinit/config copying cloudinit/config/cc_keyboard.py -> build/lib/cloudinit/config copying cloudinit/config/cc_chef.py -> build/lib/cloudinit/config copying cloudinit/config/cc_wireguard.py -> build/lib/cloudinit/config copying cloudinit/config/cc_write_files.py -> build/lib/cloudinit/config copying cloudinit/config/cc_ubuntu_drivers.py -> build/lib/cloudinit/config copying cloudinit/config/cc_write_files_deferred.py -> build/lib/cloudinit/config copying cloudinit/config/cc_landscape.py -> build/lib/cloudinit/config copying cloudinit/config/cc_ansible.py -> build/lib/cloudinit/config copying cloudinit/config/cc_mounts.py -> build/lib/cloudinit/config copying cloudinit/config/cc_keys_to_console.py -> build/lib/cloudinit/config copying cloudinit/config/cc_update_hostname.py -> build/lib/cloudinit/config copying cloudinit/config/cc_users_groups.py -> build/lib/cloudinit/config copying cloudinit/config/cc_apt_pipelining.py -> build/lib/cloudinit/config copying cloudinit/config/cc_power_state_change.py -> build/lib/cloudinit/config copying cloudinit/config/cc_update_etc_hosts.py -> build/lib/cloudinit/config copying cloudinit/config/cc_mcollective.py -> build/lib/cloudinit/config copying cloudinit/config/cc_apk_configure.py -> build/lib/cloudinit/config copying cloudinit/config/cc_ubuntu_pro.py -> build/lib/cloudinit/config copying cloudinit/config/cc_rsyslog.py -> build/lib/cloudinit/config copying cloudinit/config/cc_disk_setup.py -> build/lib/cloudinit/config copying cloudinit/config/cc_ssh_authkey_fingerprints.py -> build/lib/cloudinit/config copying cloudinit/config/cc_scripts_per_instance.py -> build/lib/cloudinit/config copying cloudinit/config/cc_scripts_user.py -> build/lib/cloudinit/config copying cloudinit/config/cc_locale.py -> build/lib/cloudinit/config copying cloudinit/config/schema.py -> build/lib/cloudinit/config copying cloudinit/config/cc_final_message.py -> build/lib/cloudinit/config copying cloudinit/config/cc_apt_configure.py -> build/lib/cloudinit/config copying cloudinit/config/cc_runcmd.py -> build/lib/cloudinit/config copying cloudinit/config/cc_set_hostname.py -> build/lib/cloudinit/config copying cloudinit/config/cc_snap.py -> build/lib/cloudinit/config copying cloudinit/config/cc_bootcmd.py -> build/lib/cloudinit/config copying cloudinit/config/cc_seed_random.py -> build/lib/cloudinit/config copying cloudinit/config/cc_ubuntu_autoinstall.py -> build/lib/cloudinit/config copying cloudinit/config/cc_disable_ec2_metadata.py -> build/lib/cloudinit/config copying cloudinit/config/cc_install_hotplug.py -> build/lib/cloudinit/config copying cloudinit/config/cc_fan.py -> build/lib/cloudinit/config copying cloudinit/config/cc_resolv_conf.py -> build/lib/cloudinit/config copying cloudinit/config/__init__.py -> build/lib/cloudinit/config copying cloudinit/config/cc_puppet.py -> build/lib/cloudinit/config copying cloudinit/config/cc_byobu.py -> build/lib/cloudinit/config copying cloudinit/config/cc_resizefs.py -> build/lib/cloudinit/config copying cloudinit/config/modules.py -> build/lib/cloudinit/config copying cloudinit/config/cc_spacewalk.py -> build/lib/cloudinit/config copying cloudinit/config/cc_package_update_upgrade_install.py -> build/lib/cloudinit/config creating build/lib/cloudinit/handlers copying cloudinit/handlers/jinja_template.py -> build/lib/cloudinit/handlers copying cloudinit/handlers/shell_script.py -> build/lib/cloudinit/handlers copying cloudinit/handlers/boot_hook.py -> build/lib/cloudinit/handlers copying cloudinit/handlers/shell_script_by_frequency.py -> build/lib/cloudinit/handlers copying cloudinit/handlers/__init__.py -> build/lib/cloudinit/handlers copying cloudinit/handlers/cloud_config.py -> build/lib/cloudinit/handlers creating build/lib/cloudinit/mergers copying cloudinit/mergers/m_dict.py -> build/lib/cloudinit/mergers copying cloudinit/mergers/m_str.py -> build/lib/cloudinit/mergers copying cloudinit/mergers/m_list.py -> build/lib/cloudinit/mergers copying cloudinit/mergers/__init__.py -> build/lib/cloudinit/mergers creating build/lib/cloudinit/analyze copying cloudinit/analyze/dump.py -> build/lib/cloudinit/analyze copying cloudinit/analyze/__init__.py -> build/lib/cloudinit/analyze copying cloudinit/analyze/show.py -> build/lib/cloudinit/analyze creating build/lib/cloudinit/net copying cloudinit/net/eni.py -> build/lib/cloudinit/net copying cloudinit/net/network_state.py -> build/lib/cloudinit/net copying cloudinit/net/ephemeral.py -> build/lib/cloudinit/net copying cloudinit/net/cmdline.py -> build/lib/cloudinit/net copying cloudinit/net/bsd.py -> build/lib/cloudinit/net copying cloudinit/net/udev.py -> build/lib/cloudinit/net copying cloudinit/net/freebsd.py -> build/lib/cloudinit/net copying cloudinit/net/sysconfig.py -> build/lib/cloudinit/net copying cloudinit/net/renderers.py -> build/lib/cloudinit/net copying cloudinit/net/networkd.py -> build/lib/cloudinit/net copying cloudinit/net/renderer.py -> build/lib/cloudinit/net copying cloudinit/net/netplan.py -> build/lib/cloudinit/net copying cloudinit/net/openbsd.py -> build/lib/cloudinit/net copying cloudinit/net/__init__.py -> build/lib/cloudinit/net copying cloudinit/net/network_manager.py -> build/lib/cloudinit/net copying cloudinit/net/activators.py -> build/lib/cloudinit/net copying cloudinit/net/dhcp.py -> build/lib/cloudinit/net copying cloudinit/net/netbsd.py -> build/lib/cloudinit/net creating build/lib/cloudinit/sources copying cloudinit/sources/DataSourceRbxCloud.py -> build/lib/cloudinit/sources copying cloudinit/sources/DataSourceVultr.py -> build/lib/cloudinit/sources copying cloudinit/sources/DataSourceAzure.py -> build/lib/cloudinit/sources copying cloudinit/sources/DataSourceBigstep.py -> build/lib/cloudinit/sources copying cloudinit/sources/DataSourceOVF.py -> build/lib/cloudinit/sources copying cloudinit/sources/DataSourceAliYun.py -> build/lib/cloudinit/sources copying cloudinit/sources/DataSourceScaleway.py -> build/lib/cloudinit/sources copying cloudinit/sources/DataSourceNWCS.py -> build/lib/cloudinit/sources copying cloudinit/sources/DataSourceNone.py -> build/lib/cloudinit/sources copying cloudinit/sources/DataSourceWSL.py -> build/lib/cloudinit/sources copying cloudinit/sources/DataSourceAltCloud.py -> build/lib/cloudinit/sources copying cloudinit/sources/DataSourceCloudStack.py -> build/lib/cloudinit/sources copying cloudinit/sources/DataSourceSmartOS.py -> build/lib/cloudinit/sources copying cloudinit/sources/DataSourceIBMCloud.py -> build/lib/cloudinit/sources copying cloudinit/sources/DataSourceGCE.py -> build/lib/cloudinit/sources copying cloudinit/sources/DataSourceEc2.py -> build/lib/cloudinit/sources copying cloudinit/sources/DataSourceOpenStack.py -> build/lib/cloudinit/sources copying cloudinit/sources/DataSourceExoscale.py -> build/lib/cloudinit/sources copying cloudinit/sources/DataSourceOpenNebula.py -> build/lib/cloudinit/sources copying cloudinit/sources/DataSourceMAAS.py -> build/lib/cloudinit/sources copying cloudinit/sources/DataSourceConfigDrive.py -> build/lib/cloudinit/sources copying cloudinit/sources/DataSourceCloudSigma.py -> build/lib/cloudinit/sources copying cloudinit/sources/DataSourceHetzner.py -> build/lib/cloudinit/sources copying cloudinit/sources/DataSourceAkamai.py -> build/lib/cloudinit/sources copying cloudinit/sources/DataSourceDigitalOcean.py -> build/lib/cloudinit/sources copying cloudinit/sources/__init__.py -> build/lib/cloudinit/sources copying cloudinit/sources/DataSourceVMware.py -> build/lib/cloudinit/sources copying cloudinit/sources/DataSourceLXD.py -> build/lib/cloudinit/sources copying cloudinit/sources/DataSourceOracle.py -> build/lib/cloudinit/sources copying cloudinit/sources/DataSourceUpCloud.py -> build/lib/cloudinit/sources copying cloudinit/sources/DataSourceNoCloud.py -> build/lib/cloudinit/sources creating build/lib/cloudinit/distros copying cloudinit/distros/rhel_util.py -> build/lib/cloudinit/distros copying cloudinit/distros/arch.py -> build/lib/cloudinit/distros copying cloudinit/distros/debian.py -> build/lib/cloudinit/distros copying cloudinit/distros/aosc.py -> build/lib/cloudinit/distros copying cloudinit/distros/centos.py -> build/lib/cloudinit/distros copying cloudinit/distros/rhel.py -> build/lib/cloudinit/distros copying cloudinit/distros/virtuozzo.py -> build/lib/cloudinit/distros copying cloudinit/distros/rocky.py -> build/lib/cloudinit/distros copying cloudinit/distros/opensuse.py -> build/lib/cloudinit/distros copying cloudinit/distros/bsd.py -> build/lib/cloudinit/distros copying cloudinit/distros/ug_util.py -> build/lib/cloudinit/distros copying cloudinit/distros/alpine.py -> build/lib/cloudinit/distros copying cloudinit/distros/azurelinux.py -> build/lib/cloudinit/distros copying cloudinit/distros/opensuse-microos.py -> build/lib/cloudinit/distros copying cloudinit/distros/networking.py -> build/lib/cloudinit/distros copying cloudinit/distros/photon.py -> build/lib/cloudinit/distros copying cloudinit/distros/freebsd.py -> build/lib/cloudinit/distros copying cloudinit/distros/opensuse-tumbleweed.py -> build/lib/cloudinit/distros copying cloudinit/distros/ubuntu.py -> build/lib/cloudinit/distros copying cloudinit/distros/bsd_utils.py -> build/lib/cloudinit/distros copying cloudinit/distros/opensuse-leap.py -> build/lib/cloudinit/distros copying cloudinit/distros/fedora.py -> build/lib/cloudinit/distros copying cloudinit/distros/miraclelinux.py -> build/lib/cloudinit/distros copying cloudinit/distros/openeuler.py -> build/lib/cloudinit/distros copying cloudinit/distros/suse.py -> build/lib/cloudinit/distros copying cloudinit/distros/almalinux.py -> build/lib/cloudinit/distros copying cloudinit/distros/cloudlinux.py -> build/lib/cloudinit/distros copying cloudinit/distros/amazon.py -> build/lib/cloudinit/distros copying cloudinit/distros/gentoo.py -> build/lib/cloudinit/distros copying cloudinit/distros/openmandriva.py -> build/lib/cloudinit/distros copying cloudinit/distros/dragonflybsd.py -> build/lib/cloudinit/distros copying cloudinit/distros/eurolinux.py -> build/lib/cloudinit/distros copying cloudinit/distros/sle_hpc.py -> build/lib/cloudinit/distros copying cloudinit/distros/openbsd.py -> build/lib/cloudinit/distros copying cloudinit/distros/__init__.py -> build/lib/cloudinit/distros copying cloudinit/distros/sles.py -> build/lib/cloudinit/distros copying cloudinit/distros/TencentOS.py -> build/lib/cloudinit/distros copying cloudinit/distros/OpenCloudOS.py -> build/lib/cloudinit/distros copying cloudinit/distros/mariner.py -> build/lib/cloudinit/distros copying cloudinit/distros/cos.py -> build/lib/cloudinit/distros copying cloudinit/distros/netbsd.py -> build/lib/cloudinit/distros copying cloudinit/distros/sle-micro.py -> build/lib/cloudinit/distros creating build/lib/cloudinit/reporting copying cloudinit/reporting/events.py -> build/lib/cloudinit/reporting copying cloudinit/reporting/handlers.py -> build/lib/cloudinit/reporting copying cloudinit/reporting/__init__.py -> build/lib/cloudinit/reporting creating build/lib/cloudinit/cmd/devel copying cloudinit/cmd/devel/parser.py -> build/lib/cloudinit/cmd/devel copying cloudinit/cmd/devel/render.py -> build/lib/cloudinit/cmd/devel copying cloudinit/cmd/devel/make_mime.py -> build/lib/cloudinit/cmd/devel copying cloudinit/cmd/devel/net_convert.py -> build/lib/cloudinit/cmd/devel copying cloudinit/cmd/devel/__init__.py -> build/lib/cloudinit/cmd/devel copying cloudinit/cmd/devel/logs.py -> build/lib/cloudinit/cmd/devel copying cloudinit/cmd/devel/hotplug_hook.py -> build/lib/cloudinit/cmd/devel creating build/lib/cloudinit/config/schemas copying cloudinit/config/schemas/__init__.py -> build/lib/cloudinit/config/schemas creating build/lib/cloudinit/net/netops copying cloudinit/net/netops/iproute2.py -> build/lib/cloudinit/net/netops copying cloudinit/net/netops/bsd_netops.py -> build/lib/cloudinit/net/netops copying cloudinit/net/netops/__init__.py -> build/lib/cloudinit/net/netops creating build/lib/cloudinit/sources/helpers copying cloudinit/sources/helpers/openstack.py -> build/lib/cloudinit/sources/helpers copying cloudinit/sources/helpers/digitalocean.py -> build/lib/cloudinit/sources/helpers copying cloudinit/sources/helpers/azure.py -> build/lib/cloudinit/sources/helpers copying cloudinit/sources/helpers/akamai.py -> build/lib/cloudinit/sources/helpers copying cloudinit/sources/helpers/netlink.py -> build/lib/cloudinit/sources/helpers copying cloudinit/sources/helpers/cloudsigma.py -> build/lib/cloudinit/sources/helpers copying cloudinit/sources/helpers/ec2.py -> build/lib/cloudinit/sources/helpers copying cloudinit/sources/helpers/__init__.py -> build/lib/cloudinit/sources/helpers copying cloudinit/sources/helpers/upcloud.py -> build/lib/cloudinit/sources/helpers copying cloudinit/sources/helpers/hetzner.py -> build/lib/cloudinit/sources/helpers copying cloudinit/sources/helpers/vultr.py -> build/lib/cloudinit/sources/helpers creating build/lib/cloudinit/sources/azure copying cloudinit/sources/azure/imds.py -> build/lib/cloudinit/sources/azure copying cloudinit/sources/azure/kvp.py -> build/lib/cloudinit/sources/azure copying cloudinit/sources/azure/errors.py -> build/lib/cloudinit/sources/azure copying cloudinit/sources/azure/identity.py -> build/lib/cloudinit/sources/azure copying cloudinit/sources/azure/__init__.py -> build/lib/cloudinit/sources/azure creating build/lib/cloudinit/sources/helpers/vmware copying cloudinit/sources/helpers/vmware/__init__.py -> build/lib/cloudinit/sources/helpers/vmware creating build/lib/cloudinit/sources/helpers/vmware/imc copying cloudinit/sources/helpers/vmware/imc/config_custom_script.py -> build/lib/cloudinit/sources/helpers/vmware/imc copying cloudinit/sources/helpers/vmware/imc/guestcust_error.py -> build/lib/cloudinit/sources/helpers/vmware/imc copying cloudinit/sources/helpers/vmware/imc/config_passwd.py -> build/lib/cloudinit/sources/helpers/vmware/imc copying cloudinit/sources/helpers/vmware/imc/config_source.py -> build/lib/cloudinit/sources/helpers/vmware/imc copying cloudinit/sources/helpers/vmware/imc/nic_base.py -> build/lib/cloudinit/sources/helpers/vmware/imc copying cloudinit/sources/helpers/vmware/imc/nic.py -> build/lib/cloudinit/sources/helpers/vmware/imc copying cloudinit/sources/helpers/vmware/imc/config.py -> build/lib/cloudinit/sources/helpers/vmware/imc copying cloudinit/sources/helpers/vmware/imc/config_file.py -> build/lib/cloudinit/sources/helpers/vmware/imc copying cloudinit/sources/helpers/vmware/imc/guestcust_util.py -> build/lib/cloudinit/sources/helpers/vmware/imc copying cloudinit/sources/helpers/vmware/imc/guestcust_event.py -> build/lib/cloudinit/sources/helpers/vmware/imc copying cloudinit/sources/helpers/vmware/imc/__init__.py -> build/lib/cloudinit/sources/helpers/vmware/imc copying cloudinit/sources/helpers/vmware/imc/boot_proto.py -> build/lib/cloudinit/sources/helpers/vmware/imc copying cloudinit/sources/helpers/vmware/imc/config_nic.py -> build/lib/cloudinit/sources/helpers/vmware/imc copying cloudinit/sources/helpers/vmware/imc/guestcust_state.py -> build/lib/cloudinit/sources/helpers/vmware/imc creating build/lib/cloudinit/distros/parsers copying cloudinit/distros/parsers/ifconfig.py -> build/lib/cloudinit/distros/parsers copying cloudinit/distros/parsers/sys_conf.py -> build/lib/cloudinit/distros/parsers copying cloudinit/distros/parsers/hosts.py -> build/lib/cloudinit/distros/parsers copying cloudinit/distros/parsers/resolv_conf.py -> build/lib/cloudinit/distros/parsers copying cloudinit/distros/parsers/__init__.py -> build/lib/cloudinit/distros/parsers copying cloudinit/distros/parsers/hostname.py -> build/lib/cloudinit/distros/parsers copying cloudinit/distros/parsers/networkmanager_conf.py -> build/lib/cloudinit/distros/parsers creating build/lib/cloudinit/distros/package_management copying cloudinit/distros/package_management/apt.py -> build/lib/cloudinit/distros/package_management copying cloudinit/distros/package_management/snap.py -> build/lib/cloudinit/distros/package_management copying cloudinit/distros/package_management/package_manager.py -> build/lib/cloudinit/distros/package_management copying cloudinit/distros/package_management/utils.py -> build/lib/cloudinit/distros/package_management copying cloudinit/distros/package_management/__init__.py -> build/lib/cloudinit/distros/package_management copying cloudinit/config/schemas/schema-network-config-v1.json -> build/lib/cloudinit/config/schemas copying cloudinit/config/schemas/schema-network-config-v2.json -> build/lib/cloudinit/config/schemas copying cloudinit/config/schemas/versions.schema.cloud-config.json -> build/lib/cloudinit/config/schemas copying cloudinit/config/schemas/schema-cloud-config-v1.json -> build/lib/cloudinit/config/schemas running build_scripts creating build/scripts-3.12 copying tools/cloud-init-per -> build/scripts-3.12 ============================================================================================================================================ test session starts ============================================================================================================================================= platform linux -- Python 3.12.11, pytest-8.3.5, pluggy-1.5.0 rootdir: /home/udu/aports/community/cloud-init/src/cloud-init-24.3.1 configfile: tox.ini testpaths: tools, tests/unittests plugins: mock-3.10.0 collected 5139 items / 2 deselected / 1 skipped / 5137 selected tests/unittests/analyze/test_boot.py ............ [ 0%] tests/unittests/analyze/test_dump.py ........... [ 0%] tests/unittests/analyze/test_show.py . [ 0%] tests/unittests/cmd/devel/test_hotplug_hook.py ................. [ 0%] tests/unittests/cmd/devel/test_init.py . [ 0%] tests/unittests/cmd/devel/test_logs.py ............ [ 1%] tests/unittests/cmd/devel/test_net_convert.py ................. [ 1%] tests/unittests/cmd/devel/test_render.py ........... [ 1%] tests/unittests/cmd/test_clean.py ................ [ 1%] tests/unittests/cmd/test_cloud_id.py ............ [ 2%] tests/unittests/cmd/test_main.py ....... [ 2%] tests/unittests/cmd/test_query.py ........................... [ 2%] tests/unittests/cmd/test_status.py ............................................ [ 3%] tests/unittests/config/test_apt_conf_v1.py ........... [ 3%] tests/unittests/config/test_apt_configure_sources_list_v1.py ........ [ 4%] tests/unittests/config/test_apt_configure_sources_list_v3.py .......... [ 4%] tests/unittests/config/test_apt_key.py .......... [ 4%] tests/unittests/config/test_apt_source_v1.py ........................ [ 4%] tests/unittests/config/test_apt_source_v3.py ........................................................ [ 5%] tests/unittests/config/test_cc_ansible.py ..................... [ 6%] tests/unittests/config/test_cc_apk_configure.py ..................... [ 6%] tests/unittests/config/test_cc_apt_configure.py ............................................. [ 7%] tests/unittests/config/test_cc_apt_pipelining.py .......... [ 7%] tests/unittests/config/test_cc_bootcmd.py ........ [ 8%] tests/unittests/config/test_cc_byobu.py ... [ 8%] tests/unittests/config/test_cc_ca_certs.py ....................... [ 8%] tests/unittests/config/test_cc_chef.py ............................................. [ 9%] tests/unittests/config/test_cc_disable_ec2_metadata.py .... [ 9%] tests/unittests/config/test_cc_disk_setup.py ...................... [ 9%] tests/unittests/config/test_cc_fan.py .. [ 9%] tests/unittests/config/test_cc_final_message.py ..... [ 10%] tests/unittests/config/test_cc_growpart.py ................................ [ 10%] tests/unittests/config/test_cc_grub_dpkg.py .................. [ 11%] tests/unittests/config/test_cc_install_hotplug.py ....... [ 11%] tests/unittests/config/test_cc_keyboard.py ............ [ 11%] tests/unittests/config/test_cc_keys_to_console.py .............. [ 11%] tests/unittests/config/test_cc_landscape.py ................. [ 11%] tests/unittests/config/test_cc_locale.py ....... [ 12%] tests/unittests/config/test_cc_lxd.py ......................................... [ 12%] tests/unittests/config/test_cc_mcollective.py ......... [ 13%] tests/unittests/config/test_cc_mounts.py ......................................................... [ 14%] tests/unittests/config/test_cc_ntp.py ................................... [ 14%] tests/unittests/config/test_cc_package_update_upgrade_install.py .................. [ 15%] tests/unittests/config/test_cc_phone_home.py ................ [ 15%] tests/unittests/config/test_cc_power_state_change.py .............................. [ 16%] tests/unittests/config/test_cc_puppet.py ....................................... [ 16%] tests/unittests/config/test_cc_resizefs.py ...................................... [ 17%] tests/unittests/config/test_cc_resolv_conf.py .......................... [ 18%] tests/unittests/config/test_cc_rh_subscription.py ................ [ 18%] tests/unittests/config/test_cc_rsyslog.py ................................ [ 19%] tests/unittests/config/test_cc_runcmd.py ......... [ 19%] tests/unittests/config/test_cc_scripts_vendor.py ... [ 19%] tests/unittests/config/test_cc_seed_random.py ................ [ 19%] tests/unittests/config/test_cc_set_hostname.py ................. [ 19%] tests/unittests/config/test_cc_set_passwords.py .......................................... [ 20%] tests/unittests/config/test_cc_snap.py ................................ [ 21%] tests/unittests/config/test_cc_spacewalk.py ... [ 21%] tests/unittests/config/test_cc_ssh.py ................................ [ 22%] tests/unittests/config/test_cc_ssh_import_id.py ............. [ 22%] tests/unittests/config/test_cc_timezone.py . [ 22%] tests/unittests/config/test_cc_ubuntu_autoinstall.py ........ [ 22%] tests/unittests/config/test_cc_ubuntu_drivers.py .............................................. [ 23%] tests/unittests/config/test_cc_ubuntu_pro.py .................................................................... [ 24%] tests/unittests/config/test_cc_update_etc_hosts.py ....... [ 24%] tests/unittests/config/test_cc_users_groups.py ......................................... [ 25%] tests/unittests/config/test_cc_wireguard.py .............. [ 25%] tests/unittests/config/test_cc_write_files.py .................... [ 26%] tests/unittests/config/test_cc_write_files_deferred.py .. [ 26%] tests/unittests/config/test_cc_yum_add_repo.py ............ [ 26%] tests/unittests/config/test_cc_zypper_add_repo.py .......... [ 26%] tests/unittests/config/test_modules.py ...................................... [ 27%] tests/unittests/config/test_salt_minion.py ....... [ 27%] tests/unittests/config/test_schema.py ..........................................................................................................................................................................s................s........ [ 31%] tests/unittests/distros/package_management/test_apt.py ...... [ 31%] tests/unittests/distros/test__init__.py ...................................... [ 32%] tests/unittests/distros/test_alpine.py .... [ 32%] tests/unittests/distros/test_aosc.py . [ 32%] tests/unittests/distros/test_arch.py . [ 32%] tests/unittests/distros/test_azurelinux.py .. [ 32%] tests/unittests/distros/test_bsd_utils.py ... [ 32%] tests/unittests/distros/test_create_users.py ........................................................... [ 33%] tests/unittests/distros/test_debian.py ....... [ 33%] tests/unittests/distros/test_dragonflybsd.py .... [ 33%] tests/unittests/distros/test_freebsd.py ....... [ 34%] tests/unittests/distros/test_gentoo.py .. [ 34%] tests/unittests/distros/test_hostname.py ... [ 34%] tests/unittests/distros/test_hosts.py ... [ 34%] tests/unittests/distros/test_ifconfig.py ............... [ 34%] tests/unittests/distros/test_init.py ...................................................................................... [ 36%] tests/unittests/distros/test_manage_service.py ........ [ 36%] tests/unittests/distros/test_mariner.py .. [ 36%] tests/unittests/distros/test_netbsd.py .... [ 36%] tests/unittests/distros/test_netconfig.py .............................. [ 37%] tests/unittests/distros/test_networking.py ........................ [ 37%] tests/unittests/distros/test_openbsd.py .. [ 37%] tests/unittests/distros/test_opensuse.py .............. [ 37%] tests/unittests/distros/test_photon.py .... [ 37%] tests/unittests/distros/test_resolv.py .... [ 37%] tests/unittests/distros/test_sles.py . [ 37%] tests/unittests/distros/test_sysconfig.py ...... [ 38%] tests/unittests/distros/test_ubuntu.py ..... [ 38%] tests/unittests/distros/test_user_data_normalize.py .................. [ 38%] tests/unittests/filters/test_launch_index.py ..... [ 38%] tests/unittests/net/netops/test_iproute2.py .......... [ 38%] tests/unittests/net/test_dhcp.py ....................................................................... [ 40%] tests/unittests/net/test_dns.py . [ 40%] tests/unittests/net/test_ephemeral.py ......... [ 40%] tests/unittests/net/test_init.py ............................................................................................................................................................ [ 43%] tests/unittests/net/test_net_rendering.py . [ 43%] tests/unittests/net/test_netplan.py .... [ 43%] tests/unittests/net/test_network_manager.py .. [ 43%] tests/unittests/net/test_network_state.py ....................................................... [ 44%] tests/unittests/net/test_networkd.py ............................................................ [ 45%] tests/unittests/reporting/test_reporting.py .................................................. [ 46%] tests/unittests/reporting/test_reporting_hyperv.py FFFFFFFFFFFFFFF [ 47%] tests/unittests/reporting/test_webhook_handler.py ....... [ 47%] tests/unittests/runs/test_merge_run.py . [ 47%] tests/unittests/runs/test_simple_run.py ...... [ 47%] tests/unittests/sources/azure/test_errors.py ............................................................. [ 48%] tests/unittests/sources/azure/test_identity.py ..................... [ 48%] tests/unittests/sources/azure/test_imds.py ................................................................................................................. [ 51%] tests/unittests/sources/azure/test_kvp.py E.E. [ 51%] tests/unittests/sources/helpers/test_akamai.py ............ [ 51%] tests/unittests/sources/helpers/test_ec2.py .......... [ 51%] tests/unittests/sources/helpers/test_netlink.py ............................ [ 52%] tests/unittests/sources/helpers/test_openstack.py .... [ 52%] tests/unittests/sources/test___init__.py ............................ [ 52%] tests/unittests/sources/test_akamai.py ................................... [ 53%] tests/unittests/sources/test_aliyun.py ........ [ 53%] tests/unittests/sources/test_altcloud.py ......................... [ 54%] tests/unittests/sources/test_azure.py .................................................................................................................................................................................................................. [ 58%] tests/unittests/sources/test_azure_helper.py ....................................ss................................................................... [ 60%] tests/unittests/sources/test_bigstep.py .. [ 60%] tests/unittests/sources/test_cloudsigma.py ............ [ 60%] tests/unittests/sources/test_cloudstack.py ............. [ 60%] tests/unittests/sources/test_common.py ..... [ 60%] tests/unittests/sources/test_configdrive.py .......................... [ 61%] tests/unittests/sources/test_digitalocean.py ............. [ 61%] tests/unittests/sources/test_ec2.py ............................................................. [ 62%] tests/unittests/sources/test_exoscale.py ......... [ 63%] tests/unittests/sources/test_gce.py ................... [ 63%] tests/unittests/sources/test_hetzner.py .. [ 63%] tests/unittests/sources/test_ibmcloud.py .................. [ 63%] tests/unittests/sources/test_init.py ............................................ [ 64%] tests/unittests/sources/test_lxd.py .................................. [ 65%] tests/unittests/sources/test_maas.py .............. [ 65%] tests/unittests/sources/test_nocloud.py ................... [ 65%] tests/unittests/sources/test_nwcs.py ... [ 66%] tests/unittests/sources/test_opennebula.py F.F...FF.FF.FFFF.............................F.... [ 66%] tests/unittests/sources/test_openstack.py ....................................... [ 67%] tests/unittests/sources/test_oracle.py ...................................................................................... [ 69%] tests/unittests/sources/test_ovf.py .............................. [ 70%] tests/unittests/sources/test_rbx.py ....... [ 70%] tests/unittests/sources/test_scaleway.py .......................... [ 70%] tests/unittests/sources/test_smartos.py ........................................................s [ 71%] tests/unittests/sources/test_upcloud.py ....... [ 71%] tests/unittests/sources/test_vmware.py ..................................................... [ 72%] tests/unittests/sources/test_vultr.py ..... [ 73%] tests/unittests/sources/test_wsl.py ................................. [ 73%] tests/unittests/sources/vmware/test_custom_script.py .. [ 73%] tests/unittests/sources/vmware/test_guestcust_util.py .... [ 73%] tests/unittests/sources/vmware/test_vmware_config_file.py ...................... [ 74%] tests/unittests/test__init__.py ................ [ 74%] tests/unittests/test_all_stages.py .... [ 74%] tests/unittests/test_apport.py ......... [ 74%] tests/unittests/test_atomic_helper.py ...... [ 74%] tests/unittests/test_builtin_handlers.py ........................ [ 75%] tests/unittests/test_cli.py ..FF..........................FFF [ 75%] tests/unittests/test_conftest.py .......... [ 76%] tests/unittests/test_data.py ................................. [ 76%] tests/unittests/test_dmi.py ............ [ 77%] tests/unittests/test_ds_identify.py ..........................................x.xx....................................................................... [ 79%] tests/unittests/test_event.py ... [ 79%] tests/unittests/test_features.py . [ 79%] tests/unittests/test_gpg.py .......... [ 79%] tests/unittests/test_helpers.py .... [ 79%] tests/unittests/test_importer.py .... [ 79%] tests/unittests/test_log.py ....... [ 79%] tests/unittests/test_merging.py ..................... [ 80%] tests/unittests/test_net.py ...............x...................x.x................x......................x........x......................x..............................................................x....x.x........x........xxx...............x................................................ [ 85%] tests/unittests/test_net_activators.py .................................... [ 86%] tests/unittests/test_net_freebsd.py .. [ 86%] tests/unittests/test_netinfo.py ................. [ 86%] tests/unittests/test_pathprefix2dict.py .... [ 86%] tests/unittests/test_persistence.py ........ [ 86%] tests/unittests/test_registry.py .... [ 86%] tests/unittests/test_render_template.py ........................................ [ 87%] tests/unittests/test_safeyaml.py ............. [ 87%] tests/unittests/test_simpletable.py ..... [ 87%] tests/unittests/test_ssh_util.py ............................................................................................................................... [ 90%] tests/unittests/test_stages.py ........................................................ [ 91%] tests/unittests/test_subp.py ...................... [ 91%] tests/unittests/test_temp_utils.py ...... [ 92%] tests/unittests/test_templating.py .....s................... [ 92%] tests/unittests/test_upgrade.py .................. [ 92%] tests/unittests/test_url_helper.py s............................................. [ 93%] tests/unittests/test_util.py .................................................................................................................................................................................................................................................................FF.F.... [ 98%] ................................................. [ 99%] tests/unittests/test_version.py .... [100%] =================================================================================================================================================== ERRORS =================================================================================================================================================== ___________________________________________________________________________________________________________________ ERROR at setup of TestReportFailureToHost.test_report_failure_to_host ____________________________________________________________________________________________________________________ tmp_path = PosixPath('/tmp/pytest-of-udu/pytest-0/test_report_failure_to_host0') @pytest.fixture def telemetry_reporter(tmp_path): kvp_file_path = tmp_path / "kvp_pool_file" kvp_file_path.write_bytes(b"") > reporter = kvp.handlers.HyperVKvpReportingHandler( kvp_file_path=str(kvp_file_path) ) tests/unittests/sources/azure/test_kvp.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cloudinit/reporting/handlers.py:202: in __init__ HyperVKvpReportingHandler._truncate_guest_pool_file( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , kvp_file = '/tmp/pytest-of-udu/pytest-0/test_report_failure_to_host0/kvp_pool_file' @classmethod def _truncate_guest_pool_file(cls, kvp_file): """ Truncate the pool file if it has not been truncated since boot. This should be done exactly once for the file indicated by KVP_POOL_FILE_GUEST constant above. This method takes a filename so that we can use an arbitrary file during unit testing. Since KVP is a best-effort telemetry channel we only attempt to truncate the file once and only if the file has not been modified since boot. Additional truncation can lead to loss of existing KVPs. """ if cls._already_truncated_pool_file: return > boot_time = time.time() - float(util.uptime()) E ValueError: could not convert string to float: '??' cloudinit/reporting/handlers.py:232: ValueError --------------------------------------------------------------------------------------------------------------------------------------------- Captured log setup --------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:06:49 WARNING cloudinit.util:util.py:1856 Unable to read uptime using method: ctypes 2025-10-09 03:06:49 DEBUG cloudinit.util:util.py:1857 Unable to read uptime using method: ctypes Traceback (most recent call last): File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2205, in uptime uptime_str = str(time.time() - boottime()) ^^^^^^^^^^ File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2179, in boottime libc.sysctl( ^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 392, in __getattr__ func = self.__getitem__(name) ^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 397, in __getitem__ func = self._FuncPtr((name_or_ordinal, self)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: Symbol not found: sysctl ___________________________________________________________________________________________________________________ ERROR at setup of TestReportSuccessToHost.test_report_success_to_host ____________________________________________________________________________________________________________________ tmp_path = PosixPath('/tmp/pytest-of-udu/pytest-0/test_report_success_to_host0') @pytest.fixture def telemetry_reporter(tmp_path): kvp_file_path = tmp_path / "kvp_pool_file" kvp_file_path.write_bytes(b"") > reporter = kvp.handlers.HyperVKvpReportingHandler( kvp_file_path=str(kvp_file_path) ) tests/unittests/sources/azure/test_kvp.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cloudinit/reporting/handlers.py:202: in __init__ HyperVKvpReportingHandler._truncate_guest_pool_file( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , kvp_file = '/tmp/pytest-of-udu/pytest-0/test_report_success_to_host0/kvp_pool_file' @classmethod def _truncate_guest_pool_file(cls, kvp_file): """ Truncate the pool file if it has not been truncated since boot. This should be done exactly once for the file indicated by KVP_POOL_FILE_GUEST constant above. This method takes a filename so that we can use an arbitrary file during unit testing. Since KVP is a best-effort telemetry channel we only attempt to truncate the file once and only if the file has not been modified since boot. Additional truncation can lead to loss of existing KVPs. """ if cls._already_truncated_pool_file: return > boot_time = time.time() - float(util.uptime()) E ValueError: could not convert string to float: '??' cloudinit/reporting/handlers.py:232: ValueError --------------------------------------------------------------------------------------------------------------------------------------------- Captured log setup --------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:06:49 WARNING cloudinit.util:util.py:1856 Unable to read uptime using method: ctypes 2025-10-09 03:06:49 DEBUG cloudinit.util:util.py:1857 Unable to read uptime using method: ctypes Traceback (most recent call last): File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2205, in uptime uptime_str = str(time.time() - boottime()) ^^^^^^^^^^ File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2179, in boottime libc.sysctl( ^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 392, in __getattr__ func = self.__getitem__(name) ^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 397, in __getitem__ func = self._FuncPtr((name_or_ordinal, self)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: Symbol not found: sysctl ================================================================================================================================================== FAILURES ================================================================================================================================================== _____________________________________________________________________________________________________________________________________ TestKvpEncoding.test_encode_decode _____________________________________________________________________________________________________________________________________ self = def test_encode_decode(self): kvp = {"key": "key1", "value": "value1"} > kvp_reporting = HyperVKvpReportingHandler() tests/unittests/reporting/test_reporting_hyperv.py:26: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cloudinit/reporting/handlers.py:202: in __init__ HyperVKvpReportingHandler._truncate_guest_pool_file( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , kvp_file = '/var/lib/hyperv/.kvp_pool_1' @classmethod def _truncate_guest_pool_file(cls, kvp_file): """ Truncate the pool file if it has not been truncated since boot. This should be done exactly once for the file indicated by KVP_POOL_FILE_GUEST constant above. This method takes a filename so that we can use an arbitrary file during unit testing. Since KVP is a best-effort telemetry channel we only attempt to truncate the file once and only if the file has not been modified since boot. Additional truncation can lead to loss of existing KVPs. """ if cls._already_truncated_pool_file: return > boot_time = time.time() - float(util.uptime()) E ValueError: could not convert string to float: '??' cloudinit/reporting/handlers.py:232: ValueError --------------------------------------------------------------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:06:44 WARNING cloudinit.util:util.py:1856 Unable to read uptime using method: ctypes 2025-10-09 03:06:44 DEBUG cloudinit.util:util.py:1857 Unable to read uptime using method: ctypes Traceback (most recent call last): File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2205, in uptime uptime_str = str(time.time() - boottime()) ^^^^^^^^^^ File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2179, in boottime libc.sysctl( ^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 392, in __getattr__ func = self.__getitem__(name) ^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 397, in __getitem__ func = self._FuncPtr((name_or_ordinal, self)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: Symbol not found: sysctl ____________________________________________________________________________________________________________________________________ TextKvpReporter.test_event_very_long ____________________________________________________________________________________________________________________________________ self = def test_event_very_long(self): > reporter = HyperVKvpReportingHandler(kvp_file_path=self.tmp_file_path) tests/unittests/reporting/test_reporting_hyperv.py:81: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cloudinit/reporting/handlers.py:202: in __init__ HyperVKvpReportingHandler._truncate_guest_pool_file( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , kvp_file = '/tmp/ci-TextKvpReporter.yk1rla1w/kvp_pool_file' @classmethod def _truncate_guest_pool_file(cls, kvp_file): """ Truncate the pool file if it has not been truncated since boot. This should be done exactly once for the file indicated by KVP_POOL_FILE_GUEST constant above. This method takes a filename so that we can use an arbitrary file during unit testing. Since KVP is a best-effort telemetry channel we only attempt to truncate the file once and only if the file has not been modified since boot. Additional truncation can lead to loss of existing KVPs. """ if cls._already_truncated_pool_file: return > boot_time = time.time() - float(util.uptime()) E ValueError: could not convert string to float: '??' cloudinit/reporting/handlers.py:232: ValueError --------------------------------------------------------------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:06:44 DEBUG cloudinit.util:util.py:2345 Writing to /tmp/ci-TextKvpReporter.yk1rla1w/kvp_pool_file - ab: [644] 0 bytes 2025-10-09 03:06:44 WARNING cloudinit.util:util.py:1856 Unable to read uptime using method: ctypes 2025-10-09 03:06:44 DEBUG cloudinit.util:util.py:1857 Unable to read uptime using method: ctypes Traceback (most recent call last): File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2205, in uptime uptime_str = str(time.time() - boottime()) ^^^^^^^^^^ File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2179, in boottime libc.sysctl( ^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 392, in __getattr__ func = self.__getitem__(name) ^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 397, in __getitem__ func = self._FuncPtr((name_or_ordinal, self)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: Symbol not found: sysctl ____________________________________________________________________________________________________________________ TextKvpReporter.test_events_with_higher_incarnation_not_over_written ____________________________________________________________________________________________________________________ self = def test_events_with_higher_incarnation_not_over_written(self): > reporter = HyperVKvpReportingHandler(kvp_file_path=self.tmp_file_path) tests/unittests/reporting/test_reporting_hyperv.py:40: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cloudinit/reporting/handlers.py:202: in __init__ HyperVKvpReportingHandler._truncate_guest_pool_file( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , kvp_file = '/tmp/ci-TextKvpReporter.7d4yu33j/kvp_pool_file' @classmethod def _truncate_guest_pool_file(cls, kvp_file): """ Truncate the pool file if it has not been truncated since boot. This should be done exactly once for the file indicated by KVP_POOL_FILE_GUEST constant above. This method takes a filename so that we can use an arbitrary file during unit testing. Since KVP is a best-effort telemetry channel we only attempt to truncate the file once and only if the file has not been modified since boot. Additional truncation can lead to loss of existing KVPs. """ if cls._already_truncated_pool_file: return > boot_time = time.time() - float(util.uptime()) E ValueError: could not convert string to float: '??' cloudinit/reporting/handlers.py:232: ValueError --------------------------------------------------------------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:06:44 DEBUG cloudinit.util:util.py:2345 Writing to /tmp/ci-TextKvpReporter.7d4yu33j/kvp_pool_file - ab: [644] 0 bytes 2025-10-09 03:06:44 WARNING cloudinit.util:util.py:1856 Unable to read uptime using method: ctypes 2025-10-09 03:06:44 DEBUG cloudinit.util:util.py:1857 Unable to read uptime using method: ctypes Traceback (most recent call last): File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2205, in uptime uptime_str = str(time.time() - boottime()) ^^^^^^^^^^ File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2179, in boottime libc.sysctl( ^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 392, in __getattr__ func = self.__getitem__(name) ^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 397, in __getitem__ func = self._FuncPtr((name_or_ordinal, self)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: Symbol not found: sysctl _________________________________________________________________________________________________________________________________ TextKvpReporter.test_file_operation_issue __________________________________________________________________________________________________________________________________ self = def test_file_operation_issue(self): os.remove(self.tmp_file_path) > reporter = HyperVKvpReportingHandler(kvp_file_path=self.tmp_file_path) tests/unittests/reporting/test_reporting_hyperv.py:72: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cloudinit/reporting/handlers.py:202: in __init__ HyperVKvpReportingHandler._truncate_guest_pool_file( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , kvp_file = '/tmp/ci-TextKvpReporter.l63t4s3o/kvp_pool_file' @classmethod def _truncate_guest_pool_file(cls, kvp_file): """ Truncate the pool file if it has not been truncated since boot. This should be done exactly once for the file indicated by KVP_POOL_FILE_GUEST constant above. This method takes a filename so that we can use an arbitrary file during unit testing. Since KVP is a best-effort telemetry channel we only attempt to truncate the file once and only if the file has not been modified since boot. Additional truncation can lead to loss of existing KVPs. """ if cls._already_truncated_pool_file: return > boot_time = time.time() - float(util.uptime()) E ValueError: could not convert string to float: '??' cloudinit/reporting/handlers.py:232: ValueError --------------------------------------------------------------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:06:45 DEBUG cloudinit.util:util.py:2345 Writing to /tmp/ci-TextKvpReporter.l63t4s3o/kvp_pool_file - ab: [644] 0 bytes 2025-10-09 03:06:45 WARNING cloudinit.util:util.py:1856 Unable to read uptime using method: ctypes 2025-10-09 03:06:45 DEBUG cloudinit.util:util.py:1857 Unable to read uptime using method: ctypes Traceback (most recent call last): File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2205, in uptime uptime_str = str(time.time() - boottime()) ^^^^^^^^^^ File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2179, in boottime libc.sysctl( ^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 392, in __getattr__ func = self.__getitem__(name) ^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 397, in __getitem__ func = self._FuncPtr((name_or_ordinal, self)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: Symbol not found: sysctl _____________________________________________________________________________________________________________________________ TextKvpReporter.test_finish_event_result_is_logged _____________________________________________________________________________________________________________________________ self = def test_finish_event_result_is_logged(self): > reporter = HyperVKvpReportingHandler(kvp_file_path=self.tmp_file_path) tests/unittests/reporting/test_reporting_hyperv.py:61: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cloudinit/reporting/handlers.py:202: in __init__ HyperVKvpReportingHandler._truncate_guest_pool_file( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , kvp_file = '/tmp/ci-TextKvpReporter.apqqdgo4/kvp_pool_file' @classmethod def _truncate_guest_pool_file(cls, kvp_file): """ Truncate the pool file if it has not been truncated since boot. This should be done exactly once for the file indicated by KVP_POOL_FILE_GUEST constant above. This method takes a filename so that we can use an arbitrary file during unit testing. Since KVP is a best-effort telemetry channel we only attempt to truncate the file once and only if the file has not been modified since boot. Additional truncation can lead to loss of existing KVPs. """ if cls._already_truncated_pool_file: return > boot_time = time.time() - float(util.uptime()) E ValueError: could not convert string to float: '??' cloudinit/reporting/handlers.py:232: ValueError --------------------------------------------------------------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:06:45 DEBUG cloudinit.util:util.py:2345 Writing to /tmp/ci-TextKvpReporter.apqqdgo4/kvp_pool_file - ab: [644] 0 bytes 2025-10-09 03:06:45 WARNING cloudinit.util:util.py:1856 Unable to read uptime using method: ctypes 2025-10-09 03:06:45 DEBUG cloudinit.util:util.py:1857 Unable to read uptime using method: ctypes Traceback (most recent call last): File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2205, in uptime uptime_str = str(time.time() - boottime()) ^^^^^^^^^^ File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2179, in boottime libc.sysctl( ^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 392, in __getattr__ func = self.__getitem__(name) ^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 397, in __getitem__ func = self._FuncPtr((name_or_ordinal, self)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: Symbol not found: sysctl __________________________________________________________________________________________________________________________________ TextKvpReporter.test_get_boot_telemetry ___________________________________________________________________________________________________________________________________ self = , m_subp = , m_sysd = @mock.patch("cloudinit.distros.uses_systemd") @mock.patch("cloudinit.subp.subp") def test_get_boot_telemetry(self, m_subp, m_sysd): > reporter = HyperVKvpReportingHandler(kvp_file_path=self.tmp_file_path) tests/unittests/reporting/test_reporting_hyperv.py:152: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cloudinit/reporting/handlers.py:202: in __init__ HyperVKvpReportingHandler._truncate_guest_pool_file( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , kvp_file = '/tmp/ci-TextKvpReporter._1qavnab/kvp_pool_file' @classmethod def _truncate_guest_pool_file(cls, kvp_file): """ Truncate the pool file if it has not been truncated since boot. This should be done exactly once for the file indicated by KVP_POOL_FILE_GUEST constant above. This method takes a filename so that we can use an arbitrary file during unit testing. Since KVP is a best-effort telemetry channel we only attempt to truncate the file once and only if the file has not been modified since boot. Additional truncation can lead to loss of existing KVPs. """ if cls._already_truncated_pool_file: return > boot_time = time.time() - float(util.uptime()) E ValueError: could not convert string to float: '??' cloudinit/reporting/handlers.py:232: ValueError --------------------------------------------------------------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:06:45 DEBUG cloudinit.util:util.py:2345 Writing to /tmp/ci-TextKvpReporter._1qavnab/kvp_pool_file - ab: [644] 0 bytes 2025-10-09 03:06:45 WARNING cloudinit.util:util.py:1856 Unable to read uptime using method: ctypes 2025-10-09 03:06:45 DEBUG cloudinit.util:util.py:1857 Unable to read uptime using method: ctypes Traceback (most recent call last): File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2205, in uptime uptime_str = str(time.time() - boottime()) ^^^^^^^^^^ File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2179, in boottime libc.sysctl( ^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 392, in __getattr__ func = self.__getitem__(name) ^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 397, in __getitem__ func = self._FuncPtr((name_or_ordinal, self)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: Symbol not found: sysctl ____________________________________________________________________________________________________________________________________ TextKvpReporter.test_get_system_info ____________________________________________________________________________________________________________________________________ self = def test_get_system_info(self): > reporter = HyperVKvpReportingHandler(kvp_file_path=self.tmp_file_path) tests/unittests/reporting/test_reporting_hyperv.py:180: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cloudinit/reporting/handlers.py:202: in __init__ HyperVKvpReportingHandler._truncate_guest_pool_file( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , kvp_file = '/tmp/ci-TextKvpReporter.xqag6kr_/kvp_pool_file' @classmethod def _truncate_guest_pool_file(cls, kvp_file): """ Truncate the pool file if it has not been truncated since boot. This should be done exactly once for the file indicated by KVP_POOL_FILE_GUEST constant above. This method takes a filename so that we can use an arbitrary file during unit testing. Since KVP is a best-effort telemetry channel we only attempt to truncate the file once and only if the file has not been modified since boot. Additional truncation can lead to loss of existing KVPs. """ if cls._already_truncated_pool_file: return > boot_time = time.time() - float(util.uptime()) E ValueError: could not convert string to float: '??' cloudinit/reporting/handlers.py:232: ValueError --------------------------------------------------------------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:06:45 DEBUG cloudinit.util:util.py:2345 Writing to /tmp/ci-TextKvpReporter.xqag6kr_/kvp_pool_file - ab: [644] 0 bytes 2025-10-09 03:06:45 WARNING cloudinit.util:util.py:1856 Unable to read uptime using method: ctypes 2025-10-09 03:06:45 DEBUG cloudinit.util:util.py:1857 Unable to read uptime using method: ctypes Traceback (most recent call last): File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2205, in uptime uptime_str = str(time.time() - boottime()) ^^^^^^^^^^ File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2179, in boottime libc.sysctl( ^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 392, in __getattr__ func = self.__getitem__(name) ^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 397, in __getitem__ func = self._FuncPtr((name_or_ordinal, self)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: Symbol not found: sysctl _______________________________________________________________________________________________________________________ TextKvpReporter.test_not_truncate_kvp_file_modified_after_boot _______________________________________________________________________________________________________________________ self = def test_not_truncate_kvp_file_modified_after_boot(self): with open(self.tmp_file_path, "wb+") as f: kvp = {"key": "key1", "value": "value1"} data = struct.pack( "%ds%ds" % ( HyperVKvpReportingHandler.HV_KVP_EXCHANGE_MAX_KEY_SIZE, HyperVKvpReportingHandler.HV_KVP_EXCHANGE_MAX_VALUE_SIZE, ), kvp["key"].encode("utf-8"), kvp["value"].encode("utf-8"), ) f.write(data) cur_time = time.time() os.utime(self.tmp_file_path, (cur_time, cur_time)) # reset this because the unit test framework # has already polluted the class variable HyperVKvpReportingHandler._already_truncated_pool_file = False > reporter = HyperVKvpReportingHandler(kvp_file_path=self.tmp_file_path) tests/unittests/reporting/test_reporting_hyperv.py:119: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cloudinit/reporting/handlers.py:202: in __init__ HyperVKvpReportingHandler._truncate_guest_pool_file( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , kvp_file = '/tmp/ci-TextKvpReporter.3v3tl6g_/kvp_pool_file' @classmethod def _truncate_guest_pool_file(cls, kvp_file): """ Truncate the pool file if it has not been truncated since boot. This should be done exactly once for the file indicated by KVP_POOL_FILE_GUEST constant above. This method takes a filename so that we can use an arbitrary file during unit testing. Since KVP is a best-effort telemetry channel we only attempt to truncate the file once and only if the file has not been modified since boot. Additional truncation can lead to loss of existing KVPs. """ if cls._already_truncated_pool_file: return > boot_time = time.time() - float(util.uptime()) E ValueError: could not convert string to float: '??' cloudinit/reporting/handlers.py:232: ValueError --------------------------------------------------------------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:06:45 DEBUG cloudinit.util:util.py:2345 Writing to /tmp/ci-TextKvpReporter.3v3tl6g_/kvp_pool_file - ab: [644] 0 bytes 2025-10-09 03:06:45 WARNING cloudinit.util:util.py:1856 Unable to read uptime using method: ctypes 2025-10-09 03:06:45 DEBUG cloudinit.util:util.py:1857 Unable to read uptime using method: ctypes Traceback (most recent call last): File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2205, in uptime uptime_str = str(time.time() - boottime()) ^^^^^^^^^^ File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2179, in boottime libc.sysctl( ^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 392, in __getattr__ func = self.__getitem__(name) ^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 397, in __getitem__ func = self._FuncPtr((name_or_ordinal, self)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: Symbol not found: sysctl ________________________________________________________________________________________________________________________________ TextKvpReporter.test_report_compressed_event ________________________________________________________________________________________________________________________________ self = def test_report_compressed_event(self): > reporter = HyperVKvpReportingHandler(kvp_file_path=self.tmp_file_path) tests/unittests/reporting/test_reporting_hyperv.py:230: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cloudinit/reporting/handlers.py:202: in __init__ HyperVKvpReportingHandler._truncate_guest_pool_file( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , kvp_file = '/tmp/ci-TextKvpReporter.svq854wj/kvp_pool_file' @classmethod def _truncate_guest_pool_file(cls, kvp_file): """ Truncate the pool file if it has not been truncated since boot. This should be done exactly once for the file indicated by KVP_POOL_FILE_GUEST constant above. This method takes a filename so that we can use an arbitrary file during unit testing. Since KVP is a best-effort telemetry channel we only attempt to truncate the file once and only if the file has not been modified since boot. Additional truncation can lead to loss of existing KVPs. """ if cls._already_truncated_pool_file: return > boot_time = time.time() - float(util.uptime()) E ValueError: could not convert string to float: '??' cloudinit/reporting/handlers.py:232: ValueError --------------------------------------------------------------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:06:45 DEBUG cloudinit.util:util.py:2345 Writing to /tmp/ci-TextKvpReporter.svq854wj/kvp_pool_file - ab: [644] 0 bytes 2025-10-09 03:06:45 WARNING cloudinit.util:util.py:1856 Unable to read uptime using method: ctypes 2025-10-09 03:06:45 DEBUG cloudinit.util:util.py:1857 Unable to read uptime using method: ctypes Traceback (most recent call last): File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2205, in uptime uptime_str = str(time.time() - boottime()) ^^^^^^^^^^ File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2179, in boottime libc.sysctl( ^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 392, in __getattr__ func = self.__getitem__(name) ^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 397, in __getitem__ func = self._FuncPtr((name_or_ordinal, self)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: Symbol not found: sysctl _______________________________________________________________________________________________________________________ TextKvpReporter.test_report_diagnostic_event_with_logger_func ________________________________________________________________________________________________________________________ self = def test_report_diagnostic_event_with_logger_func(self): > reporter = HyperVKvpReportingHandler(kvp_file_path=self.tmp_file_path) tests/unittests/reporting/test_reporting_hyperv.py:212: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cloudinit/reporting/handlers.py:202: in __init__ HyperVKvpReportingHandler._truncate_guest_pool_file( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , kvp_file = '/tmp/ci-TextKvpReporter.hkd9w0p_/kvp_pool_file' @classmethod def _truncate_guest_pool_file(cls, kvp_file): """ Truncate the pool file if it has not been truncated since boot. This should be done exactly once for the file indicated by KVP_POOL_FILE_GUEST constant above. This method takes a filename so that we can use an arbitrary file during unit testing. Since KVP is a best-effort telemetry channel we only attempt to truncate the file once and only if the file has not been modified since boot. Additional truncation can lead to loss of existing KVPs. """ if cls._already_truncated_pool_file: return > boot_time = time.time() - float(util.uptime()) E ValueError: could not convert string to float: '??' cloudinit/reporting/handlers.py:232: ValueError --------------------------------------------------------------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:06:45 DEBUG cloudinit.util:util.py:2345 Writing to /tmp/ci-TextKvpReporter.hkd9w0p_/kvp_pool_file - ab: [644] 0 bytes 2025-10-09 03:06:45 WARNING cloudinit.util:util.py:1856 Unable to read uptime using method: ctypes 2025-10-09 03:06:45 DEBUG cloudinit.util:util.py:1857 Unable to read uptime using method: ctypes Traceback (most recent call last): File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2205, in uptime uptime_str = str(time.time() - boottime()) ^^^^^^^^^^ File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2179, in boottime libc.sysctl( ^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 392, in __getattr__ func = self.__getitem__(name) ^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 397, in __getitem__ func = self._FuncPtr((name_or_ordinal, self)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: Symbol not found: sysctl ______________________________________________________________________________________________________________________ TextKvpReporter.test_report_diagnostic_event_without_logger_func ______________________________________________________________________________________________________________________ self = def test_report_diagnostic_event_without_logger_func(self): > reporter = HyperVKvpReportingHandler(kvp_file_path=self.tmp_file_path) tests/unittests/reporting/test_reporting_hyperv.py:200: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cloudinit/reporting/handlers.py:202: in __init__ HyperVKvpReportingHandler._truncate_guest_pool_file( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , kvp_file = '/tmp/ci-TextKvpReporter.8n16psw2/kvp_pool_file' @classmethod def _truncate_guest_pool_file(cls, kvp_file): """ Truncate the pool file if it has not been truncated since boot. This should be done exactly once for the file indicated by KVP_POOL_FILE_GUEST constant above. This method takes a filename so that we can use an arbitrary file during unit testing. Since KVP is a best-effort telemetry channel we only attempt to truncate the file once and only if the file has not been modified since boot. Additional truncation can lead to loss of existing KVPs. """ if cls._already_truncated_pool_file: return > boot_time = time.time() - float(util.uptime()) E ValueError: could not convert string to float: '??' cloudinit/reporting/handlers.py:232: ValueError --------------------------------------------------------------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:06:45 DEBUG cloudinit.util:util.py:2345 Writing to /tmp/ci-TextKvpReporter.8n16psw2/kvp_pool_file - ab: [644] 0 bytes 2025-10-09 03:06:45 WARNING cloudinit.util:util.py:1856 Unable to read uptime using method: ctypes 2025-10-09 03:06:45 DEBUG cloudinit.util:util.py:1857 Unable to read uptime using method: ctypes Traceback (most recent call last): File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2205, in uptime uptime_str = str(time.time() - boottime()) ^^^^^^^^^^ File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2179, in boottime libc.sysctl( ^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 392, in __getattr__ func = self.__getitem__(name) ^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 397, in __getitem__ func = self._FuncPtr((name_or_ordinal, self)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: Symbol not found: sysctl ________________________________________________________________________________________________________________________________ TextKvpReporter.test_truncate_stale_kvp_file ________________________________________________________________________________________________________________________________ self = def test_truncate_stale_kvp_file(self): with open(self.tmp_file_path, "wb+") as f: kvp = {"key": "key1", "value": "value1"} data = struct.pack( "%ds%ds" % ( HyperVKvpReportingHandler.HV_KVP_EXCHANGE_MAX_KEY_SIZE, HyperVKvpReportingHandler.HV_KVP_EXCHANGE_MAX_VALUE_SIZE, ), kvp["key"].encode("utf-8"), kvp["value"].encode("utf-8"), ) f.write(data) # set the time ways back to make it look like # we had an old kvp file os.utime(self.tmp_file_path, (1000000, 1000000)) # reset this because the unit test framework # has already polluted the class variable HyperVKvpReportingHandler._already_truncated_pool_file = False > reporter = HyperVKvpReportingHandler(kvp_file_path=self.tmp_file_path) tests/unittests/reporting/test_reporting_hyperv.py:145: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cloudinit/reporting/handlers.py:202: in __init__ HyperVKvpReportingHandler._truncate_guest_pool_file( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , kvp_file = '/tmp/ci-TextKvpReporter.tfpyaxih/kvp_pool_file' @classmethod def _truncate_guest_pool_file(cls, kvp_file): """ Truncate the pool file if it has not been truncated since boot. This should be done exactly once for the file indicated by KVP_POOL_FILE_GUEST constant above. This method takes a filename so that we can use an arbitrary file during unit testing. Since KVP is a best-effort telemetry channel we only attempt to truncate the file once and only if the file has not been modified since boot. Additional truncation can lead to loss of existing KVPs. """ if cls._already_truncated_pool_file: return > boot_time = time.time() - float(util.uptime()) E ValueError: could not convert string to float: '??' cloudinit/reporting/handlers.py:232: ValueError --------------------------------------------------------------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:06:45 DEBUG cloudinit.util:util.py:2345 Writing to /tmp/ci-TextKvpReporter.tfpyaxih/kvp_pool_file - ab: [644] 0 bytes 2025-10-09 03:06:45 WARNING cloudinit.util:util.py:1856 Unable to read uptime using method: ctypes 2025-10-09 03:06:45 DEBUG cloudinit.util:util.py:1857 Unable to read uptime using method: ctypes Traceback (most recent call last): File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2205, in uptime uptime_str = str(time.time() - boottime()) ^^^^^^^^^^ File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2179, in boottime libc.sysctl( ^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 392, in __getattr__ func = self.__getitem__(name) ^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 397, in __getitem__ func = self._FuncPtr((name_or_ordinal, self)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: Symbol not found: sysctl ____________________________________________________________________________________________________________________________________ TextKvpReporter.test_unique_kvp_key _____________________________________________________________________________________________________________________________________ self = def test_unique_kvp_key(self): > reporter = HyperVKvpReportingHandler(kvp_file_path=self.tmp_file_path) tests/unittests/reporting/test_reporting_hyperv.py:267: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cloudinit/reporting/handlers.py:202: in __init__ HyperVKvpReportingHandler._truncate_guest_pool_file( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , kvp_file = '/tmp/ci-TextKvpReporter.2as350i1/kvp_pool_file' @classmethod def _truncate_guest_pool_file(cls, kvp_file): """ Truncate the pool file if it has not been truncated since boot. This should be done exactly once for the file indicated by KVP_POOL_FILE_GUEST constant above. This method takes a filename so that we can use an arbitrary file during unit testing. Since KVP is a best-effort telemetry channel we only attempt to truncate the file once and only if the file has not been modified since boot. Additional truncation can lead to loss of existing KVPs. """ if cls._already_truncated_pool_file: return > boot_time = time.time() - float(util.uptime()) E ValueError: could not convert string to float: '??' cloudinit/reporting/handlers.py:232: ValueError --------------------------------------------------------------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:06:45 DEBUG cloudinit.util:util.py:2345 Writing to /tmp/ci-TextKvpReporter.2as350i1/kvp_pool_file - ab: [644] 0 bytes 2025-10-09 03:06:45 WARNING cloudinit.util:util.py:1856 Unable to read uptime using method: ctypes 2025-10-09 03:06:45 DEBUG cloudinit.util:util.py:1857 Unable to read uptime using method: ctypes Traceback (most recent call last): File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2205, in uptime uptime_str = str(time.time() - boottime()) ^^^^^^^^^^ File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2179, in boottime libc.sysctl( ^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 392, in __getattr__ func = self.__getitem__(name) ^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 397, in __getitem__ func = self._FuncPtr((name_or_ordinal, self)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: Symbol not found: sysctl _______________________________________________________________________________________________________________________________________ TextKvpReporter.test_write_key _______________________________________________________________________________________________________________________________________ self = def test_write_key(self): > reporter = HyperVKvpReportingHandler(kvp_file_path=self.tmp_file_path) tests/unittests/reporting/test_reporting_hyperv.py:289: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cloudinit/reporting/handlers.py:202: in __init__ HyperVKvpReportingHandler._truncate_guest_pool_file( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , kvp_file = '/tmp/ci-TextKvpReporter.zi5of7yr/kvp_pool_file' @classmethod def _truncate_guest_pool_file(cls, kvp_file): """ Truncate the pool file if it has not been truncated since boot. This should be done exactly once for the file indicated by KVP_POOL_FILE_GUEST constant above. This method takes a filename so that we can use an arbitrary file during unit testing. Since KVP is a best-effort telemetry channel we only attempt to truncate the file once and only if the file has not been modified since boot. Additional truncation can lead to loss of existing KVPs. """ if cls._already_truncated_pool_file: return > boot_time = time.time() - float(util.uptime()) E ValueError: could not convert string to float: '??' cloudinit/reporting/handlers.py:232: ValueError --------------------------------------------------------------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:06:45 DEBUG cloudinit.util:util.py:2345 Writing to /tmp/ci-TextKvpReporter.zi5of7yr/kvp_pool_file - ab: [644] 0 bytes 2025-10-09 03:06:45 WARNING cloudinit.util:util.py:1856 Unable to read uptime using method: ctypes 2025-10-09 03:06:45 DEBUG cloudinit.util:util.py:1857 Unable to read uptime using method: ctypes Traceback (most recent call last): File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2205, in uptime uptime_str = str(time.time() - boottime()) ^^^^^^^^^^ File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2179, in boottime libc.sysctl( ^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 392, in __getattr__ func = self.__getitem__(name) ^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 397, in __getitem__ func = self._FuncPtr((name_or_ordinal, self)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: Symbol not found: sysctl __________________________________________________________________________________________________________________________________ TextKvpReporter.test_write_key_truncates __________________________________________________________________________________________________________________________________ self = def test_write_key_truncates(self): > reporter = HyperVKvpReportingHandler(kvp_file_path=self.tmp_file_path) tests/unittests/reporting/test_reporting_hyperv.py:296: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cloudinit/reporting/handlers.py:202: in __init__ HyperVKvpReportingHandler._truncate_guest_pool_file( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , kvp_file = '/tmp/ci-TextKvpReporter.9dxak_ys/kvp_pool_file' @classmethod def _truncate_guest_pool_file(cls, kvp_file): """ Truncate the pool file if it has not been truncated since boot. This should be done exactly once for the file indicated by KVP_POOL_FILE_GUEST constant above. This method takes a filename so that we can use an arbitrary file during unit testing. Since KVP is a best-effort telemetry channel we only attempt to truncate the file once and only if the file has not been modified since boot. Additional truncation can lead to loss of existing KVPs. """ if cls._already_truncated_pool_file: return > boot_time = time.time() - float(util.uptime()) E ValueError: could not convert string to float: '??' cloudinit/reporting/handlers.py:232: ValueError --------------------------------------------------------------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:06:45 DEBUG cloudinit.util:util.py:2345 Writing to /tmp/ci-TextKvpReporter.9dxak_ys/kvp_pool_file - ab: [644] 0 bytes 2025-10-09 03:06:45 WARNING cloudinit.util:util.py:1856 Unable to read uptime using method: ctypes 2025-10-09 03:06:45 DEBUG cloudinit.util:util.py:1857 Unable to read uptime using method: ctypes Traceback (most recent call last): File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2205, in uptime uptime_str = str(time.time() - boottime()) ^^^^^^^^^^ File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2179, in boottime libc.sysctl( ^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 392, in __getattr__ func = self.__getitem__(name) ^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 397, in __getitem__ func = self._FuncPtr((name_or_ordinal, self)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: Symbol not found: sysctl ________________________________________________________________________________________________________________________________ TestOpenNebulaDataSource.test_context_parser ________________________________________________________________________________________________________________________________ self = def test_context_parser(self): populate_context_dir(self.seed_dir, TEST_VARS) > results = ds.read_context_disk_dir(self.seed_dir, mock.Mock()) tests/unittests/sources/test_opennebula.py:170: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cloudinit/sources/DataSourceOpenNebula.py:428: in read_context_disk_dir context = parse_shell_config(content, asuser=asuser) cloudinit/sources/DataSourceOpenNebula.py:382: in parse_shell_config variable.split("=", maxsplit=1) for variable in shlex.split(before) /usr/lib/python3.12/shlex.py:313: in split return list(lex) /usr/lib/python3.12/shlex.py:300: in __next__ token = self.get_token() /usr/lib/python3.12/shlex.py:109: in get_token raw = self.read_token() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def read_token(self): quoted = False escapedstate = ' ' while True: if self.punctuation_chars and self._pushback_chars: nextchar = self._pushback_chars.pop() else: nextchar = self.instream.read(1) if nextchar == '\n': self.lineno += 1 if self.debug >= 3: print("shlex: in state %r I see character: %r" % (self.state, nextchar)) if self.state is None: self.token = '' # past end of file break elif self.state == ' ': if not nextchar: self.state = None # end of file break elif nextchar in self.whitespace: if self.debug >= 2: print("shlex: I see whitespace in whitespace state") if self.token or (self.posix and quoted): break # emit current token else: continue elif nextchar in self.commenters: self.instream.readline() self.lineno += 1 elif self.posix and nextchar in self.escape: escapedstate = 'a' self.state = nextchar elif nextchar in self.wordchars: self.token = nextchar self.state = 'a' elif nextchar in self.punctuation_chars: self.token = nextchar self.state = 'c' elif nextchar in self.quotes: if not self.posix: self.token = nextchar self.state = nextchar elif self.whitespace_split: self.token = nextchar self.state = 'a' else: self.token = nextchar if self.token or (self.posix and quoted): break # emit current token else: continue elif self.state in self.quotes: quoted = True if not nextchar: # end of file if self.debug >= 2: print("shlex: I see EOF in quotes state") # XXX what error should be raised here? > raise ValueError("No closing quotation") E ValueError: No closing quotation /usr/lib/python3.12/shlex.py:191: ValueError --------------------------------------------------------------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:07:00 DEBUG cloudinit.util:util.py:1613 Reading from /tmp/ci-TestOpenNebulaDataSource.88_ul0gk/seed/opennebula/context.sh (quiet=False) 2025-10-09 03:07:00 DEBUG cloudinit.util:util.py:1622 Read 262 bytes from /tmp/ci-TestOpenNebulaDataSource.88_ul0gk/seed/opennebula/context.sh 2025-10-09 03:07:00 DEBUG cloudinit.subp:subp.py:221 Running command ['sh', '-e'] with allowed return codes [0] (shell=False, capture=True) ___________________________________________________________________________________________________________________________________ TestOpenNebulaDataSource.test_get_data ___________________________________________________________________________________________________________________________________ self = def test_get_data(self): orig_find_devs_with = util.find_devs_with try: # dont' try to lookup for CDs util.find_devs_with = lambda n: [] # type: ignore populate_context_dir(self.seed_dir, {"KEY1": "val1"}) dsrc = self.ds(sys_cfg=self.sys_cfg, distro=None, paths=self.paths) with mock.patch(DS_PATH + ".pwd.getpwnam") as getpwnam: > ret = dsrc.get_data() tests/unittests/sources/test_opennebula.py:125: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cloudinit/sources/__init__.py:484: in get_data return_value = self._check_and_get_data() cloudinit/sources/__init__.py:416: in _check_and_get_data return self._get_data() cloudinit/sources/DataSourceOpenNebula.py:72: in _get_data results = read_context_disk_dir( cloudinit/sources/DataSourceOpenNebula.py:428: in read_context_disk_dir context = parse_shell_config(content, asuser=asuser) cloudinit/sources/DataSourceOpenNebula.py:382: in parse_shell_config variable.split("=", maxsplit=1) for variable in shlex.split(before) /usr/lib/python3.12/shlex.py:313: in split return list(lex) /usr/lib/python3.12/shlex.py:300: in __next__ token = self.get_token() /usr/lib/python3.12/shlex.py:109: in get_token raw = self.read_token() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def read_token(self): quoted = False escapedstate = ' ' while True: if self.punctuation_chars and self._pushback_chars: nextchar = self._pushback_chars.pop() else: nextchar = self.instream.read(1) if nextchar == '\n': self.lineno += 1 if self.debug >= 3: print("shlex: in state %r I see character: %r" % (self.state, nextchar)) if self.state is None: self.token = '' # past end of file break elif self.state == ' ': if not nextchar: self.state = None # end of file break elif nextchar in self.whitespace: if self.debug >= 2: print("shlex: I see whitespace in whitespace state") if self.token or (self.posix and quoted): break # emit current token else: continue elif nextchar in self.commenters: self.instream.readline() self.lineno += 1 elif self.posix and nextchar in self.escape: escapedstate = 'a' self.state = nextchar elif nextchar in self.wordchars: self.token = nextchar self.state = 'a' elif nextchar in self.punctuation_chars: self.token = nextchar self.state = 'c' elif nextchar in self.quotes: if not self.posix: self.token = nextchar self.state = nextchar elif self.whitespace_split: self.token = nextchar self.state = 'a' else: self.token = nextchar if self.token or (self.posix and quoted): break # emit current token else: continue elif self.state in self.quotes: quoted = True if not nextchar: # end of file if self.debug >= 2: print("shlex: I see EOF in quotes state") # XXX what error should be raised here? > raise ValueError("No closing quotation") E ValueError: No closing quotation /usr/lib/python3.12/shlex.py:191: ValueError --------------------------------------------------------------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:07:00 DEBUG cloudinit.sources:sources:412 Detected DataSourceOpenNebula [seed=None][dsmode=net] 2025-10-09 03:07:00 DEBUG cloudinit.util:util.py:1613 Reading from /tmp/ci-TestOpenNebulaDataSource.sa_jek9d/seed/opennebula/context.sh (quiet=False) 2025-10-09 03:07:00 DEBUG cloudinit.util:util.py:1622 Read 56 bytes from /tmp/ci-TestOpenNebulaDataSource.sa_jek9d/seed/opennebula/context.sh 2025-10-09 03:07:00 DEBUG cloudinit.subp:subp.py:221 Running command ['sh', '-e'] with allowed return codes [0] (shell=False, capture=True) ___________________________________________________________________________________________________________________________________ TestOpenNebulaDataSource.test_hostname ___________________________________________________________________________________________________________________________________ self = , m_get_phys_by_mac = @mock.patch(DS_PATH + ".get_physical_nics_by_mac") def test_hostname(self, m_get_phys_by_mac): for dev in ("eth0", "ens3"): m_get_phys_by_mac.return_value = {MACADDR: dev} for k in ( "SET_HOSTNAME", "HOSTNAME", "PUBLIC_IP", "IP_PUBLIC", "ETH0_IP", ): my_d = os.path.join(self.tmp, k) populate_context_dir(my_d, {k: PUBLIC_IP}) > results = ds.read_context_disk_dir(my_d, mock.Mock()) tests/unittests/sources/test_opennebula.py:238: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cloudinit/sources/DataSourceOpenNebula.py:428: in read_context_disk_dir context = parse_shell_config(content, asuser=asuser) cloudinit/sources/DataSourceOpenNebula.py:382: in parse_shell_config variable.split("=", maxsplit=1) for variable in shlex.split(before) /usr/lib/python3.12/shlex.py:313: in split return list(lex) /usr/lib/python3.12/shlex.py:300: in __next__ token = self.get_token() /usr/lib/python3.12/shlex.py:109: in get_token raw = self.read_token() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def read_token(self): quoted = False escapedstate = ' ' while True: if self.punctuation_chars and self._pushback_chars: nextchar = self._pushback_chars.pop() else: nextchar = self.instream.read(1) if nextchar == '\n': self.lineno += 1 if self.debug >= 3: print("shlex: in state %r I see character: %r" % (self.state, nextchar)) if self.state is None: self.token = '' # past end of file break elif self.state == ' ': if not nextchar: self.state = None # end of file break elif nextchar in self.whitespace: if self.debug >= 2: print("shlex: I see whitespace in whitespace state") if self.token or (self.posix and quoted): break # emit current token else: continue elif nextchar in self.commenters: self.instream.readline() self.lineno += 1 elif self.posix and nextchar in self.escape: escapedstate = 'a' self.state = nextchar elif nextchar in self.wordchars: self.token = nextchar self.state = 'a' elif nextchar in self.punctuation_chars: self.token = nextchar self.state = 'c' elif nextchar in self.quotes: if not self.posix: self.token = nextchar self.state = nextchar elif self.whitespace_split: self.token = nextchar self.state = 'a' else: self.token = nextchar if self.token or (self.posix and quoted): break # emit current token else: continue elif self.state in self.quotes: quoted = True if not nextchar: # end of file if self.debug >= 2: print("shlex: I see EOF in quotes state") # XXX what error should be raised here? > raise ValueError("No closing quotation") E ValueError: No closing quotation /usr/lib/python3.12/shlex.py:191: ValueError --------------------------------------------------------------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:07:00 DEBUG cloudinit.util:util.py:1613 Reading from /tmp/ci-TestOpenNebulaDataSource.5bdf5c8u/SET_HOSTNAME/context.sh (quiet=False) 2025-10-09 03:07:00 DEBUG cloudinit.util:util.py:1622 Read 68 bytes from /tmp/ci-TestOpenNebulaDataSource.5bdf5c8u/SET_HOSTNAME/context.sh 2025-10-09 03:07:00 DEBUG cloudinit.subp:subp.py:221 Running command ['sh', '-e'] with allowed return codes [0] (shell=False, capture=True) ______________________________________________________________________________________________________________________________ TestOpenNebulaDataSource.test_network_interfaces ______________________________________________________________________________________________________________________________ self = , m_get_phys_by_mac = @mock.patch(DS_PATH + ".get_physical_nics_by_mac") def test_network_interfaces(self, m_get_phys_by_mac): for dev in ("eth0", "ens3"): m_get_phys_by_mac.return_value = {MACADDR: dev} # without ETH0_MAC # for Older OpenNebula? populate_context_dir(self.seed_dir, {"ETH0_IP": IP_BY_MACADDR}) > results = ds.read_context_disk_dir(self.seed_dir, mock.Mock()) tests/unittests/sources/test_opennebula.py:254: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cloudinit/sources/DataSourceOpenNebula.py:428: in read_context_disk_dir context = parse_shell_config(content, asuser=asuser) cloudinit/sources/DataSourceOpenNebula.py:382: in parse_shell_config variable.split("=", maxsplit=1) for variable in shlex.split(before) /usr/lib/python3.12/shlex.py:313: in split return list(lex) /usr/lib/python3.12/shlex.py:300: in __next__ token = self.get_token() /usr/lib/python3.12/shlex.py:109: in get_token raw = self.read_token() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def read_token(self): quoted = False escapedstate = ' ' while True: if self.punctuation_chars and self._pushback_chars: nextchar = self._pushback_chars.pop() else: nextchar = self.instream.read(1) if nextchar == '\n': self.lineno += 1 if self.debug >= 3: print("shlex: in state %r I see character: %r" % (self.state, nextchar)) if self.state is None: self.token = '' # past end of file break elif self.state == ' ': if not nextchar: self.state = None # end of file break elif nextchar in self.whitespace: if self.debug >= 2: print("shlex: I see whitespace in whitespace state") if self.token or (self.posix and quoted): break # emit current token else: continue elif nextchar in self.commenters: self.instream.readline() self.lineno += 1 elif self.posix and nextchar in self.escape: escapedstate = 'a' self.state = nextchar elif nextchar in self.wordchars: self.token = nextchar self.state = 'a' elif nextchar in self.punctuation_chars: self.token = nextchar self.state = 'c' elif nextchar in self.quotes: if not self.posix: self.token = nextchar self.state = nextchar elif self.whitespace_split: self.token = nextchar self.state = 'a' else: self.token = nextchar if self.token or (self.posix and quoted): break # emit current token else: continue elif self.state in self.quotes: quoted = True if not nextchar: # end of file if self.debug >= 2: print("shlex: I see EOF in quotes state") # XXX what error should be raised here? > raise ValueError("No closing quotation") E ValueError: No closing quotation /usr/lib/python3.12/shlex.py:191: ValueError --------------------------------------------------------------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:07:00 DEBUG cloudinit.util:util.py:1613 Reading from /tmp/ci-TestOpenNebulaDataSource.6fg3fnst/seed/opennebula/context.sh (quiet=False) 2025-10-09 03:07:00 DEBUG cloudinit.util:util.py:1622 Read 64 bytes from /tmp/ci-TestOpenNebulaDataSource.6fg3fnst/seed/opennebula/context.sh 2025-10-09 03:07:00 DEBUG cloudinit.subp:subp.py:221 Running command ['sh', '-e'] with allowed return codes [0] (shell=False, capture=True) ___________________________________________________________________________________________________________________________ TestOpenNebulaDataSource.test_seed_dir_empty1_context ____________________________________________________________________________________________________________________________ self = def test_seed_dir_empty1_context(self): populate_dir(self.seed_dir, {"context.sh": ""}) > results = ds.read_context_disk_dir(self.seed_dir, mock.Mock()) tests/unittests/sources/test_opennebula.py:146: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cloudinit/sources/DataSourceOpenNebula.py:428: in read_context_disk_dir context = parse_shell_config(content, asuser=asuser) cloudinit/sources/DataSourceOpenNebula.py:382: in parse_shell_config variable.split("=", maxsplit=1) for variable in shlex.split(before) /usr/lib/python3.12/shlex.py:313: in split return list(lex) /usr/lib/python3.12/shlex.py:300: in __next__ token = self.get_token() /usr/lib/python3.12/shlex.py:109: in get_token raw = self.read_token() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def read_token(self): quoted = False escapedstate = ' ' while True: if self.punctuation_chars and self._pushback_chars: nextchar = self._pushback_chars.pop() else: nextchar = self.instream.read(1) if nextchar == '\n': self.lineno += 1 if self.debug >= 3: print("shlex: in state %r I see character: %r" % (self.state, nextchar)) if self.state is None: self.token = '' # past end of file break elif self.state == ' ': if not nextchar: self.state = None # end of file break elif nextchar in self.whitespace: if self.debug >= 2: print("shlex: I see whitespace in whitespace state") if self.token or (self.posix and quoted): break # emit current token else: continue elif nextchar in self.commenters: self.instream.readline() self.lineno += 1 elif self.posix and nextchar in self.escape: escapedstate = 'a' self.state = nextchar elif nextchar in self.wordchars: self.token = nextchar self.state = 'a' elif nextchar in self.punctuation_chars: self.token = nextchar self.state = 'c' elif nextchar in self.quotes: if not self.posix: self.token = nextchar self.state = nextchar elif self.whitespace_split: self.token = nextchar self.state = 'a' else: self.token = nextchar if self.token or (self.posix and quoted): break # emit current token else: continue elif self.state in self.quotes: quoted = True if not nextchar: # end of file if self.debug >= 2: print("shlex: I see EOF in quotes state") # XXX what error should be raised here? > raise ValueError("No closing quotation") E ValueError: No closing quotation /usr/lib/python3.12/shlex.py:191: ValueError --------------------------------------------------------------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:07:00 DEBUG cloudinit.util:util.py:1613 Reading from /tmp/ci-TestOpenNebulaDataSource.9xo_tkef/seed/opennebula/context.sh (quiet=False) 2025-10-09 03:07:00 DEBUG cloudinit.util:util.py:1622 Read 0 bytes from /tmp/ci-TestOpenNebulaDataSource.9xo_tkef/seed/opennebula/context.sh 2025-10-09 03:07:00 DEBUG cloudinit.subp:subp.py:221 Running command ['sh', '-e'] with allowed return codes [0] (shell=False, capture=True) ___________________________________________________________________________________________________________________________ TestOpenNebulaDataSource.test_seed_dir_empty2_context ____________________________________________________________________________________________________________________________ self = def test_seed_dir_empty2_context(self): populate_context_dir(self.seed_dir, {}) > results = ds.read_context_disk_dir(self.seed_dir, mock.Mock()) tests/unittests/sources/test_opennebula.py:153: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cloudinit/sources/DataSourceOpenNebula.py:428: in read_context_disk_dir context = parse_shell_config(content, asuser=asuser) cloudinit/sources/DataSourceOpenNebula.py:382: in parse_shell_config variable.split("=", maxsplit=1) for variable in shlex.split(before) /usr/lib/python3.12/shlex.py:313: in split return list(lex) /usr/lib/python3.12/shlex.py:300: in __next__ token = self.get_token() /usr/lib/python3.12/shlex.py:109: in get_token raw = self.read_token() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def read_token(self): quoted = False escapedstate = ' ' while True: if self.punctuation_chars and self._pushback_chars: nextchar = self._pushback_chars.pop() else: nextchar = self.instream.read(1) if nextchar == '\n': self.lineno += 1 if self.debug >= 3: print("shlex: in state %r I see character: %r" % (self.state, nextchar)) if self.state is None: self.token = '' # past end of file break elif self.state == ' ': if not nextchar: self.state = None # end of file break elif nextchar in self.whitespace: if self.debug >= 2: print("shlex: I see whitespace in whitespace state") if self.token or (self.posix and quoted): break # emit current token else: continue elif nextchar in self.commenters: self.instream.readline() self.lineno += 1 elif self.posix and nextchar in self.escape: escapedstate = 'a' self.state = nextchar elif nextchar in self.wordchars: self.token = nextchar self.state = 'a' elif nextchar in self.punctuation_chars: self.token = nextchar self.state = 'c' elif nextchar in self.quotes: if not self.posix: self.token = nextchar self.state = nextchar elif self.whitespace_split: self.token = nextchar self.state = 'a' else: self.token = nextchar if self.token or (self.posix and quoted): break # emit current token else: continue elif self.state in self.quotes: quoted = True if not nextchar: # end of file if self.debug >= 2: print("shlex: I see EOF in quotes state") # XXX what error should be raised here? > raise ValueError("No closing quotation") E ValueError: No closing quotation /usr/lib/python3.12/shlex.py:191: ValueError --------------------------------------------------------------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:07:00 DEBUG cloudinit.util:util.py:1613 Reading from /tmp/ci-TestOpenNebulaDataSource.24k3tg7t/seed/opennebula/context.sh (quiet=False) 2025-10-09 03:07:00 DEBUG cloudinit.util:util.py:1622 Read 44 bytes from /tmp/ci-TestOpenNebulaDataSource.24k3tg7t/seed/opennebula/context.sh 2025-10-09 03:07:00 DEBUG cloudinit.subp:subp.py:221 Running command ['sh', '-e'] with allowed return codes [0] (shell=False, capture=True) ___________________________________________________________________________________________________________________________________ TestOpenNebulaDataSource.test_ssh_key ____________________________________________________________________________________________________________________________________ self = def test_ssh_key(self): public_keys = ["first key", "second key"] for c in range(4): for k in ("SSH_KEY", "SSH_PUBLIC_KEY"): my_d = os.path.join(self.tmp, "%s-%i" % (k, c)) populate_context_dir(my_d, {k: "\n".join(public_keys)}) > results = ds.read_context_disk_dir(my_d, mock.Mock()) tests/unittests/sources/test_opennebula.py:181: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cloudinit/sources/DataSourceOpenNebula.py:428: in read_context_disk_dir context = parse_shell_config(content, asuser=asuser) cloudinit/sources/DataSourceOpenNebula.py:382: in parse_shell_config variable.split("=", maxsplit=1) for variable in shlex.split(before) /usr/lib/python3.12/shlex.py:313: in split return list(lex) /usr/lib/python3.12/shlex.py:300: in __next__ token = self.get_token() /usr/lib/python3.12/shlex.py:109: in get_token raw = self.read_token() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def read_token(self): quoted = False escapedstate = ' ' while True: if self.punctuation_chars and self._pushback_chars: nextchar = self._pushback_chars.pop() else: nextchar = self.instream.read(1) if nextchar == '\n': self.lineno += 1 if self.debug >= 3: print("shlex: in state %r I see character: %r" % (self.state, nextchar)) if self.state is None: self.token = '' # past end of file break elif self.state == ' ': if not nextchar: self.state = None # end of file break elif nextchar in self.whitespace: if self.debug >= 2: print("shlex: I see whitespace in whitespace state") if self.token or (self.posix and quoted): break # emit current token else: continue elif nextchar in self.commenters: self.instream.readline() self.lineno += 1 elif self.posix and nextchar in self.escape: escapedstate = 'a' self.state = nextchar elif nextchar in self.wordchars: self.token = nextchar self.state = 'a' elif nextchar in self.punctuation_chars: self.token = nextchar self.state = 'c' elif nextchar in self.quotes: if not self.posix: self.token = nextchar self.state = nextchar elif self.whitespace_split: self.token = nextchar self.state = 'a' else: self.token = nextchar if self.token or (self.posix and quoted): break # emit current token else: continue elif self.state in self.quotes: quoted = True if not nextchar: # end of file if self.debug >= 2: print("shlex: I see EOF in quotes state") # XXX what error should be raised here? > raise ValueError("No closing quotation") E ValueError: No closing quotation /usr/lib/python3.12/shlex.py:191: ValueError --------------------------------------------------------------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:07:00 DEBUG cloudinit.util:util.py:1613 Reading from /tmp/ci-TestOpenNebulaDataSource.3pb60whw/SSH_KEY-0/context.sh (quiet=False) 2025-10-09 03:07:00 DEBUG cloudinit.util:util.py:1622 Read 75 bytes from /tmp/ci-TestOpenNebulaDataSource.3pb60whw/SSH_KEY-0/context.sh 2025-10-09 03:07:00 DEBUG cloudinit.subp:subp.py:221 Running command ['sh', '-e'] with allowed return codes [0] (shell=False, capture=True) __________________________________________________________________________________________________________________________ TestOpenNebulaDataSource.test_user_data_base64_encoding ___________________________________________________________________________________________________________________________ self = def test_user_data_base64_encoding(self): for k in ("USER_DATA", "USERDATA"): my_d = os.path.join(self.tmp, k) populate_context_dir( my_d, { k: atomic_helper.b64e(USER_DATA), "USERDATA_ENCODING": "base64", }, ) > results = ds.read_context_disk_dir(my_d, mock.Mock()) tests/unittests/sources/test_opennebula.py:220: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cloudinit/sources/DataSourceOpenNebula.py:428: in read_context_disk_dir context = parse_shell_config(content, asuser=asuser) cloudinit/sources/DataSourceOpenNebula.py:382: in parse_shell_config variable.split("=", maxsplit=1) for variable in shlex.split(before) /usr/lib/python3.12/shlex.py:313: in split return list(lex) /usr/lib/python3.12/shlex.py:300: in __next__ token = self.get_token() /usr/lib/python3.12/shlex.py:109: in get_token raw = self.read_token() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def read_token(self): quoted = False escapedstate = ' ' while True: if self.punctuation_chars and self._pushback_chars: nextchar = self._pushback_chars.pop() else: nextchar = self.instream.read(1) if nextchar == '\n': self.lineno += 1 if self.debug >= 3: print("shlex: in state %r I see character: %r" % (self.state, nextchar)) if self.state is None: self.token = '' # past end of file break elif self.state == ' ': if not nextchar: self.state = None # end of file break elif nextchar in self.whitespace: if self.debug >= 2: print("shlex: I see whitespace in whitespace state") if self.token or (self.posix and quoted): break # emit current token else: continue elif nextchar in self.commenters: self.instream.readline() self.lineno += 1 elif self.posix and nextchar in self.escape: escapedstate = 'a' self.state = nextchar elif nextchar in self.wordchars: self.token = nextchar self.state = 'a' elif nextchar in self.punctuation_chars: self.token = nextchar self.state = 'c' elif nextchar in self.quotes: if not self.posix: self.token = nextchar self.state = nextchar elif self.whitespace_split: self.token = nextchar self.state = 'a' else: self.token = nextchar if self.token or (self.posix and quoted): break # emit current token else: continue elif self.state in self.quotes: quoted = True if not nextchar: # end of file if self.debug >= 2: print("shlex: I see EOF in quotes state") # XXX what error should be raised here? > raise ValueError("No closing quotation") E ValueError: No closing quotation /usr/lib/python3.12/shlex.py:191: ValueError --------------------------------------------------------------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:07:00 DEBUG cloudinit.util:util.py:1613 Reading from /tmp/ci-TestOpenNebulaDataSource.jdzzop_1/USER_DATA/context.sh (quiet=False) 2025-10-09 03:07:00 DEBUG cloudinit.util:util.py:1622 Read 128 bytes from /tmp/ci-TestOpenNebulaDataSource.jdzzop_1/USER_DATA/context.sh 2025-10-09 03:07:00 DEBUG cloudinit.subp:subp.py:221 Running command ['sh', '-e'] with allowed return codes [0] (shell=False, capture=True) ____________________________________________________________________________________________________________________ TestOpenNebulaDataSource.test_user_data_encoding_required_for_decode ____________________________________________________________________________________________________________________ self = def test_user_data_encoding_required_for_decode(self): b64userdata = atomic_helper.b64e(USER_DATA) for k in ("USER_DATA", "USERDATA"): my_d = os.path.join(self.tmp, k) populate_context_dir(my_d, {k: b64userdata}) > results = ds.read_context_disk_dir(my_d, mock.Mock()) tests/unittests/sources/test_opennebula.py:205: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cloudinit/sources/DataSourceOpenNebula.py:428: in read_context_disk_dir context = parse_shell_config(content, asuser=asuser) cloudinit/sources/DataSourceOpenNebula.py:382: in parse_shell_config variable.split("=", maxsplit=1) for variable in shlex.split(before) /usr/lib/python3.12/shlex.py:313: in split return list(lex) /usr/lib/python3.12/shlex.py:300: in __next__ token = self.get_token() /usr/lib/python3.12/shlex.py:109: in get_token raw = self.read_token() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def read_token(self): quoted = False escapedstate = ' ' while True: if self.punctuation_chars and self._pushback_chars: nextchar = self._pushback_chars.pop() else: nextchar = self.instream.read(1) if nextchar == '\n': self.lineno += 1 if self.debug >= 3: print("shlex: in state %r I see character: %r" % (self.state, nextchar)) if self.state is None: self.token = '' # past end of file break elif self.state == ' ': if not nextchar: self.state = None # end of file break elif nextchar in self.whitespace: if self.debug >= 2: print("shlex: I see whitespace in whitespace state") if self.token or (self.posix and quoted): break # emit current token else: continue elif nextchar in self.commenters: self.instream.readline() self.lineno += 1 elif self.posix and nextchar in self.escape: escapedstate = 'a' self.state = nextchar elif nextchar in self.wordchars: self.token = nextchar self.state = 'a' elif nextchar in self.punctuation_chars: self.token = nextchar self.state = 'c' elif nextchar in self.quotes: if not self.posix: self.token = nextchar self.state = nextchar elif self.whitespace_split: self.token = nextchar self.state = 'a' else: self.token = nextchar if self.token or (self.posix and quoted): break # emit current token else: continue elif self.state in self.quotes: quoted = True if not nextchar: # end of file if self.debug >= 2: print("shlex: I see EOF in quotes state") # XXX what error should be raised here? > raise ValueError("No closing quotation") E ValueError: No closing quotation /usr/lib/python3.12/shlex.py:191: ValueError --------------------------------------------------------------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:07:00 DEBUG cloudinit.util:util.py:1613 Reading from /tmp/ci-TestOpenNebulaDataSource.k98wkuz_/USER_DATA/context.sh (quiet=False) 2025-10-09 03:07:00 DEBUG cloudinit.util:util.py:1622 Read 101 bytes from /tmp/ci-TestOpenNebulaDataSource.k98wkuz_/USER_DATA/context.sh 2025-10-09 03:07:00 DEBUG cloudinit.subp:subp.py:221 Running command ['sh', '-e'] with allowed return codes [0] (shell=False, capture=True) _______________________________________________________________________________________________________________________________ TestOpenNebulaDataSource.test_user_data_plain ________________________________________________________________________________________________________________________________ self = def test_user_data_plain(self): for k in ("USER_DATA", "USERDATA"): my_d = os.path.join(self.tmp, k) populate_context_dir(my_d, {k: USER_DATA, "USERDATA_ENCODING": ""}) > results = ds.read_context_disk_dir(my_d, mock.Mock()) tests/unittests/sources/test_opennebula.py:195: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cloudinit/sources/DataSourceOpenNebula.py:428: in read_context_disk_dir context = parse_shell_config(content, asuser=asuser) cloudinit/sources/DataSourceOpenNebula.py:382: in parse_shell_config variable.split("=", maxsplit=1) for variable in shlex.split(before) /usr/lib/python3.12/shlex.py:313: in split return list(lex) /usr/lib/python3.12/shlex.py:300: in __next__ token = self.get_token() /usr/lib/python3.12/shlex.py:109: in get_token raw = self.read_token() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def read_token(self): quoted = False escapedstate = ' ' while True: if self.punctuation_chars and self._pushback_chars: nextchar = self._pushback_chars.pop() else: nextchar = self.instream.read(1) if nextchar == '\n': self.lineno += 1 if self.debug >= 3: print("shlex: in state %r I see character: %r" % (self.state, nextchar)) if self.state is None: self.token = '' # past end of file break elif self.state == ' ': if not nextchar: self.state = None # end of file break elif nextchar in self.whitespace: if self.debug >= 2: print("shlex: I see whitespace in whitespace state") if self.token or (self.posix and quoted): break # emit current token else: continue elif nextchar in self.commenters: self.instream.readline() self.lineno += 1 elif self.posix and nextchar in self.escape: escapedstate = 'a' self.state = nextchar elif nextchar in self.wordchars: self.token = nextchar self.state = 'a' elif nextchar in self.punctuation_chars: self.token = nextchar self.state = 'c' elif nextchar in self.quotes: if not self.posix: self.token = nextchar self.state = nextchar elif self.whitespace_split: self.token = nextchar self.state = 'a' else: self.token = nextchar if self.token or (self.posix and quoted): break # emit current token else: continue elif self.state in self.quotes: quoted = True if not nextchar: # end of file if self.debug >= 2: print("shlex: I see EOF in quotes state") # XXX what error should be raised here? > raise ValueError("No closing quotation") E ValueError: No closing quotation /usr/lib/python3.12/shlex.py:191: ValueError --------------------------------------------------------------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:07:00 DEBUG cloudinit.util:util.py:1613 Reading from /tmp/ci-TestOpenNebulaDataSource.zaiuaeuc/USER_DATA/context.sh (quiet=False) 2025-10-09 03:07:00 DEBUG cloudinit.util:util.py:1622 Read 109 bytes from /tmp/ci-TestOpenNebulaDataSource.zaiuaeuc/USER_DATA/context.sh 2025-10-09 03:07:00 DEBUG cloudinit.subp:subp.py:221 Running command ['sh', '-e'] with allowed return codes [0] (shell=False, capture=True) ____________________________________________________________________________________________________________________________________ TestParseShellConfig.test_no_seconds ____________________________________________________________________________________________________________________________________ self = @pytest.mark.allow_subp_for("bash", "sh") def test_no_seconds(self): cfg = "\n".join(["foo=bar", "SECONDS=2", "xx=foo"]) # we could test 'sleep 2', but that would make the test run slower. > ret = ds.parse_shell_config(cfg) tests/unittests/sources/test_opennebula.py:1030: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cloudinit/sources/DataSourceOpenNebula.py:382: in parse_shell_config variable.split("=", maxsplit=1) for variable in shlex.split(before) /usr/lib/python3.12/shlex.py:313: in split return list(lex) /usr/lib/python3.12/shlex.py:300: in __next__ token = self.get_token() /usr/lib/python3.12/shlex.py:109: in get_token raw = self.read_token() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def read_token(self): quoted = False escapedstate = ' ' while True: if self.punctuation_chars and self._pushback_chars: nextchar = self._pushback_chars.pop() else: nextchar = self.instream.read(1) if nextchar == '\n': self.lineno += 1 if self.debug >= 3: print("shlex: in state %r I see character: %r" % (self.state, nextchar)) if self.state is None: self.token = '' # past end of file break elif self.state == ' ': if not nextchar: self.state = None # end of file break elif nextchar in self.whitespace: if self.debug >= 2: print("shlex: I see whitespace in whitespace state") if self.token or (self.posix and quoted): break # emit current token else: continue elif nextchar in self.commenters: self.instream.readline() self.lineno += 1 elif self.posix and nextchar in self.escape: escapedstate = 'a' self.state = nextchar elif nextchar in self.wordchars: self.token = nextchar self.state = 'a' elif nextchar in self.punctuation_chars: self.token = nextchar self.state = 'c' elif nextchar in self.quotes: if not self.posix: self.token = nextchar self.state = nextchar elif self.whitespace_split: self.token = nextchar self.state = 'a' else: self.token = nextchar if self.token or (self.posix and quoted): break # emit current token else: continue elif self.state in self.quotes: quoted = True if not nextchar: # end of file if self.debug >= 2: print("shlex: I see EOF in quotes state") # XXX what error should be raised here? > raise ValueError("No closing quotation") E ValueError: No closing quotation /usr/lib/python3.12/shlex.py:191: ValueError --------------------------------------------------------------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:07:00 DEBUG cloudinit.subp:subp.py:221 Running command ['sh', '-e'] with allowed return codes [0] (shell=False, capture=True) ______________________________________________________________________________________________________________________ TestCLI.test_status_wrapper_init_local_writes_fresh_status_info _______________________________________________________________________________________________________________________ self = , m_json = mock_status_wrapper = Tmpdir(tmpdir=local('/tmp/pytest-of-udu/pytest-0/test_status_wrapper_init_local0'), link_d='/tmp/pytest-of-udu/pytest-0/test_status_wrapper_init_local0/link', data_d='/tmp/pytest-of-udu/pytest-0/test_status_wrapper_init_local0/data') @mock.patch("cloudinit.cmd.main.atomic_helper.write_json") def test_status_wrapper_init_local_writes_fresh_status_info( self, m_json, mock_status_wrapper, ): """When running in init-local mode, status_wrapper writes status.json. Old status and results artifacts are also removed. """ data_d = mock_status_wrapper.data_d link_d = mock_status_wrapper.link_d # Write old artifacts which will be removed or updated. for _dir in data_d, link_d: test_helpers.populate_dir( str(_dir), {"status.json": "old", "result.json": "old"} ) def myaction(name, args): # Return an error to watch status capture them return "SomeDatasource", ["an error"] myargs = FakeArgs(("ignored_name", myaction), True, "bogusmode") > cli.status_wrapper("init", myargs) /tmp/pytest-of-udu/pytest-0/test_status_wrapper_init_local0/link:104: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'init', args = FakeArgs(action=('ignored_name', .myaction at 0x7ee69d6b7a60>), local=True, mode='bogusmode') > ??? E ValueError: could not convert string to float: '??' /tmp/pytest-of-udu/pytest-0/test_status_wrapper_init_local0/link:818: ValueError --------------------------------------------------------------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:07:05 DEBUG cloudinit.util:util.py:2130 Attempting to remove /tmp/pytest-of-udu/pytest-0/test_status_wrapper_init_local0/link/status.json 2025-10-09 03:07:05 DEBUG cloudinit.util:util.py:2130 Attempting to remove /tmp/pytest-of-udu/pytest-0/test_status_wrapper_init_local0/link/result.json 2025-10-09 03:07:05 DEBUG cloudinit.util:util.py:2130 Attempting to remove /tmp/pytest-of-udu/pytest-0/test_status_wrapper_init_local0/data/status.json 2025-10-09 03:07:05 DEBUG cloudinit.util:util.py:2130 Attempting to remove /tmp/pytest-of-udu/pytest-0/test_status_wrapper_init_local0/data/result.json 2025-10-09 03:07:05 WARNING cloudinit.util:util.py:1856 Unable to read uptime using method: ctypes 2025-10-09 03:07:05 DEBUG cloudinit.util:util.py:1857 Unable to read uptime using method: ctypes Traceback (most recent call last): File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2205, in uptime uptime_str = str(time.time() - boottime()) ^^^^^^^^^^ File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2179, in boottime libc.sysctl( ^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 392, in __getattr__ func = self.__getitem__(name) ^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 397, in __getitem__ func = self._FuncPtr((name_or_ordinal, self)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: Symbol not found: sysctl ___________________________________________________________________________________________________________________________ TestCLI.test_status_wrapper_init_local_honor_cloud_dir ___________________________________________________________________________________________________________________________ self = , m_json = , mocker = mock_status_wrapper = Tmpdir(tmpdir=local('/tmp/pytest-of-udu/pytest-0/test_status_wrapper_init_local1'), link_d='/tmp/pytest-of-udu/pytest-0/test_status_wrapper_init_local1/link', data_d='/tmp/pytest-of-udu/pytest-0/test_status_wrapper_init_local1/data') @mock.patch("cloudinit.cmd.main.atomic_helper.write_json") def test_status_wrapper_init_local_honor_cloud_dir( self, m_json, mocker, mock_status_wrapper ): """When running in init-local mode, status_wrapper honors cloud_dir.""" cloud_dir = mock_status_wrapper.tmpdir.join("cloud") paths = helpers.Paths({"cloud_dir": str(cloud_dir)}) mocker.patch( "cloudinit.config.schema.read_cfg_paths", return_value=paths ) data_d = mock_status_wrapper.data_d link_d = mock_status_wrapper.link_d def myaction(name, args): # Return an error to watch status capture them return "SomeDatasource", ["an_error"] myargs = FakeArgs(("ignored_name", myaction), True, "bogusmode") > cli.status_wrapper("init", myargs) # No explicit data_d /tmp/pytest-of-udu/pytest-0/test_status_wrapper_init_local1/link:142: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'init', args = FakeArgs(action=('ignored_name', .myaction at 0x7ee69627e340>), local=True, mode='bogusmode') > ??? E ValueError: could not convert string to float: '??' /tmp/pytest-of-udu/pytest-0/test_status_wrapper_init_local1/link:818: ValueError --------------------------------------------------------------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:07:05 DEBUG cloudinit.util:util.py:2130 Attempting to remove /tmp/pytest-of-udu/pytest-0/test_status_wrapper_init_local1/link/status.json 2025-10-09 03:07:05 DEBUG cloudinit.util:util.py:2130 Attempting to remove /tmp/pytest-of-udu/pytest-0/test_status_wrapper_init_local1/link/result.json 2025-10-09 03:07:05 DEBUG cloudinit.util:util.py:2130 Attempting to remove /tmp/pytest-of-udu/pytest-0/test_status_wrapper_init_local1/data/status.json 2025-10-09 03:07:05 DEBUG cloudinit.util:util.py:2130 Attempting to remove /tmp/pytest-of-udu/pytest-0/test_status_wrapper_init_local1/data/result.json 2025-10-09 03:07:05 WARNING cloudinit.util:util.py:1856 Unable to read uptime using method: ctypes 2025-10-09 03:07:05 DEBUG cloudinit.util:util.py:1857 Unable to read uptime using method: ctypes Traceback (most recent call last): File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2205, in uptime uptime_str = str(time.time() - boottime()) ^^^^^^^^^^ File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2179, in boottime libc.sysctl( ^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 392, in __getattr__ func = self.__getitem__(name) ^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 397, in __getitem__ func = self._FuncPtr((name_or_ordinal, self)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: Symbol not found: sysctl ___________________________________________________________________________________________________________________________ TestSignalHandling.test_status_wrapper_signal_sys_exit ___________________________________________________________________________________________________________________________ self = , m_json = , mocker = mock_status_wrapper = Tmpdir(tmpdir=local('/tmp/pytest-of-udu/pytest-0/test_status_wrapper_signal_sys0'), link_d='/tmp/pytest-of-udu/pytest-0/test_status_wrapper_signal_sys0/link', data_d='/tmp/pytest-of-udu/pytest-0/test_status_wrapper_signal_sys0/data') @mock.patch("cloudinit.cmd.main.atomic_helper.write_json") def test_status_wrapper_signal_sys_exit( self, m_json, mocker, mock_status_wrapper, ): """make sure that when sys.exit(N) is called, the correct code is returned """ for code in [1, 2, 3, 4]: > rc = cli.status_wrapper( "init", FakeArgs( ( None, # silence pylint false positive # https://github.com/pylint-dev/pylint/issues/9557 lambda *_: sys.exit(code), # pylint: disable=W0640 ), False, "bogusmode", ), ) /tmp/pytest-of-udu/pytest-0/test_status_wrapper_signal_sys0/link:429: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'init', args = FakeArgs(action=(None, . at 0x7ee69627fe20>), local=False, mode='bogusmode') > ??? E ValueError: could not convert string to float: '??' /tmp/pytest-of-udu/pytest-0/test_status_wrapper_signal_sys0/link:818: ValueError --------------------------------------------------------------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:07:05 DEBUG cloudinit.util:util.py:1613 Reading from /tmp/pytest-of-udu/pytest-0/test_status_wrapper_signal_sys0/data/status.json (quiet=False) 2025-10-09 03:07:05 WARNING cloudinit.util:util.py:1856 Unable to read uptime using method: ctypes 2025-10-09 03:07:05 DEBUG cloudinit.util:util.py:1857 Unable to read uptime using method: ctypes Traceback (most recent call last): File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2205, in uptime uptime_str = str(time.time() - boottime()) ^^^^^^^^^^ File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2179, in boottime libc.sysctl( ^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 392, in __getattr__ func = self.__getitem__(name) ^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 397, in __getitem__ func = self._FuncPtr((name_or_ordinal, self)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: Symbol not found: sysctl _________________________________________________________________________________________________________________________ TestSignalHandling.test_status_wrapper_no_signal_sys_exit __________________________________________________________________________________________________________________________ self = , m_json = mock_status_wrapper = Tmpdir(tmpdir=local('/tmp/pytest-of-udu/pytest-0/test_status_wrapper_no_signal_0'), link_d='/tmp/pytest-of-udu/pytest-0/test_status_wrapper_no_signal_0/link', data_d='/tmp/pytest-of-udu/pytest-0/test_status_wrapper_no_signal_0/data') @mock.patch("cloudinit.cmd.main.atomic_helper.write_json") def test_status_wrapper_no_signal_sys_exit( self, m_json, mock_status_wrapper, ): """if sys.exit(0) is called, make sure that cloud-init doesn't log a warning""" # call status_wrapper() with the required args > rc = cli.status_wrapper( "init", FakeArgs( ( None, lambda *_: sys.exit(0), ), False, "bogusmode", ), ) /tmp/pytest-of-udu/pytest-0/test_status_wrapper_no_signal_0/link:459: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'init', args = FakeArgs(action=(None, . at 0x7ee695d10e00>), local=False, mode='bogusmode') > ??? E ValueError: could not convert string to float: '??' /tmp/pytest-of-udu/pytest-0/test_status_wrapper_no_signal_0/link:818: ValueError --------------------------------------------------------------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:07:05 DEBUG cloudinit.util:util.py:1613 Reading from /tmp/pytest-of-udu/pytest-0/test_status_wrapper_no_signal_0/data/status.json (quiet=False) 2025-10-09 03:07:05 WARNING cloudinit.util:util.py:1856 Unable to read uptime using method: ctypes 2025-10-09 03:07:05 DEBUG cloudinit.util:util.py:1857 Unable to read uptime using method: ctypes Traceback (most recent call last): File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2205, in uptime uptime_str = str(time.time() - boottime()) ^^^^^^^^^^ File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2179, in boottime libc.sysctl( ^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 392, in __getattr__ func = self.__getitem__(name) ^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 397, in __getitem__ func = self._FuncPtr((name_or_ordinal, self)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: Symbol not found: sysctl ___________________________________________________________________________________________________________________________ TestSignalHandling.test_status_wrapper_signal_warnings ___________________________________________________________________________________________________________________________ self = , m_json = mock_status_wrapper = Tmpdir(tmpdir=local('/tmp/pytest-of-udu/pytest-0/test_status_wrapper_signal_war0'), link_d='/tmp/pytest-of-udu/pytest-0/test_status_wrapper_signal_war0/link', data_d='/tmp/pytest-of-udu/pytest-0/test_status_wrapper_signal_war0/data') @mock.patch("cloudinit.cmd.main.atomic_helper.write_json") def test_status_wrapper_signal_warnings( self, m_json, mock_status_wrapper, ): """If a stage is started and status.json already has a start time but no end time for that stage, this is an unknown state - make sure that a warning is logged. """ # Write a status.json to the mocked temporary directory for dir in mock_status_wrapper.data_d, mock_status_wrapper.link_d: test_helpers.populate_dir( str(dir), { "status.json": json.dumps( { "v1": { "stage": "init", "datasource": ( "DataSourceNoCloud " "[seed=/var/.../seed/nocloud-net]" "[dsmode=net]" ), "init": { "errors": [], "recoverable_errors": {}, "start": 124.567, "finished": None, }, "init-local": { "errors": [], "recoverable_errors": {}, "start": 100.0, "finished": 100.00001, }, "modules-config": { "errors": [], "recoverable_errors": {}, "start": None, "finished": None, }, "modules-final": { "errors": [], "recoverable_errors": {}, "start": None, "finished": None, }, } } ) }, ) # call status_wrapper() with the required args > cli.status_wrapper( "init", FakeArgs( ( None, lambda *_: ("SomeDataSource", []), ), False, "bogusmode", ), ) /tmp/pytest-of-udu/pytest-0/test_status_wrapper_signal_war0/link:528: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ name = 'init', args = FakeArgs(action=(None, . at 0x7ee695d12de0>), local=False, mode='bogusmode') > ??? E ValueError: could not convert string to float: '??' /tmp/pytest-of-udu/pytest-0/test_status_wrapper_signal_war0/link:818: ValueError --------------------------------------------------------------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:07:05 DEBUG cloudinit.util:util.py:1613 Reading from /tmp/pytest-of-udu/pytest-0/test_status_wrapper_signal_war0/data/status.json (quiet=False) 2025-10-09 03:07:05 DEBUG cloudinit.util:util.py:1622 Read 471 bytes from /tmp/pytest-of-udu/pytest-0/test_status_wrapper_signal_war0/data/status.json 2025-10-09 03:07:05 WARNING cloudinit.cmd.main:main.py:813 Unexpected start time found for Network Stage. Was this stage restarted? 2025-10-09 03:07:05 WARNING cloudinit.util:util.py:1856 Unable to read uptime using method: ctypes 2025-10-09 03:07:05 DEBUG cloudinit.util:util.py:1857 Unable to read uptime using method: ctypes Traceback (most recent call last): File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2205, in uptime uptime_str = str(time.time() - boottime()) ^^^^^^^^^^ File "/home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/util.py", line 2179, in boottime libc.sysctl( ^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 392, in __getattr__ func = self.__getitem__(name) ^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/ctypes/__init__.py", line 397, in __getitem__ func = self._FuncPtr((name_or_ordinal, self)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: Symbol not found: sysctl __________________________________________________________________________________________________________________________________ TestGetProcPpid.test_get_proc_pgrp_linux __________________________________________________________________________________________________________________________________ self = @skipIf(not util.is_Linux(), "/proc/$pid/stat is not useful on not-Linux") def test_get_proc_pgrp_linux(self): """get_proc_ppid returns correct parent pid value.""" > self.assertEqual(os.getpgid(0), Distro.get_proc_pgid(os.getpid())) E AssertionError: 174633 != None tests/unittests/test_util.py:2927: AssertionError -------------------------------------------------------------------------------------------------------------------------------------------- Captured stdout call -------------------------------------------------------------------------------------------------------------------------------------------- FALLBACK: 2025-10-09 03:07:15,634 - util.py[DEBUG]: Reading from /proc/174853/stat (quiet=True) FALLBACK: 2025-10-09 03:07:15,634 - util.py[DEBUG]: Read 0 bytes from /proc/174853/stat FALLBACK: 2025-10-09 03:07:15,634 - distros[WARNING]: /proc/174853/stat has an invalid contents [] --------------------------------------------------------------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:07:15 DEBUG cloudinit.util:util.py:1613 Reading from /proc/174853/stat (quiet=True) 2025-10-09 03:07:15 DEBUG cloudinit.util:util.py:1622 Read 0 bytes from /proc/174853/stat 2025-10-09 03:07:15 WARNING cloudinit.distros:distros:1491 /proc/174853/stat has an invalid contents [] __________________________________________________________________________________________________________________________________ TestGetProcPpid.test_get_proc_ppid_linux __________________________________________________________________________________________________________________________________ self = @skipIf(not util.is_Linux(), "/proc/$pid/stat is not useful on not-Linux") def test_get_proc_ppid_linux(self): """get_proc_ppid returns correct parent pid value.""" my_pid = os.getpid() my_ppid = os.getppid() > self.assertEqual(my_ppid, Distro.get_proc_ppid(my_pid)) E AssertionError: 174642 != None tests/unittests/test_util.py:2922: AssertionError -------------------------------------------------------------------------------------------------------------------------------------------- Captured stdout call -------------------------------------------------------------------------------------------------------------------------------------------- FALLBACK: 2025-10-09 03:07:15,662 - util.py[DEBUG]: Reading from /proc/174853/stat (quiet=True) FALLBACK: 2025-10-09 03:07:15,662 - util.py[DEBUG]: Read 0 bytes from /proc/174853/stat FALLBACK: 2025-10-09 03:07:15,662 - distros[WARNING]: /proc/174853/stat has an invalid contents [] --------------------------------------------------------------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:07:15 DEBUG cloudinit.util:util.py:1613 Reading from /proc/174853/stat (quiet=True) 2025-10-09 03:07:15 DEBUG cloudinit.util:util.py:1622 Read 0 bytes from /proc/174853/stat 2025-10-09 03:07:15 WARNING cloudinit.distros:distros:1491 /proc/174853/stat has an invalid contents [] ___________________________________________________________________________________________________________________________________ TestGetProcPpid.test_get_proc_ppid_ps ____________________________________________________________________________________________________________________________________ self = @pytest.mark.allow_subp_for("ps") def test_get_proc_ppid_ps(self): """get_proc_ppid returns correct parent pid value.""" my_pid = os.getpid() my_ppid = os.getppid() > self.assertEqual(my_ppid, Distro.get_proc_ppid(my_pid)) E AssertionError: 174642 != None tests/unittests/test_util.py:2934: AssertionError -------------------------------------------------------------------------------------------------------------------------------------------- Captured stdout call -------------------------------------------------------------------------------------------------------------------------------------------- FALLBACK: 2025-10-09 03:07:15,691 - util.py[DEBUG]: Reading from /proc/174853/stat (quiet=True) FALLBACK: 2025-10-09 03:07:15,691 - util.py[DEBUG]: Read 0 bytes from /proc/174853/stat FALLBACK: 2025-10-09 03:07:15,691 - distros[WARNING]: /proc/174853/stat has an invalid contents [] --------------------------------------------------------------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------------------------------------------------------------- 2025-10-09 03:07:15 DEBUG cloudinit.util:util.py:1613 Reading from /proc/174853/stat (quiet=True) 2025-10-09 03:07:15 DEBUG cloudinit.util:util.py:1622 Read 0 bytes from /proc/174853/stat 2025-10-09 03:07:15 WARNING cloudinit.distros:distros:1491 /proc/174853/stat has an invalid contents [] ============================================================================================================================================== warnings summary ============================================================================================================================================== cloudinit/sources/DataSourceAzure.py:52 /home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/sources/DataSourceAzure.py:52: DeprecationWarning: 'crypt' is deprecated and slated for removal in Python 3.13 import crypt # pylint: disable=W4901 tests/unittests/config/test_cc_ubuntu_pro.py:456 /home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/tests/unittests/config/test_cc_ubuntu_pro.py:456: DeprecationWarning: Accessing jsonschema.__version__ is deprecated and will be removed in a future release. Use importlib.metadata directly to query for jsonschema's version. getattr(jsonschema, "__version__", "999") tests/unittests/distros/package_management/test_apt.py:122 /home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/tests/unittests/distros/package_management/test_apt.py:122: PytestCollectionWarning: cannot collect test class 'TestUpdatePackageSources' because it has a __init__ constructor (from: tests/unittests/distros/package_management/test_apt.py) @mock.patch.object( tests/unittests/analyze/test_boot.py::TestAnalyzeBoot::test_boot_invalid_distro tests/unittests/analyze/test_boot.py::TestAnalyzeBoot::test_container_no_ci_log_line tests/unittests/analyze/test_boot.py::TestAnalyzeBoot::test_container_ci_log_line /home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/analyze/__init__.py:131: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC). kernel_start_timestamp = datetime.utcfromtimestamp(kernel_start) tests/unittests/analyze/test_boot.py::TestAnalyzeBoot::test_boot_invalid_distro tests/unittests/analyze/test_boot.py::TestAnalyzeBoot::test_container_no_ci_log_line tests/unittests/analyze/test_boot.py::TestAnalyzeBoot::test_container_ci_log_line /home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/analyze/__init__.py:132: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC). kernel_end_timestamp = datetime.utcfromtimestamp(kernel_end) tests/unittests/analyze/test_boot.py::TestAnalyzeBoot::test_boot_invalid_distro tests/unittests/analyze/test_boot.py::TestAnalyzeBoot::test_container_no_ci_log_line tests/unittests/analyze/test_boot.py::TestAnalyzeBoot::test_container_ci_log_line /home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/analyze/__init__.py:133: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC). ci_sysd_start_timestamp = datetime.utcfromtimestamp(ci_sysd_start) tests/unittests/analyze/test_boot.py::TestAnalyzeBoot::test_container_ci_log_line /home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/analyze/__init__.py:141: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC). ci_start = datetime.utcfromtimestamp(last_init_local["timestamp"]) tests/unittests/cmd/devel/test_logs.py::TestCollectLogs::test_collect_logs_end_to_end /home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/tests/unittests/cmd/devel/test_logs.py:144: DeprecationWarning: Python 3.14 will, by default, filter extracted tar archives and reject files or modify their metadata. Use the filter argument to control this behavior. tar.extractall(extract_to) tests/unittests/config/test_cc_apt_pipelining.py: 5 warnings tests/unittests/config/test_cc_bootcmd.py: 1 warning tests/unittests/config/test_cc_growpart.py: 1 warning tests/unittests/config/test_cc_grub_dpkg.py: 1 warning tests/unittests/config/test_cc_mcollective.py: 2 warnings tests/unittests/config/test_cc_mounts.py: 12 warnings tests/unittests/config/test_cc_power_state_change.py: 5 warnings tests/unittests/config/test_cc_rh_subscription.py: 1 warning tests/unittests/config/test_cc_runcmd.py: 9 warnings tests/unittests/config/test_cc_scripts_vendor.py: 2 warnings tests/unittests/config/test_cc_set_passwords.py: 3 warnings tests/unittests/config/test_cc_snap.py: 7 warnings tests/unittests/config/test_cc_update_etc_hosts.py: 3 warnings tests/unittests/config/test_cc_users_groups.py: 33 warnings tests/unittests/config/test_schema.py: 104 warnings tests/unittests/reporting/test_reporting.py: 19 warnings tests/unittests/test_merging.py: 2 warnings tests/unittests/test_stages.py: 4 warnings /home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/config/schema.py:554: DeprecationWarning: Passing a schema to Validator.iter_errors is deprecated and will be removed in a future release. Call validator.evolve(schema=new_schema).iter_errors(...) instead. return next(errors, None) is None tests/unittests/config/test_schema.py::TestVersionedSchemas::test_versioned_cloud_config_schema_is_valid_json[schema0-None] tests/unittests/config/test_schema.py::TestVersionedSchemas::test_versioned_cloud_config_schema_is_valid_json[schema1-None] tests/unittests/config/test_schema.py::TestVersionedSchemas::test_versioned_cloud_config_schema_is_valid_json[schema2-is not one of ['v1']] tests/unittests/config/test_schema.py::TestVersionedSchemas::test_versioned_cloud_config_schema_is_valid_json[schema3-is not of type 'string'] tests/unittests/config/test_schema.py::TestVersionedSchemas::test_versioned_cloud_config_schema_is_valid_json[schema4-None] /home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/config/schema.py:459: DeprecationWarning: Automatically retrieving remote references can be a security vulnerability and is discouraged by the JSON Schema specifications. Relying on this behavior is deprecated and will shortly become an error. If you are sure you want to remotely retrieve your reference and that it is safe to do so, you can find instructions for doing so via referencing.Registry in the referencing documentation (https://referencing.readthedocs.org). all_errs = list( tests/unittests/sources/azure/test_errors.py: 48 warnings /home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/tests/unittests/sources/azure/test_errors.py:23: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). timestamp = datetime.datetime.utcnow() tests/unittests/sources/azure/test_errors.py: 13 warnings tests/unittests/sources/azure/test_kvp.py: 1 warning tests/unittests/sources/test_azure.py: 107 warnings tests/unittests/sources/test_azure_helper.py: 11 warnings /home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/sources/azure/errors.py:55: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). self.timestamp = datetime.utcnow() tests/unittests/sources/azure/test_kvp.py::TestReportSuccessToHost::test_report_success_to_host /home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/tests/unittests/sources/azure/test_kvp.py:14: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). timestamp = datetime.utcnow() tests/unittests/sources/azure/test_kvp.py: 1 warning tests/unittests/sources/test_azure.py: 49 warnings /home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/sources/azure/kvp.py:52: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). f"timestamp={datetime.utcnow().isoformat()}", tests/unittests/sources/test_azure.py: 72 warnings tests/unittests/sources/test_azure_helper.py: 17 warnings /home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/sources/helpers/azure.py:1014: DeprecationWarning: Testing an element's truth value will always return True in future versions. Use specific 'len(elem)' or 'elem is not None' test instead. if not root.find("./wa:ProvisioningSection", cls.NAMESPACES): tests/unittests/sources/test_azure.py: 24 warnings /home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/tests/unittests/sources/test_azure.py:318: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). timestamp = datetime.datetime.utcnow() tests/unittests/sources/test_gce.py::TestDataSourceGCE::test_has_expired tests/unittests/sources/test_gce.py::TestDataSourceGCE::test_has_expired /home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/cloudinit/sources/DataSourceGCE.py:236: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). return datetime.datetime.utcnow() > expire_time tests/unittests/test_cli.py: 16 warnings /home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/tests/unittests/test_cli.py:36: PytestMockWarning: Mocks returned by pytest-mock do not need to be used as context managers. The mocker fixture automatically undoes mocking at the end of a test. This warning can be ignored if it was triggered by mocking a context manager. https://pytest-mock.readthedocs.io/en/latest/remarks.html#usage-as-context-manager with mocker.patch( tests/unittests/test_cli.py: 16 warnings /home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/tests/unittests/test_cli.py:39: PytestMockWarning: Mocks returned by pytest-mock do not need to be used as context managers. The mocker fixture automatically undoes mocking at the end of a test. This warning can be ignored if it was triggered by mocking a context manager. https://pytest-mock.readthedocs.io/en/latest/remarks.html#usage-as-context-manager ), mocker.patch( tests/unittests/test_ds_identify.py::TestDsIdentify::test_ibmcloud_template_no_userdata_in_provisioning /usr/lib/python3.12/unittest/case.py:690: DeprecationWarning: It is deprecated to return a value that is not None from a test case (>) return self.run(*args, **kwds) tests/unittests/test_ds_identify.py::TestDsIdentify::test_ibmcloud_template_userdata_in_provisioning /usr/lib/python3.12/unittest/case.py:690: DeprecationWarning: It is deprecated to return a value that is not None from a test case (>) return self.run(*args, **kwds) tests/unittests/test_ds_identify.py::TestDsIdentify::test_vmware_on_vmware_open_vm_tools_64 /usr/lib/python3.12/unittest/case.py:690: DeprecationWarning: It is deprecated to return a value that is not None from a test case (>) return self.run(*args, **kwds) tests/unittests/test_ds_identify.py::TestDsIdentify::test_vmware_on_vmware_open_vm_tools_aarch64_linux_gnu /usr/lib/python3.12/unittest/case.py:690: DeprecationWarning: It is deprecated to return a value that is not None from a test case (>) return self.run(*args, **kwds) tests/unittests/test_ds_identify.py::TestDsIdentify::test_vmware_on_vmware_open_vm_tools_i386_linux_gnu /usr/lib/python3.12/unittest/case.py:690: DeprecationWarning: It is deprecated to return a value that is not None from a test case (>) return self.run(*args, **kwds) tests/unittests/test_ds_identify.py::TestDsIdentify::test_vmware_on_vmware_open_vm_tools_x86_64_linux_gnu /usr/lib/python3.12/unittest/case.py:690: DeprecationWarning: It is deprecated to return a value that is not None from a test case (>) return self.run(*args, **kwds) tests/unittests/test_ds_identify.py::TestWSL::test_empty_cloudinitdir /usr/lib/python3.12/unittest/case.py:690: DeprecationWarning: It is deprecated to return a value that is not None from a test case (>) return self.run(*args, **kwds) tests/unittests/test_ds_identify.py::TestWSL::test_found_via_userdata /usr/lib/python3.12/unittest/case.py:690: DeprecationWarning: It is deprecated to return a value that is not None from a test case (>) return self.run(*args, **kwds) tests/unittests/test_ds_identify.py::TestWSL::test_no_cloudinitdir_in_userprofile /usr/lib/python3.12/unittest/case.py:690: DeprecationWarning: It is deprecated to return a value that is not None from a test case (>) return self.run(*args, **kwds) tests/unittests/test_ds_identify.py::TestWSL::test_no_userprofile /usr/lib/python3.12/unittest/case.py:690: DeprecationWarning: It is deprecated to return a value that is not None from a test case (>) return self.run(*args, **kwds) tests/unittests/test_log.py::TestCloudInitLogger::test_logger_uses_gmtime /home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/tests/unittests/test_log.py:47: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). utc_before = datetime.datetime.utcnow() - datetime.timedelta(0, 0.5) tests/unittests/test_log.py::TestCloudInitLogger::test_logger_uses_gmtime /home/udu/aports/community/cloud-init/src/cloud-init-24.3.1/tests/unittests/test_log.py:49: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). utc_after = datetime.datetime.utcnow() + datetime.timedelta(0, 0.5) -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html ========================================================================================================================================== short test summary info =========================================================================================================================================== FAILED tests/unittests/reporting/test_reporting_hyperv.py::TestKvpEncoding::test_encode_decode - ValueError: could not convert string to float: '??' FAILED tests/unittests/reporting/test_reporting_hyperv.py::TextKvpReporter::test_event_very_long - ValueError: could not convert string to float: '??' FAILED tests/unittests/reporting/test_reporting_hyperv.py::TextKvpReporter::test_events_with_higher_incarnation_not_over_written - ValueError: could not convert string to float: '??' FAILED tests/unittests/reporting/test_reporting_hyperv.py::TextKvpReporter::test_file_operation_issue - ValueError: could not convert string to float: '??' FAILED tests/unittests/reporting/test_reporting_hyperv.py::TextKvpReporter::test_finish_event_result_is_logged - ValueError: could not convert string to float: '??' FAILED tests/unittests/reporting/test_reporting_hyperv.py::TextKvpReporter::test_get_boot_telemetry - ValueError: could not convert string to float: '??' FAILED tests/unittests/reporting/test_reporting_hyperv.py::TextKvpReporter::test_get_system_info - ValueError: could not convert string to float: '??' FAILED tests/unittests/reporting/test_reporting_hyperv.py::TextKvpReporter::test_not_truncate_kvp_file_modified_after_boot - ValueError: could not convert string to float: '??' FAILED tests/unittests/reporting/test_reporting_hyperv.py::TextKvpReporter::test_report_compressed_event - ValueError: could not convert string to float: '??' FAILED tests/unittests/reporting/test_reporting_hyperv.py::TextKvpReporter::test_report_diagnostic_event_with_logger_func - ValueError: could not convert string to float: '??' FAILED tests/unittests/reporting/test_reporting_hyperv.py::TextKvpReporter::test_report_diagnostic_event_without_logger_func - ValueError: could not convert string to float: '??' FAILED tests/unittests/reporting/test_reporting_hyperv.py::TextKvpReporter::test_truncate_stale_kvp_file - ValueError: could not convert string to float: '??' FAILED tests/unittests/reporting/test_reporting_hyperv.py::TextKvpReporter::test_unique_kvp_key - ValueError: could not convert string to float: '??' FAILED tests/unittests/reporting/test_reporting_hyperv.py::TextKvpReporter::test_write_key - ValueError: could not convert string to float: '??' FAILED tests/unittests/reporting/test_reporting_hyperv.py::TextKvpReporter::test_write_key_truncates - ValueError: could not convert string to float: '??' FAILED tests/unittests/sources/test_opennebula.py::TestOpenNebulaDataSource::test_context_parser - ValueError: No closing quotation FAILED tests/unittests/sources/test_opennebula.py::TestOpenNebulaDataSource::test_get_data - ValueError: No closing quotation FAILED tests/unittests/sources/test_opennebula.py::TestOpenNebulaDataSource::test_hostname - ValueError: No closing quotation FAILED tests/unittests/sources/test_opennebula.py::TestOpenNebulaDataSource::test_network_interfaces - ValueError: No closing quotation FAILED tests/unittests/sources/test_opennebula.py::TestOpenNebulaDataSource::test_seed_dir_empty1_context - ValueError: No closing quotation FAILED tests/unittests/sources/test_opennebula.py::TestOpenNebulaDataSource::test_seed_dir_empty2_context - ValueError: No closing quotation FAILED tests/unittests/sources/test_opennebula.py::TestOpenNebulaDataSource::test_ssh_key - ValueError: No closing quotation FAILED tests/unittests/sources/test_opennebula.py::TestOpenNebulaDataSource::test_user_data_base64_encoding - ValueError: No closing quotation FAILED tests/unittests/sources/test_opennebula.py::TestOpenNebulaDataSource::test_user_data_encoding_required_for_decode - ValueError: No closing quotation FAILED tests/unittests/sources/test_opennebula.py::TestOpenNebulaDataSource::test_user_data_plain - ValueError: No closing quotation FAILED tests/unittests/sources/test_opennebula.py::TestParseShellConfig::test_no_seconds - ValueError: No closing quotation FAILED tests/unittests/test_cli.py::TestCLI::test_status_wrapper_init_local_writes_fresh_status_info - ValueError: could not convert string to float: '??' FAILED tests/unittests/test_cli.py::TestCLI::test_status_wrapper_init_local_honor_cloud_dir - ValueError: could not convert string to float: '??' FAILED tests/unittests/test_cli.py::TestSignalHandling::test_status_wrapper_signal_sys_exit - ValueError: could not convert string to float: '??' FAILED tests/unittests/test_cli.py::TestSignalHandling::test_status_wrapper_no_signal_sys_exit - ValueError: could not convert string to float: '??' FAILED tests/unittests/test_cli.py::TestSignalHandling::test_status_wrapper_signal_warnings - ValueError: could not convert string to float: '??' FAILED tests/unittests/test_util.py::TestGetProcPpid::test_get_proc_pgrp_linux - AssertionError: 174633 != None FAILED tests/unittests/test_util.py::TestGetProcPpid::test_get_proc_ppid_linux - AssertionError: 174642 != None FAILED tests/unittests/test_util.py::TestGetProcPpid::test_get_proc_ppid_ps - AssertionError: 174642 != None ERROR tests/unittests/sources/azure/test_kvp.py::TestReportFailureToHost::test_report_failure_to_host - ValueError: could not convert string to float: '??' ERROR tests/unittests/sources/azure/test_kvp.py::TestReportSuccessToHost::test_report_success_to_host - ValueError: could not convert string to float: '??' ======================================================================================================= 34 failed, 5076 passed, 8 skipped, 2 deselected, 18 xfailed, 623 warnings, 2 errors in 51.92s ======================================================================================================== >>> ERROR: cloud-init: check failed >>> cloud-init: Uninstalling dependencies... (1/118) Purging .makedepends-cloud-init (20251009.030621) (2/118) Purging blkid (2.41-r9) (3/118) Purging cloud-utils-growpart (0.33-r1) (4/118) Purging partx (2.41-r9) (5/118) Purging iproute2-minimal (6.15.0-r0) (6/118) Purging py3-configobj-pyc (5.0.9-r0) (7/118) Purging py3-configobj (5.0.9-r0) (8/118) Purging py3-six-pyc (1.17.0-r0) (9/118) Purging py3-six (1.17.0-r0) (10/118) Purging py3-jinja2-pyc (3.1.6-r0) (11/118) Purging py3-jinja2 (3.1.6-r0) (12/118) Purging py3-markupsafe-pyc (3.0.2-r0) (13/118) Purging py3-markupsafe (3.0.2-r0) (14/118) Purging py3-jsonpatch-pyc (1.33-r3) (15/118) Purging py3-jsonpatch (1.33-r3) (16/118) Purging py3-jsonpointer-pyc (3.0.0-r0) (17/118) Purging py3-jsonpointer (3.0.0-r0) (18/118) Purging py3-jsonschema-pyc (4.23.0-r0) (19/118) Purging py3-jsonschema (4.23.0-r0) (20/118) Purging py3-jsonschema-specifications-pyc (2025.4.1-r0) (21/118) Purging py3-jsonschema-specifications (2025.4.1-r0) (22/118) Purging py3-referencing-pyc (0.36.2-r1) (23/118) Purging py3-referencing (0.36.2-r1) (24/118) Purging py3-attrs-pyc (25.3.0-r0) (25/118) Purging py3-attrs (25.3.0-r0) (26/118) Purging py3-typing-extensions-pyc (4.13.2-r0) (27/118) Purging py3-typing-extensions (4.13.2-r0) (28/118) Purging py3-rpds-py-pyc (0.25.1-r0) (29/118) Purging py3-rpds-py (0.25.1-r0) (30/118) Purging shadow (4.17.3-r0) (31/118) Purging tzdata (2025b-r0) (32/118) Purging eudev-dev (3.2.14-r5) (33/118) Purging eudev-libs (3.2.14-r5) (34/118) Purging py3-setuptools-pyc (80.9.0-r0) (35/118) Purging py3-setuptools (80.9.0-r0) (36/118) Purging coreutils (9.7-r1) Executing coreutils-9.7-r1.post-deinstall (37/118) Purging coreutils-env (9.7-r1) (38/118) Purging coreutils-fmt (9.7-r1) (39/118) Purging coreutils-sha512sum (9.7-r1) (40/118) Purging grep (3.12-r0) (41/118) Purging lsblk (2.41-r9) (42/118) Purging parted (3.6-r2) (43/118) Purging procps-ng (4.0.4-r3) (44/118) Purging py3-netifaces (0.11.0-r3) (45/118) Purging py3-passlib-pyc (1.7.4-r7) (46/118) Purging py3-passlib (1.7.4-r7) (47/118) Purging py3-pyserial-pyc (3.5-r7) (48/118) Purging py3-pyserial (3.5-r7) (49/118) Purging py3-pytest-mock-pyc (3.10.0-r3) (50/118) Purging py3-pytest-mock (3.10.0-r3) (51/118) Purging py3-mock-pyc (5.2.0-r0) (52/118) Purging py3-mock (5.2.0-r0) (53/118) Purging py3-pytest-pyc (8.3.5-r0) (54/118) Purging py3-pytest (8.3.5-r0) (55/118) Purging py3-iniconfig-pyc (2.1.0-r0) (56/118) Purging py3-iniconfig (2.1.0-r0) (57/118) Purging py3-py-pyc (1.11.0-r4) (58/118) Purging py3-py (1.11.0-r4) (59/118) Purging py3-responses-pyc (0.25.0-r1) (60/118) Purging py3-responses (0.25.0-r1) (61/118) Purging py3-requests-pyc (2.32.5-r0) (62/118) Purging py3-requests (2.32.5-r0) (63/118) Purging py3-certifi-pyc (2025.4.26-r0) (64/118) Purging py3-certifi (2025.4.26-r0) (65/118) Purging py3-charset-normalizer-pyc (3.4.2-r0) (66/118) Purging py3-charset-normalizer (3.4.2-r0) (67/118) Purging py3-idna-pyc (3.10-r0) (68/118) Purging py3-idna (3.10-r0) (69/118) Purging py3-toml-pyc (0.10.2-r7) (70/118) Purging py3-toml (0.10.2-r7) (71/118) Purging py3-urllib3-pyc (1.26.20-r0) (72/118) Purging py3-urllib3 (1.26.20-r0) (73/118) Purging py3-yaml-pyc (6.0.2-r0) (74/118) Purging py3-yaml (6.0.2-r0) (75/118) Purging py3-tox-pyc (4.6.4-r1) (76/118) Purging py3-tox (4.6.4-r1) (77/118) Purging py3-cachetools-pyc (5.5.2-r0) (78/118) Purging py3-cachetools (5.5.2-r0) (79/118) Purging py3-chardet-pyc (5.2.0-r1) (80/118) Purging py3-chardet (5.2.0-r1) (81/118) Purging py3-colorama-pyc (0.4.6-r5) (82/118) Purging py3-colorama (0.4.6-r5) (83/118) Purging py3-pluggy-pyc (1.5.0-r0) (84/118) Purging py3-pluggy (1.5.0-r0) (85/118) Purging py3-pyproject-api-pyc (1.9.0-r1) (86/118) Purging py3-pyproject-api (1.9.0-r1) (87/118) Purging py3-packaging-pyc (25.0-r0) (88/118) Purging py3-packaging (25.0-r0) (89/118) Purging py3-parsing-pyc (3.2.3-r0) (90/118) Purging py3-parsing (3.2.3-r0) (91/118) Purging py3-virtualenv-pyc (20.31.2-r0) (92/118) Purging py3-virtualenv (20.31.2-r0) (93/118) Purging py3-platformdirs-pyc (4.3.8-r0) (94/118) Purging py3-platformdirs (4.3.8-r0) (95/118) Purging py3-distlib-pyc (0.3.9-r0) (96/118) Purging py3-distlib (0.3.9-r0) (97/118) Purging py3-filelock-pyc (3.16.1-r1) (98/118) Purging py3-filelock (3.16.1-r1) (99/118) Purging sfdisk (2.41-r9) (100/118) Purging sgdisk (1.0.10-r1) (101/118) Purging device-mapper-libs (2.03.32-r0) (102/118) Purging libattr (2.5.2-r2) (103/118) Purging libbsd (0.12.2-r0) (104/118) Purging libelf (0.193-r0) (105/118) Purging libfdisk (2.41-r9) (106/118) Purging libmd (1.1.0-r0) (107/118) Purging libmnl (1.0.5-r2) (108/118) Purging libmount (2.41-r9) (109/118) Purging libproc2 (4.0.4-r3) (110/118) Purging libsmartcols (2.41-r9) (111/118) Purging libuuid (2.41-r9) (112/118) Purging linux-pam (1.7.0-r4) (113/118) Purging popt (1.19-r4) (114/118) Purging utmps-libs (0.1.3.1-r0) (115/118) Purging yaml (0.2.5-r2) (116/118) Purging libblkid (2.41-r9) (117/118) Purging libeconf (0.6.3-r0) (118/118) Purging skalibs-libs (2.14.4.0-r0) Executing busybox-1.37.0-r19.trigger OK: 296 MiB in 89 packages