Diff of the two buildlogs:

--
--- b1/build.log	2025-01-04 21:54:11.275128399 +0000
+++ b2/build.log	2025-01-04 22:02:04.645509431 +0000
@@ -1,6 +1,6 @@
 I: pbuilder: network access will be disabled during build
-I: Current time: Sat Jan  4 09:45:09 -12 2025
-I: pbuilder-time-stamp: 1736027109
+I: Current time: Sun Jan  5 11:54:22 +14 2025
+I: pbuilder-time-stamp: 1736027662
 I: Building the build Environment
 I: extracting base tarball [/var/cache/pbuilder/unstable-reproducible-base.tgz]
 I: copying local configuration
@@ -26,52 +26,84 @@
 dpkg-source: info: applying fix-syntax-warning.patch
 I: using fakeroot in build.
 I: Installing the build-deps
-I: user script /srv/workspace/pbuilder/28659/tmp/hooks/D02_print_environment starting
+I: user script /srv/workspace/pbuilder/8816/tmp/hooks/D01_modify_environment starting
+debug: Running on virt64z.
+I: Changing host+domainname to test build reproducibility
+I: Adding a custom variable just for the fun of it...
+I: Changing /bin/sh to bash
+'/bin/sh' -> '/bin/bash'
+lrwxrwxrwx 1 root root 9 Jan  4 21:54 /bin/sh -> /bin/bash
+I: Setting pbuilder2's login shell to /bin/bash
+I: Setting pbuilder2's GECOS to second user,second room,second work-phone,second home-phone,second other
+I: user script /srv/workspace/pbuilder/8816/tmp/hooks/D01_modify_environment finished
+I: user script /srv/workspace/pbuilder/8816/tmp/hooks/D02_print_environment starting
 I: set
-  BUILDDIR='/build/reproducible-path'
-  BUILDUSERGECOS='first user,first room,first work-phone,first home-phone,first other'
-  BUILDUSERNAME='pbuilder1'
-  BUILD_ARCH='armhf'
-  DEBIAN_FRONTEND='noninteractive'
-  DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=3 '
-  DISTRIBUTION='unstable'
-  HOME='/root'
-  HOST_ARCH='armhf'
+  BASH=/bin/sh
+  BASHOPTS=checkwinsize:cmdhist:complete_fullquote:extquote:force_fignore:globasciiranges:globskipdots:hostcomplete:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath
+  BASH_ALIASES=()
+  BASH_ARGC=()
+  BASH_ARGV=()
+  BASH_CMDS=()
+  BASH_LINENO=([0]="12" [1]="0")
+  BASH_LOADABLES_PATH=/usr/local/lib/bash:/usr/lib/bash:/opt/local/lib/bash:/usr/pkg/lib/bash:/opt/pkg/lib/bash:.
+  BASH_SOURCE=([0]="/tmp/hooks/D02_print_environment" [1]="/tmp/hooks/D02_print_environment")
+  BASH_VERSINFO=([0]="5" [1]="2" [2]="37" [3]="1" [4]="release" [5]="arm-unknown-linux-gnueabihf")
+  BASH_VERSION='5.2.37(1)-release'
+  BUILDDIR=/build/reproducible-path
+  BUILDUSERGECOS='second user,second room,second work-phone,second home-phone,second other'
+  BUILDUSERNAME=pbuilder2
+  BUILD_ARCH=armhf
+  DEBIAN_FRONTEND=noninteractive
+  DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=4 '
+  DIRSTACK=()
+  DISTRIBUTION=unstable
+  EUID=0
+  FUNCNAME=([0]="Echo" [1]="main")
+  GROUPS=()
+  HOME=/root
+  HOSTNAME=i-capture-the-hostname
+  HOSTTYPE=arm
+  HOST_ARCH=armhf
   IFS=' 	
   '
-  INVOCATION_ID='c95ba771714d47b6ac76fb659fee50a2'
-  LANG='C'
-  LANGUAGE='en_US:en'
-  LC_ALL='C'
-  MAIL='/var/mail/root'
-  OPTIND='1'
-  PATH='/usr/sbin:/usr/bin:/sbin:/bin:/usr/games'
-  PBCURRENTCOMMANDLINEOPERATION='build'
-  PBUILDER_OPERATION='build'
-  PBUILDER_PKGDATADIR='/usr/share/pbuilder'
-  PBUILDER_PKGLIBDIR='/usr/lib/pbuilder'
-  PBUILDER_SYSCONFDIR='/etc'
-  PPID='28659'
-  PS1='# '
-  PS2='> '
+  INVOCATION_ID=f69fc43ecbc94768b2d78f144f7c52ff
+  LANG=C
+  LANGUAGE=it_CH:it
+  LC_ALL=C
+  MACHTYPE=arm-unknown-linux-gnueabihf
+  MAIL=/var/mail/root
+  OPTERR=1
+  OPTIND=1
+  OSTYPE=linux-gnueabihf
+  PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
+  PBCURRENTCOMMANDLINEOPERATION=build
+  PBUILDER_OPERATION=build
+  PBUILDER_PKGDATADIR=/usr/share/pbuilder
+  PBUILDER_PKGLIBDIR=/usr/lib/pbuilder
+  PBUILDER_SYSCONFDIR=/etc
+  PIPESTATUS=([0]="0")
+  POSIXLY_CORRECT=y
+  PPID=8816
   PS4='+ '
-  PWD='/'
-  SHELL='/bin/bash'
-  SHLVL='2'
-  SUDO_COMMAND='/usr/bin/timeout -k 18.1h 18h /usr/bin/ionice -c 3 /usr/bin/nice /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.mvAeDWWn/pbuilderrc_ioST --distribution unstable --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/unstable-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.mvAeDWWn/b1 --logfile b1/build.log ironic-python-agent_9.14.0-5.dsc'
-  SUDO_GID='113'
-  SUDO_UID='107'
-  SUDO_USER='jenkins'
-  TERM='unknown'
-  TZ='/usr/share/zoneinfo/Etc/GMT+12'
-  USER='root'
-  _='/usr/bin/systemd-run'
-  http_proxy='http://10.0.0.15:3142/'
+  PWD=/
+  SHELL=/bin/bash
+  SHELLOPTS=braceexpand:errexit:hashall:interactive-comments:posix
+  SHLVL=3
+  SUDO_COMMAND='/usr/bin/timeout -k 24.1h 24h /usr/bin/ionice -c 3 /usr/bin/nice -n 11 /usr/bin/unshare --uts -- /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.mvAeDWWn/pbuilderrc_HWf8 --distribution unstable --hookdir /etc/pbuilder/rebuild-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/unstable-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.mvAeDWWn/b2 --logfile b2/build.log ironic-python-agent_9.14.0-5.dsc'
+  SUDO_GID=110
+  SUDO_UID=103
+  SUDO_USER=jenkins
+  TERM=unknown
+  TZ=/usr/share/zoneinfo/Etc/GMT-14
+  UID=0
+  USER=root
+  _='I: set'
+  http_proxy=http://10.0.0.15:3142/
 I: uname -a
-  Linux virt32a 6.1.0-28-armmp-lpae #1 SMP Debian 6.1.119-1 (2024-11-22) armv7l GNU/Linux
+  Linux i-capture-the-hostname 6.1.0-28-arm64 #1 SMP Debian 6.1.119-1 (2024-11-22) aarch64 GNU/Linux
 I: ls -l /bin
   lrwxrwxrwx 1 root root 7 Nov 22 14:40 /bin -> usr/bin
-I: user script /srv/workspace/pbuilder/28659/tmp/hooks/D02_print_environment finished
+I: user script /srv/workspace/pbuilder/8816/tmp/hooks/D02_print_environment finished
  -> Attempting to satisfy build-dependencies
  -> Creating pbuilder-satisfydepends-dummy package
 Package: pbuilder-satisfydepends-dummy
@@ -435,7 +467,7 @@
 Get: 264 http://deb.debian.org/debian unstable/main armhf python3-tooz all 6.3.0-4 [52.6 kB]
 Get: 265 http://deb.debian.org/debian unstable/main armhf python3-werkzeug all 3.1.3-2 [207 kB]
 Get: 266 http://deb.debian.org/debian unstable/main armhf qemu-utils armhf 1:9.2.0+ds-3+b1 [1599 kB]
-Fetched 88.5 MB in 2s (41.6 MB/s)
+Fetched 88.5 MB in 9s (10.4 MB/s)
 Preconfiguring packages ...
 Selecting previously unselected package freeipmi-common.
 (Reading database ... 
(Reading database ... 5%
(Reading database ... 10%
(Reading database ... 15%
(Reading database ... 20%
(Reading database ... 25%
(Reading database ... 30%
(Reading database ... 35%
(Reading database ... 40%
(Reading database ... 45%
(Reading database ... 50%
(Reading database ... 55%
(Reading database ... 60%
(Reading database ... 65%
(Reading database ... 70%
(Reading database ... 75%
(Reading database ... 80%
(Reading database ... 85%
(Reading database ... 90%
(Reading database ... 95%
(Reading database ... 100%
(Reading database ... 19567 files and directories currently installed.)
@@ -1287,8 +1319,8 @@
 Setting up tzdata (2024b-4) ...
 
 Current default time zone: 'Etc/UTC'
-Local time is now:      Sat Jan  4 21:47:11 UTC 2025.
-Universal Time is now:  Sat Jan  4 21:47:11 UTC 2025.
+Local time is now:      Sat Jan  4 21:55:54 UTC 2025.
+Universal Time is now:  Sat Jan  4 21:55:54 UTC 2025.
 Run 'dpkg-reconfigure tzdata' if you wish to change it.
 
 Setting up libpython3.13-minimal:armhf (3.13.1-3) ...
@@ -1552,7 +1584,11 @@
 fakeroot is already the newest version (1.36.2-1).
 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
 I: Building the package
-I: Running cd /build/reproducible-path/ironic-python-agent-9.14.0/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-genchanges -S  > ../ironic-python-agent_9.14.0-5_source.changes
+I: user script /srv/workspace/pbuilder/8816/tmp/hooks/A99_set_merged_usr starting
+Not re-configuring usrmerge for unstable
+I: user script /srv/workspace/pbuilder/8816/tmp/hooks/A99_set_merged_usr finished
+hostname: Name or service not known
+I: Running cd /build/reproducible-path/ironic-python-agent-9.14.0/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-genchanges -S  > ../ironic-python-agent_9.14.0-5_source.changes
 dpkg-buildpackage: info: source package ironic-python-agent
 dpkg-buildpackage: info: source version 9.14.0-5
 dpkg-buildpackage: info: source distribution unstable
@@ -1691,21 +1727,26 @@
 py3versions: no X-Python3-Version in control file, using supported versions
 pkgos-dh_auto_install --no-py2 --in-tmp
 + PKGOS_IN_TMP=no
-+ echo WARNING: --no-py2 is deprecated and always on.
++ for i in $@
++ case "${1}" in
++ echo 'WARNING: --no-py2 is deprecated and always on.'
 WARNING: --no-py2 is deprecated and always on.
 + shift
++ for i in $@
++ case "${1}" in
 + PKGOS_IN_TMP=yes
 + shift
-+ dpkg-parsechangelog -SSource
+++ dpkg-parsechangelog -SSource
 + SRC_PKG_NAME=ironic-python-agent
-+ echo ironic-python-agent+ 
-sed s/python-//
+++ echo ironic-python-agent
+++ sed s/python-//
 + PY_MODULE_NAME=ironic-agent
-+ py3versions -vr
-+ PYTHON3S=3.13 3.12
-+ [ yes = yes ]
+++ py3versions -vr
++ PYTHON3S='3.13 3.12'
++ '[' yes = yes ']'
 + TARGET_DIR=tmp
-+ pwd
++ for pyvers in ${PYTHON3S}
+++ pwd
 + python3.13 setup.py install --install-layout=deb --root /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp
 /usr/lib/python3/dist-packages/setuptools/__init__.py:94: _DeprecatedInstaller: setuptools.installer and fetch_build_eggs are deprecated.
 !!
@@ -1750,104 +1791,104 @@
 [pbr] AUTHORS complete (0.0s)
 running build
 running build_py
-creating build/lib/ironic_python_agent/tests/unit
-copying ironic_python_agent/tests/unit/test_partition_utils.py -> build/lib/ironic_python_agent/tests/unit
-copying ironic_python_agent/tests/unit/test_disk_utils.py -> build/lib/ironic_python_agent/tests/unit
-copying ironic_python_agent/tests/unit/test_multi_hardware_clean_steps.py -> build/lib/ironic_python_agent/tests/unit
-copying ironic_python_agent/tests/unit/test_utils.py -> build/lib/ironic_python_agent/tests/unit
-copying ironic_python_agent/tests/unit/test_api.py -> build/lib/ironic_python_agent/tests/unit
-copying ironic_python_agent/tests/unit/test_agent.py -> build/lib/ironic_python_agent/tests/unit
-copying ironic_python_agent/tests/unit/test_disk_partitioner.py -> build/lib/ironic_python_agent/tests/unit
-copying ironic_python_agent/tests/unit/dmi_inspector_data.py -> build/lib/ironic_python_agent/tests/unit
-copying ironic_python_agent/tests/unit/test_numa_inspector.py -> build/lib/ironic_python_agent/tests/unit
-copying ironic_python_agent/tests/unit/test_ironic_api_client.py -> build/lib/ironic_python_agent/tests/unit
-copying ironic_python_agent/tests/unit/base.py -> build/lib/ironic_python_agent/tests/unit
-copying ironic_python_agent/tests/unit/test_hardware.py -> build/lib/ironic_python_agent/tests/unit
-copying ironic_python_agent/tests/unit/test_errors.py -> build/lib/ironic_python_agent/tests/unit
-copying ironic_python_agent/tests/unit/test_burnin.py -> build/lib/ironic_python_agent/tests/unit
-copying ironic_python_agent/tests/unit/test_inspector.py -> build/lib/ironic_python_agent/tests/unit
-copying ironic_python_agent/tests/unit/test_inject_files.py -> build/lib/ironic_python_agent/tests/unit
-copying ironic_python_agent/tests/unit/test_encoding.py -> build/lib/ironic_python_agent/tests/unit
-copying ironic_python_agent/tests/unit/test_base.py -> build/lib/ironic_python_agent/tests/unit
-copying ironic_python_agent/tests/unit/test_dmi_inspector.py -> build/lib/ironic_python_agent/tests/unit
-copying ironic_python_agent/tests/unit/test_qemu_img.py -> build/lib/ironic_python_agent/tests/unit
-copying ironic_python_agent/tests/unit/test_multi_hardware.py -> build/lib/ironic_python_agent/tests/unit
-copying ironic_python_agent/tests/unit/test_format_inspector.py -> build/lib/ironic_python_agent/tests/unit
-copying ironic_python_agent/tests/unit/test_netutils.py -> build/lib/ironic_python_agent/tests/unit
-copying ironic_python_agent/tests/unit/test_efi_utils.py -> build/lib/ironic_python_agent/tests/unit
-copying ironic_python_agent/tests/unit/__init__.py -> build/lib/ironic_python_agent/tests/unit
-copying ironic_python_agent/tests/unit/test_tls_utils.py -> build/lib/ironic_python_agent/tests/unit
-copying ironic_python_agent/tests/unit/test_raid_utils.py -> build/lib/ironic_python_agent/tests/unit
-creating build/lib/ironic_python_agent/cmd
-copying ironic_python_agent/cmd/agent.py -> build/lib/ironic_python_agent/cmd
-copying ironic_python_agent/cmd/inspect.py -> build/lib/ironic_python_agent/cmd
-copying ironic_python_agent/cmd/__init__.py -> build/lib/ironic_python_agent/cmd
+creating build/lib/ironic_python_agent/tests/unit/hardware_managers
+copying ironic_python_agent/tests/unit/hardware_managers/test_cna.py -> build/lib/ironic_python_agent/tests/unit/hardware_managers
+copying ironic_python_agent/tests/unit/hardware_managers/__init__.py -> build/lib/ironic_python_agent/tests/unit/hardware_managers
+copying ironic_python_agent/tests/unit/hardware_managers/test_mlnx.py -> build/lib/ironic_python_agent/tests/unit/hardware_managers
 creating build/lib/ironic_python_agent/api
-copying ironic_python_agent/api/__init__.py -> build/lib/ironic_python_agent/api
 copying ironic_python_agent/api/app.py -> build/lib/ironic_python_agent/api
-creating build/lib/ironic_python_agent/tests/unit/hardware_managers/nvidia
-copying ironic_python_agent/tests/unit/hardware_managers/nvidia/test_nvidia_fw_update.py -> build/lib/ironic_python_agent/tests/unit/hardware_managers/nvidia
-copying ironic_python_agent/tests/unit/hardware_managers/nvidia/__init__.py -> build/lib/ironic_python_agent/tests/unit/hardware_managers/nvidia
-copying ironic_python_agent/format_inspector.py -> build/lib/ironic_python_agent
+copying ironic_python_agent/api/__init__.py -> build/lib/ironic_python_agent/api
+creating build/lib/ironic_python_agent/tests/functional
+copying ironic_python_agent/tests/functional/test_commands.py -> build/lib/ironic_python_agent/tests/functional
+copying ironic_python_agent/tests/functional/__init__.py -> build/lib/ironic_python_agent/tests/functional
+copying ironic_python_agent/tests/functional/base.py -> build/lib/ironic_python_agent/tests/functional
 copying ironic_python_agent/utils.py -> build/lib/ironic_python_agent
-copying ironic_python_agent/inject_files.py -> build/lib/ironic_python_agent
-copying ironic_python_agent/errors.py -> build/lib/ironic_python_agent
-copying ironic_python_agent/dmi_inspector.py -> build/lib/ironic_python_agent
-copying ironic_python_agent/qemu_img.py -> build/lib/ironic_python_agent
+copying ironic_python_agent/inspect.py -> build/lib/ironic_python_agent
+copying ironic_python_agent/version.py -> build/lib/ironic_python_agent
 copying ironic_python_agent/hardware.py -> build/lib/ironic_python_agent
-copying ironic_python_agent/ironic_api_client.py -> build/lib/ironic_python_agent
+copying ironic_python_agent/inject_files.py -> build/lib/ironic_python_agent
 copying ironic_python_agent/encoding.py -> build/lib/ironic_python_agent
-copying ironic_python_agent/agent.py -> build/lib/ironic_python_agent
+copying ironic_python_agent/errors.py -> build/lib/ironic_python_agent
+copying ironic_python_agent/format_inspector.py -> build/lib/ironic_python_agent
 copying ironic_python_agent/tls_utils.py -> build/lib/ironic_python_agent
-copying ironic_python_agent/netutils.py -> build/lib/ironic_python_agent
-copying ironic_python_agent/disk_utils.py -> build/lib/ironic_python_agent
-copying ironic_python_agent/inspect.py -> build/lib/ironic_python_agent
-copying ironic_python_agent/burnin.py -> build/lib/ironic_python_agent
-copying ironic_python_agent/version.py -> build/lib/ironic_python_agent
-copying ironic_python_agent/efi_utils.py -> build/lib/ironic_python_agent
+copying ironic_python_agent/numa_inspector.py -> build/lib/ironic_python_agent
+copying ironic_python_agent/raid_utils.py -> build/lib/ironic_python_agent
 copying ironic_python_agent/__init__.py -> build/lib/ironic_python_agent
-copying ironic_python_agent/disk_partitioner.py -> build/lib/ironic_python_agent
+copying ironic_python_agent/burnin.py -> build/lib/ironic_python_agent
+copying ironic_python_agent/dmi_inspector.py -> build/lib/ironic_python_agent
+copying ironic_python_agent/netutils.py -> build/lib/ironic_python_agent
+copying ironic_python_agent/agent.py -> build/lib/ironic_python_agent
 copying ironic_python_agent/partition_utils.py -> build/lib/ironic_python_agent
-copying ironic_python_agent/inspector.py -> build/lib/ironic_python_agent
+copying ironic_python_agent/qemu_img.py -> build/lib/ironic_python_agent
 copying ironic_python_agent/config.py -> build/lib/ironic_python_agent
-copying ironic_python_agent/raid_utils.py -> build/lib/ironic_python_agent
-copying ironic_python_agent/numa_inspector.py -> build/lib/ironic_python_agent
-copying ironic_python_agent/tests/__init__.py -> build/lib/ironic_python_agent/tests
-creating build/lib/ironic_python_agent/hardware_managers
-copying ironic_python_agent/hardware_managers/mlnx.py -> build/lib/ironic_python_agent/hardware_managers
-copying ironic_python_agent/hardware_managers/cna.py -> build/lib/ironic_python_agent/hardware_managers
-copying ironic_python_agent/hardware_managers/__init__.py -> build/lib/ironic_python_agent/hardware_managers
+copying ironic_python_agent/inspector.py -> build/lib/ironic_python_agent
+copying ironic_python_agent/disk_utils.py -> build/lib/ironic_python_agent
+copying ironic_python_agent/ironic_api_client.py -> build/lib/ironic_python_agent
+copying ironic_python_agent/disk_partitioner.py -> build/lib/ironic_python_agent
+copying ironic_python_agent/efi_utils.py -> build/lib/ironic_python_agent
 creating build/lib/ironic_python_agent/extensions
-copying ironic_python_agent/extensions/rescue.py -> build/lib/ironic_python_agent/extensions
-copying ironic_python_agent/extensions/clean.py -> build/lib/ironic_python_agent/extensions
-copying ironic_python_agent/extensions/base.py -> build/lib/ironic_python_agent/extensions
-copying ironic_python_agent/extensions/log.py -> build/lib/ironic_python_agent/extensions
-copying ironic_python_agent/extensions/service.py -> build/lib/ironic_python_agent/extensions
 copying ironic_python_agent/extensions/image.py -> build/lib/ironic_python_agent/extensions
+copying ironic_python_agent/extensions/standby.py -> build/lib/ironic_python_agent/extensions
+copying ironic_python_agent/extensions/log.py -> build/lib/ironic_python_agent/extensions
+copying ironic_python_agent/extensions/clean.py -> build/lib/ironic_python_agent/extensions
+copying ironic_python_agent/extensions/__init__.py -> build/lib/ironic_python_agent/extensions
 copying ironic_python_agent/extensions/flow.py -> build/lib/ironic_python_agent/extensions
+copying ironic_python_agent/extensions/service.py -> build/lib/ironic_python_agent/extensions
 copying ironic_python_agent/extensions/deploy.py -> build/lib/ironic_python_agent/extensions
-copying ironic_python_agent/extensions/standby.py -> build/lib/ironic_python_agent/extensions
 copying ironic_python_agent/extensions/poll.py -> build/lib/ironic_python_agent/extensions
-copying ironic_python_agent/extensions/__init__.py -> build/lib/ironic_python_agent/extensions
-creating build/lib/ironic_python_agent/tests/functional
-copying ironic_python_agent/tests/functional/base.py -> build/lib/ironic_python_agent/tests/functional
-copying ironic_python_agent/tests/functional/__init__.py -> build/lib/ironic_python_agent/tests/functional
-copying ironic_python_agent/tests/functional/test_commands.py -> build/lib/ironic_python_agent/tests/functional
+copying ironic_python_agent/extensions/rescue.py -> build/lib/ironic_python_agent/extensions
+copying ironic_python_agent/extensions/base.py -> build/lib/ironic_python_agent/extensions
+creating build/lib/ironic_python_agent/cmd
+copying ironic_python_agent/cmd/inspect.py -> build/lib/ironic_python_agent/cmd
+copying ironic_python_agent/cmd/__init__.py -> build/lib/ironic_python_agent/cmd
+copying ironic_python_agent/cmd/agent.py -> build/lib/ironic_python_agent/cmd
+creating build/lib/ironic_python_agent/hardware_managers
+copying ironic_python_agent/hardware_managers/__init__.py -> build/lib/ironic_python_agent/hardware_managers
+copying ironic_python_agent/hardware_managers/mlnx.py -> build/lib/ironic_python_agent/hardware_managers
+copying ironic_python_agent/hardware_managers/cna.py -> build/lib/ironic_python_agent/hardware_managers
+creating build/lib/ironic_python_agent/tests/unit/hardware_managers/nvidia
+copying ironic_python_agent/tests/unit/hardware_managers/nvidia/test_nvidia_fw_update.py -> build/lib/ironic_python_agent/tests/unit/hardware_managers/nvidia
+copying ironic_python_agent/tests/unit/hardware_managers/nvidia/__init__.py -> build/lib/ironic_python_agent/tests/unit/hardware_managers/nvidia
+copying ironic_python_agent/tests/__init__.py -> build/lib/ironic_python_agent/tests
 creating build/lib/ironic_python_agent/tests/unit/extensions
-copying ironic_python_agent/tests/unit/extensions/test_service.py -> build/lib/ironic_python_agent/tests/unit/extensions
-copying ironic_python_agent/tests/unit/extensions/test_deploy.py -> build/lib/ironic_python_agent/tests/unit/extensions
-copying ironic_python_agent/tests/unit/extensions/test_log.py -> build/lib/ironic_python_agent/tests/unit/extensions
-copying ironic_python_agent/tests/unit/extensions/test_image.py -> build/lib/ironic_python_agent/tests/unit/extensions
-copying ironic_python_agent/tests/unit/extensions/test_poll.py -> build/lib/ironic_python_agent/tests/unit/extensions
 copying ironic_python_agent/tests/unit/extensions/test_rescue.py -> build/lib/ironic_python_agent/tests/unit/extensions
 copying ironic_python_agent/tests/unit/extensions/test_base.py -> build/lib/ironic_python_agent/tests/unit/extensions
-copying ironic_python_agent/tests/unit/extensions/test_clean.py -> build/lib/ironic_python_agent/tests/unit/extensions
-copying ironic_python_agent/tests/unit/extensions/test_flow.py -> build/lib/ironic_python_agent/tests/unit/extensions
-copying ironic_python_agent/tests/unit/extensions/test_standby.py -> build/lib/ironic_python_agent/tests/unit/extensions
 copying ironic_python_agent/tests/unit/extensions/__init__.py -> build/lib/ironic_python_agent/tests/unit/extensions
-copying ironic_python_agent/tests/unit/hardware_managers/test_mlnx.py -> build/lib/ironic_python_agent/tests/unit/hardware_managers
-copying ironic_python_agent/tests/unit/hardware_managers/__init__.py -> build/lib/ironic_python_agent/tests/unit/hardware_managers
-copying ironic_python_agent/tests/unit/hardware_managers/test_cna.py -> build/lib/ironic_python_agent/tests/unit/hardware_managers
+copying ironic_python_agent/tests/unit/extensions/test_standby.py -> build/lib/ironic_python_agent/tests/unit/extensions
+copying ironic_python_agent/tests/unit/extensions/test_deploy.py -> build/lib/ironic_python_agent/tests/unit/extensions
+copying ironic_python_agent/tests/unit/extensions/test_service.py -> build/lib/ironic_python_agent/tests/unit/extensions
+copying ironic_python_agent/tests/unit/extensions/test_log.py -> build/lib/ironic_python_agent/tests/unit/extensions
+copying ironic_python_agent/tests/unit/extensions/test_flow.py -> build/lib/ironic_python_agent/tests/unit/extensions
+copying ironic_python_agent/tests/unit/extensions/test_clean.py -> build/lib/ironic_python_agent/tests/unit/extensions
+copying ironic_python_agent/tests/unit/extensions/test_poll.py -> build/lib/ironic_python_agent/tests/unit/extensions
+copying ironic_python_agent/tests/unit/extensions/test_image.py -> build/lib/ironic_python_agent/tests/unit/extensions
+copying ironic_python_agent/tests/unit/test_netutils.py -> build/lib/ironic_python_agent/tests/unit
+copying ironic_python_agent/tests/unit/test_inspector.py -> build/lib/ironic_python_agent/tests/unit
+copying ironic_python_agent/tests/unit/test_errors.py -> build/lib/ironic_python_agent/tests/unit
+copying ironic_python_agent/tests/unit/test_multi_hardware.py -> build/lib/ironic_python_agent/tests/unit
+copying ironic_python_agent/tests/unit/test_ironic_api_client.py -> build/lib/ironic_python_agent/tests/unit
+copying ironic_python_agent/tests/unit/test_tls_utils.py -> build/lib/ironic_python_agent/tests/unit
+copying ironic_python_agent/tests/unit/test_disk_utils.py -> build/lib/ironic_python_agent/tests/unit
+copying ironic_python_agent/tests/unit/test_base.py -> build/lib/ironic_python_agent/tests/unit
+copying ironic_python_agent/tests/unit/__init__.py -> build/lib/ironic_python_agent/tests/unit
+copying ironic_python_agent/tests/unit/test_inject_files.py -> build/lib/ironic_python_agent/tests/unit
+copying ironic_python_agent/tests/unit/test_burnin.py -> build/lib/ironic_python_agent/tests/unit
+copying ironic_python_agent/tests/unit/test_api.py -> build/lib/ironic_python_agent/tests/unit
+copying ironic_python_agent/tests/unit/test_dmi_inspector.py -> build/lib/ironic_python_agent/tests/unit
+copying ironic_python_agent/tests/unit/test_multi_hardware_clean_steps.py -> build/lib/ironic_python_agent/tests/unit
+copying ironic_python_agent/tests/unit/test_qemu_img.py -> build/lib/ironic_python_agent/tests/unit
+copying ironic_python_agent/tests/unit/test_utils.py -> build/lib/ironic_python_agent/tests/unit
+copying ironic_python_agent/tests/unit/test_raid_utils.py -> build/lib/ironic_python_agent/tests/unit
+copying ironic_python_agent/tests/unit/test_hardware.py -> build/lib/ironic_python_agent/tests/unit
+copying ironic_python_agent/tests/unit/dmi_inspector_data.py -> build/lib/ironic_python_agent/tests/unit
+copying ironic_python_agent/tests/unit/test_format_inspector.py -> build/lib/ironic_python_agent/tests/unit
+copying ironic_python_agent/tests/unit/test_disk_partitioner.py -> build/lib/ironic_python_agent/tests/unit
+copying ironic_python_agent/tests/unit/test_numa_inspector.py -> build/lib/ironic_python_agent/tests/unit
+copying ironic_python_agent/tests/unit/test_encoding.py -> build/lib/ironic_python_agent/tests/unit
+copying ironic_python_agent/tests/unit/test_partition_utils.py -> build/lib/ironic_python_agent/tests/unit
+copying ironic_python_agent/tests/unit/test_efi_utils.py -> build/lib/ironic_python_agent/tests/unit
+copying ironic_python_agent/tests/unit/test_agent.py -> build/lib/ironic_python_agent/tests/unit
+copying ironic_python_agent/tests/unit/base.py -> build/lib/ironic_python_agent/tests/unit
 running egg_info
 creating ironic_python_agent.egg-info
 writing ironic_python_agent.egg-info/PKG-INFO
@@ -1867,203 +1908,204 @@
 running install_lib
 creating /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages
 creating /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
-creating /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/hardware_managers
-copying build/lib/ironic_python_agent/hardware_managers/mlnx.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/hardware_managers
-copying build/lib/ironic_python_agent/hardware_managers/cna.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/hardware_managers
-copying build/lib/ironic_python_agent/hardware_managers/__init__.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/hardware_managers
-creating /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/api
-copying build/lib/ironic_python_agent/api/__init__.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/api
-copying build/lib/ironic_python_agent/api/app.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/api
-copying build/lib/ironic_python_agent/format_inspector.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
 copying build/lib/ironic_python_agent/utils.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
+copying build/lib/ironic_python_agent/inspect.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
+copying build/lib/ironic_python_agent/version.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
+copying build/lib/ironic_python_agent/hardware.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
+copying build/lib/ironic_python_agent/inject_files.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
+copying build/lib/ironic_python_agent/encoding.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
+copying build/lib/ironic_python_agent/errors.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
+copying build/lib/ironic_python_agent/format_inspector.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
+copying build/lib/ironic_python_agent/tls_utils.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
 creating /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests
+copying build/lib/ironic_python_agent/tests/__init__.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests
 creating /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
-copying build/lib/ironic_python_agent/tests/unit/test_partition_utils.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
-creating /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/hardware_managers
-creating /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/hardware_managers/nvidia
-copying build/lib/ironic_python_agent/tests/unit/hardware_managers/nvidia/test_nvidia_fw_update.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/hardware_managers/nvidia
-copying build/lib/ironic_python_agent/tests/unit/hardware_managers/nvidia/__init__.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/hardware_managers/nvidia
-copying build/lib/ironic_python_agent/tests/unit/hardware_managers/test_mlnx.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/hardware_managers
-copying build/lib/ironic_python_agent/tests/unit/hardware_managers/__init__.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/hardware_managers
-copying build/lib/ironic_python_agent/tests/unit/hardware_managers/test_cna.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/hardware_managers
-copying build/lib/ironic_python_agent/tests/unit/test_disk_utils.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
-copying build/lib/ironic_python_agent/tests/unit/test_multi_hardware_clean_steps.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
-copying build/lib/ironic_python_agent/tests/unit/test_utils.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
-copying build/lib/ironic_python_agent/tests/unit/test_api.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
-copying build/lib/ironic_python_agent/tests/unit/test_agent.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
-copying build/lib/ironic_python_agent/tests/unit/test_disk_partitioner.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
-copying build/lib/ironic_python_agent/tests/unit/dmi_inspector_data.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
-copying build/lib/ironic_python_agent/tests/unit/test_numa_inspector.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
-copying build/lib/ironic_python_agent/tests/unit/test_ironic_api_client.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
-copying build/lib/ironic_python_agent/tests/unit/base.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
-copying build/lib/ironic_python_agent/tests/unit/test_hardware.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
-copying build/lib/ironic_python_agent/tests/unit/test_errors.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
-copying build/lib/ironic_python_agent/tests/unit/test_burnin.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
+copying build/lib/ironic_python_agent/tests/unit/test_netutils.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
 copying build/lib/ironic_python_agent/tests/unit/test_inspector.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
-copying build/lib/ironic_python_agent/tests/unit/test_inject_files.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
-copying build/lib/ironic_python_agent/tests/unit/test_encoding.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
+copying build/lib/ironic_python_agent/tests/unit/test_errors.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
+copying build/lib/ironic_python_agent/tests/unit/test_multi_hardware.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
+copying build/lib/ironic_python_agent/tests/unit/test_ironic_api_client.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
+copying build/lib/ironic_python_agent/tests/unit/test_tls_utils.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
+copying build/lib/ironic_python_agent/tests/unit/test_disk_utils.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
 copying build/lib/ironic_python_agent/tests/unit/test_base.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
+copying build/lib/ironic_python_agent/tests/unit/__init__.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
+copying build/lib/ironic_python_agent/tests/unit/test_inject_files.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
+copying build/lib/ironic_python_agent/tests/unit/test_burnin.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
+copying build/lib/ironic_python_agent/tests/unit/test_api.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
 copying build/lib/ironic_python_agent/tests/unit/test_dmi_inspector.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
+copying build/lib/ironic_python_agent/tests/unit/test_multi_hardware_clean_steps.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
 copying build/lib/ironic_python_agent/tests/unit/test_qemu_img.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
-copying build/lib/ironic_python_agent/tests/unit/test_multi_hardware.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
-copying build/lib/ironic_python_agent/tests/unit/test_format_inspector.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
-copying build/lib/ironic_python_agent/tests/unit/test_netutils.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
-copying build/lib/ironic_python_agent/tests/unit/test_efi_utils.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
-copying build/lib/ironic_python_agent/tests/unit/__init__.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
-copying build/lib/ironic_python_agent/tests/unit/test_tls_utils.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
+copying build/lib/ironic_python_agent/tests/unit/test_utils.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
 copying build/lib/ironic_python_agent/tests/unit/test_raid_utils.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
+copying build/lib/ironic_python_agent/tests/unit/test_hardware.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
+copying build/lib/ironic_python_agent/tests/unit/dmi_inspector_data.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
+copying build/lib/ironic_python_agent/tests/unit/test_format_inspector.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
 creating /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions
-copying build/lib/ironic_python_agent/tests/unit/extensions/test_service.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions
-copying build/lib/ironic_python_agent/tests/unit/extensions/test_deploy.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions
-copying build/lib/ironic_python_agent/tests/unit/extensions/test_log.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions
-copying build/lib/ironic_python_agent/tests/unit/extensions/test_image.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions
-copying build/lib/ironic_python_agent/tests/unit/extensions/test_poll.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions
 copying build/lib/ironic_python_agent/tests/unit/extensions/test_rescue.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions
 copying build/lib/ironic_python_agent/tests/unit/extensions/test_base.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions
-copying build/lib/ironic_python_agent/tests/unit/extensions/test_clean.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions
-copying build/lib/ironic_python_agent/tests/unit/extensions/test_flow.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions
-copying build/lib/ironic_python_agent/tests/unit/extensions/test_standby.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions
 copying build/lib/ironic_python_agent/tests/unit/extensions/__init__.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions
+copying build/lib/ironic_python_agent/tests/unit/extensions/test_standby.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions
+copying build/lib/ironic_python_agent/tests/unit/extensions/test_deploy.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions
+copying build/lib/ironic_python_agent/tests/unit/extensions/test_service.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions
+copying build/lib/ironic_python_agent/tests/unit/extensions/test_log.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions
+copying build/lib/ironic_python_agent/tests/unit/extensions/test_flow.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions
+copying build/lib/ironic_python_agent/tests/unit/extensions/test_clean.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions
+copying build/lib/ironic_python_agent/tests/unit/extensions/test_poll.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions
+copying build/lib/ironic_python_agent/tests/unit/extensions/test_image.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions
+copying build/lib/ironic_python_agent/tests/unit/test_disk_partitioner.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
+copying build/lib/ironic_python_agent/tests/unit/test_numa_inspector.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
+creating /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/hardware_managers
+copying build/lib/ironic_python_agent/tests/unit/hardware_managers/test_cna.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/hardware_managers
+copying build/lib/ironic_python_agent/tests/unit/hardware_managers/__init__.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/hardware_managers
+creating /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/hardware_managers/nvidia
+copying build/lib/ironic_python_agent/tests/unit/hardware_managers/nvidia/test_nvidia_fw_update.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/hardware_managers/nvidia
+copying build/lib/ironic_python_agent/tests/unit/hardware_managers/nvidia/__init__.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/hardware_managers/nvidia
+copying build/lib/ironic_python_agent/tests/unit/hardware_managers/test_mlnx.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/hardware_managers
+copying build/lib/ironic_python_agent/tests/unit/test_encoding.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
+copying build/lib/ironic_python_agent/tests/unit/test_partition_utils.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
+copying build/lib/ironic_python_agent/tests/unit/test_efi_utils.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
+copying build/lib/ironic_python_agent/tests/unit/test_agent.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
+copying build/lib/ironic_python_agent/tests/unit/base.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit
 creating /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/functional
-copying build/lib/ironic_python_agent/tests/functional/base.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/functional
-copying build/lib/ironic_python_agent/tests/functional/__init__.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/functional
 copying build/lib/ironic_python_agent/tests/functional/test_commands.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/functional
-copying build/lib/ironic_python_agent/tests/__init__.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests
-copying build/lib/ironic_python_agent/inject_files.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
+copying build/lib/ironic_python_agent/tests/functional/__init__.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/functional
+copying build/lib/ironic_python_agent/tests/functional/base.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/functional
+copying build/lib/ironic_python_agent/numa_inspector.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
+copying build/lib/ironic_python_agent/raid_utils.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
+copying build/lib/ironic_python_agent/__init__.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
+copying build/lib/ironic_python_agent/burnin.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
+copying build/lib/ironic_python_agent/dmi_inspector.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
+copying build/lib/ironic_python_agent/netutils.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
 creating /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/cmd
-copying build/lib/ironic_python_agent/cmd/agent.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/cmd
 copying build/lib/ironic_python_agent/cmd/inspect.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/cmd
 copying build/lib/ironic_python_agent/cmd/__init__.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/cmd
-copying build/lib/ironic_python_agent/errors.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
-copying build/lib/ironic_python_agent/dmi_inspector.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
-copying build/lib/ironic_python_agent/qemu_img.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
-copying build/lib/ironic_python_agent/hardware.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
-copying build/lib/ironic_python_agent/ironic_api_client.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
-copying build/lib/ironic_python_agent/encoding.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
+copying build/lib/ironic_python_agent/cmd/agent.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/cmd
 copying build/lib/ironic_python_agent/agent.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
-copying build/lib/ironic_python_agent/tls_utils.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
-copying build/lib/ironic_python_agent/netutils.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
-copying build/lib/ironic_python_agent/disk_utils.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
-copying build/lib/ironic_python_agent/inspect.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
-copying build/lib/ironic_python_agent/burnin.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
-copying build/lib/ironic_python_agent/version.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
-copying build/lib/ironic_python_agent/efi_utils.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
-copying build/lib/ironic_python_agent/__init__.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
-copying build/lib/ironic_python_agent/disk_partitioner.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
 copying build/lib/ironic_python_agent/partition_utils.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
-copying build/lib/ironic_python_agent/inspector.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
-copying build/lib/ironic_python_agent/config.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
-copying build/lib/ironic_python_agent/raid_utils.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
-copying build/lib/ironic_python_agent/numa_inspector.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
+copying build/lib/ironic_python_agent/qemu_img.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
 creating /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions
-copying build/lib/ironic_python_agent/extensions/rescue.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions
-copying build/lib/ironic_python_agent/extensions/clean.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions
-copying build/lib/ironic_python_agent/extensions/base.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions
-copying build/lib/ironic_python_agent/extensions/log.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions
-copying build/lib/ironic_python_agent/extensions/service.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions
 copying build/lib/ironic_python_agent/extensions/image.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions
+copying build/lib/ironic_python_agent/extensions/standby.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions
+copying build/lib/ironic_python_agent/extensions/log.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions
+copying build/lib/ironic_python_agent/extensions/clean.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions
+copying build/lib/ironic_python_agent/extensions/__init__.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions
 copying build/lib/ironic_python_agent/extensions/flow.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions
+copying build/lib/ironic_python_agent/extensions/service.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions
 copying build/lib/ironic_python_agent/extensions/deploy.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions
-copying build/lib/ironic_python_agent/extensions/standby.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions
 copying build/lib/ironic_python_agent/extensions/poll.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions
-copying build/lib/ironic_python_agent/extensions/__init__.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/hardware_managers/mlnx.py to mlnx.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/hardware_managers/cna.py to cna.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/hardware_managers/__init__.py to __init__.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/api/__init__.py to __init__.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/api/app.py to app.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/format_inspector.py to format_inspector.cpython-313.pyc
+copying build/lib/ironic_python_agent/extensions/rescue.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions
+copying build/lib/ironic_python_agent/extensions/base.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions
+creating /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/api
+copying build/lib/ironic_python_agent/api/app.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/api
+copying build/lib/ironic_python_agent/api/__init__.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/api
+creating /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/hardware_managers
+copying build/lib/ironic_python_agent/hardware_managers/__init__.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/hardware_managers
+copying build/lib/ironic_python_agent/hardware_managers/mlnx.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/hardware_managers
+copying build/lib/ironic_python_agent/hardware_managers/cna.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/hardware_managers
+copying build/lib/ironic_python_agent/config.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
+copying build/lib/ironic_python_agent/inspector.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
+copying build/lib/ironic_python_agent/disk_utils.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
+copying build/lib/ironic_python_agent/ironic_api_client.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
+copying build/lib/ironic_python_agent/disk_partitioner.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
+copying build/lib/ironic_python_agent/efi_utils.py -> /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/utils.py to utils.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_partition_utils.py to test_partition_utils.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/hardware_managers/nvidia/test_nvidia_fw_update.py to test_nvidia_fw_update.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/hardware_managers/nvidia/__init__.py to __init__.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/hardware_managers/test_mlnx.py to test_mlnx.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/hardware_managers/__init__.py to __init__.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/hardware_managers/test_cna.py to test_cna.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_disk_utils.py to test_disk_utils.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_multi_hardware_clean_steps.py to test_multi_hardware_clean_steps.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_utils.py to test_utils.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_api.py to test_api.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_agent.py to test_agent.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_disk_partitioner.py to test_disk_partitioner.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/dmi_inspector_data.py to dmi_inspector_data.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_numa_inspector.py to test_numa_inspector.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_ironic_api_client.py to test_ironic_api_client.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/base.py to base.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_hardware.py to test_hardware.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_errors.py to test_errors.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_burnin.py to test_burnin.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/inspect.py to inspect.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/version.py to version.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/hardware.py to hardware.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/inject_files.py to inject_files.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/encoding.py to encoding.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/errors.py to errors.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/format_inspector.py to format_inspector.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tls_utils.py to tls_utils.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/__init__.py to __init__.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_netutils.py to test_netutils.cpython-313.pyc
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_inspector.py to test_inspector.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_inject_files.py to test_inject_files.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_encoding.py to test_encoding.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_errors.py to test_errors.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_multi_hardware.py to test_multi_hardware.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_ironic_api_client.py to test_ironic_api_client.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_tls_utils.py to test_tls_utils.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_disk_utils.py to test_disk_utils.cpython-313.pyc
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_base.py to test_base.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/__init__.py to __init__.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_inject_files.py to test_inject_files.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_burnin.py to test_burnin.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_api.py to test_api.cpython-313.pyc
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_dmi_inspector.py to test_dmi_inspector.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_multi_hardware_clean_steps.py to test_multi_hardware_clean_steps.cpython-313.pyc
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_qemu_img.py to test_qemu_img.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_multi_hardware.py to test_multi_hardware.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_format_inspector.py to test_format_inspector.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_netutils.py to test_netutils.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_efi_utils.py to test_efi_utils.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/__init__.py to __init__.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_tls_utils.py to test_tls_utils.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_utils.py to test_utils.cpython-313.pyc
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_raid_utils.py to test_raid_utils.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_service.py to test_service.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_deploy.py to test_deploy.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_log.py to test_log.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_image.py to test_image.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_poll.py to test_poll.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_hardware.py to test_hardware.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/dmi_inspector_data.py to dmi_inspector_data.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_format_inspector.py to test_format_inspector.cpython-313.pyc
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_rescue.py to test_rescue.cpython-313.pyc
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_base.py to test_base.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_clean.py to test_clean.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_flow.py to test_flow.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_standby.py to test_standby.cpython-313.pyc
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/__init__.py to __init__.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/functional/base.py to base.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/functional/__init__.py to __init__.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_standby.py to test_standby.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_deploy.py to test_deploy.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_service.py to test_service.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_log.py to test_log.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_flow.py to test_flow.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_clean.py to test_clean.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_poll.py to test_poll.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_image.py to test_image.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_disk_partitioner.py to test_disk_partitioner.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_numa_inspector.py to test_numa_inspector.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/hardware_managers/test_cna.py to test_cna.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/hardware_managers/__init__.py to __init__.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/hardware_managers/nvidia/test_nvidia_fw_update.py to test_nvidia_fw_update.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/hardware_managers/nvidia/__init__.py to __init__.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/hardware_managers/test_mlnx.py to test_mlnx.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_encoding.py to test_encoding.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_partition_utils.py to test_partition_utils.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_efi_utils.py to test_efi_utils.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_agent.py to test_agent.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/base.py to base.cpython-313.pyc
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/functional/test_commands.py to test_commands.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/__init__.py to __init__.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/inject_files.py to inject_files.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/cmd/agent.py to agent.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/functional/__init__.py to __init__.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/functional/base.py to base.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/numa_inspector.py to numa_inspector.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/raid_utils.py to raid_utils.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/__init__.py to __init__.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/burnin.py to burnin.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/dmi_inspector.py to dmi_inspector.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/netutils.py to netutils.cpython-313.pyc
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/cmd/inspect.py to inspect.cpython-313.pyc
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/cmd/__init__.py to __init__.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/errors.py to errors.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/dmi_inspector.py to dmi_inspector.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/qemu_img.py to qemu_img.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/hardware.py to hardware.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/ironic_api_client.py to ironic_api_client.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/encoding.py to encoding.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/cmd/agent.py to agent.cpython-313.pyc
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/agent.py to agent.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tls_utils.py to tls_utils.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/netutils.py to netutils.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/disk_utils.py to disk_utils.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/inspect.py to inspect.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/burnin.py to burnin.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/version.py to version.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/efi_utils.py to efi_utils.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/__init__.py to __init__.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/disk_partitioner.py to disk_partitioner.cpython-313.pyc
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/partition_utils.py to partition_utils.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/inspector.py to inspector.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/config.py to config.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/raid_utils.py to raid_utils.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/numa_inspector.py to numa_inspector.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/rescue.py to rescue.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/clean.py to clean.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/base.py to base.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/log.py to log.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/service.py to service.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/qemu_img.py to qemu_img.cpython-313.pyc
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/image.py to image.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/standby.py to standby.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/log.py to log.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/clean.py to clean.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/__init__.py to __init__.cpython-313.pyc
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/flow.py to flow.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/service.py to service.cpython-313.pyc
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/deploy.py to deploy.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/standby.py to standby.cpython-313.pyc
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/poll.py to poll.cpython-313.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/__init__.py to __init__.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/rescue.py to rescue.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/base.py to base.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/api/app.py to app.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/api/__init__.py to __init__.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/hardware_managers/__init__.py to __init__.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/hardware_managers/mlnx.py to mlnx.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/hardware_managers/cna.py to cna.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/config.py to config.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/inspector.py to inspector.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/disk_utils.py to disk_utils.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/ironic_api_client.py to ironic_api_client.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/disk_partitioner.py to disk_partitioner.cpython-313.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/efi_utils.py to efi_utils.cpython-313.pyc
 running install_egg_info
 Copying ironic_python_agent.egg-info to /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent-9.14.0.egg-info
 Skipping SOURCES.txt
 running install_scripts
 Installing ironic-collect-introspection-data script to /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/bin
 Installing ironic-python-agent script to /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/bin
-+ pwd
++ for pyvers in ${PYTHON3S}
+++ pwd
 + python3.12 setup.py install --install-layout=deb --root /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp
 /usr/lib/python3/dist-packages/setuptools/__init__.py:94: _DeprecatedInstaller: setuptools.installer and fetch_build_eggs are deprecated.
 !!
@@ -2116,96 +2158,96 @@
 writing top-level names to ironic_python_agent.egg-info/top_level.txt
 [pbr] Reusing existing SOURCES.txt
 running install_lib
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/hardware_managers/mlnx.py to mlnx.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/hardware_managers/cna.py to cna.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/hardware_managers/__init__.py to __init__.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/api/__init__.py to __init__.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/api/app.py to app.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/format_inspector.py to format_inspector.cpython-312.pyc
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/utils.py to utils.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_partition_utils.py to test_partition_utils.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/hardware_managers/nvidia/test_nvidia_fw_update.py to test_nvidia_fw_update.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/hardware_managers/nvidia/__init__.py to __init__.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/hardware_managers/test_mlnx.py to test_mlnx.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/hardware_managers/__init__.py to __init__.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/hardware_managers/test_cna.py to test_cna.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_disk_utils.py to test_disk_utils.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_multi_hardware_clean_steps.py to test_multi_hardware_clean_steps.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_utils.py to test_utils.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_api.py to test_api.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_agent.py to test_agent.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_disk_partitioner.py to test_disk_partitioner.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/dmi_inspector_data.py to dmi_inspector_data.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_numa_inspector.py to test_numa_inspector.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_ironic_api_client.py to test_ironic_api_client.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/base.py to base.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_hardware.py to test_hardware.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_errors.py to test_errors.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_burnin.py to test_burnin.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/inspect.py to inspect.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/version.py to version.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/hardware.py to hardware.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/inject_files.py to inject_files.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/encoding.py to encoding.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/errors.py to errors.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/format_inspector.py to format_inspector.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tls_utils.py to tls_utils.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/__init__.py to __init__.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_netutils.py to test_netutils.cpython-312.pyc
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_inspector.py to test_inspector.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_inject_files.py to test_inject_files.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_encoding.py to test_encoding.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_errors.py to test_errors.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_multi_hardware.py to test_multi_hardware.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_ironic_api_client.py to test_ironic_api_client.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_tls_utils.py to test_tls_utils.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_disk_utils.py to test_disk_utils.cpython-312.pyc
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_base.py to test_base.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/__init__.py to __init__.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_inject_files.py to test_inject_files.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_burnin.py to test_burnin.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_api.py to test_api.cpython-312.pyc
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_dmi_inspector.py to test_dmi_inspector.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_multi_hardware_clean_steps.py to test_multi_hardware_clean_steps.cpython-312.pyc
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_qemu_img.py to test_qemu_img.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_multi_hardware.py to test_multi_hardware.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_format_inspector.py to test_format_inspector.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_netutils.py to test_netutils.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_efi_utils.py to test_efi_utils.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/__init__.py to __init__.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_tls_utils.py to test_tls_utils.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_utils.py to test_utils.cpython-312.pyc
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_raid_utils.py to test_raid_utils.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_service.py to test_service.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_deploy.py to test_deploy.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_log.py to test_log.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_image.py to test_image.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_poll.py to test_poll.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_hardware.py to test_hardware.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/dmi_inspector_data.py to dmi_inspector_data.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_format_inspector.py to test_format_inspector.cpython-312.pyc
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_rescue.py to test_rescue.cpython-312.pyc
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_base.py to test_base.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_clean.py to test_clean.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_flow.py to test_flow.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_standby.py to test_standby.cpython-312.pyc
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/__init__.py to __init__.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/functional/base.py to base.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/functional/__init__.py to __init__.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_standby.py to test_standby.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_deploy.py to test_deploy.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_service.py to test_service.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_log.py to test_log.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_flow.py to test_flow.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_clean.py to test_clean.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_poll.py to test_poll.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/extensions/test_image.py to test_image.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_disk_partitioner.py to test_disk_partitioner.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_numa_inspector.py to test_numa_inspector.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/hardware_managers/test_cna.py to test_cna.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/hardware_managers/__init__.py to __init__.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/hardware_managers/nvidia/test_nvidia_fw_update.py to test_nvidia_fw_update.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/hardware_managers/nvidia/__init__.py to __init__.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/hardware_managers/test_mlnx.py to test_mlnx.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_encoding.py to test_encoding.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_partition_utils.py to test_partition_utils.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_efi_utils.py to test_efi_utils.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/test_agent.py to test_agent.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/unit/base.py to base.cpython-312.pyc
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/functional/test_commands.py to test_commands.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/__init__.py to __init__.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/inject_files.py to inject_files.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/cmd/agent.py to agent.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/functional/__init__.py to __init__.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tests/functional/base.py to base.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/numa_inspector.py to numa_inspector.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/raid_utils.py to raid_utils.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/__init__.py to __init__.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/burnin.py to burnin.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/dmi_inspector.py to dmi_inspector.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/netutils.py to netutils.cpython-312.pyc
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/cmd/inspect.py to inspect.cpython-312.pyc
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/cmd/__init__.py to __init__.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/errors.py to errors.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/dmi_inspector.py to dmi_inspector.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/qemu_img.py to qemu_img.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/hardware.py to hardware.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/ironic_api_client.py to ironic_api_client.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/encoding.py to encoding.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/cmd/agent.py to agent.cpython-312.pyc
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/agent.py to agent.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/tls_utils.py to tls_utils.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/netutils.py to netutils.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/disk_utils.py to disk_utils.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/inspect.py to inspect.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/burnin.py to burnin.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/version.py to version.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/efi_utils.py to efi_utils.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/__init__.py to __init__.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/disk_partitioner.py to disk_partitioner.cpython-312.pyc
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/partition_utils.py to partition_utils.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/inspector.py to inspector.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/config.py to config.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/raid_utils.py to raid_utils.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/numa_inspector.py to numa_inspector.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/rescue.py to rescue.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/clean.py to clean.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/base.py to base.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/log.py to log.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/service.py to service.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/qemu_img.py to qemu_img.cpython-312.pyc
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/image.py to image.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/standby.py to standby.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/log.py to log.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/clean.py to clean.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/__init__.py to __init__.cpython-312.pyc
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/flow.py to flow.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/service.py to service.cpython-312.pyc
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/deploy.py to deploy.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/standby.py to standby.cpython-312.pyc
 byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/poll.py to poll.cpython-312.pyc
-byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/__init__.py to __init__.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/rescue.py to rescue.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/extensions/base.py to base.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/api/app.py to app.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/api/__init__.py to __init__.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/hardware_managers/__init__.py to __init__.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/hardware_managers/mlnx.py to mlnx.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/hardware_managers/cna.py to cna.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/config.py to config.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/inspector.py to inspector.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/disk_utils.py to disk_utils.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/ironic_api_client.py to ironic_api_client.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/disk_partitioner.py to disk_partitioner.cpython-312.pyc
+byte-compiling /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent/efi_utils.py to efi_utils.cpython-312.pyc
 running install_egg_info
 removing '/build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent-9.14.0.egg-info' (and everything under it)
 Copying ironic_python_agent.egg-info to /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages/ironic_python_agent-9.14.0.egg-info
@@ -2213,10 +2255,10 @@
 running install_scripts
 Installing ironic-collect-introspection-data script to /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/bin
 Installing ironic-python-agent script to /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/bin
-+ pwd
-+ rm -rf /build/reproducible-path/ironic-python-agent-9.14.0/debian/python*/usr/lib/python*/dist-packages/*.pth
-+ pwd
-+ rm -rf /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python*/dist-packages/*.pth
+++ pwd
++ rm -rf '/build/reproducible-path/ironic-python-agent-9.14.0/debian/python*/usr/lib/python*/dist-packages/*.pth'
+++ pwd
++ rm -rf '/build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python*/dist-packages/*.pth'
 pkgos-dh_auto_test --no-py2 'ironic_python_agent\.tests\.unit\.(?!test_inspector\.TestWaitForDhcp\.test_timeout)'
 + PKGOS_TEST_PARALLEL=yes
 + PKGOS_TEST_SERIAL=no
@@ -2224,41 +2266,47 @@
 + PYTHON3S=disabled
 + TEST_PARALLEL_OPT=--parallel
 + TEST_SERIAL_OPT=
-+ echo WARNING: --no-py2 is deprecated, and always on.
++ for i in $@
++ case "${1}" in
++ echo 'WARNING: --no-py2 is deprecated, and always on.'
 WARNING: --no-py2 is deprecated, and always on.
 + shift
-+ py3versions -vr
-+ PYTHON3S=3.13 3.12
-+ [ yes = no ]
-+ [ no = yes ]
-+ [ 3.13 = disabled ]
-+ echo 3.13
-+ cut -d. -f1
++ for i in $@
++ case "${1}" in
+++ py3versions -vr
++ PYTHON3S='3.13 3.12'
++ '[' yes = no ']'
++ '[' no = yes ']'
++ for pyvers in ${PYTHON3S}
++ '[' 3.13 = disabled ']'
+++ echo 3.13
+++ cut -d. -f1
 + PYMAJOR=3
-+ echo ===> Testing with python (python3)
++ echo '===> Testing with python (python3)'
 ===> Testing with python (python3)
-+ pwd
-+ [ -d /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages ]
-+ [ -z  ]
-+ pwd
-+ echo Implicitly adding PYTHONPATH=/build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages
+++ pwd
++ '[' -d /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages ']'
++ '[' -z '' ']'
+++ pwd
++ echo 'Implicitly adding PYTHONPATH=/build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages'
 Implicitly adding PYTHONPATH=/build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages
-+ pwd
+++ pwd
 + export PYTHONPATH=/build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages
-+ [ -e .stestr.conf ]
-+ [ -x /usr/bin/python3-stestr ]
++ PYTHONPATH=/build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages
++ '[' -e .stestr.conf ']'
++ '[' -x /usr/bin/python3-stestr ']'
 + STESTR=stestr
 + rm -rf .stestr
-+ + PYTHON=python3.13subunit2pyunit stestr run --parallel --subunit ironic_python_agent\.tests\.unit\.(?!test_inspector\.TestWaitForDhcp\.test_timeout)
-
-   ERROR [root] Command failed: fake_async_command, error: An error occurred: failed
-Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
-    result = self.execute_method(**self.command_params)
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/tests/unit/extensions/test_base.py", line 38, in fake_async_command
-    raise ExecutionError()
-ironic_python_agent.tests.unit.extensions.test_base.ExecutionError: An error occurred: failed
++ PYTHON=python3.13
++ stestr run --parallel --subunit 'ironic_python_agent\.tests\.unit\.(?!test_inspector\.TestWaitForDhcp\.test_timeout)'
++ subunit2pyunit
+   ERROR [ironic_python_agent.extensions.poll] Node lookup data can only be set when the Ironic Python Agent is running in standalone mode.
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image ... ok
+ WARNING [root] Something went wrong when readlink for interface eth2. Error: fake
    ERROR [root] Tried to execute fake.fake_sync_command, agent is still executing Command name: name, params: {}, status: RUNNING, result: None.
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_centos_checksum_md5
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_centos_checksum_md5 ... ok
    ERROR [root] Invalid content error: Invalid request body: baz
 Traceback (most recent call last):
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 268, in execute_command
@@ -2272,6 +2320,18 @@
   File "/usr/lib/python3.13/unittest/mock.py", line 1226, in _execute_mock_call
     raise effect
 ironic_python_agent.errors.InvalidContentError: Invalid request body: baz
+ironic_python_agent.tests.unit.extensions.test_poll.TestPollExtension.test_get_hardware_info_success
+ironic_python_agent.tests.unit.extensions.test_poll.TestPollExtension.test_get_hardware_info_success ... ok
+ironic_python_agent.tests.unit.extensions.test_poll.TestPollExtension.test_set_node_info_not_standalone
+ironic_python_agent.tests.unit.extensions.test_poll.TestPollExtension.test_set_node_info_not_standalone ... ok
+ironic_python_agent.tests.unit.extensions.test_poll.TestPollExtension.test_set_node_info_success
+ironic_python_agent.tests.unit.extensions.test_poll.TestPollExtension.test_set_node_info_success ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestUpdatenvidiaNicFirmwareSettings.test_update_nvidia_nic_firmware_settings_exception
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestUpdatenvidiaNicFirmwareSettings.test_update_nvidia_nic_firmware_settings_exception ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_detect_cna_card
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_detect_cna_card ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_detect_cna_card_execute_error
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_detect_cna_card_execute_error ... ok
    ERROR [root] Command execution error: Command execution failed: foo bar baz
 Traceback (most recent call last):
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 268, in execute_command
@@ -2285,6 +2345,10 @@
   File "/usr/lib/python3.13/unittest/mock.py", line 1226, in _execute_mock_call
     raise effect
 ironic_python_agent.errors.CommandExecutionError: Command execution failed: foo bar baz
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_centos_checksum_sha256
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_centos_checksum_sha256 ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_centos_checksum_sha512
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_centos_checksum_sha512 ... ok
    ERROR [root] Extension do not found
 Traceback (most recent call last):
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 267, in execute_command
@@ -2296,9 +2360,41 @@
     return self._extensions_by_name[name]
            ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
 KeyError: 'do'
-   ERROR [root] Unexpected exception performing deploy step erase_devices. RuntimeError: boom
+ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_busy
+ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_busy ... ok
+ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_command
+ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_command ... ok
+ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_command_invalid_content
+ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_command_invalid_content ... ok
+ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_command_other_exception
+ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_command_other_exception ... ok
+ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_command_success
+ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_command_success ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_detect_cna_card_no_i40e_driver
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_detect_cna_card_no_i40e_driver ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_disable_embedded_lldp_agent_in_cna_card
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_disable_embedded_lldp_agent_in_cna_card ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_empty_file
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_empty_file ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_empty_file_md5
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_empty_file_md5 ... ok
+ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_invalid_command
+ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_invalid_command ... ok
+ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_unknown_extension
+ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_unknown_extension ... ok
+ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step
+ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_failed
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_failed ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_failed_md5
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_failed_md5 ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_disable_embedded_lldp_agent_write_error
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_disable_embedded_lldp_agent_write_error ... ok
+   ERROR [root] Unexpected exception performing clean step erase_devices. RuntimeError: boom
 Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/deploy.py", line 77, in execute_deploy_step
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/clean.py", line 77, in execute_clean_step
     result = hardware.dispatch_to_managers(step['step'], node, ports,
                                            **kwargs)
   File "<string>", line 3, in dispatch_to_managers
@@ -2311,9 +2407,9 @@
   File "/usr/lib/python3.13/unittest/mock.py", line 1226, in _execute_mock_call
     raise effect
 RuntimeError: boom
-   ERROR [root] Command failed: execute_deploy_step, error: Deploy step failed: Unexpected exception performing deploy step erase_devices. RuntimeError: boom
+   ERROR [root] Command failed: execute_clean_step, error: Clean step failed: Unexpected exception performing clean step erase_devices. RuntimeError: boom
 Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/deploy.py", line 77, in execute_deploy_step
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/clean.py", line 77, in execute_clean_step
     result = hardware.dispatch_to_managers(step['step'], node, ports,
                                            **kwargs)
   File "<string>", line 3, in dispatch_to_managers
@@ -2332,24 +2428,16 @@
 Traceback (most recent call last):
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
     result = self.execute_method(**self.command_params)
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/deploy.py", line 88, in execute_deploy_step
-    raise errors.DeploymentError(msg)
-ironic_python_agent.errors.DeploymentError: Deploy step failed: Unexpected exception performing deploy step erase_devices. RuntimeError: boom
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_execution_failure
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_execution_failure ... ok
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_name
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_name ... ok
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_success
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_success ... ok
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_success_without_agent
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_success_without_agent ... ok
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_validation_failure
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_validation_failure ... ok
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_command_map
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_command_map ... ok
-   ERROR [root] Error performing deploy step erase_devices
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/clean.py", line 88, in execute_clean_step
+    raise errors.CleaningError(msg)
+ironic_python_agent.errors.CleaningError: Clean step failed: Unexpected exception performing clean step erase_devices. RuntimeError: boom
+ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_exception
+ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_exception ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_md5
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_md5 ... ok
+   ERROR [root] Error performing clean step erase_devices
 Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/deploy.py", line 77, in execute_deploy_step
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/clean.py", line 77, in execute_clean_step
     result = hardware.dispatch_to_managers(step['step'], node, ports,
                                            **kwargs)
   File "<string>", line 3, in dispatch_to_managers
@@ -2362,11 +2450,11 @@
   File "/usr/lib/python3.13/unittest/mock.py", line 1226, in _execute_mock_call
     raise effect
 ironic_python_agent.errors.BlockDeviceError: Block device caused unknown error: I'm a teapot
-   ERROR [root] Command failed: execute_deploy_step, error: Block device caused unknown error: I'm a teapot
+   ERROR [root] Command failed: execute_clean_step, error: Block device caused unknown error: I'm a teapot
 Traceback (most recent call last):
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
     result = self.execute_method(**self.command_params)
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/deploy.py", line 77, in execute_deploy_step
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/clean.py", line 77, in execute_clean_step
     result = hardware.dispatch_to_managers(step['step'], node, ports,
                                            **kwargs)
   File "<string>", line 3, in dispatch_to_managers
@@ -2379,29 +2467,8 @@
   File "/usr/lib/python3.13/unittest/mock.py", line 1226, in _execute_mock_call
     raise effect
 ironic_python_agent.errors.BlockDeviceError: Block device caused unknown error: I'm a teapot
-ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_busy
-ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_busy ... ok
-ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_command
-ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_command ... ok
-ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_command_invalid_content
-ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_command_invalid_content ... ok
-ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_command_other_exception
-ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_command_other_exception ... ok
-ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_command_success
-ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_command_success ... ok
-ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_invalid_command
-ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_invalid_command ... ok
-ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_unknown_extension
-ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_unknown_extension ... ok
-ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step
-ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step ... ok
-ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_exception
-ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_exception ... ok
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_sync_command_execution_failure
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_sync_command_execution_failure ... ok
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_sync_command_name
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_sync_command_name ... ok
-   ERROR [root] Malformed deploy_step, no "step" key: {}
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_multiple_md5
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_multiple_md5 ... ok
    ERROR [root] Command failed: fake_async_command, error: An error occurred: failed
 Traceback (most recent call last):
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
@@ -2409,21 +2476,91 @@
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/tests/unit/extensions/test_base.py", line 38, in fake_async_command
     raise ExecutionError()
 ironic_python_agent.tests.unit.extensions.test_base.ExecutionError: An error occurred: failed
-   ERROR [root] Command failed: execute_deploy_step, error: Malformed deploy_step, no "step" key: {}
+   ERROR [root] Malformed clean_step, no "step" key: {}
+   ERROR [root] Command failed: execute_clean_step, error: Malformed clean_step, no "step" key: {}
 Traceback (most recent call last):
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
     result = self.execute_method(**self.command_params)
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/deploy.py", line 73, in execute_deploy_step
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/clean.py", line 74, in execute_clean_step
     raise ValueError(msg)
-ValueError: Malformed deploy_step, no "step" key: {}
-   ERROR [ironic_python_agent.extensions.standby] Failed to sync hardware clock: Unexpected error while running command.
+ValueError: Malformed clean_step, no "step" key: {}
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_multiple_sha256
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_multiple_sha256 ... ok
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.001346588134765625 seconds. Error: Received status code 401 from http://example.org, expected 200. Response body: Unauthorized Response headers: <MagicMock name='get().headers' id='4111701488'>
+   ERROR [root] Clean version mismatch for command execute_clean_step
+ WARNING [ironic_python_agent.extensions.standby] Unable to connect to http://example.org, retrying. Error: Error downloading image: Download of image fake_id failed: Received status code 500 from http://example.org, expected 200. Response body: Oops Response headers: <MagicMock name='get().headers' id='4109115992'>
+ WARNING [ironic_python_agent.extensions.standby] Unable to connect to http://example.org, retrying. Error: Error downloading image: Download of image fake_id failed: Received status code 500 from http://example.org, expected 200. Response body: Oops Response headers: <MagicMock name='get().headers' id='4109115992'>
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.008806943893432617 seconds. Error: Received status code 500 from http://example.org, expected 200. Response body: Oops Response headers: <MagicMock name='get().headers' id='4109115992'>
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_multiple_sha512
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_multiple_sha512 ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_unknown_file
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_unknown_file ... ok
+ WARNING [ironic_python_agent.extensions.standby] Unable to connect to http://example.org, retrying. Error: 
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_unknown_file_md5
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_unknown_file_md5 ...  WARNING [ironic_python_agent.extensions.standby] Unable to connect to http://example.org, retrying. Error: Error downloading image: Download of image fake_id failed: Received status code 500 from http://example.org, expected 200. Response body:   Response headers: <Mock name='mock.headers' id='4131872816'>
+ok
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_disable_embedded_lldp_agent_wrong_dir_path
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_disable_embedded_lldp_agent_wrong_dir_path ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_evaluate_hardware_support_no_cna_card_detected
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_evaluate_hardware_support_no_cna_card_detected ... ok
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_execution_failure
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_execution_failure ... ok
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_name
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_name ... ok
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_success
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_success ... ok
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_success_without_agent
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_success_without_agent ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_evaluate_hardware_support_with_collect_lldp_disabled
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_evaluate_hardware_support_with_collect_lldp_disabled ... ok
+ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_fail
+ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_fail ... ok
+ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_no_step
+ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_no_step ... ok
+ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_tuple_result
+ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_tuple_result ... ok
+ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_version_mismatch
+ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_version_mismatch ... ok
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_validation_failure
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_validation_failure ... ok
+ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_with_args
+ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_with_args   ERROR [root] Failed Prerequisite check. Unexpected error while running command.
 Command: None
 Exit code: -
-Stdout: 'boop'
+Stdout: None
 Stderr: None
-   ERROR [root] Unexpected exception performing clean step erase_devices. RuntimeError: boom
+ ... ok
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_command_map
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_command_map ... ok
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_sync_command_execution_failure
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_sync_command_execution_failure ... ok
+ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_get_clean_steps
+ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_get_clean_steps ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_evaluate_hardware_support_with_collect_lldp_enabled
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_evaluate_hardware_support_with_collect_lldp_enabled ... ok
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_sync_command_name
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_sync_command_name ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_invalid_checksum
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_invalid_checksum ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_fail
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_fail ... ok
+ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step
+ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_retries
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_retries ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_retries_success
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_retries_success ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestCheckPrereq.test_check_prereq
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestCheckPrereq.test_check_prereq ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestCheckPrereq.test_check_prereq_exception
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestCheckPrereq.test_check_prereq_exception ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test__query_device
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test__query_device ... ok
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_sync_command_success
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_sync_command_success ... ok
+   ERROR [root] Unexpected exception performing deploy step erase_devices. RuntimeError: boom
 Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/clean.py", line 77, in execute_clean_step
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/deploy.py", line 77, in execute_deploy_step
     result = hardware.dispatch_to_managers(step['step'], node, ports,
                                            **kwargs)
   File "<string>", line 3, in dispatch_to_managers
@@ -2436,9 +2573,11 @@
   File "/usr/lib/python3.13/unittest/mock.py", line 1226, in _execute_mock_call
     raise effect
 RuntimeError: boom
-   ERROR [root] Command failed: execute_clean_step, error: Clean step failed: Unexpected exception performing clean step erase_devices. RuntimeError: boom
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_fw_update_if_needed
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_fw_update_if_needed ... ok
+   ERROR [root] Command failed: execute_deploy_step, error: Deploy step failed: Unexpected exception performing deploy step erase_devices. RuntimeError: boom
 Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/clean.py", line 77, in execute_clean_step
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/deploy.py", line 77, in execute_deploy_step
     result = hardware.dispatch_to_managers(step['step'], node, ports,
                                            **kwargs)
   File "<string>", line 3, in dispatch_to_managers
@@ -2457,13 +2596,28 @@
 Traceback (most recent call last):
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
     result = self.execute_method(**self.command_params)
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/clean.py", line 88, in execute_clean_step
-    raise errors.CleaningError(msg)
-ironic_python_agent.errors.CleaningError: Clean step failed: Unexpected exception performing clean step erase_devices. RuntimeError: boom
- WARNING [ironic_python_agent.extensions.image] Boot mode mismatch: target boot mode is bios, current boot mode is uefi. Installing boot loader may fail or work incorrectly.
-   ERROR [root] Error performing clean step erase_devices
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/deploy.py", line 88, in execute_deploy_step
+    raise errors.DeploymentError(msg)
+ironic_python_agent.errors.DeploymentError: Deploy step failed: Unexpected exception performing deploy step erase_devices. RuntimeError: boom
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_sync_command_validation_failure
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_sync_command_validation_failure ... ok
+ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_exception
+ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_exception ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_fw_update_if_needed_with_reset
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_fw_update_if_needed_with_reset ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_get_nic_psid
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_get_nic_psid ... ok
+   ERROR [root] Command failed: fake_async_command, error: An error occurred: failed
 Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/clean.py", line 77, in execute_clean_step
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
+    result = self.execute_method(**self.command_params)
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/tests/unit/extensions/test_base.py", line 38, in fake_async_command
+    raise ExecutionError()
+ironic_python_agent.tests.unit.extensions.test_base.ExecutionError: An error occurred: failed
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_is_image_changed_true
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_is_image_changed_true ...    ERROR [root] Error performing deploy step erase_devices
+Traceback (most recent call last):
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/deploy.py", line 77, in execute_deploy_step
     result = hardware.dispatch_to_managers(step['step'], node, ports,
                                            **kwargs)
   File "<string>", line 3, in dispatch_to_managers
@@ -2476,11 +2630,14 @@
   File "/usr/lib/python3.13/unittest/mock.py", line 1226, in _execute_mock_call
     raise effect
 ironic_python_agent.errors.BlockDeviceError: Block device caused unknown error: I'm a teapot
-   ERROR [root] Command failed: execute_clean_step, error: Block device caused unknown error: I'm a teapot
+ok
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_wait_async_command_execution_failure
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_wait_async_command_execution_failure ... ok
+   ERROR [root] Command failed: execute_deploy_step, error: Block device caused unknown error: I'm a teapot
 Traceback (most recent call last):
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
     result = self.execute_method(**self.command_params)
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/clean.py", line 77, in execute_clean_step
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/deploy.py", line 77, in execute_deploy_step
     result = hardware.dispatch_to_managers(step['step'], node, ports,
                                            **kwargs)
   File "<string>", line 3, in dispatch_to_managers
@@ -2493,29 +2650,31 @@
   File "/usr/lib/python3.13/unittest/mock.py", line 1226, in _execute_mock_call
     raise effect
 ironic_python_agent.errors.BlockDeviceError: Block device caused unknown error: I'm a teapot
- WARNING [ironic_python_agent.extensions.image] Falling back to fstab entry addition label of UUID. We could not identify which UUID or PARTUUID identifier label should be used, thus UUID will be used.
-   ERROR [root] Clean version mismatch for command execute_deploy_step
-   ERROR [root] Malformed clean_step, no "step" key: {}
-   ERROR [root] Command failed: execute_clean_step, error: Malformed clean_step, no "step" key: {}
+ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_fail
+ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_fail ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_parse_mstflint_query_output
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_parse_mstflint_query_output ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_parse_mstflint_query_output_no_data
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_parse_mstflint_query_output_no_data ... ok
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_wait_async_command_success
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_wait_async_command_success ... ok
+   ERROR [root] Malformed deploy_step, no "step" key: {}
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_parse_mstflint_query_output_with_running_fw
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_parse_mstflint_query_output_with_running_fw ... ok
+   ERROR [root] Command failed: execute_deploy_step, error: Malformed deploy_step, no "step" key: {}
 Traceback (most recent call last):
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
     result = self.execute_method(**self.command_params)
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/clean.py", line 74, in execute_clean_step
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/deploy.py", line 73, in execute_deploy_step
     raise ValueError(msg)
-ValueError: Malformed clean_step, no "step" key: {}
-   ERROR [root] Clean version mismatch for command execute_clean_step
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_sync_command_success
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_sync_command_success ... ok
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_sync_command_validation_failure
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_sync_command_validation_failure ... ok
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_wait_async_command_execution_failure
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_wait_async_command_execution_failure ... ok
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0005624294281005859 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 0 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.0005624294281005859 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.001985788345336914 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 1 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.001985788345336914 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0030918121337890625 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 2 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.0030918121337890625 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ValueError: Malformed deploy_step, no "step" key: {}
+ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_no_step
+ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_no_step ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicsConfig.test_create_settings_map
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicsConfig.test_create_settings_map ... ok
+   ERROR [root] duplicate settings for device ID 1017 
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicsConfig.test_create_settings_map_duplicate_device_id
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicsConfig.test_create_settings_map_duplicate_device_id ... ok
    ERROR [root] Command failed: sleep, error: An error occurred: An unexpected error occurred. Please try back later.
 Traceback (most recent call last):
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
@@ -2532,21 +2691,7 @@
   File "/usr/lib/python3.13/unittest/mock.py", line 1226, in _execute_mock_call
     raise effect
 ironic_python_agent.errors.RESTError: An error occurred: An unexpected error occurred. Please try back later.
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.007753610610961914 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 3 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.007753610610961914 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.008919715881347656 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 4 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.008919715881347656 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_wait_async_command_success
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_wait_async_command_success ... ok
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__add_multi_bootloaders
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__add_multi_bootloaders WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.011079788208007812 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- ... ok
-ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_fail
-ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_fail WARNING [ironic_python_agent.extensions.standby] Image download failed, 5 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.011079788208007812 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- ...  WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.012909889221191406 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
-ok
-ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_no_step
-ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_no_step   ERROR [root] Command failed: start_flow, error: Command execution failed: fake.sleep was failed
+   ERROR [root] Command failed: start_flow, error: Command execution failed: fake.sleep was failed
 Traceback (most recent call last):
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
     result = self.execute_method(**self.command_params)
@@ -2555,53 +2700,49 @@
         "%s was failed" % method
     )
 ironic_python_agent.errors.CommandExecutionError: Command execution failed: fake.sleep was failed
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 6 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.012909889221191406 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- ...  WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.021028518676757812 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
-ok
+   ERROR [root] There is no deviceID provided for this settings
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_advertise_address_provided
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_advertise_address_provided ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicsConfig.test_create_settings_map_invalid_firmware_settings_config
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicsConfig.test_create_settings_map_invalid_firmware_settings_config ... ok
+ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_sleep_flow_failed
+ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_sleep_flow_failed ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicsConfig.test_prepare_nvidia_nic_config
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicsConfig.test_prepare_nvidia_nic_config ... ok
 ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_tuple_result
-ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_tuple_result WARNING [ironic_python_agent.extensions.standby] Image download failed, 7 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.021028518676757812 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- ...  WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.02293872833251953 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
-ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test__message_format_partition_bios
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test__message_format_partition_bios WARNING [ironic_python_agent.extensions.standby] Image download failed, 8 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.02293872833251953 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- ...  WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.027635812759399414 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
-ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test__message_format_partition_uefi
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test__message_format_partition_uefi ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test__sync_clock
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test__sync_clock ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_cache_and_write_image
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_cache_and_write_image ... ok
-   ERROR [ironic_python_agent.extensions.image] Error setting up bootloader. Error meow
-   ERROR [root] Command failed: install_bootloader, error: meow
-Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
-    result = self.execute_method(**self.command_params)
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/image.py", line 721, in install_bootloader
-    _install_grub2(device,
-    ~~~~~~~~~~~~~~^^^^^^^^
-                   root_uuid=root_uuid,
-                   ^^^^^^^^^^^^^^^^^^^^
-                   efi_system_part_uuid=efi_system_part_uuid,
-                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-                   prep_boot_part_uuid=prep_boot_part_uuid,
-                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-                   target_boot_mode=target_boot_mode)
-                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "<string>", line 3, in _install_grub2
-  File "/usr/lib/python3.13/unittest/mock.py", line 1167, in __call__
-    return self._mock_call(*args, **kwargs)
-           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.13/unittest/mock.py", line 1171, in _mock_call
-    return self._execute_mock_call(*args, **kwargs)
-           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.13/unittest/mock.py", line 1226, in _execute_mock_call
-    raise effect
-OSError: meow
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__append_uefi_to_fstab_handles_error
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__append_uefi_to_fstab_handles_error ... ok
-ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_version_mismatch
-ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_version_mismatch ... ok
+ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_tuple_result ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestUpdateNvidiaNicFirmwareImage.test_update_nvidia_nic_firmware_image_exception
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestUpdateNvidiaNicFirmwareImage.test_update_nvidia_nic_firmware_image_exception ... ok
+ WARNING [ironic_python_agent.agent] Cannot get route to host 1.2.1.2: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+ WARNING [ironic_python_agent.agent] Cannot get route to host 1.2.1.2: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+ WARNING [ironic_python_agent.agent] Cannot get route to host 1.2.1.2: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+ WARNING [ironic_python_agent.agent] Cannot get route to host 1.2.1.2: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+ WARNING [ironic_python_agent.agent] Cannot get route to host 1.2.1.2: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+ironic_python_agent.tests.unit.test_base.BlockExecuteTestCase.test_can_mock_execute
+ironic_python_agent.tests.unit.test_base.BlockExecuteTestCase.test_can_mock_execute ... ok
+   ERROR [root] Clean version mismatch for command execute_deploy_step
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_failed
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_failed ... ok
    ERROR [root] Command failed: sleep, error: foo
 Traceback (most recent call last):
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
@@ -2618,7 +2759,10 @@
   File "/usr/lib/python3.13/unittest/mock.py", line 1230, in _execute_mock_call
     raise result
 Exception: foo
-   ERROR [root] Command failed: start_flow, error: Command execution failed: fake.sleep was failed
+ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_version_mismatch
+ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_version_mismatch ... ok
+ironic_python_agent.tests.unit.test_base.BlockExecuteTestCase.test_exception_raised_for_execute
+ironic_python_agent.tests.unit.test_base.BlockExecuteTestCase.test_exception_raised_for_execute   ERROR [root] Command failed: start_flow, error: Command execution failed: fake.sleep was failed
 Traceback (most recent call last):
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
     result = self.execute_method(**self.command_params)
@@ -2627,71 +2771,257 @@
         "%s was failed" % method
     )
 ironic_python_agent.errors.CommandExecutionError: Command execution failed: fake.sleep was failed
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0003361701965332031 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_bios
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_bios WARNING [ironic_python_agent.extensions.standby] Image download failed, 0 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.0003361701965332031 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- ...  WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0050585269927978516 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 1 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.0050585269927978516 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
-ok
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_no_root
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_no_root ...  WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0064928531646728516 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 2 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.0064928531646728516 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
-ok
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_prep
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_prep WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.007850885391235352 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 3 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.007850885391235352 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
-   ERROR [ironic_python_agent.extensions.image] Error setting up bootloader. Error meow
- ... ok
-ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step
-ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.01059269905090332 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 4 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.01059269905090332 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- ...  WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.011371135711669922 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 5 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.011371135711669922 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
-ok
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.012166500091552734 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 6 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.012166500091552734 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
-ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_exception
-ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_exception WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.013309001922607422 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 7 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.013309001922607422 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- ... ok
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.014173507690429688 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
-ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_fail
-ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_fail WARNING [ironic_python_agent.extensions.standby] Image download failed, 8 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.014173507690429688 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
  ... ok
-ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_no_step
-ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_no_step WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.015996932983398438 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_sleep_flow_failed_on_second_command
+ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_sleep_flow_failed_on_second_command ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test__smart_test_status
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test__smart_test_status ... ok
+   ERROR [ironic_python_agent.burnin] SMART test on /dev/sdj failed with 'string'
+ WARNING [ironic_python_agent.agent] Cannot get route to host 1.2.1.2: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test__smart_test_status_missing
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test__smart_test_status_missing WARNING [ironic_python_agent.agent] No route to host 1.2.1.2, route record: Error: some error text
  ... ok
-ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_tuple_result
-ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_tuple_result ... ok
-ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_version_mismatch
-ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_version_mismatch ... ok
-ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_with_args
-ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_with_args ... ok
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_retry
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_retry ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_disk_default
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_disk_default ... ok
 ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_with_args
 ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_with_args ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_disk_no_default
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_disk_no_default ... ok
+   ERROR [ironic_python_agent.burnin] fio (disk) failed with error Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: None
+Stderr: None
+ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_sleep_flow_success
+ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_sleep_flow_success ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_disk_no_fio
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_disk_no_fio ... ok
 ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_get_deploy_steps
 ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_get_deploy_steps ... ok
+ WARNING [ironic_python_agent.agent] Cannot get route to host fc00:1111::1: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+ WARNING [ironic_python_agent.agent] No route to host 1.2.1.2, route record: Error: some error text
+ WARNING [ironic_python_agent.agent] Cannot get route to host fc00:1111::1: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_validate_exts_failed_empty_command_map
+ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_validate_exts_failed_empty_command_map ... ok
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_several_urls_and_retries
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_several_urls_and_retries ... ok
+ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_validate_exts_failed_missing_command
+ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_validate_exts_failed_missing_command ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_disk_smart_test
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_disk_smart_test ... ok
+ironic_python_agent.tests.unit.extensions.test_log.TestLogExtension.test_collect_system_logs
+ironic_python_agent.tests.unit.extensions.test_log.TestLogExtension.test_collect_system_logs ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test__message_format_partition_bios
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test__message_format_partition_bios ... ok
+ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_validate_exts_failed_to_find_extension
+ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_validate_exts_failed_to_find_extension ... ok
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_with_host
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_with_host ... ok
+ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_validate_exts_success
+ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_validate_exts_success ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test__message_format_partition_uefi
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test__message_format_partition_uefi ... ok
+   ERROR [ironic_python_agent.extensions.standby] Failed to sync hardware clock: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boop'
+Stderr: None
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test__sync_clock
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test__sync_clock ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_cache_and_write_image
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_cache_and_write_image ... ok
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_with_ip
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_with_ip ... ok
+ WARNING [ironic_python_agent.extensions.image] Boot mode mismatch: target boot mode is bios, current boot mode is uefi. Installing boot loader may fail or work incorrectly.
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__add_multi_bootloaders
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__add_multi_bootloaders ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_cache_and_write_image_configdirve
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_cache_and_write_image_configdirve ... ok
+ WARNING [ironic_python_agent.extensions.image] Falling back to fstab entry addition label of UUID. We could not identify which UUID or PARTUUID identifier label should be used, thus UUID will be used.
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_with_ipv6
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_with_ipv6 ... ok
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__append_uefi_to_fstab_handles_error
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__append_uefi_to_fstab_handles_error ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image ... ok
-ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_sleep_flow_failed
-ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_sleep_flow_failed ... ok
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_uefi
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_uefi ... ok
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_uefi_grub_failure_api_override
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_uefi_grub_failure_api_override ... ok
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0004658699035644531 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 0 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.0004658699035644531 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.001821279525756836 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 1 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.001821279525756836 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.003620624542236328 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 2 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.003620624542236328 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0048067569732666016 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 3 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.0048067569732666016 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.005976438522338867 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 4 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.005976438522338867 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.007633209228515625 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 5 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.007633209228515625 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_bios
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_bios ... ok
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.010164737701416016 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 6 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.010164737701416016 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.011208295822143555 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 7 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.011208295822143555 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.011998653411865234 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 8 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.011998653411865234 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.012827873229980469 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_bad_basic_auth_conf_credential
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_bad_basic_auth_conf_credential ... ok
-ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_get_clean_steps
-ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_get_clean_steps ... ok
-ironic_python_agent.tests.unit.extensions.test_rescue.TestRescueExtension.test_finalize_rescue
-ironic_python_agent.tests.unit.extensions.test_rescue.TestRescueExtension.test_finalize_rescue ... ok
-   ERROR [root] Rescue Operation failed when writing the hashed rescue password to the password file. Error 
+ WARNING [root] Can't find field vendor for device lo in device class net
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.00023484230041503906 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 0 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.00023484230041503906 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_with_network_interface
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_with_network_interface ... ok
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.00269317626953125 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 1 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.00269317626953125 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0037872791290283203 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 2 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.0037872791290283203 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.004827022552490234 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 3 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.004827022552490234 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.005941867828369141 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 4 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.005941867828369141 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.007082939147949219 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 5 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.007082939147949219 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.008130311965942383 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 6 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.008130311965942383 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.009248495101928711 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 7 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.009248495101928711 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.010268688201904297 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 8 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.010268688201904297 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.011282682418823242 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_bad_basic_auth_image_info_credential
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_bad_basic_auth_image_info_credential ... ok
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0009293556213378906 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 0 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.0009293556213378906 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0022764205932617188 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 1 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.0022764205932617188 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.003275632858276367 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 2 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.003275632858276367 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.004383563995361328 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_no_root
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_no_root ... ok
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 3 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.004383563995361328 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.006713390350341797 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 4 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.006713390350341797 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0075092315673828125 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 5 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.0075092315673828125 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.008302450180053711 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 6 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.008302450180053711 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.009088277816772461 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 7 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.009088277816772461 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.00983285903930664 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 8 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.00983285903930664 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.010666608810424805 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_bad_basic_auth_mixed_credential
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_bad_basic_auth_mixed_credential ... ok
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0003859996795654297 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [root] Can't find field vendor for device lo in device class net
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 0 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.0003859996795654297 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0018618106842041016 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 1 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.0018618106842041016 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.003355741500854492 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 2 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.003355741500854492 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.005006313323974609 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 3 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.005006313323974609 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0061800479888916016 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 4 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.0061800479888916016 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.007066488265991211 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 5 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.007066488265991211 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.007809162139892578 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 6 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.007809162139892578 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_with_network_interface_failed
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_with_network_interface_failed ... ok
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.009662628173828125 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 7 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.009662628173828125 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.011900663375854492 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 8 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.011900663375854492 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ironic_python_agent.tests.unit.test_disk_utils.FixGptStructsTestCases.test_fix_gpt_structs_exc
+ironic_python_agent.tests.unit.test_disk_utils.FixGptStructsTestCases.test_fix_gpt_structs_exc ... ok
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.014987707138061523 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_prep
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_prep ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_bad_basic_auth_mixed_credential_second
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_bad_basic_auth_mixed_credential_second ... ok
+ironic_python_agent.tests.unit.test_disk_utils.FixGptStructsTestCases.test_fix_gpt_structs_fix_not_required
+ironic_python_agent.tests.unit.test_disk_utils.FixGptStructsTestCases.test_fix_gpt_structs_fix_not_required ... ok
+   ERROR [ironic_python_agent.disk_utils] Security: Detected image format was qcow3, but only raw, qcow2 are allowed
+ironic_python_agent.tests.unit.test_disk_utils.FixGptStructsTestCases.test_fix_gpt_structs_fix_required
+ironic_python_agent.tests.unit.test_disk_utils.FixGptStructsTestCases.test_fix_gpt_structs_fix_required ... ok
+ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_format_mismatch
+ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_format_mismatch ... ok
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.002349376678466797 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4112833272'> Response headers: <MagicMock name='get().headers' id='4112833088'>
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 0 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.002349376678466797 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4112833272'> Response headers: <MagicMock name='get().headers' id='4112833088'>
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0051190853118896484 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4112833272'> Response headers: <MagicMock name='get().headers' id='4112833088'>
+ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_format_mismatch_but_disabled
+ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_format_mismatch_but_disabled ... ok
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 1 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.0051190853118896484 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4112833272'> Response headers: <MagicMock name='get().headers' id='4112833088'>
+   ERROR [ironic_python_agent.disk_utils] Security: Detected image format was qcow3, but only raw, qcow2 are allowed
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.00803518295288086 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4112833272'> Response headers: <MagicMock name='get().headers' id='4112833088'>
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 2 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.00803518295288086 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4112833272'> Response headers: <MagicMock name='get().headers' id='4112833088'>
+ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_format_type_disallowed
+ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_format_type_disallowed ... ok
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.010724067687988281 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4112833272'> Response headers: <MagicMock name='get().headers' id='4112833088'>
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 3 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.010724067687988281 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4112833272'> Response headers: <MagicMock name='get().headers' id='4112833088'>
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.013278961181640625 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4112833272'> Response headers: <MagicMock name='get().headers' id='4112833088'>
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 4 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.013278961181640625 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4112833272'> Response headers: <MagicMock name='get().headers' id='4112833088'>
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.015934467315673828 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4112833272'> Response headers: <MagicMock name='get().headers' id='4112833088'>
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 5 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.015934467315673828 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4112833272'> Response headers: <MagicMock name='get().headers' id='4112833088'>
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.01750016212463379 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4112833272'> Response headers: <MagicMock name='get().headers' id='4112833088'>
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_uefi
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_uefi ... ok
+ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_happy_qcow2
+ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_happy_qcow2 ... ok
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 6 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.01750016212463379 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4112833272'> Response headers: <MagicMock name='get().headers' id='4112833088'>
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.021337032318115234 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4112833272'> Response headers: <MagicMock name='get().headers' id='4112833088'>
+ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_happy_raw
+ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_happy_raw ... ok
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 7 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.021337032318115234 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4112833272'> Response headers: <MagicMock name='get().headers' id='4112833088'>
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.023744583129882812 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4112833272'> Response headers: <MagicMock name='get().headers' id='4112833088'>
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 8 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.023744583129882812 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4112833272'> Response headers: <MagicMock name='get().headers' id='4112833088'>
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.02611994743347168 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4112833272'> Response headers: <MagicMock name='get().headers' id='4112833088'>
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_bad_status
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_bad_status ...    ERROR [ironic_python_agent.disk_utils] Security: Unable to safety check image
+ok
+ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_safety_check_fail_but_disabled
+ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_safety_check_fail_but_disabled   ERROR [ironic_python_agent.disk_utils] Security: Image failed safety check
+ ... ok
+ironic_python_agent.tests.unit.test_disk_utils.ImageInspectionTest.test_image_inspection_fail_format_error
+ironic_python_agent.tests.unit.test_disk_utils.ImageInspectionTest.test_image_inspection_fail_format_error ... ok
+ironic_python_agent.tests.unit.test_disk_utils.ImageInspectionTest.test_image_inspection_fail_safety_check
+ironic_python_agent.tests.unit.test_disk_utils.ImageInspectionTest.test_image_inspection_fail_safety_check ... ok
+ironic_python_agent.tests.unit.test_disk_utils.ImageInspectionTest.test_image_inspection_pass
+ironic_python_agent.tests.unit.test_disk_utils.ImageInspectionTest.test_image_inspection_pass ... ok
+   ERROR [ironic_python_agent.extensions.image] Error setting up bootloader. Error meow
+   ERROR [root] Command failed: install_bootloader, error: meow
 Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/rescue.py", line 48, in write_rescue_password
-    with open(PASSWORD_FILE, 'w') as f:
-         ~~~~^^^^^^^^^^^^^^^^^^^^
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
+    result = self.execute_method(**self.command_params)
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/image.py", line 721, in install_bootloader
+    _install_grub2(device,
+    ~~~~~~~~~~~~~~^^^^^^^^
+                   root_uuid=root_uuid,
+                   ^^^^^^^^^^^^^^^^^^^^
+                   efi_system_part_uuid=efi_system_part_uuid,
+                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+                   prep_boot_part_uuid=prep_boot_part_uuid,
+                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+                   target_boot_mode=target_boot_mode)
+                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "<string>", line 3, in _install_grub2
   File "/usr/lib/python3.13/unittest/mock.py", line 1167, in __call__
     return self._mock_call(*args, **kwargs)
            ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
@@ -2700,161 +3030,59 @@
            ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
   File "/usr/lib/python3.13/unittest/mock.py", line 1226, in _execute_mock_call
     raise effect
-OSError
-ironic_python_agent.tests.unit.extensions.test_rescue.TestRescueExtension.test_hashed_passwords
-ironic_python_agent.tests.unit.extensions.test_rescue.TestRescueExtension.test_hashed_passwords ... ok
-ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_sleep_flow_failed_on_second_command
-ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_sleep_flow_failed_on_second_command ... ok
+OSError: meow
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_uefi_grub_failure_api_override
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_uefi_grub_failure_api_override ... ok
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions ... ok
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_disk_label_gpt
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_disk_label_gpt ... ok
+   ERROR [ironic_python_agent.extensions.image] Error setting up bootloader. Error meow
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_gpt_with_prep
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_gpt_with_prep ... ok
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_local_boot
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_local_boot ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_basic_auth_conf_success
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_basic_auth_conf_success ... ok
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_uefi_ignores_grub_failure
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_uefi_ignores_grub_failure ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_bad_basic_auth_image_info_credential
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_bad_basic_auth_image_info_credential ... ok
-ironic_python_agent.tests.unit.extensions.test_rescue.TestRescueExtension.test_write_rescue_password
-ironic_python_agent.tests.unit.extensions.test_rescue.TestRescueExtension.test_write_rescue_password ... ok
-ironic_python_agent.tests.unit.extensions.test_rescue.TestRescueExtension.test_write_rescue_password_ioerror
-ironic_python_agent.tests.unit.extensions.test_rescue.TestRescueExtension.test_write_rescue_password_ioerror ... ok
-ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_sleep_flow_success
-ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_sleep_flow_success ... ok
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_local_boot_gpt_bios
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_local_boot_gpt_bios ... ok
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_local_boot_uefi
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_local_boot_uefi ... ok
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_mbr_with_prep
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_mbr_with_prep ... ok
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_with_ephemeral
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_with_ephemeral ... ok
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_with_iscsi_device
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_with_iscsi_device ... ok
    ERROR [ironic_python_agent.extensions.image] Error setting up bootloader. Error meow
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.00024127960205078125 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_with_local_device
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_with_local_device ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_basic_auth_image_info_success
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_basic_auth_image_info_success ... ok
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_uefi_ignores_grub_failure_api_override
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_uefi_ignores_grub_failure_api_override ... ok
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 0 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.00024127960205078125 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0017981529235839844 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 1 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.0017981529235839844 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0025413036346435547 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 2 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.0025413036346435547 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.004075527191162109 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 3 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.004075527191162109 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.004745006561279297 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 4 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.004745006561279297 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.005429983139038086 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 5 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.005429983139038086 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.006129026412963867 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_apply_net_firmware_update
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_apply_net_firmware_update ... ok
-ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_validate_exts_failed_empty_command_map
-ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_validate_exts_failed_empty_command_map ... ok
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 6 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.006129026412963867 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.008310794830322266 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 7 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.008310794830322266 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.009017467498779297 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 8 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.009017467498779297 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.009721040725708008 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_bad_basic_auth_mixed_credential
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_bad_basic_auth_mixed_credential ... ok
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_with_nvme_device
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_with_nvme_device ... ok
+ironic_python_agent.tests.unit.test_encoding.TestEncoder.test_encoder
+ironic_python_agent.tests.unit.test_encoding.TestEncoder.test_encoder ... ok
    ERROR [ironic_python_agent.extensions.image] Error setting up bootloader. Error meow
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_filter_images
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_filter_images ... ok
-   ERROR [root] Duplicate componentFlavor MT_0000000540
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0003173351287841797 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 0 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.0003173351287841797 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0015828609466552734 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 1 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.0015828609466552734 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.002802133560180664 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 2 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.002802133560180664 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0035774707794189453 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
-ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_validate_exts_failed_missing_command
-ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_validate_exts_failed_missing_command ... ok
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_uefi_ignores_manage_failure
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_uefi_ignores_manage_failure ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_filter_images_duplicate_component_flavor_exception
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_filter_images_duplicate_component_flavor_exception WARNING [ironic_python_agent.extensions.standby] Image download failed, 3 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.0035774707794189453 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- ... ok
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.006278276443481445 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 4 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.006278276443481445 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.006976604461669922 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 5 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.006976604461669922 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.00790548324584961 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 6 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.00790548324584961 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.008582830429077148 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 7 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.008582830429077148 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.009384393692016602 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 8 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.009384393692016602 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.010077476501464844 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_bad_basic_auth_mixed_credential_second
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_bad_basic_auth_mixed_credential_second ... ok
-ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_validate_exts_failed_to_find_extension
-ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_validate_exts_failed_to_find_extension ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_validate_images_schema
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_validate_images_schema ... ok
-   ERROR [root] Invalid parameters for image {'url': 'http://10.10.10.10/firmware_images/fw2.bin', 'checksum': 'a94e683ea16d9ae44768f0a65942234c', 'checksumType': 'sha512', 'component': 'MT_0000000652', 'version': '24.34.1002'},please provide the following parameters url, checksum, checksumType, componentFlavor, version
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_validate_images_schema_invalid_parameter
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_validate_images_schema_invalid_parameter ... ok
-ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_validate_exts_success
-ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_validate_exts_success ... ok
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.003713846206665039 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3020441624'> Response headers: <MagicMock name='get().headers' id='3021860680'>
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 0 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.003713846206665039 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3020441624'> Response headers: <MagicMock name='get().headers' id='3021860680'>
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0048656463623046875 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3020441624'> Response headers: <MagicMock name='get().headers' id='3021860680'>
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 1 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.0048656463623046875 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3020441624'> Response headers: <MagicMock name='get().headers' id='3021860680'>
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.005908012390136719 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3020441624'> Response headers: <MagicMock name='get().headers' id='3021860680'>
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 2 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.005908012390136719 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3020441624'> Response headers: <MagicMock name='get().headers' id='3021860680'>
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.006968259811401367 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3020441624'> Response headers: <MagicMock name='get().headers' id='3021860680'>
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 3 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.006968259811401367 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3020441624'> Response headers: <MagicMock name='get().headers' id='3021860680'>
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.008056163787841797 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3020441624'> Response headers: <MagicMock name='get().headers' id='3021860680'>
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 4 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.008056163787841797 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3020441624'> Response headers: <MagicMock name='get().headers' id='3021860680'>
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.009062528610229492 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3020441624'> Response headers: <MagicMock name='get().headers' id='3021860680'>
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 5 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.009062528610229492 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3020441624'> Response headers: <MagicMock name='get().headers' id='3021860680'>
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.010096311569213867 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3020441624'> Response headers: <MagicMock name='get().headers' id='3021860680'>
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 6 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.010096311569213867 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3020441624'> Response headers: <MagicMock name='get().headers' id='3021860680'>
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.011182308197021484 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3020441624'> Response headers: <MagicMock name='get().headers' id='3021860680'>
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 7 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.011182308197021484 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3020441624'> Response headers: <MagicMock name='get().headers' id='3021860680'>
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.012176036834716797 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3020441624'> Response headers: <MagicMock name='get().headers' id='3021860680'>
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 8 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.012176036834716797 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3020441624'> Response headers: <MagicMock name='get().headers' id='3021860680'>
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.013407707214355469 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3020441624'> Response headers: <MagicMock name='get().headers' id='3021860680'>
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test__query_device
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test__query_device ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_bad_status
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_bad_status ... ok
-ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step
-ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_fw_update_if_needed
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_fw_update_if_needed ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_proxy
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_proxy ... ok
+   ERROR [ironic_python_agent.extensions.standby] Image failed to verify against checksum. location: /tmp/tmplqpmfk3y/fake_id; image ID: fake_id; image checksum: fake-checksum; verification checksum: invalid-checksum
+ironic_python_agent.tests.unit.test_encoding.TestEncoder.test_ironic_lib
+ironic_python_agent.tests.unit.test_encoding.TestEncoder.test_ironic_lib ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_verify_fails
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_verify_fails ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_gen_auth_from_image_info_user_pass_none
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_gen_auth_from_image_info_user_pass_none ... ok
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2 ... ok
-   ERROR [root] Unexpected exception performing service step erase_devices. RuntimeError: boom
-Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/service.py", line 77, in execute_service_step
-    result = hardware.dispatch_to_managers(step['step'], node, ports,
-                                           **kwargs)
-  File "<string>", line 3, in dispatch_to_managers
-  File "/usr/lib/python3.13/unittest/mock.py", line 1167, in __call__
-    return self._mock_call(*args, **kwargs)
-           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.13/unittest/mock.py", line 1171, in _mock_call
-    return self._execute_mock_call(*args, **kwargs)
-           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.13/unittest/mock.py", line 1226, in _execute_mock_call
-    raise effect
-RuntimeError: boom
-   ERROR [root] Command failed: execute_service_step, error: Service step failed: Unexpected exception performing service step erase_devices. RuntimeError: boom
-Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/service.py", line 77, in execute_service_step
-    result = hardware.dispatch_to_managers(step['step'], node, ports,
-                                           **kwargs)
-  File "<string>", line 3, in dispatch_to_managers
-  File "/usr/lib/python3.13/unittest/mock.py", line 1167, in __call__
-    return self._mock_call(*args, **kwargs)
-           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.13/unittest/mock.py", line 1171, in _mock_call
-    return self._execute_mock_call(*args, **kwargs)
-           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.13/unittest/mock.py", line 1226, in _execute_mock_call
-    raise effect
-RuntimeError: boom
-
-During handling of the above exception, another exception occurred:
-
-Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
-    result = self.execute_method(**self.command_params)
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/service.py", line 88, in execute_service_step
-    raise errors.ServicingError(msg)
-ironic_python_agent.errors.ServicingError: Service step failed: Unexpected exception performing service step erase_devices. RuntimeError: boom
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_fw_update_if_needed_with_reset
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_fw_update_if_needed_with_reset ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_basic_auth_conf_success
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_basic_auth_conf_success ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_gen_auth_from_image_info_user_pass_success
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_gen_auth_from_image_info_user_pass_success ... ok
    ERROR [ironic_python_agent.extensions.image] Installing GRUB2 boot loader to device /dev/fake failed with Unexpected error while running command.
 Command: None
 Exit code: -
@@ -2885,119 +3113,16 @@
 Exit code: -
 Stdout: 'boom'
 Stderr: None
-ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_exception
-ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_exception ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_get_nic_psid
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_get_nic_psid ... ok
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_command_fail
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_command_fail ... ok
-   ERROR [root] Error performing service step erase_devices
-Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/service.py", line 77, in execute_service_step
-    result = hardware.dispatch_to_managers(step['step'], node, ports,
-                                           **kwargs)
-  File "<string>", line 3, in dispatch_to_managers
-  File "/usr/lib/python3.13/unittest/mock.py", line 1167, in __call__
-    return self._mock_call(*args, **kwargs)
-           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.13/unittest/mock.py", line 1171, in _mock_call
-    return self._execute_mock_call(*args, **kwargs)
-           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.13/unittest/mock.py", line 1226, in _execute_mock_call
-    raise effect
-ironic_python_agent.errors.BlockDeviceError: Block device caused unknown error: I'm a teapot
-   ERROR [root] Command failed: execute_service_step, error: Block device caused unknown error: I'm a teapot
-Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
-    result = self.execute_method(**self.command_params)
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/service.py", line 77, in execute_service_step
-    result = hardware.dispatch_to_managers(step['step'], node, ports,
-                                           **kwargs)
-  File "<string>", line 3, in dispatch_to_managers
-  File "/usr/lib/python3.13/unittest/mock.py", line 1167, in __call__
-    return self._mock_call(*args, **kwargs)
-           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.13/unittest/mock.py", line 1171, in _mock_call
-    return self._execute_mock_call(*args, **kwargs)
-           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.13/unittest/mock.py", line 1226, in _execute_mock_call
-    raise effect
-ironic_python_agent.errors.BlockDeviceError: Block device caused unknown error: I'm a teapot
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_is_image_changed_true
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_is_image_changed_true ... ok
-ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_fail
-ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_fail ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_basic_auth_image_info_success
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_basic_auth_image_info_success ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_parse_mstflint_query_output
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_parse_mstflint_query_output ... ok
-   ERROR [root] Malformed service_step, no "step" key: {}
-   ERROR [root] Command failed: execute_service_step, error: Malformed service_step, no "step" key: {}
-Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
-    result = self.execute_method(**self.command_params)
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/service.py", line 74, in execute_service_step
-    raise ValueError(msg)
-ValueError: Malformed service_step, no "step" key: {}
-ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_no_step
-ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_no_step ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_parse_mstflint_query_output_no_data
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_parse_mstflint_query_output_no_data ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_parse_mstflint_query_output_with_running_fw
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_parse_mstflint_query_output_with_running_fw ... ok
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_prep
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_prep ... ok
-ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_tuple_result
-ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_tuple_result ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_proxy
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_proxy ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNics.test_nvidia_nics
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNics.test_nvidia_nics ... ok
-   ERROR [root] Clean version mismatch for command execute_service_step
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestUpdatenvidiaNicFirmwareSettings.test_update_nvidia_nic_firmware_settings_exception
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestUpdatenvidiaNicFirmwareSettings.test_update_nvidia_nic_firmware_settings_exception ... ok
-ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_version_mismatch
-ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_version_mismatch ... ok
-   ERROR [ironic_python_agent.extensions.standby] Image failed to verify against checksum. location: /tmp/tmpbeo86cjv/fake_id; image ID: fake_id; image checksum: fake-checksum; verification checksum: invalid-checksum
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_verify_fails
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_verify_fails ... ok
-ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_with_args
-ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_with_args ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_gen_auth_from_image_info_user_pass_none
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_gen_auth_from_image_info_user_pass_none ... ok
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_softraid_bios
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_softraid_bios ... ok
-ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_get_service_steps
-ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_get_service_steps ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_gen_auth_from_image_info_user_pass_success
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_gen_auth_from_image_info_user_pass_success ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_gen_auth_from_oslo_conf_user_pass_none
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_gen_auth_from_oslo_conf_user_pass_none ... ok
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_detect_hardware
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_detect_hardware ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_gen_auth_from_oslo_conf_user_pass_success
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_gen_auth_from_oslo_conf_user_pass_success ... ok
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_detect_hardware_error
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_detect_hardware_error ... ok
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_prep
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_prep ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_get_partition_uuids
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_get_partition_uuids ... ok
- WARNING [ironic_python_agent.extensions.image] GRUB2 will be installed for UEFI on efi partition /dev/md/esp using the install command which does not place Secure Boot signed binaries.
- WARNING [ironic_python_agent.extensions.image] Ignoring GRUB2 boot loader installation failure: Unexpected error while running command.
-Command: grub2-install
-Exit code: 1
-Stdout: ''
-Stderr: 'grub2-install: error: this utility cannot be used for EFI platforms because it does not support UEFI Secure Boot.\n'.
- WARNING [ironic_python_agent.extensions.image] Ignoring GRUB2 boot loader installation failure: Unexpected error while running command.
-Command: grub2-install
-Exit code: 1
-Stdout: ''
-Stderr: 'grub2-install: error: this utility cannot be used for EFI platforms because it does not support UEFI Secure Boot.\n'.
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_detect_hardware_no_mlnx
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_detect_hardware_no_mlnx ... ok
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_advertise_address_provided
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_advertise_address_provided ... ok
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_softraid_uefi_gpt
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_softraid_uefi_gpt ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_image_location
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_image_location ... ok
    ERROR [ironic_python_agent.extensions.standby] Failed to sync hardware clock: Unexpected error while running command.
@@ -3005,13 +3130,11 @@
 Exit code: -
 Stdout: None
 Stderr: None
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_evaluate_hardware_support
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_evaluate_hardware_support   ERROR [ironic_python_agent.extensions.standby] Flushing file system buffers failed. Error: Unexpected error while running command.
+   ERROR [ironic_python_agent.extensions.standby] Flushing file system buffers failed. Error: Unexpected error while running command.
 Command: None
 Exit code: -
 Stdout: None
 Stderr: None
- ... ok
  WARNING [ironic_python_agent.extensions.standby] Failed to sync file system buffers: Command execution failed: Flushing file system buffers failed. Error: Unexpected error while running command.
 Command: None
 Exit code: -
@@ -3022,11 +3145,6 @@
 Exit code: -
 Stdout: None
 Stderr: None, falling back to sysrq-trigger
- WARNING [ironic_python_agent.agent] Cannot get route to host 1.2.1.2: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
    ERROR [root] Command failed: power_off, error: Error rebooting system: Reboot script failed with exit code None. stdout: None. stderr: None.
 Traceback (most recent call last):
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/standby.py", line 1041, in _run_shutdown_command
@@ -3058,32 +3176,10 @@
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/standby.py", line 1045, in _run_shutdown_command
     raise errors.SystemRebootError(e.exit_code, e.stdout, e.stderr)
 ironic_python_agent.errors.SystemRebootError: Error rebooting system: Reboot script failed with exit code None. stdout: None. stderr: None.
- WARNING [ironic_python_agent.agent] Cannot get route to host 1.2.1.2: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
- WARNING [ironic_python_agent.agent] Cannot get route to host 1.2.1.2: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
- WARNING [ironic_python_agent.agent] Cannot get route to host 1.2.1.2: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
- WARNING [ironic_python_agent.agent] Cannot get route to host 1.2.1.2: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_power_off
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_power_off ... ok
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_failed
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_failed ... ok
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_evaluate_hardware_support_no_mlnx
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_evaluate_hardware_support_no_mlnx ... ok
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_softraid_bios
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_softraid_bios ... ok
    ERROR [ironic_python_agent.utils] Failed to sync with ntp server: 192.168.1.1: Unexpected error while running command.
 Command: None
 Exit code: -
@@ -3150,42 +3246,23 @@
 Exit code: -
 Stdout: None
 Stderr: None
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_generate_client_id
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_generate_client_id ... ok
- WARNING [ironic_python_agent.extensions.image] GRUB2 will be installed for UEFI on efi partition /dev/fake1 using the install command which does not place Secure Boot signed binaries.
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_power_off_with_ntp_server
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_power_off_with_ntp_server ... ok
- WARNING [ironic_python_agent.agent] Cannot get route to host 1.2.1.2: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
- WARNING [ironic_python_agent.agent] No route to host 1.2.1.2, route record: Error: some error text
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi ... ok
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_retry
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_retry ... ok
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_clean_steps
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_clean_steps ... ok
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_interface_info
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_interface_info ... ok
+ WARNING [ironic_python_agent.extensions.image] GRUB2 will be installed for UEFI on efi partition /dev/md/esp using the install command which does not place Secure Boot signed binaries.
+ WARNING [ironic_python_agent.extensions.image] Ignoring GRUB2 boot loader installation failure: Unexpected error while running command.
+Command: grub2-install
+Exit code: 1
+Stdout: ''
+Stderr: 'grub2-install: error: this utility cannot be used for EFI platforms because it does not support UEFI Secure Boot.\n'.
+ WARNING [ironic_python_agent.extensions.image] Ignoring GRUB2 boot loader installation failure: Unexpected error while running command.
+Command: grub2-install
+Exit code: 1
+Stdout: ''
+Stderr: 'grub2-install: error: this utility cannot be used for EFI platforms because it does not support UEFI Secure Boot.\n'.
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_image
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_image ... ok
- WARNING [ironic_python_agent.agent] Cannot get route to host fc00:1111::1: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
- WARNING [ironic_python_agent.agent] No route to host 1.2.1.2, route record: Error: some error text
- WARNING [ironic_python_agent.agent] Cannot get route to host fc00:1111::1: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_several_urls_and_retries
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_several_urls_and_retries ... ok
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_interface_info_no_ib_interface
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_interface_info_no_ib_interface ... ok
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_softraid_uefi_gpt
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_softraid_uefi_gpt ... ok
    ERROR [root] Command failed: prepare_image, error: Don't call ironic_lib.utils.execute() / processutils.execute() or similar functions in tests!
 Traceback (most recent call last):
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
@@ -3204,176 +3281,55 @@
         "Don't call ironic_lib.utils.execute() / "
         "processutils.execute() or similar functions in tests!")
 Exception: Don't call ironic_lib.utils.execute() / processutils.execute() or similar functions in tests!
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_image_bad_partition
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_image_bad_partition ... ok
+ WARNING [ironic_python_agent.extensions.image] GRUB2 will be installed for UEFI on efi partition /dev/fake1 using the install command which does not place Secure Boot signed binaries.
+/bin/sh: line 1: mkisofs: command not found
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_image_no_configdrive
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_image_no_configdrive ... ok
+ WARNING [ironic_python_agent.extensions.standby] Failed to call get_disk_identifier: Unable to obtain the root_uuid parameter: The hexdump tool may be missing in IPA: 
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_bad_iso_qcow2
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_bad_iso_qcow2 ... skipped 'mkisofs not installed'
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_image_no_hexdump
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_image_no_hexdump ... ok
  WARNING [ironic_python_agent.extensions.image] GRUB2 will be installed for UEFI on efi partition /dev/fake1 using the install command which does not place Secure Boot signed binaries.
  WARNING [root] Path /dev/disk/by-path is inaccessible, /dev/disk/by-path/* version of block device name is unavailable Cause: [Errno 2] No such file or directory: '/dev/disk/by-path'
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_image_raw_and_stream_false
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_image_raw_and_stream_false ... ok
  WARNING [root] Device /dev/sda1 is inaccessible, skipping... Error: [Errno 2] No such file or directory: '/dev/sda1'
  WARNING [root] Could not find the SCSI address (HCTL) for device /dev/sda1. Skipping
  WARNING [ironic_python_agent.extensions.image] Falling back to fstab entry addition label of UUID. We could not identify which UUID or PARTUUID identifier label should be used, thus UUID will be used.
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_image_bad_partition
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_image_bad_partition ... ok
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_interface_info_no_mac_address
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_interface_info_no_mac_address ... ok
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_fstab
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_fstab ... ok
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_with_host
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_with_host ... ok
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_interface_info_no_mlnx_interface
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_interface_info_no_mlnx_interface ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_image_no_configdrive
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_image_no_configdrive ... ok
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_infiniband_address_to_mac
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_infiniband_address_to_mac ... ok
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_with_ip
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_with_ip ... ok
- WARNING [ironic_python_agent.extensions.standby] Failed to call get_disk_identifier: Unable to obtain the root_uuid parameter: The hexdump tool may be missing in IPA: 
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_image_raw_stream_true
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_image_raw_stream_true ... ok
    ERROR [ironic_python_agent.extensions.image] Installing GRUB2 boot loader to device /dev/fake failed with Unexpected error while running command.
 Command: None
 Exit code: -
 Stdout: 'error'
 Stderr: None.
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_with_ipv6
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_with_ipv6 ... ok
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_mount_fails
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_mount_fails ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_image_no_hexdump
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_image_no_hexdump ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_image_raw_and_stream_false
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_image_raw_and_stream_false ... ok
- WARNING [root] Can't find field vendor for device lo in device class net
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_with_network_interface
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_with_network_interface ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_image_raw_stream_true
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_image_raw_stream_true ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_partition_image
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_partition_image ... ok
  WARNING [ironic_python_agent.extensions.image] GRUB2 will be installed for UEFI on efi partition /dev/fake1 using the install command which does not place Secure Boot signed binaries.
  WARNING [root] Path /dev/disk/by-path is inaccessible, /dev/disk/by-path/* version of block device name is unavailable Cause: [Errno 2] No such file or directory: '/dev/disk/by-path'
  WARNING [root] Device /dev/sda1 is inaccessible, skipping... Error: [Errno 2] No such file or directory: '/dev/sda1'
  WARNING [root] Could not find the SCSI address (HCTL) for device /dev/sda1. Skipping
  WARNING [ironic_python_agent.extensions.image] Falling back to fstab entry addition label of UUID. We could not identify which UUID or PARTUUID identifier label should be used, thus UUID will be used.
- WARNING [root] Can't find field vendor for device lo in device class net
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_no_fstab
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_no_fstab ... ok
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_with_network_interface_failed
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_with_network_interface_failed ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_partition_image
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_partition_image ... ok
-ironic_python_agent.tests.unit.test_agent.TestFromConfig.test_override_urls
-ironic_python_agent.tests.unit.test_agent.TestFromConfig.test_override_urls ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_from_file_reads_minimum
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_from_file_reads_minimum ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_partition_image_raw_and_stream_false
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_partition_image_raw_and_stream_false ... ok
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_loader
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_loader ... ok
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_no_fstab
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_no_fstab ... ok
+/bin/sh: line 1: mkisofs: command not found
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_partition_image_raw_stream_true
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_partition_image_raw_stream_true ... ok
-   ERROR [ironic_python_agent.ironic_api_client] An error occurred while attempting to discover the available Ironic API versions, falling back to using version 1.31
-Traceback (most recent call last):
-  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 463, in resolve
-    return _proxy.query(name, rdtype, raise_on_no_answer=raises,
-           ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-                        use_network=use_network)
-                        ^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 407, in query
-    step(self._resolver.query, qname, rdtype, rdclass, tcp, source, raise_on_no_answer=False)
-         ^^^^^^^^^^^^^^
-  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 347, in _resolver
-    self.clear()
-    ~~~~~~~~~~^^
-  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 355, in clear
-    self._resolver = dns.resolver.Resolver(filename=self._filename)
-                     ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3/dist-packages/dns/resolver.py", line 945, in __init__
-    self.read_resolv_conf(filename)
-    ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^
-  File "/usr/lib/python3/dist-packages/dns/resolver.py", line 1039, in read_resolv_conf
-    raise NoResolverConfiguration("no nameservers")
-dns.resolver.NoResolverConfiguration: no nameservers
-
-During handling of the above exception, another exception occurred:
-
-Traceback (most recent call last):
-  File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 199, in _new_conn
-    sock = connection.create_connection(
-        (self._dns_host, self.port),
-    ...<2 lines>...
-        socket_options=self.socket_options,
-    )
-  File "/usr/lib/python3/dist-packages/urllib3/util/connection.py", line 60, in create_connection
-    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):
-               ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 558, in getaddrinfo
-    qname, addrs = _getaddrinfo_lookup(host, family, flags)
-                   ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 529, in _getaddrinfo_lookup
-    raise err
-  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 518, in _getaddrinfo_lookup
-    answer = resolve(host, qfamily, False, use_network=use_network)
-  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 473, in resolve
-    _raise_new_error(EAI_NODATA_ERROR)
-    ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 100, in _raise_new_error
-    raise error_instance.__class__(*error_instance.args)
-socket.gaierror: [Errno -2] Name or service not known
-
-The above exception was the direct cause of the following exception:
-
-Traceback (most recent call last):
-  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 789, in urlopen
-    response = self._make_request(
-        conn,
-    ...<10 lines>...
-        **response_kw,
-    )
-  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 490, in _make_request
-    raise new_e
-  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 466, in _make_request
-    self._validate_conn(conn)
-    ~~~~~~~~~~~~~~~~~~~^^^^^^
-  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 1095, in _validate_conn
-    conn.connect()
-    ~~~~~~~~~~~~^^
-  File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 693, in connect
-    self.sock = sock = self._new_conn()
-                       ~~~~~~~~~~~~~~^^
-  File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 206, in _new_conn
-    raise NameResolutionError(self.host, self, e) from e
-urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xb3f4d6a8>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)
-
-The above exception was the direct cause of the following exception:
-
-Traceback (most recent call last):
-  File "/usr/lib/python3/dist-packages/requests/adapters.py", line 667, in send
-    resp = conn.urlopen(
-        method=request.method,
-    ...<9 lines>...
-        chunked=chunked,
-    )
-  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 843, in urlopen
-    retries = retries.increment(
-        method, url, error=new_e, _pool=self, _stacktrace=sys.exc_info()[2]
-    )
-  File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 519, in increment
-    raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb3f4d6a8>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
-
-During handling of the above exception, another exception occurred:
-
-Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/ironic_api_client.py", line 130, in _get_ironic_api_version
-    response = self._request('GET', '/')
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/ironic_api_client.py", line 90, in _request
-    resp = self.session.request(method,
-                                request_url,
-    ...<4 lines>...
-                                timeout=CONF.http_request_timeout,
-                                **kwargs)
-  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 589, in request
-    resp = self.send(prep, **send_kwargs)
-  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 703, in send
-    r = adapter.send(request, **kwargs)
-  File "/usr/lib/python3/dist-packages/requests/adapters.py", line 700, in send
-    raise ConnectionError(e, request=request)
-requests.exceptions.ConnectionError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb3f4d6a8>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
- WARNING [ironic_python_agent.agent] Ironic does not support automated TLS
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_iso_9660
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_iso_9660 ... skipped 'mkisofs not installed'
    ERROR [ironic_python_agent.extensions.standby] Failed to sync hardware clock: Unexpected error while running command.
 Command: None
 Exit code: -
@@ -3394,8 +3350,6 @@
 Exit code: -
 Stdout: None
 Stderr: None, falling back to sysrq-trigger
-ironic_python_agent.tests.unit.test_agent.TestBaseAgentVMediaToken.test_run_agent_token_vmedia
-ironic_python_agent.tests.unit.test_agent.TestBaseAgentVMediaToken.test_run_agent_token_vmedia ... ok
    ERROR [root] Command failed: run_image, error: Error rebooting system: Reboot script failed with exit code None. stdout: None. stderr: None.
 Traceback (most recent call last):
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/standby.py", line 1043, in _run_shutdown_command
@@ -3427,14 +3381,11 @@
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/standby.py", line 1045, in _run_shutdown_command
     raise errors.SystemRebootError(e.exit_code, e.stdout, e.stderr)
 ironic_python_agent.errors.SystemRebootError: Error rebooting system: Reboot script failed with exit code None. stdout: None. stderr: None.
+/bin/sh: line 1: mkisofs: command not found
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_run_image
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_run_image ... ok
-ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata
-ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata ... ok
-ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_4096
-ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_4096 ... ok
-ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_ebr
-ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_ebr ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_iso_udf
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_iso_udf ... skipped 'mkisofs not installed'
    ERROR [ironic_python_agent.extensions.standby] Failed to sync hardware clock: Unexpected error while running command.
 Command: None
 Exit code: -
@@ -3455,36 +3406,12 @@
 Exit code: -
 Stdout: None
 Stderr: None, falling back to sysrq-trigger
-ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_sgdisk_fail
-ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_sgdisk_fail ... ok
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_loader
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_loader ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_run_shutdown_command_fails
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_run_shutdown_command_fails ... ok
-ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_tiny_partition
-ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_tiny_partition ... ok
-ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_wipefs_fail
-ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_wipefs_fail ... ok
-ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_wipefs_not_support_force
-ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_wipefs_not_support_force ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_run_shutdown_command_invalid
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_run_shutdown_command_invalid ... ok
- WARNING [ironic_python_agent.extensions.image] Failed to copy grub.cfg file for EFI boot operation. Error copy failed
- WARNING [ironic_python_agent.extensions.image] Failed to copy grub.cfg file for EFI boot operation. Error copy failed
- WARNING [ironic_python_agent.extensions.image] Failed to copy grubenv file. Error: copy failed
-ironic_python_agent.tests.unit.test_disk_utils.ListPartitionsTestCase.test_correct
-ironic_python_agent.tests.unit.test_disk_utils.ListPartitionsTestCase.test_correct ... ok
-ironic_python_agent.tests.unit.test_disk_utils.ListPartitionsTestCase.test_correct_gpt_nvme
-ironic_python_agent.tests.unit.test_disk_utils.ListPartitionsTestCase.test_correct_gpt_nvme ... ok
-ironic_python_agent.tests.unit.test_disk_utils.ListPartitionsTestCase.test_incorrect
-ironic_python_agent.tests.unit.test_disk_utils.ListPartitionsTestCase.test_incorrect ... ok
- WARNING [ironic_python_agent.dmi_inspector] Failed to parse Handle type in dmi output: list index out of range
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_loader_grubcfg_fails
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_loader_grubcfg_fails ... ok
-ironic_python_agent.tests.unit.test_disk_utils.ListPartitionsTestCase.test_incorrect_gpt
-ironic_python_agent.tests.unit.test_disk_utils.ListPartitionsTestCase.test_incorrect_gpt ... ok
-ironic_python_agent.tests.unit.test_agent.TestHeartbeater.test__heartbeat_expected
-ironic_python_agent.tests.unit.test_agent.TestHeartbeater.test__heartbeat_expected ... ok
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_dmidecode_info_bad_data
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_dmidecode_info_bad_data ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_run_shutdown_command_valid
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_run_shutdown_command_valid ... ok
  WARNING [ironic_python_agent.extensions.standby] poweroff command failed with error Unexpected error while running command.
@@ -3492,181 +3419,29 @@
 Exit code: -
 Stdout: ''
 Stderr: None, falling back to sysrq-trigger
+ WARNING [ironic_python_agent.extensions.image] Failed to copy grub.cfg file for EFI boot operation. Error copy failed
+ WARNING [ironic_python_agent.extensions.image] Failed to copy grub.cfg file for EFI boot operation. Error copy failed
+ WARNING [ironic_python_agent.extensions.image] Failed to copy grubenv file. Error: copy failed
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_run_shutdown_command_valid_poweroff_sysrq
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_run_shutdown_command_valid_poweroff_sysrq ... ok
-   ERROR [ironic_python_agent.utils] failed to run dmidecode: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: None
-Stderr: None
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_dmidecode_info_failure
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_dmidecode_info_failure ... ok
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_loader_grubcfg_fails
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_loader_grubcfg_fails ... ok
  WARNING [ironic_python_agent.extensions.standby] reboot command has been ignored, falling back to sysrq-trigger
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_run_shutdown_command_valid_reboot_sysrq
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_run_shutdown_command_valid_reboot_sysrq ... ok
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_dmidecode_info_ok
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_dmidecode_info_ok ... ok
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_parse_dmi_bios
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_parse_dmi_bios ... ok
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_loader_with_grubcfg
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_loader_with_grubcfg ... ok
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_parse_dmi_cpu
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_parse_dmi_cpu ... ok
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_parse_dmi_memory
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_parse_dmi_memory ... ok
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_save_data
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_save_data ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_stream_raw_image_onto_device
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_stream_raw_image_onto_device ... ok
- WARNING [ironic_python_agent.dmi_inspector] Failed to process memory dmi data: 'Handle'
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_save_data_error_handle
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_save_data_error_handle ... ok
- WARNING [ironic_python_agent.dmi_inspector] Failed to process memory dmi data: 'Number Of Devices'
  WARNING [ironic_python_agent.extensions.image] GRUB2 will be installed for UEFI on efi partition /dev/fake1 using the install command which does not place Secure Boot signed binaries.
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_save_data_error_number_of_devices
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_save_data_error_number_of_devices ... ok
-   ERROR [ironic_python_agent.agent] error sending heartbeat to <Mock name='mock.api_urls' id='2999286704'>
-Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/agent.py", line 148, in do_heartbeat
-    self.api.heartbeat(
-    ~~~~~~~~~~~~~~~~~~^
-        uuid=self.agent.get_node_uuid(),
-        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-    ...<2 lines>...
-        generated_cert=self.agent.generated_cert,
-        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-    )
-    ^
-  File "/usr/lib/python3.13/unittest/mock.py", line 1167, in __call__
-    return self._mock_call(*args, **kwargs)
-           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.13/unittest/mock.py", line 1171, in _mock_call
-    return self._execute_mock_call(*args, **kwargs)
-           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.13/unittest/mock.py", line 1226, in _execute_mock_call
-    raise effect
-Exception: uh oh!
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_no_loader
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_no_loader ... ok
-ironic_python_agent.tests.unit.test_agent.TestHeartbeater.test_heartbeat
-ironic_python_agent.tests.unit.test_agent.TestHeartbeater.test_heartbeat ... ok
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_clean_boot_records
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_clean_boot_records ... ok
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_params_validation
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_params_validation ... ok
- WARNING [ironic_python_agent.efi_utils] Empty EFI partition detected.
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_empty_partition_by_uuid
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_empty_partition_by_uuid ... ok
  WARNING [ironic_python_agent.extensions.image] GRUB2 will be installed for UEFI on efi partition /dev/fake1 using the install command which does not place Secure Boot signed binaries.
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_success_no_wait
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_success_no_wait ... ok
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_preserve_failure
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_preserve_failure ... ok
-   ERROR [ironic_python_agent.efi_utils] Could not configure UEFI boot on device /dev/fake: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
-Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/efi_utils.py", line 131, in manage_uefi
-    utils.execute('mount', efi_partition, efi_partition_mount_point)
-    ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "<string>", line 3, in execute
-  File "/usr/lib/python3.13/unittest/mock.py", line 1167, in __call__
-    return self._mock_call(*args, **kwargs)
-           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.13/unittest/mock.py", line 1171, in _mock_call
-    return self._execute_mock_call(*args, **kwargs)
-           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.13/unittest/mock.py", line 1226, in _execute_mock_call
-    raise effect
-oslo_concurrency.processutils.ProcessExecutionError: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_failure
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_failure ... ok
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_success_with_false_wait
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_success_with_false_wait ... ok
-   ERROR [ironic_python_agent.efi_utils] Could not configure UEFI boot on device /dev/fake: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
-Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/efi_utils.py", line 185, in manage_uefi
-    _run_efibootmgr(valid_efi_bootloaders, efi_dev, efi_part,
-    ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-                    efi_partition_mount_point)
-                    ^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/efi_utils.py", line 351, in _run_efibootmgr
-    boot_records = list(get_boot_records())
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/efi_utils.py", line 282, in get_boot_records
-    efi_output = utils.execute('efibootmgr', '-v', binary=True)
-  File "<string>", line 3, in execute
-  File "/usr/lib/python3.13/unittest/mock.py", line 1167, in __call__
-    return self._mock_call(*args, **kwargs)
-           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.13/unittest/mock.py", line 1171, in _mock_call
-    return self._execute_mock_call(*args, **kwargs)
-           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.13/unittest/mock.py", line 1230, in _execute_mock_call
-    raise result
-oslo_concurrency.processutils.ProcessExecutionError: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
-   ERROR [ironic_python_agent.efi_utils] Umounting efi system partition failed. Attempted 3 times. Error: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'no umount'
-Stderr: None
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_failure_after_failure
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_failure_after_failure ... ok
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_success_with_true_wait
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_success_with_true_wait ...  WARNING [ironic_python_agent.extensions.image] GRUB2 will be installed for UEFI on efi partition /dev/fake1 using the install command which does not place Secure Boot signed binaries.
-ok
+ WARNING [ironic_python_agent.extensions.image] GRUB2 will be installed for UEFI on efi partition /dev/fake1 using the install command which does not place Secure Boot signed binaries.
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_preserve_failure2
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_preserve_failure2 ... ok
-   ERROR [ironic_python_agent.efi_utils] Could not configure UEFI boot on device /dev/fake: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
-Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/efi_utils.py", line 185, in manage_uefi
-    _run_efibootmgr(valid_efi_bootloaders, efi_dev, efi_part,
-    ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-                    efi_partition_mount_point)
-                    ^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/efi_utils.py", line 351, in _run_efibootmgr
-    boot_records = list(get_boot_records())
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/efi_utils.py", line 282, in get_boot_records
-    efi_output = utils.execute('efibootmgr', '-v', binary=True)
-  File "<string>", line 3, in execute
-  File "/usr/lib/python3.13/unittest/mock.py", line 1167, in __call__
-    return self._mock_call(*args, **kwargs)
-           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.13/unittest/mock.py", line 1171, in _mock_call
-    return self._execute_mock_call(*args, **kwargs)
-           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.13/unittest/mock.py", line 1230, in _execute_mock_call
-    raise result
-oslo_concurrency.processutils.ProcessExecutionError: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_failure_after_mount
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_failure_after_mount ... ok
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_validation
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_validation ... ok
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_found_csv
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_found_csv ... ok
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_with_token
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_with_token ... ok
  WARNING [ironic_python_agent.extensions.image] GRUB2 will be installed for UEFI on efi partition /dev/fake1 using the install command which does not place Secure Boot signed binaries.
    ERROR [ironic_python_agent.extensions.image] Installing GRUB2 boot loader to device /dev/fake failed with Unexpected error while running command.
 Command: None
@@ -3680,122 +3455,37 @@
 Stderr: None
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_umount_fails
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_umount_fails ... ok
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_get_boot_records
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_get_boot_records ... ok
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__is_bootloader_loaded
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__is_bootloader_loaded ... ok
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_with_token_invalid
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_with_token_invalid ... ok
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_no_partition
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_no_partition ... ok
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__is_bootloader_loaded_empty
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__is_bootloader_loaded_empty ... ok
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_get_agent_status
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_get_agent_status ... ok
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__is_bootloader_loaded_not_bootable
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__is_bootloader_loaded_not_bootable ... ok
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_get_command_result
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_get_command_result ... ok
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_nvme_device
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_nvme_device ... ok
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__is_bootloader_loaded_uefi_mode
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__is_bootloader_loaded_uefi_mode ... ok
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_list_command_results
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_list_command_results ... ok
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_ok
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_ok ... ok
  WARNING [ironic_python_agent.extensions.image] Boot mode mismatch: target boot mode is bios, current boot mode is uefi. Installing boot loader may fail or work incorrectly.
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__uefi_bootloader_find_partition
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__uefi_bootloader_find_partition ... ok
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_not_found
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_not_found ... ok
  WARNING [ironic_python_agent.extensions.image] Boot mode mismatch: target boot mode is bios, current boot mode is uefi. Installing boot loader may fail or work incorrectly.
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_software_raid
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_software_raid ... ok
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__uefi_bootloader_given_partition
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__uefi_bootloader_given_partition ... ok
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_root
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_root ... ok
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_wholedisk
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_wholedisk ... ok
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_v1_root
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_v1_root ... ok
-ironic_python_agent.tests.unit.test_encoding.TestSerializable.test_baseclass_serialize
-ironic_python_agent.tests.unit.test_encoding.TestSerializable.test_baseclass_serialize ... ok
-ironic_python_agent.tests.unit.test_encoding.TestSerializable.test_childclass_serialize
-ironic_python_agent.tests.unit.test_encoding.TestSerializable.test_childclass_serialize ... ok
-ironic_python_agent.tests.unit.test_base.DontBlockExecuteTestCase.test_no_exception_raised_for_execute
-ironic_python_agent.tests.unit.test_base.DontBlockExecuteTestCase.test_no_exception_raised_for_execute ... ok
-ironic_python_agent.tests.unit.test_disk_utils.GetDeviceByteSizeTestCase.test_get_dev_byte_size
-ironic_python_agent.tests.unit.test_disk_utils.GetDeviceByteSizeTestCase.test_get_dev_byte_size ... ok
-   ERROR [ironic_python_agent.disk_utils] Security: Unable to safety check image
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_capture_region
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_capture_region ... ok
-ironic_python_agent.tests.unit.test_disk_utils.ImageInspectionTest.test_image_inspection_fail_format_error
-ironic_python_agent.tests.unit.test_disk_utils.ImageInspectionTest.test_image_inspection_fail_format_error ... ok
-   ERROR [ironic_python_agent.disk_utils] Security: Image failed safety check
-ironic_python_agent.tests.unit.test_disk_utils.ImageInspectionTest.test_image_inspection_fail_safety_check
-ironic_python_agent.tests.unit.test_disk_utils.ImageInspectionTest.test_image_inspection_fail_safety_check ... ok
-ironic_python_agent.tests.unit.test_disk_utils.ImageInspectionTest.test_image_inspection_pass
-ironic_python_agent.tests.unit.test_disk_utils.ImageInspectionTest.test_image_inspection_pass ... ok
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_get_inspector
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_get_inspector ... ok
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions ... ok
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_disk_label_gpt
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_disk_label_gpt ... ok
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_gpt_with_prep
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_gpt_with_prep ... ok
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_local_boot
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_local_boot ... ok
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_local_boot_gpt_bios
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_local_boot_gpt_bios ... ok
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_local_boot_uefi
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_local_boot_uefi ... ok
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_mbr_with_prep
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_mbr_with_prep ... ok
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_with_ephemeral
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_with_ephemeral ... ok
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_with_iscsi_device
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_with_iscsi_device ... ok
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_info_wrapper_file_like
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_info_wrapper_file_like ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qcow2
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qcow2 ... ok
+ WARNING [ironic_python_agent.format_inspector] Found unknown feature bit in byte 7: 0b0/0b0
+ WARNING [ironic_python_agent.format_inspector] Found unknown feature bit in byte 0: 0b0/0b1111
  WARNING [ironic_python_agent.extensions.image] Boot mode mismatch: target boot mode is bios, current boot mode is uefi. Installing boot loader may fail or work incorrectly.
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_with_local_device
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_with_local_device ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qcow2_feature_flag_checks
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qcow2_feature_flag_checks ... ok
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__uefi_bootloader_with_entry_removal
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__uefi_bootloader_with_entry_removal ... ok
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_with_nvme_device
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_with_nvme_device ... ok
-ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_block_uuid
-ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_block_uuid ... ok
-ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_block_uuid_fallback_to_uuid
-ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_block_uuid_fallback_to_uuid ... ok
-ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_count_mbr_partitions
-ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_count_mbr_partitions ... ok
-ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_count_mbr_partitions_no_logical_partitions
-ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_count_mbr_partitions_no_logical_partitions ... ok
-ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_count_mbr_partitions_wrong_partition_table
-ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_count_mbr_partitions_wrong_partition_table ... ok
-   ERROR [ironic_python_agent.disk_utils] Unable to stat device /dev/disk/by-path/ip-1.2.3.4:5678-iscsi-iqn.fake-lun-9 after attempting to verify 2 times.
-ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_is_block_device_attempts
-ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_is_block_device_attempts ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qcow2_invalid
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qcow2_invalid ... ok
  WARNING [ironic_python_agent.extensions.image] Boot mode mismatch: target boot mode is bios, current boot mode is uefi. Installing boot loader may fail or work incorrectly.
-   ERROR [ironic_python_agent.disk_utils] Unable to stat device /dev/disk/by-path/ip-1.2.3.4:5678-iscsi-iqn.fake-lun-9 after attempting to verify 3 times.
-ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_is_block_device_raises
-ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_is_block_device_raises ... ok
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__uefi_bootloader_with_entry_removal_lenovo
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__uefi_bootloader_with_entry_removal_lenovo ... ok
-   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: fail
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_info_wrapper_file_like_eats_error
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_info_wrapper_file_like_eats_error ... ok
-ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_is_block_device_works
-ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_is_block_device_works ... ok
  WARNING [ironic_python_agent.extensions.image] Boot mode mismatch: target boot mode is bios, current boot mode is uefi. Installing boot loader may fail or work incorrectly.
  WARNING [ironic_python_agent.extensions.image] efibootmgr is not available in the ramdisk
    ERROR [ironic_python_agent.extensions.image] Error setting up bootloader. Error 
-ironic_python_agent.tests.unit.test_efi_utils.TestRunEfiBootmgr.test__run_efibootmgr
-ironic_python_agent.tests.unit.test_efi_utils.TestRunEfiBootmgr.test__run_efibootmgr ... ok
    ERROR [root] Command failed: install_bootloader, error: 
 Traceback (most recent call last):
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
@@ -3834,202 +3524,17 @@
 FileNotFoundError
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test_install_bootloader_failure
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test_install_bootloader_failure ... ok
-ironic_python_agent.tests.unit.test_efi_utils.TestRunEfiBootmgr.test__run_efibootmgr_no_bootloaders
-ironic_python_agent.tests.unit.test_efi_utils.TestRunEfiBootmgr.test__run_efibootmgr_no_bootloaders ... ok
-ironic_python_agent.tests.unit.extensions.test_log.TestLogExtension.test_collect_system_logs
-ironic_python_agent.tests.unit.extensions.test_log.TestLogExtension.test_collect_system_logs ... ok
-ironic_python_agent.tests.unit.test_encoding.TestSerializableComparable.test_childclass_equal
-ironic_python_agent.tests.unit.test_encoding.TestSerializableComparable.test_childclass_equal ... ok
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_info_wrapper_iter_like
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_info_wrapper_iter_like ... ok
-ironic_python_agent.tests.unit.extensions.test_poll.TestPollExtension.test_get_hardware_info_success
-ironic_python_agent.tests.unit.extensions.test_poll.TestPollExtension.test_get_hardware_info_success ... ok
-ironic_python_agent.tests.unit.test_encoding.TestSerializableComparable.test_childclass_hash
-ironic_python_agent.tests.unit.test_encoding.TestSerializableComparable.test_childclass_hash ... ok
-   ERROR [ironic_python_agent.extensions.poll] Node lookup data can only be set when the Ironic Python Agent is running in standalone mode.
-ironic_python_agent.tests.unit.test_encoding.TestSerializableComparable.test_childclass_notequal
-ironic_python_agent.tests.unit.test_encoding.TestSerializableComparable.test_childclass_notequal ... ok
-ironic_python_agent.tests.unit.extensions.test_poll.TestPollExtension.test_set_node_info_not_standalone
-ironic_python_agent.tests.unit.extensions.test_poll.TestPollExtension.test_set_node_info_not_standalone ... ok
-ironic_python_agent.tests.unit.test_errors.TestErrors.test_RESTError
-ironic_python_agent.tests.unit.test_errors.TestErrors.test_RESTError ... ok
-ironic_python_agent.tests.unit.extensions.test_poll.TestPollExtension.test_set_node_info_success
-ironic_python_agent.tests.unit.extensions.test_poll.TestPollExtension.test_set_node_info_success ... ok
-   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: fail
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_info_wrapper_iter_like_eats_error
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_info_wrapper_iter_like_eats_error ... ok
-ironic_python_agent.tests.unit.test_errors.TestErrors.test_RESTError_details
-ironic_python_agent.tests.unit.test_errors.TestErrors.test_RESTError_details ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image ... ok
-ironic_python_agent.tests.unit.test_errors.TestErrors.test_error_classes
-ironic_python_agent.tests.unit.test_errors.TestErrors.test_error_classes ... ok
-ironic_python_agent.tests.unit.test_errors.TestErrors.test_error_string
-ironic_python_agent.tests.unit.test_errors.TestErrors.test_error_string ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_centos_checksum_md5
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_centos_checksum_md5 ... ok
-ironic_python_agent.tests.unit.test_hardware.TestAPIClientSaveAndUse.test_save_api_client
-ironic_python_agent.tests.unit.test_hardware.TestAPIClientSaveAndUse.test_save_api_client ... ok
-/bin/sh: 1: mkisofs: not found
-ironic_python_agent.tests.unit.test_hardware.TestAPIClientSaveAndUse.test_update_node_cache
-ironic_python_agent.tests.unit.test_hardware.TestAPIClientSaveAndUse.test_update_node_cache ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_centos_checksum_sha256
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_centos_checksum_sha256 ... ok
- WARNING [root] The root device was not detected in 27 seconds
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_bad_iso_qcow2
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_bad_iso_qcow2 ... skipped 'mkisofs not installed'
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_centos_checksum_sha512
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_centos_checksum_sha512 ... ok
-ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_disks_timeout
-ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_disks_timeout ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum ... ok
- WARNING [root] The root device was not detected in 45 seconds
-ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_disks_timeout_configured
-ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_disks_timeout_configured ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_empty_file
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_empty_file ... ok
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_from_file_reads_minimum
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_from_file_reads_minimum ... ok
- WARNING [root] The root device was not detected in 27 seconds
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_empty_file_md5
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_empty_file_md5 ... ok
-ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_disks_timeout_unconfigured
-ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_disks_timeout_unconfigured ... ok
-/bin/sh: 1: mkisofs: not found
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_iso_9660
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_iso_9660 ... skipped 'mkisofs not installed'
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_failed
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_failed ... ok
-/bin/sh: 1: mkisofs: not found
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_iso_udf
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_iso_udf ... skipped 'mkisofs not installed'
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_failed_md5
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_failed_md5 ... ok
-ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_no_wait_for_disks
-ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_no_wait_for_disks ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_md5
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_md5 ... ok
-ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_waits_for_disks
-ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_waits_for_disks ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_multiple_md5
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_multiple_md5 ... ok
-   ERROR [ironic_python_agent.extensions.standby] Timeout reached waiting for a chunk of data from a remote server.
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 0 of 2: Error downloading image: Download of image fake_id failed: Unable to write image to device /dev/foo. Error: Error downloading image: Download of image fake_id failed: Timed out reading next chunk from webserver
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_multiple_sha256
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_multiple_sha256 ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_multiple_sha512
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_multiple_sha512 ... ok
-ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_waits_for_disks_configured
-ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_waits_for_disks_configured ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_unknown_file
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_unknown_file ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_unknown_file_md5
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_unknown_file_md5 ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_invalid_checksum
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_invalid_checksum ... ok
-ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_waits_for_disks_nonconfigured
-ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_waits_for_disks_nonconfigured ... ok
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0015859603881835938 seconds. Error: Received status code 401 from http://example.org, expected 200. Response body: Unauthorized Response headers: <MagicMock name='get().headers' id='3019056256'>
-ironic_python_agent.tests.unit.test_hardware.TestListHardwareInfo.test_caching
-ironic_python_agent.tests.unit.test_hardware.TestListHardwareInfo.test_caching ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_fail
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_fail ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_delete
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_delete ... ok
- WARNING [ironic_python_agent.extensions.standby] Unable to connect to http://example.org, retrying. Error: Error downloading image: Download of image fake_id failed: Received status code 500 from http://example.org, expected 200. Response body: Oops Response headers: <MagicMock name='get().headers' id='3020638600'>
- WARNING [ironic_python_agent.extensions.standby] Unable to connect to http://example.org, retrying. Error: Error downloading image: Download of image fake_id failed: Received status code 500 from http://example.org, expected 200. Response body: Oops Response headers: <MagicMock name='get().headers' id='3020638600'>
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.003206014633178711 seconds. Error: Received status code 500 from http://example.org, expected 200. Response body: Oops Response headers: <MagicMock name='get().headers' id='3020638600'>
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_retries
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_retries ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_delete_not_exists
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_delete_not_exists ... ok
- WARNING [ironic_python_agent.extensions.standby] Unable to connect to http://example.org, retrying. Error: 
- WARNING [ironic_python_agent.extensions.standby] Unable to connect to http://example.org, retrying. Error: Error downloading image: Download of image fake_id failed: Received status code 500 from http://example.org, expected 200. Response body:   Response headers: <Mock name='mock.headers' id='3018971896'>
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_retries_success
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_retries_success ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_modes
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_modes ... ok
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_detect_cna_card
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_detect_cna_card ... ok
- WARNING [root] Something went wrong when readlink for interface eth2. Error: fake
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_modes_exists
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_modes_exists ... ok
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_detect_cna_card_execute_error
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_detect_cna_card_execute_error ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_on
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_on ... ok
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_detect_cna_card_no_i40e_driver
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_detect_cna_card_no_i40e_driver ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_owner
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_owner ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_owner_and_group
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_owner_and_group ... ok
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_disable_embedded_lldp_agent_in_cna_card
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_disable_embedded_lldp_agent_in_cna_card ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_url
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_url ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_url_formatting
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_url_formatting ... ok
- WARNING [ironic_python_agent.inspector] Failed to gather vendor id, product id or pci class from PCI device bar: 
- WARNING [ironic_python_agent.inspector] Wrong format of vendor id, product id or pci class in PCI device baz: 
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_disable_embedded_lldp_agent_write_error
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_disable_embedded_lldp_agent_write_error ... ok
-ironic_python_agent.tests.unit.test_inspector.TestCollectPciDevicesInfo.test_bad_pci_device_info
-ironic_python_agent.tests.unit.test_inspector.TestCollectPciDevicesInfo.test_bad_pci_device_info ... ok
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qcow2
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qcow2 ... ok
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_disable_embedded_lldp_agent_wrong_dir_path
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_disable_embedded_lldp_agent_wrong_dir_path ... ok
- WARNING [ironic_python_agent.format_inspector] Found unknown feature bit in byte 7: 0b0/0b0
- WARNING [ironic_python_agent.format_inspector] Found unknown feature bit in byte 0: 0b0/0b1111
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qcow2_feature_flag_checks
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qcow2_feature_flag_checks ... ok
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qcow2_invalid
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qcow2_invalid ... ok
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_evaluate_hardware_support_no_cna_card_detected
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_evaluate_hardware_support_no_cna_card_detected ... ok
-ironic_python_agent.tests.unit.test_inspector.TestCollectPciDevicesInfo.test_success
-ironic_python_agent.tests.unit.test_inspector.TestCollectPciDevicesInfo.test_success ... ok
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_evaluate_hardware_support_with_collect_lldp_disabled
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_evaluate_hardware_support_with_collect_lldp_disabled ... ok
- WARNING [ironic_python_agent.inspector] Failed to gather numa_node id from PCI device foo: 
- WARNING [ironic_python_agent.inspector] Failed to gather numa_node id from PCI device bar: 
-ironic_python_agent.tests.unit.test_inspector.TestCollectPciDevicesInfo.test_success_numa_ioerror
-ironic_python_agent.tests.unit.test_inspector.TestCollectPciDevicesInfo.test_success_numa_ioerror ... ok
-   ERROR [ironic_python_agent.utils] Failed to get list of PCI devices: 
-ironic_python_agent.tests.unit.test_inspector.TestCollectPciDevicesInfo.test_wrong_path
-ironic_python_agent.tests.unit.test_inspector.TestCollectPciDevicesInfo.test_wrong_path ... ok
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_evaluate_hardware_support_with_collect_lldp_enabled
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_evaluate_hardware_support_with_collect_lldp_enabled ... ok
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qcow2_safety_checks
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qcow2_safety_checks ... ok
-ironic_python_agent.tests.unit.test_multi_hardware.TestNoHardwareManagerLoading.test_no_managers_found
-ironic_python_agent.tests.unit.test_multi_hardware.TestNoHardwareManagerLoading.test_no_managers_found ... ok
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info ... ok
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qed_always_unsafe
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qed_always_unsafe ... ok
- WARNING [ironic_python_agent.netutils] LLDP timed out, remaining interfaces: [('eth0', <Mock id='3018643664'>), ('eth1', <Mock id='3018644032'>)]
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_empty
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_empty ... ok
- WARNING [ironic_python_agent.netutils] Trailing byte received in an LLDP package: b'5'
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_malformed
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_malformed ... ok
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_multiple
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_multiple ... ok
- WARNING [ironic_python_agent.netutils] LLDP timed out, remaining interfaces: [('eth1', <Mock id='3020605648'>)]
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_one_empty_interface
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_one_empty_interface ... ok
-   ERROR [ironic_python_agent.netutils] Socket for network interface eth0 said that it was ready to read we were unable to read from the socket while trying to get LLDP packet. Skipping this network interface.
+ironic_python_agent.tests.unit.extensions.test_rescue.TestRescueExtension.test_finalize_rescue
+ironic_python_agent.tests.unit.extensions.test_rescue.TestRescueExtension.test_finalize_rescue ... ok
+ironic_python_agent.tests.unit.extensions.test_rescue.TestRescueExtension.test_hashed_passwords
+ironic_python_agent.tests.unit.extensions.test_rescue.TestRescueExtension.test_hashed_passwords ... ok
+ironic_python_agent.tests.unit.extensions.test_rescue.TestRescueExtension.test_write_rescue_password
+ironic_python_agent.tests.unit.extensions.test_rescue.TestRescueExtension.test_write_rescue_password ... ok
+   ERROR [root] Rescue Operation failed when writing the hashed rescue password to the password file. Error 
 Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/netutils.py", line 197, in _get_lldp_info
-    lldp_info[interface[0]] = _receive_lldp_packets(s)
-                              ~~~~~~~~~~~~~~~~~~~~~^^^
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/netutils.py", line 160, in _receive_lldp_packets
-    pkt = sock.recv(1600)
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/rescue.py", line 48, in write_rescue_password
+    with open(PASSWORD_FILE, 'w') as f:
+         ~~~~^^^^^^^^^^^^^^^^^^^^
   File "/usr/lib/python3.13/unittest/mock.py", line 1167, in __call__
     return self._mock_call(*args, **kwargs)
            ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
@@ -4038,123 +3543,199 @@
            ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
   File "/usr/lib/python3.13/unittest/mock.py", line 1226, in _execute_mock_call
     raise effect
-OSError: BOOM
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_socket_recv_error
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_socket_recv_error ... ok
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_raw_promiscuous_sockets
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_raw_promiscuous_sockets ... ok
-   ERROR [ironic_python_agent.netutils] Failed to open all RawPromiscuousSockets, attempting to close any opened sockets.
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_raw_promiscuous_sockets_bind_fail
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_raw_promiscuous_sockets_bind_fail ... ok
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vdi
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vdi ... ok
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_raw_promiscuous_sockets_exception
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_raw_promiscuous_sockets_exception ... ok
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vdi_invalid
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vdi_invalid ... ok
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_wrap_ipv6
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_wrap_ipv6 ... ok
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_wrap_ipv6_with_ipv4
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_wrap_ipv6_with_ipv4 ... ok
-   ERROR [ironic_python_agent.extensions.standby] Timeout reached waiting for a chunk of data from a remote server.
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 1 of 2: Error downloading image: Download of image fake_id failed: Unable to write image to device /dev/foo. Error: Error downloading image: Download of image fake_id failed: Timed out reading next chunk from webserver
-ironic_python_agent.tests.unit.test_partition_utils.RealFilePartitioningTestCase.test_different_sizes
-ironic_python_agent.tests.unit.test_partition_utils.RealFilePartitioningTestCase.test_different_sizes ... skipped "parted utility was not found: [Errno 2] No such file or directory: 'parted'"
-ironic_python_agent.tests.unit.test_partition_utils.RealFilePartitioningTestCase.test_whole_disk
-ironic_python_agent.tests.unit.test_partition_utils.RealFilePartitioningTestCase.test_whole_disk ... skipped "parted utility was not found: [Errno 2] No such file or directory: 'parted'"
-   ERROR [root] Encountered issue attempting to validate the supplied configuration drive. Error: Unexpected error while running command.
+OSError
+ironic_python_agent.tests.unit.extensions.test_rescue.TestRescueExtension.test_write_rescue_password_ioerror
+ironic_python_agent.tests.unit.extensions.test_rescue.TestRescueExtension.test_write_rescue_password_ioerror ... ok
+ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step
+ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step ... ok
+   ERROR [root] Unexpected exception performing service step erase_devices. RuntimeError: boom
+Traceback (most recent call last):
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/service.py", line 77, in execute_service_step
+    result = hardware.dispatch_to_managers(step['step'], node, ports,
+                                           **kwargs)
+  File "<string>", line 3, in dispatch_to_managers
+  File "/usr/lib/python3.13/unittest/mock.py", line 1167, in __call__
+    return self._mock_call(*args, **kwargs)
+           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.13/unittest/mock.py", line 1171, in _mock_call
+    return self._execute_mock_call(*args, **kwargs)
+           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.13/unittest/mock.py", line 1226, in _execute_mock_call
+    raise effect
+RuntimeError: boom
+   ERROR [root] Command failed: execute_service_step, error: Service step failed: Unexpected exception performing service step erase_devices. RuntimeError: boom
+Traceback (most recent call last):
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/service.py", line 77, in execute_service_step
+    result = hardware.dispatch_to_managers(step['step'], node, ports,
+                                           **kwargs)
+  File "<string>", line 3, in dispatch_to_managers
+  File "/usr/lib/python3.13/unittest/mock.py", line 1167, in __call__
+    return self._mock_call(*args, **kwargs)
+           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.13/unittest/mock.py", line 1171, in _mock_call
+    return self._execute_mock_call(*args, **kwargs)
+           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.13/unittest/mock.py", line 1226, in _execute_mock_call
+    raise effect
+RuntimeError: boom
+
+During handling of the above exception, another exception occurred:
+
+Traceback (most recent call last):
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
+    result = self.execute_method(**self.command_params)
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/service.py", line 88, in execute_service_step
+    raise errors.ServicingError(msg)
+ironic_python_agent.errors.ServicingError: Service step failed: Unexpected exception performing service step erase_devices. RuntimeError: boom
+ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_exception
+ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_exception ... ok
+   ERROR [root] Error performing service step erase_devices
+Traceback (most recent call last):
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/service.py", line 77, in execute_service_step
+    result = hardware.dispatch_to_managers(step['step'], node, ports,
+                                           **kwargs)
+  File "<string>", line 3, in dispatch_to_managers
+  File "/usr/lib/python3.13/unittest/mock.py", line 1167, in __call__
+    return self._mock_call(*args, **kwargs)
+           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.13/unittest/mock.py", line 1171, in _mock_call
+    return self._execute_mock_call(*args, **kwargs)
+           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.13/unittest/mock.py", line 1226, in _execute_mock_call
+    raise effect
+ironic_python_agent.errors.BlockDeviceError: Block device caused unknown error: I'm a teapot
+   ERROR [root] Command failed: execute_service_step, error: Block device caused unknown error: I'm a teapot
+Traceback (most recent call last):
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
+    result = self.execute_method(**self.command_params)
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/service.py", line 77, in execute_service_step
+    result = hardware.dispatch_to_managers(step['step'], node, ports,
+                                           **kwargs)
+  File "<string>", line 3, in dispatch_to_managers
+  File "/usr/lib/python3.13/unittest/mock.py", line 1167, in __call__
+    return self._mock_call(*args, **kwargs)
+           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.13/unittest/mock.py", line 1171, in _mock_call
+    return self._execute_mock_call(*args, **kwargs)
+           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.13/unittest/mock.py", line 1226, in _execute_mock_call
+    raise effect
+ironic_python_agent.errors.BlockDeviceError: Block device caused unknown error: I'm a teapot
+ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_fail
+ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_fail ... ok
+   ERROR [root] Malformed service_step, no "step" key: {}
+   ERROR [root] Command failed: execute_service_step, error: Malformed service_step, no "step" key: {}
+Traceback (most recent call last):
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
+    result = self.execute_method(**self.command_params)
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/service.py", line 74, in execute_service_step
+    raise ValueError(msg)
+ValueError: Malformed service_step, no "step" key: {}
+ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_no_step
+ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_no_step ... ok
+ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_tuple_result
+ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_tuple_result ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qcow2_safety_checks
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qcow2_safety_checks ... ok
+   ERROR [root] Clean version mismatch for command execute_service_step
+ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_version_mismatch
+ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_version_mismatch ... ok
+ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_with_args
+ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_with_args ... ok
+ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_get_service_steps
+ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_get_service_steps ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qed_always_unsafe
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qed_always_unsafe ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__get_device_conf_dict
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__get_device_conf_dict ... ok
+   ERROR [root] Failed to query firmware of device <Mock name='mock.dev_pci' id='4107916416'>: Unexpected error while running command.
 Command: None
 Exit code: -
-Stdout: 'boom'
+Stdout: None
 Stderr: None
- WARNING [ironic_lib.utils] Failed to unlink /tmp/tmpozphmfs3/tmp95khover, error: [Errno 21] Is a directory: '/tmp/tmpozphmfs3/tmp95khover'
-ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__does_config_drive_failed
-ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__does_config_drive_failed ... ok
- WARNING [ironic_lib.utils] Failed to unlink /tmp/tmpnksgnp9e/tmp_3o3u5sj, error: [Errno 21] Is a directory: '/tmp/tmpnksgnp9e/tmp_3o3u5sj'
-ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__does_config_drive_work
-ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__does_config_drive_work ... ok
- WARNING [ironic_lib.utils] Failed to unlink /tmp/tmpmjz2ku59/tmp8pj0e5g5, error: [Errno 21] Is a directory: '/tmp/tmpmjz2ku59/tmp8pj0e5g5'
- WARNING [ironic_lib.utils] Failed to unlink /tmp/tmpmjz2ku59/tmprxb7pcp1, error: [Errno 21] Is a directory: '/tmp/tmpmjz2ku59/tmprxb7pcp1'
-ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__try_build_fat32_config_drive
-ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__try_build_fat32_config_drive ... ok
-   ERROR [root] We were unable to make a new filesystem for the configuration drive. Error: Unexpected error while running command.
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__get_device_conf_dict_exception
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__get_device_conf_dict_exception ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__mstconfig_parse_data
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__mstconfig_parse_data ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__mstconfig_parse_data_no_data
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__mstconfig_parse_data_no_data ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__param_supp_by_config_tool
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__param_supp_by_config_tool ... ok
+   ERROR [root] Failed to query tool configuration of device <Mock name='mock.dev_pci' id='4109386144'>: Unexpected error while running command.
 Command: None
 Exit code: -
-Stdout: 'boom'
+Stdout: None
 Stderr: None
- WARNING [ironic_lib.utils] Failed to unlink /tmp/tmpw7edzepz/tmpb2mcumzh, error: [Errno 21] Is a directory: '/tmp/tmpw7edzepz/tmpb2mcumzh'
- WARNING [ironic_lib.utils] Failed to unlink /tmp/tmpw7edzepz/tmpzx2im04f, error: [Errno 21] Is a directory: '/tmp/tmpw7edzepz/tmpzx2im04f'
-ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__try_build_fat32_config_drive_fails_once_invalid
-ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__try_build_fat32_config_drive_fails_once_invalid ... ok
- WARNING [root] We were unable to examine the configuration drive, bypassing. Error: Unexpected error while running command.
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__param_supp_by_config_tool_exception
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__param_supp_by_config_tool_exception ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__param_supp_by_fw
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__param_supp_by_fw ... ok
+   ERROR [root] Failed to query firmware of device <Mock name='mock.dev_pci' id='4109877064'>: Unexpected error while running command.
 Command: None
 Exit code: -
-Stdout: 'boom'
+Stdout: None
 Stderr: None
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vhd
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vhd ... ok
-ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__try_build_fat32_config_drive_graceful_fail
-ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__try_build_fat32_config_drive_graceful_fail ... ok
-ironic-python-agent: Excluding device sda1 from virtual mediaconsideration as it is a partition.
-ironic-python-agent: Found possible vmedia candidate /dev/sda2, however the device failed vmedia validity checking.
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vhd_invalid
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vhd_invalid ... ok
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__find_vmedia_device_by_labels
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__find_vmedia_device_by_labels ... ok
-ironic-python-agent: Was unable to execute the lsblk command. Unexpected error while running command.
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__param_supp_by_fw_exception
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__param_supp_by_fw_exception ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_set_config
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_set_config ... ok
+   ERROR [root] Failed to set configuration of device <Mock name='mock.dev_pci' id='4108002616'>,  ['SRIOV_EN=20']: Unexpected error while running command.
 Command: None
 Exit code: -
 Stdout: None
 Stderr: None
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__find_vmedia_device_by_labels_handles_exec_error
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__find_vmedia_device_by_labels_handles_exec_error ... ok
-ironic-python-agent: Did not identify any virtual media candidates devices.
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__find_vmedia_device_by_labels_not_found
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__find_vmedia_device_by_labels_not_found ... ok
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_device
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_device ... ok
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_params
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_params ... ok
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_params_by_device
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_params_by_device ... ok
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_params_by_device_device_invalid
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_params_by_device_device_invalid ... ok
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_params_cannot_find_dev
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_params_cannot_find_dev ... ok
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__read_params_from_file
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__read_params_from_file ... ok
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__read_params_from_file_fail
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__read_params_from_file_fail ... ok
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test_get_agent_params_from_cache
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test_get_agent_params_from_cache ... ok
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test_get_agent_params_kernel_cmdline
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test_get_agent_params_kernel_cmdline ... ok
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test_get_agent_params_vmedia
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test_get_agent_params_vmedia ... ok
-ironic-python-agent: Copying configuration from /tmp/tmp42pqo1_m/etc/ironic-python-agent to /etc/ironic-python-agent
-ironic-python-agent: Copying configuration from /tmp/tmp42pqo1_m/etc/ironic-python-agent.d to /etc/ironic-python-agent.d
-ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_copy
-ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_copy ... ok
-ironic-python-agent: Copying configuration from /tmp/tmppre8ez2y/etc/ironic-python-agent to /etc/ironic-python-agent
-ironic-python-agent: Copying configuration from /tmp/tmppre8ez2y/etc/ironic-python-agent.d to /etc/ironic-python-agent.d
-ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_copy_mounted
-ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_copy_mounted ... ok
-ironic-python-agent: /some/path/etc/ironic-python-agent not found
-ironic-python-agent: /some/path/etc/ironic-python-agent.d not found
-ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_mounted_no_files
-ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_mounted_no_files ... ok
-ironic-python-agent: /tmp/tmp7wfx6sgu/etc/ironic-python-agent not found
-ironic-python-agent: /tmp/tmp7wfx6sgu/etc/ironic-python-agent.d not found
-ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_no_files
-ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_no_files ... ok
-ironic-python-agent: No virtual media device detected
-ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_no_vmedia
-ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_no_vmedia ... ok
-ironic-python-agent: Cannot use configuration from virtual media as the agent was not booted from virtual media.
-ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_vmedia_found_not_booted_from_vmedia
-ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_vmedia_found_not_booted_from_vmedia ... ok
-ironic_python_agent.tests.unit.test_utils.TestStreamingClient.test_ok
-ironic_python_agent.tests.unit.test_utils.TestStreamingClient.test_ok ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_set_config_exception
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_set_config_exception ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_validate_config
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_validate_config ... ok
+   ERROR [root] Configuraiton ESWITCH_HAIRPIN_TOT_BUFFER_SIZE[8] for device <Mock name='mock.dev_pci' id='4107915864'> is not supported with current fw
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_validate_config_unsupported_config_by_fw
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_validate_config_unsupported_config_by_fw ... ok
+   ERROR [root] Configuraiton: UNSUPPORTED_PARAM is not supported by mstconfig, please update to the latest mstflint package.
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_validate_config_unsupported_config_by_mstflint_package
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_validate_config_unsupported_config_by_mstflint_package ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_file
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_file ... ok
+   ERROR [root] Failed to move file: /firmware_images/fw1.bin, 
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_file_not_found
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_file_not_found ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vdi
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vdi ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vdi_invalid
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vdi_invalid ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_http
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_http ... ok
+   ERROR [ironic_python_agent.extensions.standby] Timeout reached waiting for a chunk of data from a remote server.
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 0 of 2: Error downloading image: Download of image fake_id failed: Unable to write image to device /dev/foo. Error: Error downloading image: Download of image fake_id failed: Timed out reading next chunk from webserver
+   ERROR [root] Failed to open URL data: HTTP Error 500: Internal Error
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_http_err
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_http_err ... ok
+   ERROR [root] Failed to open URL data: <urlopen error URL error>
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_http_url_err
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_http_url_err ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_https
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_https ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_invalid_url_scheme
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_invalid_url_scheme ... ok
+   ERROR [root] Mismatch provided checksum a94e683ea16d9ae44768f0a65942234d for image http://10.10.10.10/firmware_images/fw1.bin
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_mismatch_checksum
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_mismatch_checksum ... ok
+   ERROR [root] The provided psid MT_0000000227 does not match the image psid MT_0000000228
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_mismatch_component_flavor
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_mismatch_component_flavor ... ok
+   ERROR [root] The provided firmware version 20.34.1012 does not match image firmware version 20.35.1012
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_mismatch_fw_version
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_mismatch_fw_version ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vhd
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vhd ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vhd_invalid
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vhd_invalid ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_find_pair_1st
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_find_pair_1st ... ok
+   ERROR [ironic_python_agent.extensions.standby] Timeout reached waiting for a chunk of data from a remote server.
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 1 of 2: Error downloading image: Download of image fake_id failed: Unable to write image to device /dev/foo. Error: Error downloading image: Download of image fake_id failed: Timed out reading next chunk from webserver
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_find_pair_2nd
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_find_pair_2nd ... ok
 ironic_python_agent.tests.unit.test_agent.TestAgentStandalone.test_run
 ironic_python_agent.tests.unit.test_agent.TestAgentStandalone.test_run ... ok
    ERROR [ironic_python_agent.extensions.standby] Timeout reached waiting for a chunk of data from a remote server.
@@ -4208,6 +3789,8 @@
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_success_with_new_hash_fields ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_success_without_md5
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_success_without_md5 ... ok
+ironic_python_agent.tests.unit.test_agent.TestAgentStandalone.test_run_no_tls
+ironic_python_agent.tests.unit.test_agent.TestAgentStandalone.test_run_no_tls ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_url
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_url ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_basic_auth_creds
@@ -4232,36 +3815,20 @@
    ERROR [ironic_python_agent.extensions.standby] Unable to verify image fake_id with available checksums. Please make sure the specified 'os_hash_algo' (currently unsupported-algorithm) is supported by this ramdisk, or provide a md5 checksum via the 'checksum' field
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_failure_without_fallback
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_failure_without_fallback ... ok
+ironic_python_agent.tests.unit.test_agent.TestHeartbeater.test__heartbeat_expected
+ironic_python_agent.tests.unit.test_agent.TestHeartbeater.test__heartbeat_expected ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_success
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_success ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_success_with_md5_fallback
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_success_with_md5_fallback ... ok
-ironic_python_agent.tests.unit.test_utils.TestStreamingClient.test_retries
-ironic_python_agent.tests.unit.test_utils.TestStreamingClient.test_retries ... ok
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_fallback_bios
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_fallback_bios ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_success_with_new_hash_fields
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_success_with_new_hash_fields ... ok
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_fallback_uefi
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_fallback_uefi ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_success_without_md5
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_success_without_md5 ... ok
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_from_driver_internal_info
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_from_driver_internal_info ... ok
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_from_properties_dict
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_from_properties_dict ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_image
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_image ... ok
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_from_properties_json_str
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_from_properties_json_str ... ok
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_from_properties_str
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_from_properties_str ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_image_fails
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_image_fails ... ok
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_implicit_with_secure_boot
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_implicit_with_secure_boot ... ok
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_invalid_cap
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_invalid_cap ... ok
    ERROR [ironic_lib.exception] Exception in string format operation (arguments )
 Traceback (most recent call last):
   File "/usr/lib/python3/dist-packages/ironic_lib/exception.py", line 134, in __init__
@@ -4269,302 +3836,210 @@
               ~~~~~~~~~~~~~~^~~~~~~~
 KeyError: 'reason'
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_image_gpt_fails
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_image_gpt_fails ... ok
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_override_with_instance_info
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_override_with_instance_info ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_image_gpt_fails   ERROR [ironic_python_agent.agent] error sending heartbeat to <Mock name='mock.api_urls' id='4086423000'>
+Traceback (most recent call last):
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/agent.py", line 148, in do_heartbeat
+    self.api.heartbeat(
+    ~~~~~~~~~~~~~~~~~~^
+        uuid=self.agent.get_node_uuid(),
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+    ...<2 lines>...
+        generated_cert=self.agent.generated_cert,
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+    )
+    ^
+  File "/usr/lib/python3.13/unittest/mock.py", line 1167, in __call__
+    return self._mock_call(*args, **kwargs)
+           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.13/unittest/mock.py", line 1171, in _mock_call
+    return self._execute_mock_call(*args, **kwargs)
+           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.13/unittest/mock.py", line 1226, in _execute_mock_call
+    raise effect
+Exception: uh oh!
+ ... ok
+ironic_python_agent.tests.unit.test_agent.TestHeartbeater.test_heartbeat
+ironic_python_agent.tests.unit.test_agent.TestHeartbeater.test_heartbeat ... ok
    ERROR [ironic_python_agent.disk_utils] Failed to fix GPT partition on disk /dev/sda for node None. Error: Don't call ironic_lib.utils.execute() / processutils.execute() or similar functions in tests!
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_partition_image
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_partition_image ... ok
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_collect_system_logs_journald
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_collect_system_logs_journald ... ok
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_collect_system_logs_journald_with_logfile
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_collect_system_logs_journald_with_logfile ... ok
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_params_validation
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_params_validation ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_partition_image_exception
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_partition_image_exception ... ok
-ironic_python_agent.tests.unit.test_agent.TestAgentStandalone.test_run_no_tls
-ironic_python_agent.tests.unit.test_agent.TestAgentStandalone.test_run_no_tls ... ok
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_collect_system_logs_non_journald
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_collect_system_logs_non_journald ... ok
-ironic_python_agent.tests.unit.test_base.BlockExecuteTestCase.test_can_mock_execute
-ironic_python_agent.tests.unit.test_base.BlockExecuteTestCase.test_can_mock_execute ... ok
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_success_no_wait
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_success_no_wait ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_partition_image_exception_image_mb
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_partition_image_exception_image_mb ... ok
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_collect_system_logs_non_journald_with_logfile
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_collect_system_logs_non_journald_with_logfile ... ok
-ironic_python_agent.tests.unit.test_base.BlockExecuteTestCase.test_exception_raised_for_execute
-ironic_python_agent.tests.unit.test_base.BlockExecuteTestCase.test_exception_raised_for_execute ... ok
-ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_add_partition
-ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_add_partition   ERROR [ironic_python_agent.disk_utils] Failed to fix GPT partition on disk /dev/sda for node None. Error: Don't call ironic_lib.utils.execute() / processutils.execute() or similar functions in tests!
- ... ok
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_device_extractor
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_device_extractor ... ok
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_success_with_false_wait
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_success_with_false_wait ... ok
+   ERROR [ironic_python_agent.disk_utils] Failed to fix GPT partition on disk /dev/sda for node None. Error: Don't call ironic_lib.utils.execute() / processutils.execute() or similar functions in tests!
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_partition_image_no_node_uuid
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_partition_image_no_node_uuid ... ok
-ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_commit
-ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_commit ... ok
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_extract_capability_from_dict
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_extract_capability_from_dict ... ok
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_success_with_true_wait
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_success_with_true_wait ... ok
    ERROR [ironic_python_agent.disk_utils] Failed to fix GPT partition on disk /dev/sda for node None. Error: Don't call ironic_lib.utils.execute() / processutils.execute() or similar functions in tests!
-ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_commit_with_device_disconnected
-ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_commit_with_device_disconnected ... ok
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_validation
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_validation ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_partition_image_no_node_uuid_uefi
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_partition_image_no_node_uuid_uefi ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestCheckPrereq.test_check_prereq
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestCheckPrereq.test_check_prereq ... ok
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_extract_capability_from_json_string
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_extract_capability_from_json_string ... ok
-ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_commit_with_device_is_always_busy
-ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_commit_with_device_is_always_busy ... ok
- WARNING [ironic_python_agent.utils] Ignoring malformed capability 'test:world:2'. Format should be 'key:val'.
- WARNING [ironic_python_agent.utils] Ignoring malformed capability 'badformat'. Format should be 'key:val'.
-ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_commit_with_device_is_busy_once
-ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_commit_with_device_is_busy_once ... ok
-   ERROR [root] Failed Prerequisite check. Unexpected error while running command.
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_apply_net_firmware_update
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_apply_net_firmware_update ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_filter_images
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_filter_images ... ok
+   ERROR [root] Duplicate componentFlavor MT_0000000540
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_filter_images_duplicate_component_flavor_exception
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_filter_images_duplicate_component_flavor_exception ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_validate_images_schema
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_validate_images_schema ... ok
+   ERROR [root] Invalid parameters for image {'url': 'http://10.10.10.10/firmware_images/fw2.bin', 'checksum': 'a94e683ea16d9ae44768f0a65942234c', 'checksumType': 'sha512', 'component': 'MT_0000000652', 'version': '24.34.1002'},please provide the following parameters url, checksum, checksumType, componentFlavor, version
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_validate_images_schema_invalid_parameter
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_validate_images_schema_invalid_parameter ... ok
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_with_token
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_with_token ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNics.test_nvidia_nics
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNics.test_nvidia_nics ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_detect_hardware
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_detect_hardware ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_detect_hardware_error
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_detect_hardware_error ... ok
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_with_token_invalid
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_with_token_invalid ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_detect_hardware_no_mlnx
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_detect_hardware_no_mlnx ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_evaluate_hardware_support
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_evaluate_hardware_support ... ok
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_get_agent_status
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_get_agent_status ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_evaluate_hardware_support_no_mlnx
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_evaluate_hardware_support_no_mlnx ... ok
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_get_command_result
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_get_command_result ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_find_timeout
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_find_timeout ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_generate_client_id
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_generate_client_id ... ok
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_list_command_results
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_list_command_results ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_clean_steps
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_clean_steps ... ok
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_not_found
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_not_found ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_pairing_defaults
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_pairing_defaults ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_interface_info
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_interface_info ... ok
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_root
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_root ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_pairing_no_defaults
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_pairing_no_defaults ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_interface_info_no_ib_interface
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_interface_info_no_ib_interface ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_pairing_raise_missing_config
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_pairing_raise_missing_config ... ok
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_v1_root
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_v1_root ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_pairing_raise_wrong_config
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_pairing_raise_wrong_config ... ok
+ironic_python_agent.tests.unit.test_base.DontBlockExecuteTestCase.test_no_exception_raised_for_execute
+ironic_python_agent.tests.unit.test_base.DontBlockExecuteTestCase.test_no_exception_raised_for_execute ... ok
+ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata
+ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata ... ok
+   ERROR [ironic_python_agent.burnin] fio (network) failed with error Unexpected error while running command.
 Command: None
 Exit code: -
-Stdout: None
+Stdout: 'boom'
 Stderr: None
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_extract_capability_from_old_format_caps
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_extract_capability_from_old_format_caps ... ok
-   ERROR [ironic_python_agent.disk_utils] Security: Detected image format was qcow3, but only raw, qcow2 are allowed
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestCheckPrereq.test_check_prereq_exception
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestCheckPrereq.test_check_prereq_exception ... ok
-ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_format_mismatch
-ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_format_mismatch ... ok
-   ERROR [ironic_python_agent.disk_utils] Security: Detected image format was qcow3, but only raw, qcow2 are allowed
-ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_format_mismatch_but_disabled
-ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_format_mismatch_but_disabled ... ok
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_command_output
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_command_output ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__get_device_conf_dict
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__get_device_conf_dict ... ok
-ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_format_type_disallowed
-ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_format_type_disallowed ... ok
-   ERROR [root] Failed to query firmware of device <Mock name='mock.dev_pci' id='3019731912'>: Unexpected error while running command.
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_no_fio
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_no_fio ... ok
+ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_4096
+ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_4096 ... ok
+ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_ebr
+ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_ebr ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_interface_info_no_mac_address
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_interface_info_no_mac_address ... ok
+ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_sgdisk_fail
+ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_sgdisk_fail ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_no_partner
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_no_partner ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_interface_info_no_mlnx_interface
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_interface_info_no_mlnx_interface ... ok
+ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_tiny_partition
+ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_tiny_partition ... ok
+ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_wipefs_fail
+ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_wipefs_fail ... ok
+ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_wipefs_not_support_force
+ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_wipefs_not_support_force ... ok
+ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_block_uuid
+ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_block_uuid ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_infiniband_address_to_mac
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_infiniband_address_to_mac ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_no_role
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_no_role ... ok
+ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_block_uuid_fallback_to_uuid
+ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_block_uuid_fallback_to_uuid ... ok
+ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_count_mbr_partitions
+ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_count_mbr_partitions ... ok
+ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_count_mbr_partitions_no_logical_partitions
+ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_count_mbr_partitions_no_logical_partitions ... ok
+ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_count_mbr_partitions_wrong_partition_table
+ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_count_mbr_partitions_wrong_partition_table ... ok
+   ERROR [ironic_python_agent.disk_utils] Unable to stat device /dev/disk/by-path/ip-1.2.3.4:5678-iscsi-iqn.fake-lun-9 after attempting to verify 2 times.
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_reader
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_reader ... ok
+   ERROR [ironic_python_agent.disk_utils] Unable to stat device /dev/disk/by-path/ip-1.2.3.4:5678-iscsi-iqn.fake-lun-9 after attempting to verify 3 times.
+ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_is_block_device_attempts
+ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_is_block_device_attempts ... ok
+ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_is_block_device_raises
+ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_is_block_device_raises ... ok
+   ERROR [ironic_python_agent.burnin] fio (network) failed with error Unexpected error while running command.
 Command: None
-Exit code: -
-Stdout: None
+Exit code: 16
+Stdout: 'Connection timeout'
 Stderr: None
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_journalctl_output
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_journalctl_output ... ok
-ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_happy_qcow2
-ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_happy_qcow2 ... ok
-ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_happy_raw
-ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_happy_raw ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__get_device_conf_dict_exception
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__get_device_conf_dict_exception ... ok
-ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_safety_check_fail_but_disabled
-ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_safety_check_fail_but_disabled ... ok
-ironic_python_agent.tests.unit.test_disk_utils.GetPartitionTableTypeTestCase.test_gpt
-ironic_python_agent.tests.unit.test_disk_utils.GetPartitionTableTypeTestCase.test_gpt ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__mstconfig_parse_data
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__mstconfig_parse_data ... ok
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_journalctl_output_fail
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_journalctl_output_fail ... ok
- WARNING [ironic_python_agent.disk_utils] Unable to get partition table type for device hello
-ironic_python_agent.tests.unit.test_disk_utils.GetPartitionTableTypeTestCase.test_msdos
-ironic_python_agent.tests.unit.test_disk_utils.GetPartitionTableTypeTestCase.test_msdos ... ok
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_journalctl_output_with_lines
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_journalctl_output_with_lines ... ok
-ironic_python_agent.tests.unit.test_disk_utils.GetPartitionTableTypeTestCase.test_unknown
-ironic_python_agent.tests.unit.test_disk_utils.GetPartitionTableTypeTestCase.test_unknown ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__mstconfig_parse_data_no_data
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__mstconfig_parse_data_no_data ... ok
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_journalctl_output_with_units
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_journalctl_output_with_units ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__param_supp_by_config_tool
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__param_supp_by_config_tool ... ok
-ironic_python_agent.tests.unit.test_encoding.TestEncoder.test_encoder
-ironic_python_agent.tests.unit.test_encoding.TestEncoder.test_encoder ... ok
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_ssl_client_options
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_ssl_client_options ... ok
-   ERROR [root] Failed to query tool configuration of device <Mock name='mock.dev_pci' id='3020440520'>: Unexpected error while running command.
+   ERROR [ironic_python_agent.burnin] fio (network) failed with error Unexpected error while running command.
 Command: None
-Exit code: -
-Stdout: None
+Exit code: 16
+Stdout: 'Connection timeout'
 Stderr: None
-ironic_python_agent.tests.unit.test_encoding.TestEncoder.test_ironic_lib
-ironic_python_agent.tests.unit.test_encoding.TestEncoder.test_ironic_lib ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__param_supp_by_config_tool_exception
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__param_supp_by_config_tool_exception ... ok
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_guess_root_disk_disks_too_small
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_guess_root_disk_disks_too_small ... ok
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorsTargeted.test_vhd_table_over_limit
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorsTargeted.test_vhd_table_over_limit ... ok
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_guess_root_disk_primary_sort
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_guess_root_disk_primary_sort ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__param_supp_by_fw
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__param_supp_by_fw ... ok
-   ERROR [root] Failed to query firmware of device <Mock name='mock.dev_pci' id='3020733728'>: Unexpected error while running command.
+   ERROR [ironic_python_agent.burnin] fio (network) failed with error Unexpected error while running command.
 Command: None
-Exit code: -
-Stdout: None
+Exit code: 16
+Stdout: 'Connection refused'
 Stderr: None
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__param_supp_by_fw_exception
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__param_supp_by_fw_exception ... ok
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_guess_root_disk_secondary_sort
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_guess_root_disk_secondary_sort ... ok
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorsTargeted.test_vhd_table_under_limit
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorsTargeted.test_vhd_table_under_limit ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_set_config
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_set_config ... ok
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_gzip_and_b64encode
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_gzip_and_b64encode ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__ata_erase_security_enabled_set_password_exception
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__ata_erase_security_enabled_set_password_exception ... ok
-   ERROR [root] Failed to set configuration of device <Mock name='mock.dev_pci' id='3020441624'>,  ['SRIOV_EN=20']: Unexpected error while running command.
+ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_is_block_device_works
+ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_is_block_device_works ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_reader_loop
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_reader_loop ... ok
+ironic_python_agent.tests.unit.test_disk_utils.TriggerDeviceRescanTestCase.test_custom_attempts
+ironic_python_agent.tests.unit.test_disk_utils.TriggerDeviceRescanTestCase.test_custom_attempts ... ok
+ WARNING [ironic_python_agent.disk_utils] Failed to verify partition tables on device /dev/fake: Unexpected error while running command.
 Command: None
 Exit code: -
 Stdout: None
 Stderr: None
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_is_journalctl_present
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_is_journalctl_present ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_set_config_exception
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_set_config_exception ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__ata_erase_security_enabled_unlock_exception
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__ata_erase_security_enabled_unlock_exception ... ok
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_is_journalctl_present_false
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_is_journalctl_present_false ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_validate_config
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_validate_config ... ok
-   ERROR [root] Configuraiton ESWITCH_HAIRPIN_TOT_BUFFER_SIZE[8] for device <Mock name='mock.dev_pci' id='3019730992'> is not supported with current fw
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_validate_config_unsupported_config_by_fw
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_validate_config_unsupported_config_by_fw ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__ata_erase_security_erase_exec_exception
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__ata_erase_security_erase_exec_exception ... ok
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_secure_boot_overriden_with_instance_info_caps
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_secure_boot_overriden_with_instance_info_caps ... ok
-   ERROR [root] Configuraiton: UNSUPPORTED_PARAM is not supported by mstconfig, please update to the latest mstflint package.
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_specified_partition_table_type
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_specified_partition_table_type ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_validate_config_unsupported_config_by_mstflint_package
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_validate_config_unsupported_config_by_mstflint_package ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__find_pstore_mount_point
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__find_pstore_mount_point ... ok
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_specified_partition_table_type_disk_label_ignored_with_uefi
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_specified_partition_table_type_disk_label_ignored_with_uefi ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_file
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_file ... ok
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_specified_partition_table_type_gpt
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_specified_partition_table_type_gpt ... ok
-   ERROR [root] Failed to move file: /firmware_images/fw1.bin, 
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__find_pstore_mount_point_no_pstore
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__find_pstore_mount_point_no_pstore ... ok
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_specified_partition_table_type_with_disk_label
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_specified_partition_table_type_with_disk_label ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_file_not_found
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_file_not_found ... ok
-   ERROR [root] Failed to open URL data: HTTP Error 500: Internal Error
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_specified_partition_table_type_with_instance_disk_label
-ironic_python_agent.tests.unit.test_utils.TestUtils.test_specified_partition_table_type_with_instance_disk_label ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__get_device_info
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__get_device_info ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_http
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_http ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_http_err
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_http_err ... ok
-   ERROR [root] Failed to open URL data: <urlopen error URL error>
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__get_md_uuid
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__get_md_uuid ... ok
-POST: /v1/commands {'name': 'do_things', 'params': []}
-GOT:<WrapperTestResponse streamed [400 BAD REQUEST]>
-POST: /v1/commands {'name': 'do_things', 'params': {'key': 'value'}}
-GOT:<WrapperTestResponse streamed [200 OK]>
-POST: /v1/commands?wait=false {'name': 'do_things', 'params': {'key': 'value'}}
-GOT:<WrapperTestResponse streamed [200 OK]>
-POST: /v1/commands?wait=true {'name': 'do_things', 'params': {'key': 'value'}}
-GOT:<WrapperTestResponse streamed [200 OK]>
-POST: /v1/commands {}
-GOT:<WrapperTestResponse streamed [400 BAD REQUEST]>
-POST: /v1/commands?wait=false?agent_token=0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 {'name': 'do_things', 'params': {'key': 'value', 'wait': False, 'agent_token': '0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789'}}
-GOT:<WrapperTestResponse streamed [200 OK]>
-POST: /v1/commands?wait=false?agent_token=0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 {'name': 'do_things', 'params': {'key': 'value', 'wait': False, 'agent_token': '0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789'}}
-GOT:<WrapperTestResponse streamed [401 UNAUTHORIZED]>
-GET: /v1/status None
-GOT:<WrapperTestResponse streamed [200 OK]>
-GET: /v1/commands/abc123 None
-GOT:<WrapperTestResponse streamed [200 OK]>
-GET: /v1/commands None
-GOT:<WrapperTestResponse streamed [200 OK]>
-GET: /v1/foo None
-GOT:<WrapperTestResponse streamed [404 NOT FOUND]>
-GET: / None
-GOT:<WrapperTestResponse streamed [200 OK]>
-GET: /v1 None
-GOT:<WrapperTestResponse streamed [200 OK]>
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_http_url_err
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_http_url_err ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_linux_raid_member
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_linux_raid_member ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_https
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_https ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_invalid_url_scheme
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_invalid_url_scheme ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_linux_raid_member_false
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_linux_raid_member_false ... ok
-   ERROR [root] Mismatch provided checksum a94e683ea16d9ae44768f0a65942234d for image http://10.10.10.10/firmware_images/fw1.bin
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_mismatch_checksum
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_mismatch_checksum ... ok
- WARNING [root] Could not determine if /dev/sdfake is aread-only device. Error: 
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device_error
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device_error ... ok
-   ERROR [root] The provided psid MT_0000000227 does not match the image psid MT_0000000228
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_mismatch_component_flavor
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_mismatch_component_flavor ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device_false
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device_false ... ok
- WARNING [root] Could not determine if /dev/sdfake1 is aread-only device. Error: 
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device_partition_error
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device_partition_error ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device_partition_ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device_partition_ok ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_virtual_media_device_exists
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_virtual_media_device_exists ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_virtual_media_device_exists_no_match
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_virtual_media_device_exists_no_match ... ok
-   ERROR [root] The provided firmware version 20.34.1012 does not match image firmware version 20.35.1012
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_mismatch_fw_version
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_mismatch_fw_version ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_virtual_media_device_path_doesnt_exist
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_virtual_media_device_path_doesnt_exist ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicsConfig.test_create_settings_map
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicsConfig.test_create_settings_map ... ok
-   ERROR [root] duplicate settings for device ID 1017 
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_apply_configuration
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_apply_configuration ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicsConfig.test_create_settings_map_duplicate_device_id
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicsConfig.test_create_settings_map_duplicate_device_id ... ok
-   ERROR [root] There is no deviceID provided for this settings
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicsConfig.test_create_settings_map_invalid_firmware_settings_config
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicsConfig.test_create_settings_map_invalid_firmware_settings_config ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_apply_configuration_no_delete
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_apply_configuration_no_delete ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicsConfig.test_prepare_nvidia_nic_config
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicsConfig.test_prepare_nvidia_nic_config ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_clean_steps_exist
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_clean_steps_exist ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestUpdateNvidiaNicFirmwareImage.test_update_nvidia_nic_firmware_image_exception
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestUpdateNvidiaNicFirmwareImage.test_update_nvidia_nic_firmware_image_exception ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_clean_uefi_invalid
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_clean_uefi_invalid ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_clean_uefi_nvram
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_clean_uefi_nvram ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_clean_uefi_nvram_defaults
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_clean_uefi_nvram_defaults ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_collect_lldp_data
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_collect_lldp_data ... ok
+ironic_python_agent.tests.unit.test_disk_utils.TriggerDeviceRescanTestCase.test_fails
+ironic_python_agent.tests.unit.test_disk_utils.TriggerDeviceRescanTestCase.test_fails ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_reader_w_logfile
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_reader_w_logfile ... ok
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test__wait_for_interface
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test__wait_for_interface ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_collect_lldp_data_decode_exception
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_collect_lldp_data_decode_exception ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_collect_lldp_data_netutils_exception
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_collect_lldp_data_netutils_exception ... ok
+ironic_python_agent.tests.unit.test_disk_utils.TriggerDeviceRescanTestCase.test_trigger
+ironic_python_agent.tests.unit.test_disk_utils.TriggerDeviceRescanTestCase.test_trigger ... ok
+ WARNING [ironic_python_agent.dmi_inspector] Failed to parse Handle type in dmi output: list index out of range
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_unknown_role
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_unknown_role ... ok
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_dmidecode_info_bad_data
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_dmidecode_info_bad_data ... ok
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test__wait_for_interface_expired
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test__wait_for_interface_expired ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_writer
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_writer ... ok
+   ERROR [ironic_python_agent.utils] failed to run dmidecode: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: None
+Stderr: None
    ERROR [root] Command failed: foo_command, error: command execution failed
 Traceback (most recent call last):
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
@@ -4572,66 +4047,107 @@
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/tests/unit/test_agent.py", line 44, in foo_execute
     raise EXPECTED_ERROR
 RuntimeError: command execution failed
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_dmidecode_info_failure
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_dmidecode_info_failure ... ok
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_async_command_failure
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_async_command_failure ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_device_handling_failures
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_device_handling_failures ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_device_handling_failures_raid5
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_device_handling_failures_raid5 ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_writer_w_logfile
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_writer_w_logfile ... ok
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_dmidecode_info_ok
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_dmidecode_info_ok ... ok
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_async_command_success
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_async_command_success ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_device_handling_failures_raid6
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_device_handling_failures_raid6 ... ok
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_parse_dmi_bios
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_parse_dmi_bios ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_cpu_default
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_cpu_default ... ok
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_get_node_uuid
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_get_node_uuid ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_efi
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_efi ... ok
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_parse_dmi_cpu
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_parse_dmi_cpu ... ok
+   ERROR [ironic_python_agent.burnin] stress-ng (cpu) failed with error Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: None
+Stderr: None
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_cpu_no_stress_ng
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_cpu_no_stress_ng ... ok
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_get_node_uuid_invalid_node
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_get_node_uuid_invalid_node ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_empty_target_raid_config
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_empty_target_raid_config ... ok
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_parse_dmi_memory
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_parse_dmi_memory ... ok
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_get_node_uuid_unassociated
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_get_node_uuid_unassociated ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_failure_with_nvme
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_failure_with_nvme ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_force_gpt_with_disk_label
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_force_gpt_with_disk_label ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_invalid_hints
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_invalid_hints ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_cpu_non_default
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_cpu_non_default ... ok
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_save_data
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_save_data ... ok
+ WARNING [ironic_python_agent.dmi_inspector] Failed to process memory dmi data: 'Handle'
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_vm_default
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_vm_default ... ok
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_save_data_error_handle
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_save_data_error_handle ... ok
+   ERROR [ironic_python_agent.burnin] stress-ng (vm) failed with error Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: None
+Stderr: None
+ WARNING [ironic_python_agent.dmi_inspector] Failed to process memory dmi data: 'Number Of Devices'
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_vm_no_stress_ng
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_vm_no_stress_ng ... ok
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_save_data_error_number_of_devices
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_save_data_error_number_of_devices ... ok
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_get_route_source_indexerror
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_get_route_source_indexerror ... ok
- WARNING [root] Path /dev/disk/by-path is inaccessible, /dev/disk/by-path/* version of block device name is unavailable Cause: [Errno 2] No such file or directory: '/dev/disk/by-path'
- WARNING [root] Device /dev/sda is inaccessible, skipping... Error: [Errno 2] No such file or directory: '/dev/sda'
- WARNING [root] Could not find the SCSI address (HCTL) for device /dev/sda. Skipping
- WARNING [root] Can't find field vendor for device sda in device class block
- WARNING [root] Device /dev/sdb is inaccessible, skipping... Error: [Errno 2] No such file or directory: '/dev/sdb'
- WARNING [root] Could not find the SCSI address (HCTL) for device /dev/sdb. Skipping
- WARNING [root] Can't find field vendor for device sdb in device class block
- WARNING [root] Device /dev/md0 is inaccessible, skipping... Error: [Errno 2] No such file or directory: '/dev/md0'
- WARNING [root] Could not find the SCSI address (HCTL) for device /dev/md0. Skipping
- WARNING [root] Can't find field vendor for device md0 in device class block
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_invalid_raid_config
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_invalid_raid_config ... ok
+ironic_python_agent.tests.unit.test_encoding.TestSerializable.test_baseclass_serialize
+ironic_python_agent.tests.unit.test_encoding.TestSerializable.test_baseclass_serialize ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_vm_non_default
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_vm_non_default ... ok
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_get_route_source_ipv4
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_get_route_source_ipv4 ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_max_is_first_logical
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_max_is_first_logical ... ok
+ironic_python_agent.tests.unit.test_disk_utils.GetDeviceInformationTestCase.test_empty
+ironic_python_agent.tests.unit.test_disk_utils.GetDeviceInformationTestCase.test_empty ... ok
+ironic_python_agent.tests.unit.test_disk_utils.GetDeviceInformationTestCase.test_fields
+ironic_python_agent.tests.unit.test_disk_utils.GetDeviceInformationTestCase.test_fields ... ok
+ironic_python_agent.tests.unit.test_encoding.TestSerializable.test_childclass_serialize
+ironic_python_agent.tests.unit.test_encoding.TestSerializable.test_childclass_serialize ... ok
+ironic_python_agent.tests.unit.test_disk_utils.GetDeviceInformationTestCase.test_normal
+ironic_python_agent.tests.unit.test_disk_utils.GetDeviceInformationTestCase.test_normal ... ok
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_get_route_source_ipv6
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_get_route_source_ipv6 ... ok
+ WARNING [ironic_python_agent.disk_utils] Unable to get partition table type for device hello
+ironic_python_agent.tests.unit.test_disk_utils.GetPartitionTableTypeTestCase.test_gpt
+ironic_python_agent.tests.unit.test_disk_utils.GetPartitionTableTypeTestCase.test_gpt ... ok
+ironic_python_agent.tests.unit.test_disk_utils.GetPartitionTableTypeTestCase.test_msdos
+ironic_python_agent.tests.unit.test_disk_utils.GetPartitionTableTypeTestCase.test_msdos ... ok
+ WARNING [root] Device /dev/fake1 is inaccessible, skipping... Error: nope
+ironic_python_agent.tests.unit.test_disk_utils.GetPartitionTableTypeTestCase.test_unknown
+ironic_python_agent.tests.unit.test_disk_utils.GetPartitionTableTypeTestCase.test_unknown ... ok
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_get_route_source_ipv6_linklocal
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_get_route_source_ipv6_linklocal ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_mismatching_hints
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_mismatching_hints ... ok
+ironic_python_agent.tests.unit.test_hardware.TestCollectSystemLogs.test__collect_udev
+ironic_python_agent.tests.unit.test_hardware.TestCollectSystemLogs.test__collect_udev ... ok
+ironic_python_agent.tests.unit.test_disk_utils.ListPartitionsTestCase.test_correct
+ironic_python_agent.tests.unit.test_disk_utils.ListPartitionsTestCase.test_correct ... ok
+ironic_python_agent.tests.unit.test_disk_utils.ListPartitionsTestCase.test_correct_gpt_nvme
+ironic_python_agent.tests.unit.test_disk_utils.ListPartitionsTestCase.test_correct_gpt_nvme ... ok
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_get_status
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_get_status ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_no_max
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_no_max ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_partitions_detected
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_partitions_detected ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_raid_5
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_raid_5 ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_raid_6
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_raid_6 ... ok
+ironic_python_agent.tests.unit.test_disk_utils.ListPartitionsTestCase.test_incorrect
+ironic_python_agent.tests.unit.test_disk_utils.ListPartitionsTestCase.test_incorrect ... ok
+ironic_python_agent.tests.unit.test_disk_utils.ListPartitionsTestCase.test_incorrect_gpt
+ironic_python_agent.tests.unit.test_disk_utils.ListPartitionsTestCase.test_incorrect_gpt ... ok
+ironic_python_agent.tests.unit.test_hardware.TestCollectSystemLogs.test_collect_system_logs
+ironic_python_agent.tests.unit.test_hardware.TestCollectSystemLogs.test_collect_system_logs ... ok
+ironic_python_agent.tests.unit.test_disk_utils.PopulateImageTestCase.test_populate_qcow2_image
+ironic_python_agent.tests.unit.test_disk_utils.PopulateImageTestCase.test_populate_qcow2_image ... ok
+ironic_python_agent.tests.unit.test_disk_utils.PopulateImageTestCase.test_populate_raw_image
+ironic_python_agent.tests.unit.test_disk_utils.PopulateImageTestCase.test_populate_raw_image ... ok
+ WARNING [root] The root device was not detected in 27 seconds
+ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_disks_timeout
+ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_disks_timeout ... ok
+ironic_python_agent.tests.unit.test_efi_utils.TestGetEfiBootloaders.test__get_efi_bootloaders
+ironic_python_agent.tests.unit.test_efi_utils.TestGetEfiBootloaders.test__get_efi_bootloaders ... ok
    ERROR [ironic_python_agent.ironic_api_client] An error occurred while attempting to discover the available Ironic API versions, falling back to using version 1.31
 Traceback (most recent call last):
   File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 463, in resolve
@@ -4703,7 +4219,7 @@
                        ~~~~~~~~~~~~~~^^
   File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 206, in _new_conn
     raise NameResolutionError(self.host, self, e) from e
-urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xb34a1bb0>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)
+urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xf4f72538>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)
 
 The above exception was the direct cause of the following exception:
 
@@ -4721,7 +4237,7 @@
   File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 519, in increment
     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb34a1bb0>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
+urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf4f72538>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
 
 During handling of the above exception, another exception occurred:
 
@@ -4740,14 +4256,17 @@
     r = adapter.send(request, **kwargs)
   File "/usr/lib/python3/dist-packages/requests/adapters.py", line 700, in send
     raise ConnectionError(e, request=request)
-requests.exceptions.ConnectionError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb34a1bb0>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
+requests.exceptions.ConnectionError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf4f72538>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
  WARNING [ironic_python_agent.agent] Ironic does not support automated TLS
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_skip_list_existing_device_does_not_match
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_skip_list_existing_device_does_not_match ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_with_complete_skip_list
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_with_complete_skip_list ... ok
+ WARNING [root] The root device was not detected in 45 seconds
+ironic_python_agent.tests.unit.test_efi_utils.TestGetEfiBootloaders.test__get_efi_bootloaders_no_csv
+ironic_python_agent.tests.unit.test_efi_utils.TestGetEfiBootloaders.test__get_efi_bootloaders_no_csv ... ok
+ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_disks_timeout_configured
+ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_disks_timeout_configured ... ok
+ironic_python_agent.tests.unit.test_efi_utils.TestGetEfiBootloaders.test__get_windows_efi_bootloaders
+ironic_python_agent.tests.unit.test_efi_utils.TestGetEfiBootloaders.test__get_windows_efi_bootloaders ... ok
    ERROR [ironic_python_agent.ironic_api_client] An error occurred while attempting to discover the available Ironic API versions, falling back to using version 1.31
 Traceback (most recent call last):
   File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 463, in resolve
@@ -4819,7 +4338,7 @@
                        ~~~~~~~~~~~~~~^^
   File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 206, in _new_conn
     raise NameResolutionError(self.host, self, e) from e
-urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xb4b5f0e0>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)
+urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xf564e450>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)
 
 The above exception was the direct cause of the following exception:
 
@@ -4837,7 +4356,7 @@
   File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 519, in increment
     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb4b5f0e0>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
+urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf564e450>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
 
 During handling of the above exception, another exception occurred:
 
@@ -4856,26 +4375,19 @@
     r = adapter.send(request, **kwargs)
   File "/usr/lib/python3/dist-packages/requests/adapters.py", line 700, in send
     raise ConnectionError(e, request=request)
-requests.exceptions.ConnectionError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb4b5f0e0>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
+requests.exceptions.ConnectionError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf564e450>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
  WARNING [ironic_python_agent.agent] Ironic does not support automated TLS
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run_agent_token
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run_agent_token ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_with_hints
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_with_hints ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_with_nvme
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_with_nvme ... ok
- WARNING [root] Failed to remove partitions on /dev/sda: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'No md superblock detected'
-Stderr: None
- WARNING [root] Failed to remove partitions on /dev/sdb: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'No md superblock detected'
-Stderr: None
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_delete_configuration
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_delete_configuration ... ok
+ WARNING [root] The root device was not detected in 27 seconds
+ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_disks_timeout_unconfigured
+ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_disks_timeout_unconfigured ... ok
+ironic_python_agent.tests.unit.test_efi_utils.TestGetEfiBootloaders.test__no_efi_bootloaders
+ironic_python_agent.tests.unit.test_efi_utils.TestGetEfiBootloaders.test__no_efi_bootloaders ... ok
+ WARNING [ironic_python_agent.efi_utils] Invalid sgdisk line: I am a teaport
+ WARNING [ironic_python_agent.efi_utils] No UUID information provided in sgdisk output for partition 1 on device /dev/fake
+ironic_python_agent.tests.unit.test_efi_utils.TestGetPartitionPathByNumber.test_broken
+ironic_python_agent.tests.unit.test_efi_utils.TestGetPartitionPathByNumber.test_broken ... ok
    ERROR [ironic_python_agent.ironic_api_client] An error occurred while attempting to discover the available Ironic API versions, falling back to using version 1.31
 Traceback (most recent call last):
   File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 463, in resolve
@@ -4947,7 +4459,7 @@
                        ~~~~~~~~~~~~~~^^
   File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 206, in _new_conn
     raise NameResolutionError(self.host, self, e) from e
-urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xb417b870>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)
+urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xf564e500>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)
 
 The above exception was the direct cause of the following exception:
 
@@ -4965,7 +4477,7 @@
   File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 519, in increment
     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb417b870>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
+urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf564e500>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
 
 During handling of the above exception, another exception occurred:
 
@@ -4984,24 +4496,16 @@
     r = adapter.send(request, **kwargs)
   File "/usr/lib/python3/dist-packages/requests/adapters.py", line 700, in send
     raise ConnectionError(e, request=request)
-requests.exceptions.ConnectionError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb417b870>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
+requests.exceptions.ConnectionError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf564e500>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
  WARNING [ironic_python_agent.agent] Ironic does not support automated TLS
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run_listen_host_port
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run_listen_host_port ... ok
-   ERROR [root] Unable to clean all softraid correctly. Remaining ['/dev/md0']
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_delete_configuration_failure_blocks_remaining
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_delete_configuration_failure_blocks_remaining ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_delete_configuration_partition
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_delete_configuration_partition ... ok
- WARNING [root] RAID device /dev/md1 will not be deleted
- WARNING [root] Software RAID device /dev/md1 is not going to be deleted as its volume name - small - is on the skip list
- WARNING [root] Software RAID device /dev/md1 was not deleted
- WARNING [root] Holder disk /dev/sda contains logical disk on the skip list. Deleting just partitions: ['1']
- WARNING [root] Holder disk /dev/sdb contains logical disk on the skip list. Deleting just partitions: ['1']
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_delete_configuration_skip_list
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_delete_configuration_skip_list ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_deploy_steps_exist
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_deploy_steps_exist ... ok
+ironic_python_agent.tests.unit.test_efi_utils.TestGetPartitionPathByNumber.test_ok
+ironic_python_agent.tests.unit.test_efi_utils.TestGetPartitionPathByNumber.test_ok ... ok
+ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_no_wait_for_disks
+ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_no_wait_for_disks ... ok
+ironic_python_agent.tests.unit.test_efi_utils.TestRunEfiBootmgr.test__run_efibootmgr
+ironic_python_agent.tests.unit.test_efi_utils.TestRunEfiBootmgr.test__run_efibootmgr ... ok
    ERROR [ironic_python_agent.ironic_api_client] An error occurred while attempting to discover the available Ironic API versions, falling back to using version 1.31
 Traceback (most recent call last):
   File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 463, in resolve
@@ -5073,7 +4577,7 @@
                        ~~~~~~~~~~~~~~^^
   File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 206, in _new_conn
     raise NameResolutionError(self.host, self, e) from e
-urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xb45dfc90>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)
+urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xf564e450>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)
 
 The above exception was the direct cause of the following exception:
 
@@ -5091,7 +4595,7 @@
   File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 519, in increment
     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb45dfc90>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
+urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf564e450>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
 
 During handling of the above exception, another exception occurred:
 
@@ -5110,19 +4614,21 @@
     r = adapter.send(request, **kwargs)
   File "/usr/lib/python3/dist-packages/requests/adapters.py", line 700, in send
     raise ConnectionError(e, request=request)
-requests.exceptions.ConnectionError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb45dfc90>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
+requests.exceptions.ConnectionError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf564e450>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
  WARNING [ironic_python_agent.agent] Ironic does not support automated TLS
+ironic_python_agent.tests.unit.test_efi_utils.TestRunEfiBootmgr.test__run_efibootmgr_no_bootloaders
+ironic_python_agent.tests.unit.test_efi_utils.TestRunEfiBootmgr.test__run_efibootmgr_no_bootloaders ... ok
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run_raise_keyboard_interrupt
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run_raise_keyboard_interrupt ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_erase_disabled
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_erase_disabled ... ok
-   ERROR [root] Failed to invoke secure erase, fallback to shred is not enabled: Error erasing block device: An unknown error occurred erasing block device /dev/sda
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_failed
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_failed ... ok
+ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_waits_for_disks
+ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_waits_for_disks ... ok
+ironic_python_agent.tests.unit.test_encoding.TestSerializableComparable.test_childclass_equal
+ironic_python_agent.tests.unit.test_encoding.TestSerializableComparable.test_childclass_equal ... ok
+ironic_python_agent.tests.unit.test_encoding.TestSerializableComparable.test_childclass_hash
+ironic_python_agent.tests.unit.test_encoding.TestSerializableComparable.test_childclass_hash ... ok
  WARNING [root] Can't find field vendor for device lo in device class net
- WARNING [root] Failed to invoke secure erase, falling back to shred: Error erasing block device: An unknown error occurred erasing block device /dev/sda
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_failed_continued
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_failed_continued ... ok
+ironic_python_agent.tests.unit.test_encoding.TestSerializableComparable.test_childclass_notequal
+ironic_python_agent.tests.unit.test_encoding.TestSerializableComparable.test_childclass_notequal ... ok
    ERROR [ironic_python_agent.ironic_api_client] An error occurred while attempting to discover the available Ironic API versions, falling back to using version 1.31
 Traceback (most recent call last):
   File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 463, in resolve
@@ -5194,7 +4700,7 @@
                        ~~~~~~~~~~~~~~^^
   File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 206, in _new_conn
     raise NameResolutionError(self.host, self, e) from e
-urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xb3f3c0e0>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)
+urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xf4f60d40>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)
 
 The above exception was the direct cause of the following exception:
 
@@ -5212,7 +4718,7 @@
   File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 519, in increment
     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb3f3c0e0>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
+urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf4f60d40>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
 
 During handling of the above exception, another exception occurred:
 
@@ -5231,16 +4737,18 @@
     r = adapter.send(request, **kwargs)
   File "/usr/lib/python3/dist-packages/requests/adapters.py", line 700, in send
     raise ConnectionError(e, request=request)
-requests.exceptions.ConnectionError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb3f3c0e0>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
+requests.exceptions.ConnectionError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf4f60d40>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
  WARNING [ironic_python_agent.agent] Ironic does not support automated TLS
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run_with_inspection
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run_with_inspection ... ok
-   ERROR [root] Failed to invoke secure erase, fallback to shred is not enabled: Error erasing block device: Block device /dev/sda is frozen and cannot be erased
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_frozen
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_frozen ... ok
-   ERROR [root] Failed to invoke secure erase, fallback to shred is not enabled: Error erasing block device: Block device /dev/sda already has a security password set
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_security_enabled
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_security_enabled ... ok
+ironic_python_agent.tests.unit.test_errors.TestErrors.test_RESTError
+ironic_python_agent.tests.unit.test_errors.TestErrors.test_RESTError ... ok
+ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_waits_for_disks_configured
+ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_waits_for_disks_configured ... ok
+ironic_python_agent.tests.unit.test_errors.TestErrors.test_RESTError_details
+ironic_python_agent.tests.unit.test_errors.TestErrors.test_RESTError_details ... ok
+ironic_python_agent.tests.unit.test_errors.TestErrors.test_error_classes
+ironic_python_agent.tests.unit.test_errors.TestErrors.test_error_classes ... ok
    ERROR [ironic_lib.exception] Exception in string format operation (arguments )
 Traceback (most recent call last):
   File "/usr/lib/python3/dist-packages/ironic_lib/exception.py", line 134, in __init__
@@ -5248,19 +4756,18 @@
               ~~~~~~~~~~~~~~^~~~~~~~
 KeyError: 'service'
  WARNING [ironic_python_agent.agent] Could not get baremetal endpoint from mDNS, will not heartbeat
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_security_enabled_unlock_attempt
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_security_enabled_unlock_attempt ... ok
  WARNING [root] Can't find field vendor for device lo in device class net
  WARNING [ironic_python_agent.agent] Ironic does not support automated TLS
+ironic_python_agent.tests.unit.test_errors.TestErrors.test_error_string
+ironic_python_agent.tests.unit.test_errors.TestErrors.test_error_string ... ok
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run_with_inspection_without_apiurl
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run_with_inspection_without_apiurl ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_security_unlock_fallback_pass
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_security_unlock_fallback_pass ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_success
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_success ... ok
- WARNING [root] Unable to execute `smartctl` utility: boom
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_success_no_smartctl
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_success_no_smartctl ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_capture_region
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_capture_region ... ok
+ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_waits_for_disks_nonconfigured
+ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_waits_for_disks_nonconfigured ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_get_inspector
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_get_inspector ... ok
    ERROR [ironic_python_agent.ironic_api_client] An error occurred while attempting to discover the available Ironic API versions, falling back to using version 1.31
 Traceback (most recent call last):
   File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 463, in resolve
@@ -5332,7 +4839,7 @@
                        ~~~~~~~~~~~~~~^^
   File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 206, in _new_conn
     raise NameResolutionError(self.host, self, e) from e
-urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xb41e6df0>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)
+urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xf5125870>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)
 
 The above exception was the direct cause of the following exception:
 
@@ -5350,7 +4857,7 @@
   File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 519, in increment
     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb41e6df0>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
+urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf5125870>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
 
 During handling of the above exception, another exception occurred:
 
@@ -5369,27 +4876,22 @@
     r = adapter.send(request, **kwargs)
   File "/usr/lib/python3/dist-packages/requests/adapters.py", line 700, in send
     raise ConnectionError(e, request=request)
-requests.exceptions.ConnectionError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb41e6df0>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
+requests.exceptions.ConnectionError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf5125870>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
  WARNING [ironic_python_agent.agent] Ironic does not support automated TLS
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run_with_sleep
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run_with_sleep ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nosecurity_shred
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nosecurity_shred ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_notsupported_shred
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_notsupported_shred ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nvme_crypto_success
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nvme_crypto_success ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__ata_erase_security_enabled_set_password_exception
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__ata_erase_security_enabled_set_password_exception ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__ata_erase_security_enabled_unlock_exception
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__ata_erase_security_enabled_unlock_exception ... ok
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run_with_ssl
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run_with_ssl ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nvme_failed
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nvme_failed ... ok
-   ERROR [root] nvme-cli did not return any supported format modes for device: /dev/nvme0n1
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nvme_format_unsupported
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nvme_format_unsupported ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nvme_userdata_success
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nvme_userdata_success ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_shred_0_pass_no_zeroize
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_shred_0_pass_no_zeroize ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_info_wrapper_file_like
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_info_wrapper_file_like ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__ata_erase_security_erase_exec_exception
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__ata_erase_security_erase_exec_exception ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__find_pstore_mount_point
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__find_pstore_mount_point ... ok
    ERROR [ironic_lib.exception] Exception in string format operation (arguments )
 Traceback (most recent call last):
   File "/usr/lib/python3/dist-packages/ironic_lib/exception.py", line 134, in __init__
@@ -5397,26 +4899,18 @@
               ~~~~~~~~~~~~~~^~~~~~~~
 KeyError: 'service'
  WARNING [ironic_python_agent.agent] Could not get baremetal endpoint from mDNS, will not heartbeat
-   ERROR [root] Erasing block device /dev/sda failed with error 
  WARNING [root] Can't find field vendor for device lo in device class net
    ERROR [ironic_python_agent.agent] Neither ipa-api-url nor inspection_callback_urlfound, please check your pxe append parameters.
  WARNING [ironic_python_agent.agent] Ironic does not support automated TLS
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_shred_fail_oserror
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_shred_fail_oserror ... ok
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run_without_inspection_and_apiurl
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run_without_inspection_and_apiurl ... ok
-   ERROR [root] Erasing block device /dev/sda failed with error Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: None
-Stderr: None
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_shred_fail_processerror
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_shred_fail_processerror ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_shred_uses_internal_info
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_shred_uses_internal_info ... ok
- WARNING [root] Refusing to permit ATA Secure Erase as direct ATA commands via the `smartctl` utility with device /dev/sda do not succeed.
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_smartctl_fails_security_fallback_to_shred
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_smartctl_fails_security_fallback_to_shred ... ok
+   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: fail
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__find_pstore_mount_point_no_pstore
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__find_pstore_mount_point_no_pstore ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_info_wrapper_file_like_eats_error
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_info_wrapper_file_like_eats_error ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__get_device_info
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__get_device_info ... ok
    ERROR [ironic_python_agent.ironic_api_client] An error occurred while attempting to discover the available Ironic API versions, falling back to using version 1.31
 Traceback (most recent call last):
   File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 463, in resolve
@@ -5488,7 +4982,7 @@
                        ~~~~~~~~~~~~~~^^
   File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 206, in _new_conn
     raise NameResolutionError(self.host, self, e) from e
-urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xb32c0c90>: Failed to resolve 'example.com' ([Errno -2] Name or service not known)
+urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xf43560e0>: Failed to resolve 'example.com' ([Errno -2] Name or service not known)
 
 The above exception was the direct cause of the following exception:
 
@@ -5506,7 +5000,7 @@
   File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 519, in increment
     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb32c0c90>: Failed to resolve 'example.com' ([Errno -2] Name or service not known)"))
+urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf43560e0>: Failed to resolve 'example.com' ([Errno -2] Name or service not known)"))
 
 During handling of the above exception, another exception occurred:
 
@@ -5525,16 +5019,23 @@
     r = adapter.send(request, **kwargs)
   File "/usr/lib/python3/dist-packages/requests/adapters.py", line 700, in send
     raise ConnectionError(e, request=request)
-requests.exceptions.ConnectionError: HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb32c0c90>: Failed to resolve 'example.com' ([Errno -2] Name or service not known)"))
+requests.exceptions.ConnectionError: HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf43560e0>: Failed to resolve 'example.com' ([Errno -2] Name or service not known)"))
  WARNING [ironic_python_agent.agent] Ironic does not support automated TLS
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_smartctl_unsupported_shred
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_smartctl_unsupported_shred ... ok
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_url_from_mdns_by_default
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_url_from_mdns_by_default ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_virtual_media
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_virtual_media ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_concurrency
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_concurrency ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__get_md_uuid
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__get_md_uuid ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_info_wrapper_iter_like
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_info_wrapper_iter_like ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_linux_raid_member
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_linux_raid_member ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_linux_raid_member_false
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_linux_raid_member_false ... ok
+   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: fail
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_info_wrapper_iter_like_eats_error
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_info_wrapper_iter_like_eats_error ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device ... ok
    ERROR [ironic_python_agent.ironic_api_client] An error occurred while attempting to discover the available Ironic API versions, falling back to using version 1.31
 Traceback (most recent call last):
   File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 463, in resolve
@@ -5606,7 +5107,7 @@
                        ~~~~~~~~~~~~~~^^
   File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 206, in _new_conn
     raise NameResolutionError(self.host, self, e) from e
-urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xb3ef1df0>: Failed to resolve 'example.com' ([Errno -2] Name or service not known)
+urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xf431c450>: Failed to resolve 'example.com' ([Errno -2] Name or service not known)
 
 The above exception was the direct cause of the following exception:
 
@@ -5624,7 +5125,7 @@
   File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 519, in increment
     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb3ef1df0>: Failed to resolve 'example.com' ([Errno -2] Name or service not known)"))
+urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf431c450>: Failed to resolve 'example.com' ([Errno -2] Name or service not known)"))
 
 During handling of the above exception, another exception occurred:
 
@@ -5643,36 +5144,678 @@
     r = adapter.send(request, **kwargs)
   File "/usr/lib/python3/dist-packages/requests/adapters.py", line 700, in send
     raise ConnectionError(e, request=request)
-requests.exceptions.ConnectionError: HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb3ef1df0>: Failed to resolve 'example.com' ([Errno -2] Name or service not known)"))
+requests.exceptions.ConnectionError: HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf431c450>: Failed to resolve 'example.com' ([Errno -2] Name or service not known)"))
  WARNING [ironic_python_agent.agent] Ironic does not support automated TLS
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_url_from_mdns_explicitly
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_url_from_mdns_explicitly ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test__smart_test_status
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test__smart_test_status ... ok
-   ERROR [ironic_python_agent.burnin] SMART test on /dev/sdj failed with 'string'
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test__smart_test_status_missing
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test__smart_test_status_missing ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_disk_default
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_disk_default ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_disk_no_default
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_disk_no_default ... ok
-   ERROR [ironic_python_agent.burnin] fio (disk) failed with error Unexpected error while running command.
+ WARNING [root] Could not determine if /dev/sdfake is aread-only device. Error: 
+ironic_python_agent.tests.unit.test_hardware.TestListHardwareInfo.test_caching
+ironic_python_agent.tests.unit.test_hardware.TestListHardwareInfo.test_caching ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device_error
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device_error ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device_false
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device_false ... ok
+ WARNING [root] No hardware manager was able to handle interface foobar
+ WARNING [root] Could not determine if /dev/sdfake1 is aread-only device. Error: 
+ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces
+ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device_partition_error
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device_partition_error ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device_partition_ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device_partition_ok ... ok
+ WARNING [root] Cannot find detailed information about interface eth0
+ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_no_carrier
+ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_no_carrier ... ok
+   ERROR [ironic_python_agent.ironic_api_client] An error occurred while attempting to discover the available Ironic API versions, falling back to using version 1.31
+Traceback (most recent call last):
+  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 463, in resolve
+    return _proxy.query(name, rdtype, raise_on_no_answer=raises,
+           ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+                        use_network=use_network)
+                        ^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 407, in query
+    step(self._resolver.query, qname, rdtype, rdclass, tcp, source, raise_on_no_answer=False)
+         ^^^^^^^^^^^^^^
+  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 347, in _resolver
+    self.clear()
+    ~~~~~~~~~~^^
+  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 355, in clear
+    self._resolver = dns.resolver.Resolver(filename=self._filename)
+                     ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3/dist-packages/dns/resolver.py", line 945, in __init__
+    self.read_resolv_conf(filename)
+    ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^
+  File "/usr/lib/python3/dist-packages/dns/resolver.py", line 1039, in read_resolv_conf
+    raise NoResolverConfiguration("no nameservers")
+dns.resolver.NoResolverConfiguration: no nameservers
+
+During handling of the above exception, another exception occurred:
+
+Traceback (most recent call last):
+  File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 199, in _new_conn
+    sock = connection.create_connection(
+        (self._dns_host, self.port),
+    ...<2 lines>...
+        socket_options=self.socket_options,
+    )
+  File "/usr/lib/python3/dist-packages/urllib3/util/connection.py", line 60, in create_connection
+    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):
+               ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 558, in getaddrinfo
+    qname, addrs = _getaddrinfo_lookup(host, family, flags)
+                   ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 529, in _getaddrinfo_lookup
+    raise err
+  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 518, in _getaddrinfo_lookup
+    answer = resolve(host, qfamily, False, use_network=use_network)
+  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 473, in resolve
+    _raise_new_error(EAI_NODATA_ERROR)
+    ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 100, in _raise_new_error
+    raise error_instance.__class__(*error_instance.args)
+socket.gaierror: [Errno -2] Name or service not known
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 789, in urlopen
+    response = self._make_request(
+        conn,
+    ...<10 lines>...
+        **response_kw,
+    )
+  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 490, in _make_request
+    raise new_e
+  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 466, in _make_request
+    self._validate_conn(conn)
+    ~~~~~~~~~~~~~~~~~~~^^^^^^
+  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 1095, in _validate_conn
+    conn.connect()
+    ~~~~~~~~~~~~^^
+  File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 693, in connect
+    self.sock = sock = self._new_conn()
+                       ~~~~~~~~~~~~~~^^
+  File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 206, in _new_conn
+    raise NameResolutionError(self.host, self, e) from e
+urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xf43560e0>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "/usr/lib/python3/dist-packages/requests/adapters.py", line 667, in send
+    resp = conn.urlopen(
+        method=request.method,
+    ...<9 lines>...
+        chunked=chunked,
+    )
+  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 843, in urlopen
+    retries = retries.increment(
+        method, url, error=new_e, _pool=self, _stacktrace=sys.exc_info()[2]
+    )
+  File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 519, in increment
+    raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf43560e0>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
+
+During handling of the above exception, another exception occurred:
+
+Traceback (most recent call last):
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/ironic_api_client.py", line 130, in _get_ironic_api_version
+    response = self._request('GET', '/')
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/ironic_api_client.py", line 90, in _request
+    resp = self.session.request(method,
+                                request_url,
+    ...<4 lines>...
+                                timeout=CONF.http_request_timeout,
+                                **kwargs)
+  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 589, in request
+    resp = self.send(prep, **send_kwargs)
+  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 703, in send
+    r = adapter.send(request, **kwargs)
+  File "/usr/lib/python3/dist-packages/requests/adapters.py", line 700, in send
+    raise ConnectionError(e, request=request)
+requests.exceptions.ConnectionError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf43560e0>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
+ WARNING [ironic_python_agent.agent] Ironic does not support automated TLS
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_virtual_media_device_exists
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_virtual_media_device_exists ... ok
+ironic_python_agent.tests.unit.test_agent.TestBaseAgentVMediaToken.test_run_agent_token_vmedia
+ironic_python_agent.tests.unit.test_agent.TestBaseAgentVMediaToken.test_run_agent_token_vmedia ... ok
+ironic_python_agent.tests.unit.test_agent.TestFromConfig.test_override_urls
+ironic_python_agent.tests.unit.test_agent.TestFromConfig.test_override_urls ... ok
+ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_add_partition
+ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_add_partition ... ok
+ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_commit
+ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_commit ... ok
+ WARNING [root] Cannot find detailed information about interface eth0
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_virtual_media_device_exists_no_match
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_virtual_media_device_exists_no_match ... ok
+ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_biosdevname
+ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_biosdevname ... ok
+ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_commit_with_device_disconnected
+ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_commit_with_device_disconnected ... ok
+ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_commit_with_device_is_always_busy
+ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_commit_with_device_is_always_busy ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_virtual_media_device_path_doesnt_exist
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_virtual_media_device_path_doesnt_exist ... ok
+ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_commit_with_device_is_busy_once
+ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_commit_with_device_is_busy_once ... ok
+ironic_python_agent.tests.unit.test_disk_utils.FindEfiPartitionTestCase.test_find_efi_partition
+ironic_python_agent.tests.unit.test_disk_utils.FindEfiPartitionTestCase.test_find_efi_partition ... ok
+ WARNING [root] Cannot find detailed information about interface bond0
+ironic_python_agent.tests.unit.test_disk_utils.FindEfiPartitionTestCase.test_find_efi_partition_not_found
+ironic_python_agent.tests.unit.test_disk_utils.FindEfiPartitionTestCase.test_find_efi_partition_not_found ... ok
+ironic_python_agent.tests.unit.test_disk_utils.FindEfiPartitionTestCase.test_find_efi_partition_only_boot_flag_gpt
+ironic_python_agent.tests.unit.test_disk_utils.FindEfiPartitionTestCase.test_find_efi_partition_only_boot_flag_gpt ... ok
+ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_bond
+ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_bond ... ok
+ironic_python_agent.tests.unit.test_disk_utils.FindEfiPartitionTestCase.test_find_efi_partition_only_boot_flag_mbr
+ironic_python_agent.tests.unit.test_disk_utils.FindEfiPartitionTestCase.test_find_efi_partition_only_boot_flag_mbr ... ok
+ironic_python_agent.tests.unit.test_disk_utils.GetDeviceByteSizeTestCase.test_get_dev_byte_size
+ironic_python_agent.tests.unit.test_disk_utils.GetDeviceByteSizeTestCase.test_get_dev_byte_size ... ok
+ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available
+ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_apply_configuration
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_apply_configuration ... ok
+ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_dev_becomes_avail_busybox
+ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_dev_becomes_avail_busybox ... ok
+ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_dev_becomes_avail_psmisc
+ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_dev_becomes_avail_psmisc ... ok
+ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_device_in_use_busybox
+ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_device_in_use_busybox ... ok
+ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_device_in_use_psmisc
+ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_device_in_use_psmisc ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_apply_configuration_no_delete
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_apply_configuration_no_delete ... ok
+ WARNING [root] Cannot find detailed information about interface eth0
+ WARNING [ironic_python_agent.disk_utils] Failed to check the device fake-dev with fuser: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: None
+Stderr: 'fake'
+ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_no_device
+ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_no_device ... ok
+ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_lldp
+ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_lldp WARNING [ironic_python_agent.disk_utils] Failed to check the device fake-dev with fuser: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: None
+Stderr: 'fake'
+ ... ok
+ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_no_fuser
+ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_no_fuser ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_clean_steps_exist
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_clean_steps_exist ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_clean_uefi_invalid
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_clean_uefi_invalid ... ok
+ WARNING [root] Cannot find detailed information about interface eth0
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_clean_boot_records
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_clean_boot_records ... ok
+ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_lldp_error
+ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_lldp_error ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_clean_uefi_nvram
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_clean_uefi_nvram ... ok
+ WARNING [ironic_python_agent.efi_utils] Empty EFI partition detected.
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_empty_partition_by_uuid
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_empty_partition_by_uuid ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_clean_uefi_nvram_defaults
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_clean_uefi_nvram_defaults ... ok
+ WARNING [root] Cannot find detailed information about interface eth0
+ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_vendor_info
+ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_vendor_info ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_collect_lldp_data
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_collect_lldp_data ... ok
+   ERROR [ironic_python_agent.efi_utils] Could not configure UEFI boot on device /dev/fake: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+Traceback (most recent call last):
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/efi_utils.py", line 131, in manage_uefi
+    utils.execute('mount', efi_partition, efi_partition_mount_point)
+    ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "<string>", line 3, in execute
+  File "/usr/lib/python3.13/unittest/mock.py", line 1167, in __call__
+    return self._mock_call(*args, **kwargs)
+           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.13/unittest/mock.py", line 1171, in _mock_call
+    return self._execute_mock_call(*args, **kwargs)
+           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.13/unittest/mock.py", line 1226, in _execute_mock_call
+    raise effect
+oslo_concurrency.processutils.ProcessExecutionError: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_failure
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_failure ... ok
+ WARNING [root] Cannot find detailed information about interface eth0
+ WARNING [root] Cannot find detailed information about interface eth0.100
+   ERROR [ironic_python_agent.efi_utils] Could not configure UEFI boot on device /dev/fake: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+Traceback (most recent call last):
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/efi_utils.py", line 185, in manage_uefi
+    _run_efibootmgr(valid_efi_bootloaders, efi_dev, efi_part,
+    ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+                    efi_partition_mount_point)
+                    ^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/efi_utils.py", line 351, in _run_efibootmgr
+    boot_records = list(get_boot_records())
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/efi_utils.py", line 282, in get_boot_records
+    efi_output = utils.execute('efibootmgr', '-v', binary=True)
+  File "<string>", line 3, in execute
+  File "/usr/lib/python3.13/unittest/mock.py", line 1167, in __call__
+    return self._mock_call(*args, **kwargs)
+           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.13/unittest/mock.py", line 1171, in _mock_call
+    return self._execute_mock_call(*args, **kwargs)
+           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.13/unittest/mock.py", line 1230, in _execute_mock_call
+    raise result
+oslo_concurrency.processutils.ProcessExecutionError: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+   ERROR [ironic_python_agent.efi_utils] Umounting efi system partition failed. Attempted 3 times. Error: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'no umount'
+Stderr: None
+ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_vlan_interfaces
+ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_vlan_interfaces ... ok
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_failure_after_failure
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_failure_after_failure ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_collect_lldp_data_decode_exception
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_collect_lldp_data_decode_exception ... ok
+   ERROR [ironic_python_agent.efi_utils] Could not configure UEFI boot on device /dev/fake: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+Traceback (most recent call last):
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/efi_utils.py", line 185, in manage_uefi
+    _run_efibootmgr(valid_efi_bootloaders, efi_dev, efi_part,
+    ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+                    efi_partition_mount_point)
+                    ^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/efi_utils.py", line 351, in _run_efibootmgr
+    boot_records = list(get_boot_records())
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/efi_utils.py", line 282, in get_boot_records
+    efi_output = utils.execute('efibootmgr', '-v', binary=True)
+  File "<string>", line 3, in execute
+  File "/usr/lib/python3.13/unittest/mock.py", line 1167, in __call__
+    return self._mock_call(*args, **kwargs)
+           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.13/unittest/mock.py", line 1171, in _mock_call
+    return self._execute_mock_call(*args, **kwargs)
+           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.13/unittest/mock.py", line 1230, in _execute_mock_call
+    raise result
+oslo_concurrency.processutils.ProcessExecutionError: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_failure_after_mount
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_failure_after_mount ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_collect_lldp_data_netutils_exception
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_collect_lldp_data_netutils_exception ... ok
+ WARNING [root] Cannot find detailed information about interface eth0
+ WARNING [root] Cannot find detailed information about interface eth0.100
+ WARNING [root] Cannot find detailed information about interface eth0.101
+ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_vlan_interfaces_using_lldp
+ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_vlan_interfaces_using_lldp ... ok
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_found_csv
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_found_csv ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration ... ok
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_get_boot_records
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_get_boot_records ... ok
+ WARNING [root] Cannot find detailed information about interface eth0
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_no_partition
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_no_partition ... ok
+ WARNING [root] Cannot find detailed information about interface eth1
+ WARNING [root] Cannot find detailed information about interface eth0.100
+ WARNING [root] Cannot find detailed information about interface eth0.101
+ WARNING [root] Cannot find detailed information about interface eth1.102
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_device_handling_failures
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_device_handling_failures ... ok
+ WARNING [root] Cannot find detailed information about interface eth1.103
+ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_vlan_interfaces_using_lldp_all
+ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_vlan_interfaces_using_lldp_all ... ok
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_nvme_device
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_nvme_device ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_device_handling_failures_raid5
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_device_handling_failures_raid5 ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_device_handling_failures_raid6
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_device_handling_failures_raid6 ... ok
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_ok
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_ok ... ok
+ WARNING [root] Cannot find detailed information about interface eth0
+ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_vlan_invalid_int
+ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_vlan_invalid_int ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_efi
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_efi ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_empty_target_raid_config
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_empty_target_raid_config ... ok
+ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_already_running
+ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_already_running ... ok
+ WARNING [root] Attempted to invoke multipath utilities, but we encountered an error: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'lacking kernel support'
+Stderr: None
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_failure_with_nvme
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_failure_with_nvme ... ok
+ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_lacking_support
+ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_lacking_support ... ok
+ WARNING [root] Attempted to invoke multipath utilities, but we encountered an error: 
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_software_raid
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_software_raid ... ok
+ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_ll_fails
+ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_ll_fails ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_force_gpt_with_disk_label
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_force_gpt_with_disk_label ... ok
+ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_mpathconf
+ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_mpathconf ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_invalid_hints
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_invalid_hints ... ok
+ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_no_multipath
+ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_no_multipath ... ok
+ WARNING [root] Path /dev/disk/by-path is inaccessible, /dev/disk/by-path/* version of block device name is unavailable Cause: [Errno 2] No such file or directory: '/dev/disk/by-path'
+ WARNING [root] Device /dev/sda is inaccessible, skipping... Error: [Errno 2] No such file or directory: '/dev/sda'
+ WARNING [root] Could not find the SCSI address (HCTL) for device /dev/sda. Skipping
+ WARNING [root] Can't find field vendor for device sda in device class block
+ WARNING [root] Device /dev/sdb is inaccessible, skipping... Error: [Errno 2] No such file or directory: '/dev/sdb'
+ WARNING [root] Could not find the SCSI address (HCTL) for device /dev/sdb. Skipping
+ WARNING [root] Can't find field vendor for device sdb in device class block
+ WARNING [root] Device /dev/md0 is inaccessible, skipping... Error: [Errno 2] No such file or directory: '/dev/md0'
+ WARNING [root] Could not find the SCSI address (HCTL) for device /dev/md0. Skipping
+ WARNING [root] Can't find field vendor for device md0 in device class block
+ WARNING [root] Attempted to determine if multipath tools were present. Not detected. Error recorded: 
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_invalid_raid_config
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_invalid_raid_config ... ok
+ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_not_found_mpath_config
+ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_not_found_mpath_config ... ok
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_wholedisk
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_wholedisk ... ok
+ironic_python_agent.tests.unit.test_hardware.TestProtectedDiskSafetyChecks.test_special_filesystem_guard_enabled_no_results
+ironic_python_agent.tests.unit.test_hardware.TestProtectedDiskSafetyChecks.test_special_filesystem_guard_enabled_no_results ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_max_is_first_logical
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_max_is_first_logical ... ok
+ironic_python_agent.tests.unit.test_hardware.TestProtectedDiskSafetyChecks.test_special_filesystem_guard_node_indicates_skip
+ironic_python_agent.tests.unit.test_hardware.TestProtectedDiskSafetyChecks.test_special_filesystem_guard_node_indicates_skip ... ok
+ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_with_config
+ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_with_config ... ok
+ironic_python_agent.tests.unit.test_hardware.TestProtectedDiskSafetyChecks.test_special_filesystem_guard_not_enabled
+ironic_python_agent.tests.unit.test_hardware.TestProtectedDiskSafetyChecks.test_special_filesystem_guard_not_enabled ... ok
+ WARNING [root] Mismatched hardware managers versions. Agent version: {'specific': '1'}, node version: {'not_specific': '1'}
+ironic_python_agent.tests.unit.test_hardware.TestVersions.test_check_versions
+ironic_python_agent.tests.unit.test_hardware.TestVersions.test_check_versions ... ok
+ironic_python_agent.tests.unit.test_hardware.TestProtectedDiskSafetyChecks.test_special_filesystem_guard_raises
+ironic_python_agent.tests.unit.test_hardware.TestProtectedDiskSafetyChecks.test_special_filesystem_guard_raises ... ok
+ironic_python_agent.tests.unit.test_hardware.TestVersions.test_get_current_versions
+ironic_python_agent.tests.unit.test_hardware.TestVersions.test_get_current_versions ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestFindPartitionWithPath.test_found
+ironic_python_agent.tests.unit.test_inject_files.TestFindPartitionWithPath.test_found ... ok
+   ERROR [ironic_python_agent.inspector] inspector url error 400: <MagicMock name='post().content.decode()' id='4122046880'>, proceeding with lookup
+ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_error
+ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_error ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_mismatching_hints
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_mismatching_hints ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestFindPartitionWithPath.test_found_with_dev
+ironic_python_agent.tests.unit.test_inject_files.TestFindPartitionWithPath.test_found_with_dev ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_no_max
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_no_max ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_partitions_detected
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_partitions_detected ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestFindPartitionWithPath.test_not_found
+ironic_python_agent.tests.unit.test_inject_files.TestFindPartitionWithPath.test_not_found ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_raid_5
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_raid_5 ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_empty
+ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_empty ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_raid_6
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_raid_6 ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_invalid_type_in_param
+ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_invalid_type_in_param ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_skip_list_existing_device_does_not_match
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_skip_list_existing_device_does_not_match ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_with_complete_skip_list
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_with_complete_skip_list ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_invalid_type_on_node
+ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_invalid_type_on_node ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_ok
+ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_ok ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_with_hints
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_with_hints ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_verify_false
+ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_verify_false ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_with_nvme
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_with_nvme ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_delete
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_delete ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_delete_not_exists
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_delete_not_exists ... ok
+ WARNING [root] Failed to remove partitions on /dev/sda: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'No md superblock detected'
+Stderr: None
+ WARNING [root] Failed to remove partitions on /dev/sdb: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'No md superblock detected'
+Stderr: None
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_delete_configuration
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_delete_configuration ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_modes
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_modes ... ok
+   ERROR [root] Unable to clean all softraid correctly. Remaining ['/dev/md0']
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_delete_configuration_failure_blocks_remaining
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_delete_configuration_failure_blocks_remaining ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_modes_exists
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_modes_exists ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_delete_configuration_partition
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_delete_configuration_partition ... ok
+ WARNING [root] RAID device /dev/md1 will not be deleted
+ WARNING [root] Software RAID device /dev/md1 is not going to be deleted as its volume name - small - is on the skip list
+ WARNING [root] Software RAID device /dev/md1 was not deleted
+ WARNING [root] Holder disk /dev/sda contains logical disk on the skip list. Deleting just partitions: ['1']
+ WARNING [root] Holder disk /dev/sdb contains logical disk on the skip list. Deleting just partitions: ['1']
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_on
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_on ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_delete_configuration_skip_list
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_delete_configuration_skip_list ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_deploy_steps_exist
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_deploy_steps_exist ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_owner
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_owner ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_erase_disabled
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_erase_disabled ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_owner_and_group
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_owner_and_group ... ok
+   ERROR [root] Failed to invoke secure erase, fallback to shred is not enabled: Error erasing block device: An unknown error occurred erasing block device /dev/sda
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_failed
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_failed ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_url
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_url ... ok
+ WARNING [root] Failed to invoke secure erase, falling back to shred: Error erasing block device: An unknown error occurred erasing block device /dev/sda
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_url_formatting
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_url_formatting ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_failed_continued
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_failed_continued ... ok
+ironic_python_agent.tests.unit.test_inspector.TestCollectExtraHardware.test_benchmarks
+ironic_python_agent.tests.unit.test_inspector.TestCollectExtraHardware.test_benchmarks ... ok
+   ERROR [root] Failed to invoke secure erase, fallback to shred is not enabled: Error erasing block device: Block device /dev/sda is frozen and cannot be erased
+   ERROR [ironic_python_agent.utils] failed to run hardware-detect utility: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: None
+Stderr: None
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_frozen
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_frozen ... ok
+ironic_python_agent.tests.unit.test_inspector.TestCollectExtraHardware.test_execute_failed
+ironic_python_agent.tests.unit.test_inspector.TestCollectExtraHardware.test_execute_failed ... ok
+   ERROR [root] Failed to invoke secure erase, fallback to shred is not enabled: Error erasing block device: Block device /dev/sda already has a security password set
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_security_enabled
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_security_enabled ... ok
+ironic_python_agent.tests.unit.test_inspector.TestCollectExtraHardware.test_no_benchmarks
+ironic_python_agent.tests.unit.test_inspector.TestCollectExtraHardware.test_no_benchmarks ... ok
+   ERROR [ironic_python_agent.utils] JSON returned from hardware-detect cannot be decoded: Expecting value: line 1 column 1 (char 0)
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_security_enabled_unlock_attempt
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_security_enabled_unlock_attempt ... ok
+ironic_python_agent.tests.unit.test_inspector.TestCollectExtraHardware.test_parsing_failed
+ironic_python_agent.tests.unit.test_inspector.TestCollectExtraHardware.test_parsing_failed ... ok
+ironic_python_agent.tests.unit.test_inspector.TestNormalizeMac.test_correct_mac
+ironic_python_agent.tests.unit.test_inspector.TestNormalizeMac.test_correct_mac ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_security_unlock_fallback_pass
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_security_unlock_fallback_pass ... ok
+ironic_python_agent.tests.unit.test_inspector.TestNormalizeMac.test_pxelinux_mac
+ironic_python_agent.tests.unit.test_inspector.TestNormalizeMac.test_pxelinux_mac ... ok
+ WARNING [ironic_python_agent.numa_inspector] Failed to get some NUMA information (Error in NUMA node data format: An unexpected error occurred. Please try back later.)
+ironic_python_agent.tests.unit.test_numa_inspector.TestCollectNumaTopologyInfo.test_collect_failure
+ironic_python_agent.tests.unit.test_numa_inspector.TestCollectNumaTopologyInfo.test_collect_failure ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_success
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_success ... ok
+ WARNING [ironic_python_agent.numa_inspector] Failed to get some NUMA information (Error in NUMA node data format: An unexpected error occurred. Please try back later.)
+ironic_python_agent.tests.unit.test_numa_inspector.TestCollectNumaTopologyInfo.test_collect_no_nics_dirs
+ironic_python_agent.tests.unit.test_numa_inspector.TestCollectNumaTopologyInfo.test_collect_no_nics_dirs ... ok
+ WARNING [ironic_python_agent.numa_inspector] Failed to get list of NUMA nodes, NUMA node path does not exist: /sys/devices/system/node/
+ WARNING [root] Unable to execute `smartctl` utility: boom
+ironic_python_agent.tests.unit.test_numa_inspector.TestCollectNumaTopologyInfo.test_collect_no_numa_dirs
+ironic_python_agent.tests.unit.test_numa_inspector.TestCollectNumaTopologyInfo.test_collect_no_numa_dirs ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_success_no_smartctl
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_success_no_smartctl ... ok
+ironic_python_agent.tests.unit.test_numa_inspector.TestCollectNumaTopologyInfo.test_collect_success
+ironic_python_agent.tests.unit.test_numa_inspector.TestCollectNumaTopologyInfo.test_collect_success ... ok
+ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_DeployFail_exc
+ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_DeployFail_exc ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nosecurity_shred
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nosecurity_shred ... ok
+ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_absent
+ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_absent ... ok
+ WARNING [ironic_python_agent.disk_utils] Unable to probe for partitions on device /dev/fake, the partitioning table may be broken. Error: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: None
+Stderr: None
+ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_exc
+ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_exc ... ok
+ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_present
+ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_present ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_notsupported_shred
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_notsupported_shred ... ok
+ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_present_uppercase
+ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_present_uppercase ... ok
+ironic_python_agent.tests.unit.test_qemu_img.ImageInfoTestCase.test_image_info_path_doesnt_exist_disabled
+ironic_python_agent.tests.unit.test_qemu_img.ImageInfoTestCase.test_image_info_path_doesnt_exist_disabled ... ok
+ironic_python_agent.tests.unit.test_qemu_img.ImageInfoTestCase.test_image_info_path_exists_disabled
+ironic_python_agent.tests.unit.test_qemu_img.ImageInfoTestCase.test_image_info_path_exists_disabled ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nvme_crypto_success
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nvme_crypto_success ... ok
+ironic_python_agent.tests.unit.test_qemu_img.ImageInfoTestCase.test_image_info_path_exists_safe
+ironic_python_agent.tests.unit.test_qemu_img.ImageInfoTestCase.test_image_info_path_exists_safe ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nvme_failed
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nvme_failed ... ok
+ironic_python_agent.tests.unit.test_qemu_img.ImageInfoTestCase.test_image_info_path_exists_unsafe
+ironic_python_agent.tests.unit.test_qemu_img.ImageInfoTestCase.test_image_info_path_exists_unsafe ... ok
+   ERROR [root] nvme-cli did not return any supported format modes for device: /dev/nvme0n1
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nvme_format_unsupported
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nvme_format_unsupported ... ok
+ironic_python_agent.tests.unit.test_raid_utils.TestGetNextFreeRaidDevice.test_no_device
+ironic_python_agent.tests.unit.test_raid_utils.TestGetNextFreeRaidDevice.test_no_device ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nvme_userdata_success
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nvme_userdata_success ... ok
+ironic_python_agent.tests.unit.test_raid_utils.TestGetNextFreeRaidDevice.test_ok
+ironic_python_agent.tests.unit.test_raid_utils.TestGetNextFreeRaidDevice.test_ok ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_shred_0_pass_no_zeroize
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_shred_0_pass_no_zeroize ... ok
+   ERROR [root] Erasing block device /dev/sda failed with error 
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_shred_fail_oserror
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_shred_fail_oserror ... ok
+   ERROR [root] Erasing block device /dev/sda failed with error Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: None
+Stderr: None
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test__get_actual_component_devices
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test__get_actual_component_devices ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_shred_fail_processerror
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_shred_fail_processerror ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_shred_uses_internal_info
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_shred_uses_internal_info ... ok
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test__get_actual_component_devices_broken_raid0
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test__get_actual_component_devices_broken_raid0 ... ok
+ WARNING [root] Refusing to permit ATA Secure Erase as direct ATA commands via the `smartctl` utility with device /dev/sda do not succeed.
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_smartctl_fails_security_fallback_to_shred
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_smartctl_fails_security_fallback_to_shred ... ok
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device ... ok
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device_fail_create_device
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device_fail_create_device ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_smartctl_unsupported_shred
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_smartctl_unsupported_shred ... ok
+ WARNING [ironic_python_agent.raid_utils] Found /dev/sdb1 to be missing from /dev/md0 ... re-adding!
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_virtual_media
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_virtual_media ... ok
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device_fail_read_device
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device_fail_read_device ... ok
+ WARNING [ironic_python_agent.raid_utils] Found /dev/sdb1 to be missing from /dev/md0 ... re-adding!
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device_missing_device
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device_missing_device ... ok
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device_with_volume_name
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device_with_volume_name ... ok
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_get_volume_name_of_raid_device
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_get_volume_name_of_raid_device ... ok
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_get_volume_name_of_raid_device_invalid
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_get_volume_name_of_raid_device_invalid ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_concurrency
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_concurrency ... ok
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_bios_gpt
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_bios_gpt ... ok
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_bios_msdos
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_bios_msdos ... ok
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_uefi_gpt
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_uefi_gpt ... ok
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_uefi_gpt_efi_provided
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_uefi_gpt_efi_provided ... ok
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_uefi_gpt_esp_not_found
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_uefi_gpt_esp_not_found ... ok
+ironic-python-agent: Excluding device sda1 from virtual mediaconsideration as it is a partition.
+ironic-python-agent: Found possible vmedia candidate /dev/sda2, however the device failed vmedia validity checking.
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__find_vmedia_device_by_labels
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__find_vmedia_device_by_labels ... ok
+ironic-python-agent: Was unable to execute the lsblk command. Unexpected error while running command.
 Command: None
 Exit code: -
 Stdout: None
 Stderr: None
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__find_vmedia_device_by_labels_handles_exec_error
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__find_vmedia_device_by_labels_handles_exec_error ... ok
+ironic-python-agent: Did not identify any virtual media candidates devices.
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__find_vmedia_device_by_labels_not_found
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__find_vmedia_device_by_labels_not_found ... ok
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_device
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_device ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_concurrency_pool_size
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_concurrency_pool_size ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_disk_no_fio
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_disk_no_fio ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_disk_smart_test
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_disk_smart_test ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_express
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_express ... ok
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_params
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_params ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_express_stops_on_safety_failure
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_express_stops_on_safety_failure ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_metadata
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_metadata ... ok
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_params_by_device
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_params_by_device ... ok
    ERROR [root] Failed to erase the metadata on device "/dev/sdb". Error: Unexpected error while running command.
 Command: None
 Exit code: -
@@ -5680,10 +5823,53 @@
 Stderr: None
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_metadata_error
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_metadata_error ... ok
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_params_by_device_device_invalid
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_params_by_device_device_invalid ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_metadata_safety_check
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_metadata_safety_check ... ok
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_params_cannot_find_dev
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_params_cannot_find_dev ... ok
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__read_params_from_file
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__read_params_from_file ... ok
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__read_params_from_file_fail
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__read_params_from_file_fail ... ok
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test_get_agent_params_from_cache
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test_get_agent_params_from_cache ... ok
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test_get_agent_params_kernel_cmdline
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test_get_agent_params_kernel_cmdline ... ok
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test_get_agent_params_vmedia
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test_get_agent_params_vmedia ... ok
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_determine_time_method_chronyd
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_determine_time_method_chronyd ... ok
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_determine_time_method_none
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_determine_time_method_none ... ok
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_determine_time_method_ntpdate
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_determine_time_method_ntpdate ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_no_parallel_by_default
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_no_parallel_by_default ... ok
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_chrony
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_chrony ... ok
+   ERROR [ironic_python_agent.utils] Failed to sync time using chrony to ntp server: 192.168.1.1: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: None
+Stderr: 'time verboten'
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_chrony_failure
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_chrony_failure ... ok
+   ERROR [ironic_python_agent.utils] Unable to sync clock, available methods of 'ntpdate' or 'chrony' not found.
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_none
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_none ... ok
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_ntp
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_ntp ... ok
+   ERROR [ironic_python_agent.utils] Failed to sync with ntp server: 192.168.1.1: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: None
+Stderr: None
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_ntp_raises_exception
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_ntp_raises_exception ... ok
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_ntp_server_is_none
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_ntp_server_is_none ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_no_parallel_by_default_protected_device
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_no_parallel_by_default_protected_device ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_without_disk
@@ -5879,7 +6065,7 @@
  WARNING [root] Can't find field vendor for device dm-0 in device class block
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device ... ok
- WARNING [root] Using hint {'vendor': 'basic vendor'} skipping devices: /dev/sdb,/dev/sda
+ WARNING [root] Using hint {'vendor': 'basic vendor'} skipping devices: /dev/sda,/dev/sdb
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_complete_skip_list
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_complete_skip_list ... ok
  WARNING [root] Device /dev/sda is inaccessible, skipping... Error: [Errno 2] No such file or directory: '/dev/sda'
@@ -5945,17 +6131,15 @@
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_root_device_hints_rotational ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_root_device_hints_serial
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_root_device_hints_serial ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_find_pair_1st
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_find_pair_1st ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_root_device_hints_size
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_root_device_hints_size ... ok
+ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_retries
+ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_retries ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_root_device_hints_size_not_int
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_root_device_hints_size_not_int ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_root_device_hints_size_str
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_root_device_hints_size_str ... ok
  WARNING [root] Using hint {'vendor': 'fake-vendor'} skipping devices: /dev/sdb
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_find_pair_2nd
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_find_pair_2nd ... ok
  WARNING [ironic_lib.utils] No device found that matches the root device hints {'wwn': 'fake-wwn'}
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_root_device_hints_skip_list
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_root_device_hints_skip_list ... ok
@@ -6082,348 +6266,260 @@
  WARNING [root] Can't find field vendor for device md0 in device class block
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_validate_configuration_valid_raid1_raidN
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_validate_configuration_valid_raid1_raidN ... ok
-ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test__check_for_iscsi
-ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test__check_for_iscsi ... ok
-ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test__check_for_iscsi_no_iscsi
-ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test__check_for_iscsi_no_iscsi ... ok
-ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test__load_ipmi_modules
-ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test__load_ipmi_modules ... ok
-ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_missing
-ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_missing ... ok
- WARNING [root] Could not find the SCSI address (HCTL) for device /dev/sda1. Skipping
-ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_partuuid_success
-ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_partuuid_success ... ok
- WARNING [root] Could not find the SCSI address (HCTL) for device /dev/sda. Skipping
- WARNING [root] Could not find the SCSI address (HCTL) for device /dev/sdb. Skipping
-ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_success
-ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_success ... ok
- WARNING [root] Could not find the SCSI address (HCTL) for device /dev/sda. Skipping
- WARNING [root] Could not find the SCSI address (HCTL) for device /dev/sdb. Skipping
- WARNING [root] Could not find the SCSI address (HCTL) for device /dev/md0. Skipping
- WARNING [root] Could not find the SCSI address (HCTL) for device /dev/md1. Skipping
-ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_success_raid
-ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_success_raid ... ok
-ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_wrong_block_type
-ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_wrong_block_type ... ok
-   ERROR [ironic_python_agent.inspector] inspector url error 400: <MagicMock name='post().content.decode()' id='3007130360'>, proceeding with lookup
-ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_error
-ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_error ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_find_timeout
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_find_timeout ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_pairing_defaults
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_pairing_defaults ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_pairing_no_defaults
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_pairing_no_defaults ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_pairing_raise_missing_config
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_pairing_raise_missing_config ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_pairing_raise_wrong_config
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_pairing_raise_wrong_config ... ok
-   ERROR [ironic_python_agent.burnin] fio (network) failed with error Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_no_fio
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_no_fio ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_no_partner
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_no_partner ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_no_role
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_no_role ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_reader
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_reader ... ok
-   ERROR [ironic_python_agent.burnin] fio (network) failed with error Unexpected error while running command.
-Command: None
-Exit code: 16
-Stdout: 'Connection timeout'
-Stderr: None
-   ERROR [ironic_python_agent.burnin] fio (network) failed with error Unexpected error while running command.
-Command: None
-Exit code: 16
-Stdout: 'Connection timeout'
-Stderr: None
-   ERROR [ironic_python_agent.burnin] fio (network) failed with error Unexpected error while running command.
-Command: None
-Exit code: 16
-Stdout: 'Connection refused'
-Stderr: None
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_reader_loop
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_reader_loop ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_reader_w_logfile
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_reader_w_logfile ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_unknown_role
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_unknown_role ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_writer
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_writer ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_writer_w_logfile
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_writer_w_logfile ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_cpu_default
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_cpu_default ... ok
-   ERROR [ironic_python_agent.burnin] stress-ng (cpu) failed with error Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: None
-Stderr: None
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_cpu_no_stress_ng
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_cpu_no_stress_ng ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_cpu_non_default
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_cpu_non_default ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_vm_default
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_vm_default ... ok
-   ERROR [ironic_python_agent.burnin] stress-ng (vm) failed with error Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: None
-Stderr: None
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_vm_no_stress_ng
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_vm_no_stress_ng ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_vm_non_default
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_vm_non_default ... ok
-ironic_python_agent.tests.unit.test_disk_utils.FindEfiPartitionTestCase.test_find_efi_partition
-ironic_python_agent.tests.unit.test_disk_utils.FindEfiPartitionTestCase.test_find_efi_partition ... ok
-ironic_python_agent.tests.unit.test_disk_utils.FindEfiPartitionTestCase.test_find_efi_partition_not_found
-ironic_python_agent.tests.unit.test_disk_utils.FindEfiPartitionTestCase.test_find_efi_partition_not_found ... ok
-ironic_python_agent.tests.unit.test_disk_utils.FindEfiPartitionTestCase.test_find_efi_partition_only_boot_flag_gpt
-ironic_python_agent.tests.unit.test_disk_utils.FindEfiPartitionTestCase.test_find_efi_partition_only_boot_flag_gpt ... ok
-ironic_python_agent.tests.unit.test_disk_utils.FindEfiPartitionTestCase.test_find_efi_partition_only_boot_flag_mbr
-ironic_python_agent.tests.unit.test_disk_utils.FindEfiPartitionTestCase.test_find_efi_partition_only_boot_flag_mbr ... ok
-ironic_python_agent.tests.unit.test_disk_utils.FixGptStructsTestCases.test_fix_gpt_structs_exc
-ironic_python_agent.tests.unit.test_disk_utils.FixGptStructsTestCases.test_fix_gpt_structs_exc ... ok
-ironic_python_agent.tests.unit.test_disk_utils.FixGptStructsTestCases.test_fix_gpt_structs_fix_not_required
-ironic_python_agent.tests.unit.test_disk_utils.FixGptStructsTestCases.test_fix_gpt_structs_fix_not_required ... ok
-ironic_python_agent.tests.unit.test_disk_utils.FixGptStructsTestCases.test_fix_gpt_structs_fix_required
-ironic_python_agent.tests.unit.test_disk_utils.FixGptStructsTestCases.test_fix_gpt_structs_fix_required ... ok
-ironic_python_agent.tests.unit.test_disk_utils.GetDeviceInformationTestCase.test_empty
-ironic_python_agent.tests.unit.test_disk_utils.GetDeviceInformationTestCase.test_empty ... ok
-ironic_python_agent.tests.unit.test_disk_utils.GetDeviceInformationTestCase.test_fields
-ironic_python_agent.tests.unit.test_disk_utils.GetDeviceInformationTestCase.test_fields ... ok
-ironic_python_agent.tests.unit.test_disk_utils.GetDeviceInformationTestCase.test_normal
-ironic_python_agent.tests.unit.test_disk_utils.GetDeviceInformationTestCase.test_normal ... ok
-ironic_python_agent.tests.unit.test_disk_utils.PopulateImageTestCase.test_populate_qcow2_image
-ironic_python_agent.tests.unit.test_disk_utils.PopulateImageTestCase.test_populate_qcow2_image ... ok
-ironic_python_agent.tests.unit.test_disk_utils.PopulateImageTestCase.test_populate_raw_image
-ironic_python_agent.tests.unit.test_disk_utils.PopulateImageTestCase.test_populate_raw_image ... ok
-ironic_python_agent.tests.unit.test_disk_utils.TriggerDeviceRescanTestCase.test_custom_attempts
-ironic_python_agent.tests.unit.test_disk_utils.TriggerDeviceRescanTestCase.test_custom_attempts ... ok
- WARNING [ironic_python_agent.disk_utils] Failed to verify partition tables on device /dev/fake: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: None
-Stderr: None
-ironic_python_agent.tests.unit.test_disk_utils.TriggerDeviceRescanTestCase.test_fails
-ironic_python_agent.tests.unit.test_disk_utils.TriggerDeviceRescanTestCase.test_fails ... ok
-ironic_python_agent.tests.unit.test_disk_utils.TriggerDeviceRescanTestCase.test_trigger
-ironic_python_agent.tests.unit.test_disk_utils.TriggerDeviceRescanTestCase.test_trigger ... ok
-ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available
-ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available ... ok
-ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_dev_becomes_avail_busybox
-ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_dev_becomes_avail_busybox ... ok
-ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_dev_becomes_avail_psmisc
-ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_dev_becomes_avail_psmisc ... ok
-ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_device_in_use_busybox
-ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_device_in_use_busybox ... ok
-ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_device_in_use_psmisc
-ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_device_in_use_psmisc ... ok
-ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_no_device
-ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_no_device ... ok
- WARNING [ironic_python_agent.disk_utils] Failed to check the device fake-dev with fuser: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: None
-Stderr: 'fake'
- WARNING [ironic_python_agent.disk_utils] Failed to check the device fake-dev with fuser: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: None
-Stderr: 'fake'
-ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_no_fuser
-ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_no_fuser ... ok
-ironic_python_agent.tests.unit.test_efi_utils.TestGetEfiBootloaders.test__get_efi_bootloaders
-ironic_python_agent.tests.unit.test_efi_utils.TestGetEfiBootloaders.test__get_efi_bootloaders ... ok
-ironic_python_agent.tests.unit.test_efi_utils.TestGetEfiBootloaders.test__get_efi_bootloaders_no_csv
-ironic_python_agent.tests.unit.test_efi_utils.TestGetEfiBootloaders.test__get_efi_bootloaders_no_csv ... ok
-ironic_python_agent.tests.unit.test_efi_utils.TestGetEfiBootloaders.test__get_windows_efi_bootloaders
-ironic_python_agent.tests.unit.test_efi_utils.TestGetEfiBootloaders.test__get_windows_efi_bootloaders ... ok
-ironic_python_agent.tests.unit.test_efi_utils.TestGetEfiBootloaders.test__no_efi_bootloaders
-ironic_python_agent.tests.unit.test_efi_utils.TestGetEfiBootloaders.test__no_efi_bootloaders ... ok
- WARNING [ironic_python_agent.efi_utils] Invalid sgdisk line: I am a teaport
- WARNING [ironic_python_agent.efi_utils] No UUID information provided in sgdisk output for partition 1 on device /dev/fake
-ironic_python_agent.tests.unit.test_efi_utils.TestGetPartitionPathByNumber.test_broken
-ironic_python_agent.tests.unit.test_efi_utils.TestGetPartitionPathByNumber.test_broken ... ok
-ironic_python_agent.tests.unit.test_efi_utils.TestGetPartitionPathByNumber.test_ok
-ironic_python_agent.tests.unit.test_efi_utils.TestGetPartitionPathByNumber.test_ok ... ok
- WARNING [root] Device /dev/fake1 is inaccessible, skipping... Error: nope
-ironic_python_agent.tests.unit.test_hardware.TestCollectSystemLogs.test__collect_udev
-ironic_python_agent.tests.unit.test_hardware.TestCollectSystemLogs.test__collect_udev ... ok
-ironic_python_agent.tests.unit.test_hardware.TestCollectSystemLogs.test_collect_system_logs
-ironic_python_agent.tests.unit.test_hardware.TestCollectSystemLogs.test_collect_system_logs ... ok
- WARNING [root] No hardware manager was able to handle interface foobar
-ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces
-ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces ... ok
- WARNING [root] Cannot find detailed information about interface eth0
-ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_no_carrier
-ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_no_carrier ... ok
- WARNING [root] Cannot find detailed information about interface eth0
-ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_biosdevname
-ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_biosdevname ... ok
- WARNING [root] Cannot find detailed information about interface bond0
-ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_bond
-ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_bond ... ok
- WARNING [root] Cannot find detailed information about interface eth0
-ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_lldp
-ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_lldp ... ok
- WARNING [root] Cannot find detailed information about interface eth0
-ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_lldp_error
-ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_lldp_error ... ok
- WARNING [root] Cannot find detailed information about interface eth0
-ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_vendor_info
-ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_vendor_info ... ok
- WARNING [root] Cannot find detailed information about interface eth0
- WARNING [root] Cannot find detailed information about interface eth0.100
-ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_vlan_interfaces
-ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_vlan_interfaces ... ok
- WARNING [root] Cannot find detailed information about interface eth0
- WARNING [root] Cannot find detailed information about interface eth0.100
- WARNING [root] Cannot find detailed information about interface eth0.101
-ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_vlan_interfaces_using_lldp
-ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_vlan_interfaces_using_lldp ... ok
- WARNING [root] Cannot find detailed information about interface eth0
- WARNING [root] Cannot find detailed information about interface eth1
- WARNING [root] Cannot find detailed information about interface eth0.100
- WARNING [root] Cannot find detailed information about interface eth0.101
- WARNING [root] Cannot find detailed information about interface eth1.102
- WARNING [root] Cannot find detailed information about interface eth1.103
-ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_vlan_interfaces_using_lldp_all
-ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_vlan_interfaces_using_lldp_all ... ok
- WARNING [root] Cannot find detailed information about interface eth0
-ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_vlan_invalid_int
-ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_vlan_invalid_int ... ok
-ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_already_running
-ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_already_running ... ok
- WARNING [root] Attempted to invoke multipath utilities, but we encountered an error: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'lacking kernel support'
-Stderr: None
-ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_lacking_support
-ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_lacking_support ... ok
- WARNING [root] Attempted to invoke multipath utilities, but we encountered an error: 
-ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_ll_fails
-ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_ll_fails ... ok
-ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_mpathconf
-ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_mpathconf ... ok
-ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_no_multipath
-ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_no_multipath ... ok
- WARNING [root] Attempted to determine if multipath tools were present. Not detected. Error recorded: 
-ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_not_found_mpath_config
-ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_not_found_mpath_config ... ok
-ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_with_config
-ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_with_config ... ok
- WARNING [root] Mismatched hardware managers versions. Agent version: {'specific': '1'}, node version: {'not_specific': '1'}
-ironic_python_agent.tests.unit.test_hardware.TestVersions.test_check_versions
-ironic_python_agent.tests.unit.test_hardware.TestVersions.test_check_versions ... ok
-ironic_python_agent.tests.unit.test_hardware.TestVersions.test_get_current_versions
-ironic_python_agent.tests.unit.test_hardware.TestVersions.test_get_current_versions ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_empty
-ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_empty ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_invalid_type_in_param
-ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_invalid_type_in_param ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_invalid_type_on_node
-ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_invalid_type_on_node ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_ok
-ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_ok ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_verify_false
-ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_verify_false ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_content_and_deleted
-ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_content_and_deleted ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_missing_path
-ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_missing_path ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_no_directories
-ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_no_directories ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_numeric_fields
-ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_numeric_fields ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_root_without_on
-ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_root_without_on ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_unknown_fields
-ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_unknown_fields ... ok
-ironic_python_agent.tests.unit.test_inspector.TestCollectDefault.test_cache_hardware_info
-ironic_python_agent.tests.unit.test_inspector.TestCollectDefault.test_cache_hardware_info ... ok
- WARNING [ironic_python_agent.inspector] no suitable root device detected
-ironic_python_agent.tests.unit.test_inspector.TestCollectDefault.test_no_root_disk
-ironic_python_agent.tests.unit.test_inspector.TestCollectDefault.test_no_root_disk ... ok
-ironic_python_agent.tests.unit.test_inspector.TestCollectDefault.test_ok
-ironic_python_agent.tests.unit.test_inspector.TestCollectDefault.test_ok ... ok
-ironic_python_agent.tests.unit.test_inspector.TestCollectExtraHardware.test_benchmarks
-ironic_python_agent.tests.unit.test_inspector.TestCollectExtraHardware.test_benchmarks ... ok
-   ERROR [ironic_python_agent.utils] failed to run hardware-detect utility: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: None
-Stderr: None
-ironic_python_agent.tests.unit.test_inspector.TestCollectExtraHardware.test_execute_failed
-ironic_python_agent.tests.unit.test_inspector.TestCollectExtraHardware.test_execute_failed ... ok
-ironic_python_agent.tests.unit.test_inspector.TestCollectExtraHardware.test_no_benchmarks
-ironic_python_agent.tests.unit.test_inspector.TestCollectExtraHardware.test_no_benchmarks ... ok
-   ERROR [ironic_python_agent.utils] JSON returned from hardware-detect cannot be decoded: Expecting value: line 1 column 1 (char 0)
-ironic_python_agent.tests.unit.test_inspector.TestCollectExtraHardware.test_parsing_failed
-ironic_python_agent.tests.unit.test_inspector.TestCollectExtraHardware.test_parsing_failed ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_with_on_as_number
+ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_with_on_as_number ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_with_on_as_number_nvme
+ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_with_on_as_number_nvme ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_with_on_as_path
+ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_with_on_as_path ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_without_on
+ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_without_on ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_without_on_wrong_path
+ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_without_on_wrong_path ... ok
+ WARNING [ironic_python_agent.inspector] Failed to gather vendor id, product id or pci class from PCI device bar: 
+ WARNING [ironic_python_agent.inspector] Wrong format of vendor id, product id or pci class in PCI device baz: 
+ironic_python_agent.tests.unit.test_inspector.TestCollectPciDevicesInfo.test_bad_pci_device_info
+ironic_python_agent.tests.unit.test_inspector.TestCollectPciDevicesInfo.test_bad_pci_device_info ... ok
+ironic_python_agent.tests.unit.test_inspector.TestCollectPciDevicesInfo.test_success
+ironic_python_agent.tests.unit.test_inspector.TestCollectPciDevicesInfo.test_success ... ok
+ WARNING [ironic_python_agent.inspector] Failed to gather numa_node id from PCI device foo: 
+ WARNING [ironic_python_agent.inspector] Failed to gather numa_node id from PCI device bar: 
+ironic_python_agent.tests.unit.test_inspector.TestCollectPciDevicesInfo.test_success_numa_ioerror
+ironic_python_agent.tests.unit.test_inspector.TestCollectPciDevicesInfo.test_success_numa_ioerror ... ok
+   ERROR [ironic_python_agent.utils] Failed to get list of PCI devices: 
+ironic_python_agent.tests.unit.test_inspector.TestCollectPciDevicesInfo.test_wrong_path
+ironic_python_agent.tests.unit.test_inspector.TestCollectPciDevicesInfo.test_wrong_path ... ok
+ironic_python_agent.tests.unit.test_inspector.TestMisc.test_default_collector_loadable
+ironic_python_agent.tests.unit.test_inspector.TestMisc.test_default_collector_loadable ... ok
+ironic_python_agent.tests.unit.test_inspector.TestMisc.test_raise_on_wrong_collector
+ironic_python_agent.tests.unit.test_inspector.TestMisc.test_raise_on_wrong_collector ... ok
 ironic_python_agent.tests.unit.test_inspector.TestWaitForDhcp.test_all
 ironic_python_agent.tests.unit.test_inspector.TestWaitForDhcp.test_all ... ok
 ironic_python_agent.tests.unit.test_inspector.TestWaitForDhcp.test_boot_only
 ironic_python_agent.tests.unit.test_inspector.TestWaitForDhcp.test_boot_only ... ok
 ironic_python_agent.tests.unit.test_inspector.TestWaitForDhcp.test_disabled
 ironic_python_agent.tests.unit.test_inspector.TestWaitForDhcp.test_disabled ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test__get_ironic_api_version_already_set
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test__get_ironic_api_version_already_set ... ok
+   ERROR [ironic_python_agent.ironic_api_client] An error occurred while attempting to discover the available Ironic API versions, falling back to using version 1.31
+Traceback (most recent call last):
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/ironic_api_client.py", line 130, in _get_ironic_api_version
+    response = self._request('GET', '/')
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/ironic_api_client.py", line 90, in _request
+    resp = self.session.request(method,
+                                request_url,
+    ...<4 lines>...
+                                timeout=CONF.http_request_timeout,
+                                **kwargs)
+  File "<string>", line 3, in request
+  File "/usr/lib/python3.13/unittest/mock.py", line 1167, in __call__
+    return self._mock_call(*args, **kwargs)
+           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.13/unittest/mock.py", line 1171, in _mock_call
+    return self._execute_mock_call(*args, **kwargs)
+           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.13/unittest/mock.py", line 1226, in _execute_mock_call
+    raise effect
+Exception: Boom
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test__get_ironic_api_version_error
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test__get_ironic_api_version_error ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test__get_ironic_api_version_fresh
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test__get_ironic_api_version_fresh ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test__get_ironic_api_version_set_via_conf
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test__get_ironic_api_version_set_via_conf ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup ... ok
+ WARNING [ironic_python_agent.ironic_api_client] Got invalid node data in response to query for node with addresses '00:0c:29:8c:11:b1,00:0c:29:8c:11:b2' from http://agent-api.ironic.example.org: {'node_node': 'also_not_node'}
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_bad_response_body
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_bad_response_body ... ok
+ WARNING [ironic_python_agent.ironic_api_client] Failed looking up node with addresses '00:0c:29:8c:11:b1,00:0c:29:8c:11:b2' at http://agent-api.ironic.example.org. Check if inspection has completed? Error 400: {"node": {"uuid": "deadbeef-dabb-ad00-b105-f00d00bab10c"}}
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_bad_response_code
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_bad_response_code ... ok
+ WARNING [ironic_python_agent.ironic_api_client] Got invalid node data in response to query for node with addresses '00:0c:29:8c:11:b1,00:0c:29:8c:11:b2' from http://agent-api.ironic.example.org: {'heartbeat_timeout': 300}
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_bad_response_data
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_bad_response_data ... ok
+ WARNING [ironic_python_agent.ironic_api_client] Got invalid heartbeat from the API: {'node': {'uuid': 'deadbeef-dabb-ad00-b105-f00d00bab10c'}}
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_no_heartbeat_timeout
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_no_heartbeat_timeout ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_node_locked
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_node_locked ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_transient_exceptions
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_transient_exceptions ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_unknown_exception
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_unknown_exception ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_unknown_exception_fallback
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_unknown_exception_fallback ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_with_uuid
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_with_uuid ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_get_agent_url_ipv4
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_get_agent_url_ipv4 ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_get_agent_url_ipv6
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_get_agent_url_ipv6 ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_get_agent_url_protocol
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_get_agent_url_protocol ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_409_status_code
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_409_status_code ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_agent_version_unsupported
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_agent_version_unsupported ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_error_format_1
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_error_format_1 ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_error_format_2
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_error_format_2 ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_error_format_3
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_error_format_3 ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_invalid_status_code
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_invalid_status_code ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_requests_connection_error
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_requests_connection_error ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_requests_exception
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_requests_exception ... ok
+ WARNING [ironic_python_agent.ironic_api_client] Connection error when accessing 2001:db8::1/v1/heartbeat/meow, trying the next URL. Error: 
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_requests_several_urls
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_requests_several_urls ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_lookup_node
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_lookup_node ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_lookup_node_retries
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_lookup_node_retries ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_lookup_timeout
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_lookup_timeout ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_successful_heartbeat
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_successful_heartbeat ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_successful_heartbeat_ip6
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_successful_heartbeat_ip6 ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_successful_heartbeat_with_token
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_successful_heartbeat_with_token ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_successful_heartbeat_with_verify_ca
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_successful_heartbeat_with_verify_ca ... ok
 ironic_python_agent.tests.unit.test_multi_hardware_clean_steps.TestMultipleHardwareManagerCleanSteps.test_clean_step_ordering
 ironic_python_agent.tests.unit.test_multi_hardware_clean_steps.TestMultipleHardwareManagerCleanSteps.test_clean_step_ordering ... ok
-ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_DeployFail_exc
-ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_DeployFail_exc ... ok
-ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_absent
-ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_absent ... ok
- WARNING [ironic_python_agent.disk_utils] Unable to probe for partitions on device /dev/fake, the partitioning table may be broken. Error: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: None
-Stderr: None
-ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_exc
-ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_exc ... ok
-ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_present
-ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_present ... ok
-ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_present_uppercase
-ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_present_uppercase ... ok
-ironic_python_agent.tests.unit.test_utils.ExecuteTestCase.test_execute
-ironic_python_agent.tests.unit.test_utils.ExecuteTestCase.test_execute ... ok
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_determine_time_method_chronyd
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_determine_time_method_chronyd ... ok
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_determine_time_method_none
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_determine_time_method_none ... ok
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_determine_time_method_ntpdate
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_determine_time_method_ntpdate ... ok
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_chrony
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_chrony ... ok
-   ERROR [ironic_python_agent.utils] Failed to sync time using chrony to ntp server: 192.168.1.1: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: None
-Stderr: 'time verboten'
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_chrony_failure
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_chrony_failure ... ok
-   ERROR [ironic_python_agent.utils] Unable to sync clock, available methods of 'ntpdate' or 'chrony' not found.
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_none
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_none ... ok
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_ntp
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_ntp ... ok
-   ERROR [ironic_python_agent.utils] Failed to sync with ntp server: 192.168.1.1: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: None
-Stderr: None
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_ntp_raises_exception
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_ntp_raises_exception ... ok
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_ntp_server_is_none
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_ntp_server_is_none ... ok
-ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_retries
-ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_retries ... ok
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info ... ok
+ WARNING [ironic_python_agent.netutils] LLDP timed out, remaining interfaces: [('eth0', <Mock id='4084038760'>), ('eth1', <Mock id='4084039128'>)]
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_empty
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_empty ... ok
+ WARNING [ironic_python_agent.netutils] Trailing byte received in an LLDP package: b'5'
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_malformed
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_malformed ... ok
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_multiple
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_multiple ... ok
 ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_retries_on_50X_error
 ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_retries_on_50X_error ... ok
+ WARNING [ironic_python_agent.netutils] LLDP timed out, remaining interfaces: [('eth1', <Mock id='4083665472'>)]
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_one_empty_interface
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_one_empty_interface ... ok
+   ERROR [ironic_python_agent.netutils] Socket for network interface eth0 said that it was ready to read we were unable to read from the socket while trying to get LLDP packet. Skipping this network interface.
+Traceback (most recent call last):
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/netutils.py", line 197, in _get_lldp_info
+    lldp_info[interface[0]] = _receive_lldp_packets(s)
+                              ~~~~~~~~~~~~~~~~~~~~~^^^
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/netutils.py", line 160, in _receive_lldp_packets
+    pkt = sock.recv(1600)
+  File "/usr/lib/python3.13/unittest/mock.py", line 1167, in __call__
+    return self._mock_call(*args, **kwargs)
+           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.13/unittest/mock.py", line 1171, in _mock_call
+    return self._execute_mock_call(*args, **kwargs)
+           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.13/unittest/mock.py", line 1226, in _execute_mock_call
+    raise effect
+OSError: BOOM
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_socket_recv_error
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_socket_recv_error ... ok
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_raw_promiscuous_sockets
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_raw_promiscuous_sockets ... ok
+   ERROR [ironic_python_agent.netutils] Failed to open all RawPromiscuousSockets, attempting to close any opened sockets.
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_raw_promiscuous_sockets_bind_fail
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_raw_promiscuous_sockets_bind_fail ... ok
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_raw_promiscuous_sockets_exception
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_raw_promiscuous_sockets_exception ... ok
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_wrap_ipv6
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_wrap_ipv6 ... ok
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_wrap_ipv6_with_ipv4
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_wrap_ipv6_with_ipv4 ... ok
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_bad_nodes_cores_info
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_bad_nodes_cores_info ... ok
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_bad_nodes_memory_info
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_bad_nodes_memory_info ... ok
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_bad_nodes_nics_info
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_bad_nodes_nics_info ... ok
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_bad_nodes_thread_dirs
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_bad_nodes_thread_dirs ... ok
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_nodes_cores_info
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_nodes_cores_info ... ok
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_nodes_memory_info
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_nodes_memory_info ... ok
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_nodes_nics_info
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_nodes_nics_info ... ok
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_numa_node_id_invalid_format
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_numa_node_id_invalid_format ... ok
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_numa_node_id_invalid_format_cores_info
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_numa_node_id_invalid_format_cores_info ... ok
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_numa_node_id_invalid_format_memory_info
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_numa_node_id_invalid_format_memory_info ... ok
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_numa_node_id_valid_format
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_numa_node_id_valid_format ... ok
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_no_nics_dir
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_no_nics_dir ... ok
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_nodes_invalid_memory_unit
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_nodes_invalid_memory_unit ... ok
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_nodes_invalid_numa_format_memory_info
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_nodes_invalid_numa_format_memory_info ... ok
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_nodes_invalid_threaddir_format_cores_info
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_nodes_invalid_threaddir_format_cores_info ... ok
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive ... ok
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_bad_status_code
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_bad_status_code ... ok
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_bad_url
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_bad_url ... ok
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_base64_error
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_base64_error ... ok
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_base64_string
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_base64_string ... ok
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_binary
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_binary ... ok
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_gzip_error
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_gzip_error ... ok
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_insecure
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_insecure ... ok
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_ssl
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_ssl ... ok
+ironic_python_agent.tests.unit.test_partition_utils.IsDiskLargerThanMaxSizeTestCases.test_is_disk_larger_than_max_size_exc
+ironic_python_agent.tests.unit.test_partition_utils.IsDiskLargerThanMaxSizeTestCases.test_is_disk_larger_than_max_size_exc ... ok
+ironic_python_agent.tests.unit.test_partition_utils.IsDiskLargerThanMaxSizeTestCases.test_is_disk_larger_than_max_size_false
+ironic_python_agent.tests.unit.test_partition_utils.IsDiskLargerThanMaxSizeTestCases.test_is_disk_larger_than_max_size_false ... ok
+ironic_python_agent.tests.unit.test_partition_utils.IsDiskLargerThanMaxSizeTestCases.test_is_disk_larger_than_max_size_true
+ironic_python_agent.tests.unit.test_partition_utils.IsDiskLargerThanMaxSizeTestCases.test_is_disk_larger_than_max_size_true ... ok
+ironic_python_agent.tests.unit.test_raid_utils.TestFindESPRAID.test_esp_raid
+ironic_python_agent.tests.unit.test_raid_utils.TestFindESPRAID.test_esp_raid ... ok
+ironic_python_agent.tests.unit.test_raid_utils.TestFindESPRAID.test_no_esp_raid
+ironic_python_agent.tests.unit.test_raid_utils.TestFindESPRAID.test_no_esp_raid ... ok
+POST: /v1/commands {'name': 'do_things', 'params': []}
+GOT:<WrapperTestResponse streamed [400 BAD REQUEST]>
+POST: /v1/commands {'name': 'do_things', 'params': {'key': 'value'}}
+GOT:<WrapperTestResponse streamed [200 OK]>
+POST: /v1/commands?wait=false {'name': 'do_things', 'params': {'key': 'value'}}
+GOT:<WrapperTestResponse streamed [200 OK]>
+POST: /v1/commands?wait=true {'name': 'do_things', 'params': {'key': 'value'}}
+GOT:<WrapperTestResponse streamed [200 OK]>
+POST: /v1/commands {}
+GOT:<WrapperTestResponse streamed [400 BAD REQUEST]>
+POST: /v1/commands?wait=false?agent_token=0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 {'name': 'do_things', 'params': {'key': 'value', 'wait': False, 'agent_token': '0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789'}}
+GOT:<WrapperTestResponse streamed [200 OK]>
+POST: /v1/commands?wait=false?agent_token=0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 {'name': 'do_things', 'params': {'key': 'value', 'wait': False, 'agent_token': '0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789'}}
+GOT:<WrapperTestResponse streamed [401 UNAUTHORIZED]>
+GET: /v1/status None
+GOT:<WrapperTestResponse streamed [200 OK]>
+GET: /v1/commands/abc123 None
+GOT:<WrapperTestResponse streamed [200 OK]>
+GET: /v1/commands None
+GOT:<WrapperTestResponse streamed [200 OK]>
+GET: /v1/foo None
+GOT:<WrapperTestResponse streamed [404 NOT FOUND]>
+GET: / None
+GOT:<WrapperTestResponse streamed [200 OK]>
+GET: /v1 None
+GOT:<WrapperTestResponse streamed [200 OK]>
 ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_retry_on_50X_and_succeed
 ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_retry_on_50X_and_succeed ... ok
  WARNING [ironic_python_agent.inspector] Connection error when accessing url1, trying the next URL. Error: 
@@ -6431,6 +6527,11 @@
 ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vhdx ... ok
 ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vhdx_invalid
 ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vhdx_invalid ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk ... ok
+5+0 records in
+5+0 records out
+5242880 bytes (5.2 MB, 5.0 MiB) copied, 0.038838 s, 135 MB/s
 ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_several_urls
 ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_several_urls ... ok
 ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_ok
@@ -6442,28 +6543,191 @@
  WARNING [ironic_python_agent.inspector] Connection error when accessing http://url1/v1/continue_inspection, trying the next URL. Error: 
 ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_use_several_api_urls
 ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_use_several_api_urls ... ok
-ironic_python_agent.tests.unit.test_inspector.TestMisc.test_default_collector_loadable
-ironic_python_agent.tests.unit.test_inspector.TestMisc.test_default_collector_loadable ... ok
-ironic_python_agent.tests.unit.test_inspector.TestMisc.test_raise_on_wrong_collector
-ironic_python_agent.tests.unit.test_inspector.TestMisc.test_raise_on_wrong_collector ... ok
+ironic_python_agent.tests.unit.test_inspector.TestCollectDefault.test_cache_hardware_info
+ironic_python_agent.tests.unit.test_inspector.TestCollectDefault.test_cache_hardware_info ... ok
+ WARNING [ironic_python_agent.inspector] no suitable root device detected
+ironic_python_agent.tests.unit.test_inspector.TestCollectDefault.test_no_root_disk
+ironic_python_agent.tests.unit.test_inspector.TestCollectDefault.test_no_root_disk ... ok
+ironic_python_agent.tests.unit.test_inspector.TestCollectDefault.test_ok
+ironic_python_agent.tests.unit.test_inspector.TestCollectDefault.test_ok ... ok
+   ERROR [ironic_python_agent.utils] collector <Mock name='mock.name' id='4110699072'> failed: boom
+ironic_python_agent.tests.unit.test_inspector.TestInspect.test_collector_failed
+ironic_python_agent.tests.unit.test_inspector.TestInspect.test_collector_failed ... ok
+ironic_python_agent.tests.unit.test_inspector.TestInspect.test_collectors_option
+ironic_python_agent.tests.unit.test_inspector.TestInspect.test_collectors_option ... ok
+ironic_python_agent.tests.unit.test_inspector.TestInspect.test_disabled
+ironic_python_agent.tests.unit.test_inspector.TestInspect.test_disabled ... ok
+   ERROR [ironic_python_agent.utils] boom
+ironic_python_agent.tests.unit.test_inspector.TestInspect.test_extensions_failed
+ironic_python_agent.tests.unit.test_inspector.TestInspect.test_extensions_failed ... ok
+ironic_python_agent.tests.unit.test_inspector.TestInspect.test_inspector_error
+ironic_python_agent.tests.unit.test_inspector.TestInspect.test_inspector_error ... ok
+ironic_python_agent.tests.unit.test_inspector.TestInspect.test_mdns
+ironic_python_agent.tests.unit.test_inspector.TestInspect.test_mdns ... ok
+ironic_python_agent.tests.unit.test_inspector.TestInspect.test_ok
+ironic_python_agent.tests.unit.test_inspector.TestInspect.test_ok ... ok
+ironic_python_agent.tests.unit.test_inspector.TestInspect.test_ok_with_ironic_url
+ironic_python_agent.tests.unit.test_inspector.TestInspect.test_ok_with_ironic_url ... ok
+   ERROR [root] Encountered issue attempting to validate the supplied configuration drive. Error: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+ WARNING [ironic_lib.utils] Failed to unlink /tmp/tmpq7b5w7xx/tmpppvddegl, error: [Errno 21] Is a directory: '/tmp/tmpq7b5w7xx/tmpppvddegl'
+ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__does_config_drive_failed
+ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__does_config_drive_failed ... ok
+ WARNING [ironic_lib.utils] Failed to unlink /tmp/tmphvyrufd3/tmpj19hk2lz, error: [Errno 21] Is a directory: '/tmp/tmphvyrufd3/tmpj19hk2lz'
+ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__does_config_drive_work
+ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__does_config_drive_work ... ok
+ WARNING [ironic_lib.utils] Failed to unlink /tmp/tmp4yrt96af/tmpyjnkv_6z, error: [Errno 21] Is a directory: '/tmp/tmp4yrt96af/tmpyjnkv_6z'
+ WARNING [ironic_lib.utils] Failed to unlink /tmp/tmp4yrt96af/tmp4xxzgrf0, error: [Errno 21] Is a directory: '/tmp/tmp4yrt96af/tmp4xxzgrf0'
+ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__try_build_fat32_config_drive
+ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__try_build_fat32_config_drive ... ok
+   ERROR [root] We were unable to make a new filesystem for the configuration drive. Error: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+ WARNING [ironic_lib.utils] Failed to unlink /tmp/tmp3o_bkhh9/tmptjpys6_p, error: [Errno 21] Is a directory: '/tmp/tmp3o_bkhh9/tmptjpys6_p'
+ WARNING [ironic_lib.utils] Failed to unlink /tmp/tmp3o_bkhh9/tmpl_oje4gm, error: [Errno 21] Is a directory: '/tmp/tmp3o_bkhh9/tmpl_oje4gm'
+ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__try_build_fat32_config_drive_fails_once_invalid
+ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__try_build_fat32_config_drive_fails_once_invalid ... ok
+ WARNING [root] We were unable to examine the configuration drive, bypassing. Error: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__try_build_fat32_config_drive_graceful_fail
+ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__try_build_fat32_config_drive_graceful_fail ... ok
+ironic-python-agent: Copying configuration from /tmp/tmpzgt0tlw0/etc/ironic-python-agent to /etc/ironic-python-agent
+ironic-python-agent: Copying configuration from /tmp/tmpzgt0tlw0/etc/ironic-python-agent.d to /etc/ironic-python-agent.d
+ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_copy
+ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_copy ... ok
+ironic-python-agent: Copying configuration from /tmp/tmporz1fwt1/etc/ironic-python-agent to /etc/ironic-python-agent
+ironic-python-agent: Copying configuration from /tmp/tmporz1fwt1/etc/ironic-python-agent.d to /etc/ironic-python-agent.d
+ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_copy_mounted
+ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_copy_mounted ... ok
+ironic-python-agent: /some/path/etc/ironic-python-agent not found
+ironic-python-agent: /some/path/etc/ironic-python-agent.d not found
+ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_mounted_no_files
+ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_mounted_no_files ... ok
+ironic-python-agent: /tmp/tmphbyf8a84/etc/ironic-python-agent not found
+ironic-python-agent: /tmp/tmphbyf8a84/etc/ironic-python-agent.d not found
+ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_no_files
+ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_no_files ... ok
+ironic-python-agent: No virtual media device detected
+ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_no_vmedia
+ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_no_vmedia ... ok
+ironic-python-agent: Cannot use configuration from virtual media as the agent was not booted from virtual media.
+   ERROR [ironic_python_agent.utils] foo
+ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_vmedia_found_not_booted_from_vmedia
+ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_vmedia_found_not_booted_from_vmedia ... ok
+   ERROR [ironic_python_agent.utils] bar
+   ERROR [ironic_python_agent.utils] baz
+ironic_python_agent.tests.unit.test_utils.TestFailures.test_get_error
+ironic_python_agent.tests.unit.test_utils.TestFailures.test_get_error ... ok
+   ERROR [ironic_python_agent.utils] foo
+ironic_python_agent.tests.unit.test_utils.TestFailures.test_raise
+ironic_python_agent.tests.unit.test_utils.TestFailures.test_raise ... ok
+ironic_python_agent.tests.unit.test_utils.TestStreamingClient.test_ok
+ironic_python_agent.tests.unit.test_utils.TestStreamingClient.test_ok ... ok
+ironic_python_agent.tests.unit.test_utils.TestStreamingClient.test_retries
+ironic_python_agent.tests.unit.test_utils.TestStreamingClient.test_retries ... ok
+ironic_python_agent.tests.unit.test_utils.TestUnmountOfConfig.test__unmount_any_config_drives
+ironic_python_agent.tests.unit.test_utils.TestUnmountOfConfig.test__unmount_any_config_drives ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_mem_limit
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_mem_limit ... ok
+5+0 records in
+5+0 records out
+5242880 bytes (5.2 MB, 5.0 MiB) copied, 0.0450459 s, 116 MB/s
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_mem_limit_stream_optimized
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_mem_limit_stream_optimized ... ok
+   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Wrong descriptor location
+   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Wrong descriptor location
+   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Wrong descriptor location
+   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Wrong descriptor location
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_offset
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_offset ... ok
+   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Wrong descriptor location
+   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Wrong descriptor location
+   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Wrong descriptor location
+   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Wrong descriptor location
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_offset_stream_optimized
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_offset_stream_optimized ... ok
+   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Signature KDMV not found: b'# Co'
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_invalid
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_invalid ... ok
+   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Signature KDMV not found: b'# Co'
+ WARNING [ironic_python_agent.format_inspector] Unsupported VMDK format b'someunknownformat'
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_invalid_type
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_invalid_type ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_stream_optimized
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_stream_optimized ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorsTargeted.test_vhd_table_over_limit
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorsTargeted.test_vhd_table_over_limit ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorsTargeted.test_vhd_table_under_limit
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorsTargeted.test_vhd_table_under_limit ... ok
+ironic_python_agent.tests.unit.test_hardware.TestAPIClientSaveAndUse.test_save_api_client
+ironic_python_agent.tests.unit.test_hardware.TestAPIClientSaveAndUse.test_save_api_client ... ok
+ironic_python_agent.tests.unit.test_hardware.TestAPIClientSaveAndUse.test_update_node_cache
+ironic_python_agent.tests.unit.test_hardware.TestAPIClientSaveAndUse.test_update_node_cache ... ok
+ironic_python_agent.tests.unit.test_hardware.TestHardwareManagerLoading.test_get_managers
+ironic_python_agent.tests.unit.test_hardware.TestHardwareManagerLoading.test_get_managers ... ok
+ironic_python_agent.tests.unit.test_hardware.TestHardwareManagerLoading.test_get_managers_detail
+ironic_python_agent.tests.unit.test_hardware.TestHardwareManagerLoading.test_get_managers_detail ... ok
+ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test__check_for_iscsi
+ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test__check_for_iscsi ... ok
+ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test__check_for_iscsi_no_iscsi
+ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test__check_for_iscsi_no_iscsi ... ok
+ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test__load_ipmi_modules
+ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test__load_ipmi_modules ... ok
+ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_missing
+ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_missing ... ok
+ WARNING [root] Could not find the SCSI address (HCTL) for device /dev/sda1. Skipping
+ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_partuuid_success
+ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_partuuid_success ... ok
+ WARNING [root] Could not find the SCSI address (HCTL) for device /dev/sda. Skipping
+ WARNING [root] Could not find the SCSI address (HCTL) for device /dev/sdb. Skipping
+ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_success
+ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_success ... ok
+ WARNING [root] Could not find the SCSI address (HCTL) for device /dev/sda. Skipping
+ WARNING [root] Could not find the SCSI address (HCTL) for device /dev/sdb. Skipping
+ WARNING [root] Could not find the SCSI address (HCTL) for device /dev/md0. Skipping
+ WARNING [root] Could not find the SCSI address (HCTL) for device /dev/md1. Skipping
+ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_success_raid
+ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_success_raid ... ok
+ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_wrong_block_type
+ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_wrong_block_type ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_content_and_deleted
+ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_content_and_deleted ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_missing_path
+ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_missing_path ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_no_directories
+ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_no_directories ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_numeric_fields
+ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_numeric_fields ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_root_without_on
+ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_root_without_on ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_unknown_fields
+ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_unknown_fields ... ok
+ironic_python_agent.tests.unit.test_inspector.TestCollectLogs.test
+ironic_python_agent.tests.unit.test_inspector.TestCollectLogs.test ... ok
+ WARNING [ironic_python_agent.inspector] failed to get system journal
+ironic_python_agent.tests.unit.test_inspector.TestCollectLogs.test_fail
+ironic_python_agent.tests.unit.test_inspector.TestCollectLogs.test_fail ... ok
 ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_both_succeed
 ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_both_succeed ... ok
 ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_dispatch_to_all_managers_both_succeed
 ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_dispatch_to_all_managers_both_succeed ... ok
 ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_dispatch_to_all_managers_generic_method_only
 ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_dispatch_to_all_managers_generic_method_only ... ok
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk ... ok
 ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_dispatch_to_all_managers_mainline_fails
 ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_dispatch_to_all_managers_mainline_fails ... ok
-5+0 records in
-5+0 records out
-5242880 bytes (5.2 MB, 5.0 MiB) copied, 0.0476047 s, 110 MB/s
 ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_dispatch_to_all_managers_mainline_only
 ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_dispatch_to_all_managers_mainline_only ... ok
 ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_dispatch_to_all_managers_manager_method_not_found
 ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_dispatch_to_all_managers_manager_method_not_found ... ok
-   ERROR [root] Unexpected error dispatching unexpected_fail to manager <ironic_python_agent.tests.unit.test_multi_hardware.FakeMainlineHardwareManager object at 0xb34bb4f0>: A problem was encountered
+   ERROR [root] Unexpected error dispatching unexpected_fail to manager <ironic_python_agent.tests.unit.test_multi_hardware.FakeMainlineHardwareManager object at 0xf4651620>: A problem was encountered
 Traceback (most recent call last):
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/hardware.py", line 3468, in dispatch_to_all_managers
     response = getattr(manager, method)(*args, **kwargs)
@@ -6482,7 +6746,7 @@
 ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_mainline_method_only ... ok
 ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_manager_method_not_found
 ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_manager_method_not_found ... ok
-   ERROR [root] Unexpected error dispatching unexpected_fail to manager <ironic_python_agent.tests.unit.test_multi_hardware.FakeMainlineHardwareManager object at 0xb46cdcb0>: A problem was encountered
+   ERROR [root] Unexpected error dispatching unexpected_fail to manager <ironic_python_agent.tests.unit.test_multi_hardware.FakeMainlineHardwareManager object at 0xf4b3a930>: A problem was encountered
 Traceback (most recent call last):
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/hardware.py", line 3512, in dispatch_to_managers
     return getattr(manager, method)(*args, **kwargs)
@@ -6494,17 +6758,8 @@
 RuntimeError: A problem was encountered
 ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_method_fails
 ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_method_fails ... ok
- WARNING [ironic_python_agent.numa_inspector] Failed to get some NUMA information (Error in NUMA node data format: An unexpected error occurred. Please try back later.)
-ironic_python_agent.tests.unit.test_numa_inspector.TestCollectNumaTopologyInfo.test_collect_failure
-ironic_python_agent.tests.unit.test_numa_inspector.TestCollectNumaTopologyInfo.test_collect_failure ... ok
- WARNING [ironic_python_agent.numa_inspector] Failed to get some NUMA information (Error in NUMA node data format: An unexpected error occurred. Please try back later.)
-ironic_python_agent.tests.unit.test_numa_inspector.TestCollectNumaTopologyInfo.test_collect_no_nics_dirs
-ironic_python_agent.tests.unit.test_numa_inspector.TestCollectNumaTopologyInfo.test_collect_no_nics_dirs ... ok
- WARNING [ironic_python_agent.numa_inspector] Failed to get list of NUMA nodes, NUMA node path does not exist: /sys/devices/system/node/
-ironic_python_agent.tests.unit.test_numa_inspector.TestCollectNumaTopologyInfo.test_collect_no_numa_dirs
-ironic_python_agent.tests.unit.test_numa_inspector.TestCollectNumaTopologyInfo.test_collect_no_numa_dirs ... ok
-ironic_python_agent.tests.unit.test_numa_inspector.TestCollectNumaTopologyInfo.test_collect_success
-ironic_python_agent.tests.unit.test_numa_inspector.TestCollectNumaTopologyInfo.test_collect_success ... ok
+ironic_python_agent.tests.unit.test_multi_hardware.TestNoHardwareManagerLoading.test_no_managers_found
+ironic_python_agent.tests.unit.test_multi_hardware.TestNoHardwareManagerLoading.test_no_managers_found ... ok
 ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test__create_partition_mbr_disk_exceeds_2TB
 ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test__create_partition_mbr_disk_exceeds_2TB ... ok
 ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test__create_partition_mbr_disk_exceeds_2TB_nvme
@@ -6536,30 +6791,10 @@
 ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_part_create_exc ... ok
 ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_part_create_fail
 ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_part_create_fail ... ok
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive ... ok
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_bad_status_code
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_bad_status_code ... ok
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_bad_url
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_bad_url ... ok
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_base64_error
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_base64_error ... ok
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_base64_string
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_base64_string ... ok
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_binary
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_binary ... ok
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_gzip_error
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_gzip_error ... ok
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_insecure
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_insecure ... ok
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_ssl
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_ssl ... ok
-ironic_python_agent.tests.unit.test_partition_utils.IsDiskLargerThanMaxSizeTestCases.test_is_disk_larger_than_max_size_exc
-ironic_python_agent.tests.unit.test_partition_utils.IsDiskLargerThanMaxSizeTestCases.test_is_disk_larger_than_max_size_exc ... ok
-ironic_python_agent.tests.unit.test_partition_utils.IsDiskLargerThanMaxSizeTestCases.test_is_disk_larger_than_max_size_false
-ironic_python_agent.tests.unit.test_partition_utils.IsDiskLargerThanMaxSizeTestCases.test_is_disk_larger_than_max_size_false ... ok
-ironic_python_agent.tests.unit.test_partition_utils.IsDiskLargerThanMaxSizeTestCases.test_is_disk_larger_than_max_size_true
-ironic_python_agent.tests.unit.test_partition_utils.IsDiskLargerThanMaxSizeTestCases.test_is_disk_larger_than_max_size_true ... ok
+ironic_python_agent.tests.unit.test_partition_utils.RealFilePartitioningTestCase.test_different_sizes
+ironic_python_agent.tests.unit.test_partition_utils.RealFilePartitioningTestCase.test_different_sizes ... skipped "parted utility was not found: [Errno 2] No such file or directory: 'parted'"
+ironic_python_agent.tests.unit.test_partition_utils.RealFilePartitioningTestCase.test_whole_disk
+ironic_python_agent.tests.unit.test_partition_utils.RealFilePartitioningTestCase.test_whole_disk ... skipped "parted utility was not found: [Errno 2] No such file or directory: 'parted'"
 ironic_python_agent.tests.unit.test_partition_utils.TestGetPartition.test
 ironic_python_agent.tests.unit.test_partition_utils.TestGetPartition.test ... ok
    ERROR [root] Finding the partition with UUID 11111111-2222-3333-4444-555555555555 on device /dev/fake failed with Unexpected error while running command.
@@ -6578,6 +6813,26 @@
 ironic_python_agent.tests.unit.test_partition_utils.TestGetPartition.test_no_device_found ... ok
 ironic_python_agent.tests.unit.test_partition_utils.TestGetPartition.test_partuuid
 ironic_python_agent.tests.unit.test_partition_utils.TestGetPartition.test_partuuid ... ok
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_convert_to_sparse
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_convert_to_sparse ... ok
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_gpt_disk_label
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_gpt_disk_label ... ok
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_no_configdrive_partition
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_no_configdrive_partition ... ok
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_no_ephemeral_partition
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_no_ephemeral_partition ... ok
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_no_root_partition
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_no_root_partition ... ok
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_no_swap_partition
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_no_swap_partition ... ok
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_ppc64le_prep_part
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_ppc64le_prep_part ... ok
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_preserve_ephemeral
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_preserve_ephemeral ... ok
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_uefi
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_uefi ... ok
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_without_image
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_without_image ... ok
 ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image
 ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image ... ok
 ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_disabled
@@ -6602,48 +6857,16 @@
 ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_retries_and_fails_disabled ... ok
 ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_retries_disabled
 ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_retries_disabled ... ok
-ironic_python_agent.tests.unit.test_qemu_img.ImageInfoTestCase.test_image_info_path_doesnt_exist_disabled
-ironic_python_agent.tests.unit.test_qemu_img.ImageInfoTestCase.test_image_info_path_doesnt_exist_disabled ... ok
-ironic_python_agent.tests.unit.test_qemu_img.ImageInfoTestCase.test_image_info_path_exists_disabled
-ironic_python_agent.tests.unit.test_qemu_img.ImageInfoTestCase.test_image_info_path_exists_disabled ... ok
-ironic_python_agent.tests.unit.test_qemu_img.ImageInfoTestCase.test_image_info_path_exists_safe
-ironic_python_agent.tests.unit.test_qemu_img.ImageInfoTestCase.test_image_info_path_exists_safe ... ok
-ironic_python_agent.tests.unit.test_qemu_img.ImageInfoTestCase.test_image_info_path_exists_unsafe
-ironic_python_agent.tests.unit.test_qemu_img.ImageInfoTestCase.test_image_info_path_exists_unsafe ... ok
-ironic_python_agent.tests.unit.test_raid_utils.TestFindESPRAID.test_esp_raid
-ironic_python_agent.tests.unit.test_raid_utils.TestFindESPRAID.test_esp_raid ... ok
-ironic_python_agent.tests.unit.test_raid_utils.TestFindESPRAID.test_no_esp_raid
-ironic_python_agent.tests.unit.test_raid_utils.TestFindESPRAID.test_no_esp_raid ... ok
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test__get_actual_component_devices
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test__get_actual_component_devices ... ok
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test__get_actual_component_devices_broken_raid0
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test__get_actual_component_devices_broken_raid0 ... ok
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device ... ok
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device_fail_create_device
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device_fail_create_device ... ok
- WARNING [ironic_python_agent.raid_utils] Found /dev/sdb1 to be missing from /dev/md0 ... re-adding!
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device_fail_read_device
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device_fail_read_device ... ok
- WARNING [ironic_python_agent.raid_utils] Found /dev/sdb1 to be missing from /dev/md0 ... re-adding!
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device_missing_device
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device_missing_device ... ok
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device_with_volume_name
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device_with_volume_name ... ok
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_get_volume_name_of_raid_device
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_get_volume_name_of_raid_device ... ok
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_get_volume_name_of_raid_device_invalid
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_get_volume_name_of_raid_device_invalid ... ok
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_bios_gpt
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_bios_gpt ... ok
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_bios_msdos
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_bios_msdos ... ok
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_uefi_gpt
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_uefi_gpt ... ok
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_uefi_gpt_efi_provided
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_uefi_gpt_efi_provided ... ok
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_uefi_gpt_esp_not_found
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_uefi_gpt_esp_not_found ... ok
+/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/tests/unit/test_tls_utils.py:57: CryptographyDeprecationWarning: Properties that return a naïve datetime object have been deprecated. Please switch to not_valid_before_utc.
+  self.assertLess(cert.not_valid_before,
+/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/tests/unit/test_tls_utils.py:59: CryptographyDeprecationWarning: Properties that return a naïve datetime object have been deprecated. Please switch to not_valid_after_utc.
+  self.assertGreater(cert.not_valid_after,
+ironic_python_agent.tests.unit.test_tls_utils.GenerateTestCase.test__generate
+ironic_python_agent.tests.unit.test_tls_utils.GenerateTestCase.test__generate ... ok
+ironic_python_agent.tests.unit.test_tls_utils.GenerateTestCase.test_generate
+ironic_python_agent.tests.unit.test_tls_utils.GenerateTestCase.test_generate ... ok
+ironic_python_agent.tests.unit.test_utils.ExecuteTestCase.test_execute
+ironic_python_agent.tests.unit.test_utils.ExecuteTestCase.test_execute ... ok
 ironic-python-agent: line 1.
 ironic-python-agent: line 2 message
 ironic_python_agent.tests.unit.test_utils.TestCheckEarlyLogging.test_early_logging_goes_to_logger
@@ -6666,296 +6889,124 @@
 ironic_python_agent.tests.unit.test_utils.TestCheckVirtualMedia.test_check_vmedia_device_scsi ... ok
 ironic-python-agent: Device sdh appears to not qualify as virtual due to the device size. Size: 1610612736000
 ironic-python-agent: Device sdh was disqualified as virtual media. Type: disk, Transport: usb
-   ERROR [ironic_python_agent.utils] foo
-   ERROR [ironic_python_agent.utils] bar
-   ERROR [ironic_python_agent.utils] baz
 ironic_python_agent.tests.unit.test_utils.TestCheckVirtualMedia.test_check_vmedia_device_too_large
 ironic_python_agent.tests.unit.test_utils.TestCheckVirtualMedia.test_check_vmedia_device_too_large ... ok
-   ERROR [ironic_python_agent.utils] foo
-ironic_python_agent.tests.unit.test_utils.TestFailures.test_get_error
-ironic_python_agent.tests.unit.test_utils.TestFailures.test_get_error ... ok
-ironic_python_agent.tests.unit.test_utils.TestFailures.test_raise
-ironic_python_agent.tests.unit.test_utils.TestFailures.test_raise ... ok
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_mem_limit
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_mem_limit ... ok
-5+0 records in
-5+0 records out
-5242880 bytes (5.2 MB, 5.0 MiB) copied, 0.0462369 s, 113 MB/s
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_mem_limit_stream_optimized
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_mem_limit_stream_optimized ... ok
-   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Wrong descriptor location
-   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Wrong descriptor location
-   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Wrong descriptor location
-   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Wrong descriptor location
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_offset
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_offset ... ok
-   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Wrong descriptor location
-   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Wrong descriptor location
-   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Wrong descriptor location
-   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Wrong descriptor location
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_offset_stream_optimized
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_offset_stream_optimized ... ok
-   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Signature KDMV not found: b'# Co'
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_invalid
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_invalid ... ok
-   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Signature KDMV not found: b'# Co'
- WARNING [ironic_python_agent.format_inspector] Unsupported VMDK format b'someunknownformat'
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_invalid_type
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_invalid_type ... ok
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_stream_optimized
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_stream_optimized ... ok
-ironic_python_agent.tests.unit.test_hardware.TestHardwareManagerLoading.test_get_managers
-ironic_python_agent.tests.unit.test_hardware.TestHardwareManagerLoading.test_get_managers ... ok
-ironic_python_agent.tests.unit.test_hardware.TestHardwareManagerLoading.test_get_managers_detail
-ironic_python_agent.tests.unit.test_hardware.TestHardwareManagerLoading.test_get_managers_detail ... ok
-ironic_python_agent.tests.unit.test_hardware.TestProtectedDiskSafetyChecks.test_special_filesystem_guard_enabled_no_results
-ironic_python_agent.tests.unit.test_hardware.TestProtectedDiskSafetyChecks.test_special_filesystem_guard_enabled_no_results ... ok
-ironic_python_agent.tests.unit.test_hardware.TestProtectedDiskSafetyChecks.test_special_filesystem_guard_node_indicates_skip
-ironic_python_agent.tests.unit.test_hardware.TestProtectedDiskSafetyChecks.test_special_filesystem_guard_node_indicates_skip ... ok
-ironic_python_agent.tests.unit.test_hardware.TestProtectedDiskSafetyChecks.test_special_filesystem_guard_not_enabled
-ironic_python_agent.tests.unit.test_hardware.TestProtectedDiskSafetyChecks.test_special_filesystem_guard_not_enabled ... ok
-ironic_python_agent.tests.unit.test_hardware.TestProtectedDiskSafetyChecks.test_special_filesystem_guard_raises
-ironic_python_agent.tests.unit.test_hardware.TestProtectedDiskSafetyChecks.test_special_filesystem_guard_raises ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_with_on_as_number
-ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_with_on_as_number ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_with_on_as_number_nvme
-ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_with_on_as_number_nvme ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_with_on_as_path
-ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_with_on_as_path ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_without_on
-ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_without_on ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_without_on_wrong_path
-ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_without_on_wrong_path ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestFindPartitionWithPath.test_found
-ironic_python_agent.tests.unit.test_inject_files.TestFindPartitionWithPath.test_found ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestFindPartitionWithPath.test_found_with_dev
-ironic_python_agent.tests.unit.test_inject_files.TestFindPartitionWithPath.test_found_with_dev ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestFindPartitionWithPath.test_not_found
-ironic_python_agent.tests.unit.test_inject_files.TestFindPartitionWithPath.test_not_found ... ok
-ironic_python_agent.tests.unit.test_inspector.TestCollectLogs.test
-ironic_python_agent.tests.unit.test_inspector.TestCollectLogs.test ... ok
- WARNING [ironic_python_agent.inspector] failed to get system journal
-ironic_python_agent.tests.unit.test_inspector.TestCollectLogs.test_fail
-ironic_python_agent.tests.unit.test_inspector.TestCollectLogs.test_fail ... ok
-   ERROR [ironic_python_agent.utils] collector <Mock name='mock.name' id='3007178040'> failed: boom
-ironic_python_agent.tests.unit.test_inspector.TestInspect.test_collector_failed
-ironic_python_agent.tests.unit.test_inspector.TestInspect.test_collector_failed ... ok
-ironic_python_agent.tests.unit.test_inspector.TestInspect.test_collectors_option
-ironic_python_agent.tests.unit.test_inspector.TestInspect.test_collectors_option ... ok
-ironic_python_agent.tests.unit.test_inspector.TestInspect.test_disabled
-ironic_python_agent.tests.unit.test_inspector.TestInspect.test_disabled ... ok
-   ERROR [ironic_python_agent.utils] boom
-ironic_python_agent.tests.unit.test_inspector.TestInspect.test_extensions_failed
-ironic_python_agent.tests.unit.test_inspector.TestInspect.test_extensions_failed ... ok
-ironic_python_agent.tests.unit.test_inspector.TestInspect.test_inspector_error
-ironic_python_agent.tests.unit.test_inspector.TestInspect.test_inspector_error ... ok
-ironic_python_agent.tests.unit.test_inspector.TestInspect.test_mdns
-ironic_python_agent.tests.unit.test_inspector.TestInspect.test_mdns ... ok
-ironic_python_agent.tests.unit.test_inspector.TestInspect.test_ok
-ironic_python_agent.tests.unit.test_inspector.TestInspect.test_ok ... ok
-ironic_python_agent.tests.unit.test_inspector.TestInspect.test_ok_with_ironic_url
-ironic_python_agent.tests.unit.test_inspector.TestInspect.test_ok_with_ironic_url ... ok
-ironic_python_agent.tests.unit.test_inspector.TestNormalizeMac.test_correct_mac
-ironic_python_agent.tests.unit.test_inspector.TestNormalizeMac.test_correct_mac ... ok
-ironic_python_agent.tests.unit.test_inspector.TestNormalizeMac.test_pxelinux_mac
-ironic_python_agent.tests.unit.test_inspector.TestNormalizeMac.test_pxelinux_mac ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test__get_ironic_api_version_already_set
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test__get_ironic_api_version_already_set ... ok
-   ERROR [ironic_python_agent.ironic_api_client] An error occurred while attempting to discover the available Ironic API versions, falling back to using version 1.31
-Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/ironic_api_client.py", line 130, in _get_ironic_api_version
-    response = self._request('GET', '/')
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/ironic_api_client.py", line 90, in _request
-    resp = self.session.request(method,
-                                request_url,
-    ...<4 lines>...
-                                timeout=CONF.http_request_timeout,
-                                **kwargs)
-  File "<string>", line 3, in request
-  File "/usr/lib/python3.13/unittest/mock.py", line 1167, in __call__
-    return self._mock_call(*args, **kwargs)
-           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.13/unittest/mock.py", line 1171, in _mock_call
-    return self._execute_mock_call(*args, **kwargs)
-           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.13/unittest/mock.py", line 1226, in _execute_mock_call
-    raise effect
-Exception: Boom
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test__get_ironic_api_version_error
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test__get_ironic_api_version_error ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test__get_ironic_api_version_fresh
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test__get_ironic_api_version_fresh ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test__get_ironic_api_version_set_via_conf
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test__get_ironic_api_version_set_via_conf ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup ... ok
- WARNING [ironic_python_agent.ironic_api_client] Got invalid node data in response to query for node with addresses '00:0c:29:8c:11:b1,00:0c:29:8c:11:b2' from http://agent-api.ironic.example.org: {'node_node': 'also_not_node'}
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_bad_response_body
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_bad_response_body ... ok
- WARNING [ironic_python_agent.ironic_api_client] Failed looking up node with addresses '00:0c:29:8c:11:b1,00:0c:29:8c:11:b2' at http://agent-api.ironic.example.org. Check if inspection has completed? Error 400: {"node": {"uuid": "deadbeef-dabb-ad00-b105-f00d00bab10c"}}
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_bad_response_code
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_bad_response_code ... ok
- WARNING [ironic_python_agent.ironic_api_client] Got invalid node data in response to query for node with addresses '00:0c:29:8c:11:b1,00:0c:29:8c:11:b2' from http://agent-api.ironic.example.org: {'heartbeat_timeout': 300}
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_bad_response_data
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_bad_response_data ... ok
- WARNING [ironic_python_agent.ironic_api_client] Got invalid heartbeat from the API: {'node': {'uuid': 'deadbeef-dabb-ad00-b105-f00d00bab10c'}}
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_no_heartbeat_timeout
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_no_heartbeat_timeout ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_node_locked
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_node_locked ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_transient_exceptions
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_transient_exceptions ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_unknown_exception
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_unknown_exception ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_unknown_exception_fallback
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_unknown_exception_fallback ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_with_uuid
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_with_uuid ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_get_agent_url_ipv4
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_get_agent_url_ipv4 ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_get_agent_url_ipv6
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_get_agent_url_ipv6 ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_get_agent_url_protocol
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_get_agent_url_protocol ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_409_status_code
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_409_status_code ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_agent_version_unsupported
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_agent_version_unsupported ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_error_format_1
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_error_format_1 ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_error_format_2
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_error_format_2 ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_error_format_3
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_error_format_3 ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_invalid_status_code
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_invalid_status_code ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_requests_connection_error
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_requests_connection_error ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_requests_exception
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_requests_exception ... ok
- WARNING [ironic_python_agent.ironic_api_client] Connection error when accessing 2001:db8::1/v1/heartbeat/meow, trying the next URL. Error: 
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_requests_several_urls
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_requests_several_urls ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_lookup_node
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_lookup_node ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_lookup_node_retries
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_lookup_node_retries ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_lookup_timeout
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_lookup_timeout ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_successful_heartbeat
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_successful_heartbeat ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_successful_heartbeat_ip6
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_successful_heartbeat_ip6 ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_successful_heartbeat_with_token
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_successful_heartbeat_with_token ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_successful_heartbeat_with_verify_ca
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_successful_heartbeat_with_verify_ca ... ok
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_bad_nodes_cores_info
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_bad_nodes_cores_info ... ok
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_bad_nodes_memory_info
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_bad_nodes_memory_info ... ok
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_bad_nodes_nics_info
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_bad_nodes_nics_info ... ok
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_bad_nodes_thread_dirs
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_bad_nodes_thread_dirs ... ok
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_nodes_cores_info
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_nodes_cores_info ... ok
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_nodes_memory_info
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_nodes_memory_info ... ok
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_nodes_nics_info
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_nodes_nics_info ... ok
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_numa_node_id_invalid_format
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_numa_node_id_invalid_format ... ok
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_numa_node_id_invalid_format_cores_info
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_numa_node_id_invalid_format_cores_info ... ok
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_numa_node_id_invalid_format_memory_info
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_numa_node_id_invalid_format_memory_info ... ok
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_numa_node_id_valid_format
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_numa_node_id_valid_format ... ok
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_no_nics_dir
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_no_nics_dir ... ok
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_nodes_invalid_memory_unit
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_nodes_invalid_memory_unit ... ok
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_nodes_invalid_numa_format_memory_info
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_nodes_invalid_numa_format_memory_info ... ok
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_nodes_invalid_threaddir_format_cores_info
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_nodes_invalid_threaddir_format_cores_info ... ok
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_convert_to_sparse
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_convert_to_sparse ... ok
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_gpt_disk_label
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_gpt_disk_label ... ok
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_no_configdrive_partition
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_no_configdrive_partition ... ok
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_no_ephemeral_partition
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_no_ephemeral_partition ... ok
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_no_root_partition
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_no_root_partition ... ok
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_no_swap_partition
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_no_swap_partition ... ok
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_ppc64le_prep_part
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_ppc64le_prep_part ... ok
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_preserve_ephemeral
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_preserve_ephemeral ... ok
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_uefi
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_uefi ... ok
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_without_image
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_without_image ... ok
-ironic_python_agent.tests.unit.test_raid_utils.TestGetNextFreeRaidDevice.test_no_device
-ironic_python_agent.tests.unit.test_raid_utils.TestGetNextFreeRaidDevice.test_no_device ... ok
-ironic_python_agent.tests.unit.test_raid_utils.TestGetNextFreeRaidDevice.test_ok
-ironic_python_agent.tests.unit.test_raid_utils.TestGetNextFreeRaidDevice.test_ok ... ok
-/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/tests/unit/test_tls_utils.py:57: CryptographyDeprecationWarning: Properties that return a naïve datetime object have been deprecated. Please switch to not_valid_before_utc.
-  self.assertLess(cert.not_valid_before,
-/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/tests/unit/test_tls_utils.py:59: CryptographyDeprecationWarning: Properties that return a naïve datetime object have been deprecated. Please switch to not_valid_after_utc.
-  self.assertGreater(cert.not_valid_after,
-ironic_python_agent.tests.unit.test_tls_utils.GenerateTestCase.test__generate
-ironic_python_agent.tests.unit.test_tls_utils.GenerateTestCase.test__generate ... ok
-ironic_python_agent.tests.unit.test_tls_utils.GenerateTestCase.test_generate
-ironic_python_agent.tests.unit.test_tls_utils.GenerateTestCase.test_generate ... ok
 ironic_python_agent.tests.unit.test_utils.TestRemoveKeys.test_remove_keys
 ironic_python_agent.tests.unit.test_utils.TestRemoveKeys.test_remove_keys ... ok
-ironic_python_agent.tests.unit.test_utils.TestUnmountOfConfig.test__unmount_any_config_drives
-ironic_python_agent.tests.unit.test_utils.TestUnmountOfConfig.test__unmount_any_config_drives ... ok
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_fallback_bios
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_fallback_bios ... ok
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_fallback_uefi
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_fallback_uefi ... ok
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_from_driver_internal_info
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_from_driver_internal_info ... ok
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_from_properties_dict
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_from_properties_dict ... ok
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_from_properties_json_str
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_from_properties_json_str ... ok
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_from_properties_str
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_from_properties_str ... ok
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_implicit_with_secure_boot
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_implicit_with_secure_boot ... ok
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_invalid_cap
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_invalid_cap ... ok
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_override_with_instance_info
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_override_with_instance_info ... ok
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_collect_system_logs_journald
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_collect_system_logs_journald ... ok
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_collect_system_logs_journald_with_logfile
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_collect_system_logs_journald_with_logfile ... ok
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_collect_system_logs_non_journald
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_collect_system_logs_non_journald ... ok
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_collect_system_logs_non_journald_with_logfile
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_collect_system_logs_non_journald_with_logfile ... ok
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_device_extractor
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_device_extractor ... ok
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_extract_capability_from_dict
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_extract_capability_from_dict ... ok
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_extract_capability_from_json_string
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_extract_capability_from_json_string ... ok
+ WARNING [ironic_python_agent.utils] Ignoring malformed capability 'test:world:2'. Format should be 'key:val'.
+ WARNING [ironic_python_agent.utils] Ignoring malformed capability 'badformat'. Format should be 'key:val'.
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_extract_capability_from_old_format_caps
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_extract_capability_from_old_format_caps ... ok
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_command_output
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_command_output ... ok
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_journalctl_output
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_journalctl_output ... ok
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_journalctl_output_fail
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_journalctl_output_fail ... ok
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_journalctl_output_with_lines
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_journalctl_output_with_lines ... ok
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_journalctl_output_with_units
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_journalctl_output_with_units ... ok
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_ssl_client_options
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_ssl_client_options ... ok
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_guess_root_disk_disks_too_small
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_guess_root_disk_disks_too_small ... ok
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_guess_root_disk_primary_sort
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_guess_root_disk_primary_sort ... ok
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_guess_root_disk_secondary_sort
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_guess_root_disk_secondary_sort ... ok
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_gzip_and_b64encode
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_gzip_and_b64encode ... ok
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_is_journalctl_present
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_is_journalctl_present ... ok
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_is_journalctl_present_false
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_is_journalctl_present_false ... ok
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_secure_boot_overriden_with_instance_info_caps
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_secure_boot_overriden_with_instance_info_caps ... ok
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_specified_partition_table_type
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_specified_partition_table_type ... ok
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_specified_partition_table_type_disk_label_ignored_with_uefi
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_specified_partition_table_type_disk_label_ignored_with_uefi ... ok
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_specified_partition_table_type_gpt
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_specified_partition_table_type_gpt ... ok
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_specified_partition_table_type_with_disk_label
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_specified_partition_table_type_with_disk_label ... ok
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_specified_partition_table_type_with_instance_disk_label
+ironic_python_agent.tests.unit.test_utils.TestUtils.test_specified_partition_table_type_with_instance_disk_label ... ok
 
 ----------------------------------------------------------------------
-Ran 1023 tests in 109.859s
+Ran 1023 tests in 93.403s
 
 OK (skipped=5)
 + stestr slowest
 Test id                                                                                                                            Runtime (s)
 ---------------------------------------------------------------------------------------------------------------------------------  -----------
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_mem_limit_stream_optimized      38.035
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_mem_limit                       37.123
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vhdx                                                17.755
-ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_retries                                              4.022
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_stream_raw_image_onto_device_socket_read_timeout   3.054
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_find_pair_1st                                        3.032
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_find_timeout                                         2.033
-ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_retries_on_50X_error                                 2.022
-ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_retry_on_50X_and_succeed                             2.022
-ironic_python_agent.tests.unit.test_agent.TestAgentStandalone.test_run                                                              1.196
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_mem_limit_stream_optimized      31.949
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_mem_limit                       31.691
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vhdx                                                13.890
+ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_retries                                              4.028
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_stream_raw_image_onto_device_socket_read_timeout   3.075
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_find_pair_1st                                        3.060
+ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_retries_on_50X_error                                 2.039
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_find_timeout                                         2.035
+ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_retry_on_50X_and_succeed                             2.025
+ironic_python_agent.tests.unit.test_agent.TestAgentStandalone.test_run                                                              1.141
 + rm -rf .stestr
-+ [ 3.12 = disabled ]
-+ echo 3.12
-+ cut -d. -f1
++ for pyvers in ${PYTHON3S}
++ '[' 3.12 = disabled ']'
+++ echo 3.12
+++ cut -d. -f1
 + PYMAJOR=3
-+ echo ===> Testing with python (python3)
++ echo '===> Testing with python (python3)'
 ===> Testing with python (python3)
-+ pwd
-+ [ -d /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages ]
-+ [ -z /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages ]
-+ [ -e .stestr.conf ]
-+ [ -x /usr/bin/python3-stestr ]
+++ pwd
++ '[' -d /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages ']'
++ '[' -z /build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages ']'
++ '[' -e .stestr.conf ']'
++ '[' -x /usr/bin/python3-stestr ']'
 + STESTR=stestr
 + rm -rf .stestr
-+ + subunit2pyunit
-PYTHON=python3.12 stestr run --parallel --subunit ironic_python_agent\.tests\.unit\.(?!test_inspector\.TestWaitForDhcp\.test_timeout)
-   ERROR [root] Unexpected exception performing deploy step erase_devices. RuntimeError: boom
++ PYTHON=python3.12
++ subunit2pyunit
++ stestr run --parallel --subunit 'ironic_python_agent\.tests\.unit\.(?!test_inspector\.TestWaitForDhcp\.test_timeout)'
+   ERROR [root] Tried to execute fake.fake_sync_command, agent is still executing Command name: name, params: {}, status: RUNNING, result: None.
+   ERROR [root] Invalid content error: Invalid request body: baz
 Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/deploy.py", line 77, in execute_deploy_step
-    result = hardware.dispatch_to_managers(step['step'], node, ports,
-             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "<string>", line 3, in dispatch_to_managers
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 268, in execute_command
+    result = ext.execute(command_part, **kwargs)
+             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/usr/lib/python3.12/unittest/mock.py", line 1139, in __call__
     return self._mock_call(*args, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -6964,13 +7015,12 @@
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/usr/lib/python3.12/unittest/mock.py", line 1198, in _execute_mock_call
     raise effect
-RuntimeError: boom
-   ERROR [root] Command failed: execute_deploy_step, error: Deploy step failed: Unexpected exception performing deploy step erase_devices. RuntimeError: boom
+ironic_python_agent.errors.InvalidContentError: Invalid request body: baz
+   ERROR [root] Command execution error: Command execution failed: foo bar baz
 Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/deploy.py", line 77, in execute_deploy_step
-    result = hardware.dispatch_to_managers(step['step'], node, ports,
-             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "<string>", line 3, in dispatch_to_managers
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 268, in execute_command
+    result = ext.execute(command_part, **kwargs)
+             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/usr/lib/python3.12/unittest/mock.py", line 1139, in __call__
     return self._mock_call(*args, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -6979,21 +7029,90 @@
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/usr/lib/python3.12/unittest/mock.py", line 1198, in _execute_mock_call
     raise effect
-RuntimeError: boom
-
-During handling of the above exception, another exception occurred:
-
+ironic_python_agent.errors.CommandExecutionError: Command execution failed: foo bar baz
+ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_busy
+ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_busy ... ok
+ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_command
+ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_command ... ok
+ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_command_invalid_content
+ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_command_invalid_content ... ok
+ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_command_other_exception
+ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_command_other_exception ... ok
+ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_command_success
+ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_command_success ... ok
+ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_invalid_command
+ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_invalid_command ... ok
+   ERROR [root] Extension do not found
+Traceback (most recent call last):
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 267, in execute_command
+    ext = self.get_extension(extension_part)
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 238, in get_extension
+    ext = self.ext_mgr[extension_name].obj
+          ~~~~~~~~~~~~^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3/dist-packages/stevedore/extension.py", line 340, in __getitem__
+    return self._extensions_by_name[name]
+           ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
+KeyError: 'do'
+ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_unknown_extension
+ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_unknown_extension ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__get_device_conf_dict
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__get_device_conf_dict ... ok
+   ERROR [root] Failed to query firmware of device <Mock name='mock.dev_pci' id='4110059872'>: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: None
+Stderr: None
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__get_device_conf_dict_exception
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__get_device_conf_dict_exception ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__mstconfig_parse_data
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__mstconfig_parse_data ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__mstconfig_parse_data_no_data
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__mstconfig_parse_data_no_data ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__param_supp_by_config_tool
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__param_supp_by_config_tool ... ok
+   ERROR [root] Failed to query tool configuration of device <Mock name='mock.dev_pci' id='4115727176'>: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: None
+Stderr: None
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__param_supp_by_config_tool_exception
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__param_supp_by_config_tool_exception ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__param_supp_by_fw
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__param_supp_by_fw ... ok
+   ERROR [root] Failed to query firmware of device <Mock name='mock.dev_pci' id='4108336104'>: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: None
+Stderr: None
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__param_supp_by_fw_exception
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__param_supp_by_fw_exception ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_set_config
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_set_config ... ok
+   ERROR [root] Failed to set configuration of device <Mock name='mock.dev_pci' id='4115544032'>,  ['SRIOV_EN=20']: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: None
+Stderr: None
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_set_config_exception
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_set_config_exception ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_validate_config
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_validate_config ... ok
+   ERROR [root] Configuraiton ESWITCH_HAIRPIN_TOT_BUFFER_SIZE[8] for device <Mock name='mock.dev_pci' id='4109326112'> is not supported with current fw
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_validate_config_unsupported_config_by_fw
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_validate_config_unsupported_config_by_fw ... ok
+   ERROR [root] Configuraiton: UNSUPPORTED_PARAM is not supported by mstconfig, please update to the latest mstflint package.
+   ERROR [root] Command failed: fake_async_command, error: An error occurred: failed
 Traceback (most recent call last):
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
     result = self.execute_method(**self.command_params)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/deploy.py", line 88, in execute_deploy_step
-    raise errors.DeploymentError(msg)
-ironic_python_agent.errors.DeploymentError: Deploy step failed: Unexpected exception performing deploy step erase_devices. RuntimeError: boom
-   ERROR [root] Duplicate componentFlavor MT_0000000540
-   ERROR [root] Error performing deploy step erase_devices
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/tests/unit/extensions/test_base.py", line 38, in fake_async_command
+    raise ExecutionError()
+ironic_python_agent.tests.unit.extensions.test_base.ExecutionError: An error occurred: failed
+   ERROR [root] Unexpected exception performing clean step erase_devices. RuntimeError: boom
 Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/deploy.py", line 77, in execute_deploy_step
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/clean.py", line 77, in execute_clean_step
     result = hardware.dispatch_to_managers(step['step'], node, ports,
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "<string>", line 3, in dispatch_to_managers
@@ -7005,13 +7124,10 @@
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/usr/lib/python3.12/unittest/mock.py", line 1198, in _execute_mock_call
     raise effect
-ironic_python_agent.errors.BlockDeviceError: Block device caused unknown error: I'm a teapot
-   ERROR [root] Command failed: execute_deploy_step, error: Block device caused unknown error: I'm a teapot
+RuntimeError: boom
+   ERROR [root] Command failed: execute_clean_step, error: Clean step failed: Unexpected exception performing clean step erase_devices. RuntimeError: boom
 Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
-    result = self.execute_method(**self.command_params)
-             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/deploy.py", line 77, in execute_deploy_step
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/clean.py", line 77, in execute_clean_step
     result = hardware.dispatch_to_managers(step['step'], node, ports,
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "<string>", line 3, in dispatch_to_managers
@@ -7023,34 +7139,53 @@
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/usr/lib/python3.12/unittest/mock.py", line 1198, in _execute_mock_call
     raise effect
-ironic_python_agent.errors.BlockDeviceError: Block device caused unknown error: I'm a teapot
-   ERROR [root] Malformed deploy_step, no "step" key: {}
-   ERROR [root] Command failed: execute_deploy_step, error: Malformed deploy_step, no "step" key: {}
+RuntimeError: boom
+
+During handling of the above exception, another exception occurred:
+
 Traceback (most recent call last):
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
     result = self.execute_method(**self.command_params)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/deploy.py", line 73, in execute_deploy_step
-    raise ValueError(msg)
-ValueError: Malformed deploy_step, no "step" key: {}
-   ERROR [root] Invalid parameters for image {'url': 'http://10.10.10.10/firmware_images/fw2.bin', 'checksum': 'a94e683ea16d9ae44768f0a65942234c', 'checksumType': 'sha512', 'component': 'MT_0000000652', 'version': '24.34.1002'},please provide the following parameters url, checksum, checksumType, componentFlavor, version
-   ERROR [root] Failed to query firmware of device <Mock name='mock.dev_pci' id='3022932872'>: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: None
-Stderr: None
-   ERROR [root] Clean version mismatch for command execute_deploy_step
-   ERROR [root] Tried to execute fake.fake_sync_command, agent is still executing Command name: name, params: {}, status: RUNNING, result: None.
-   ERROR [root] Failed to query tool configuration of device <Mock name='mock.dev_pci' id='3025592536'>: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: None
-Stderr: None
-   ERROR [root] Invalid content error: Invalid request body: baz
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/clean.py", line 88, in execute_clean_step
+    raise errors.CleaningError(msg)
+ironic_python_agent.errors.CleaningError: Clean step failed: Unexpected exception performing clean step erase_devices. RuntimeError: boom
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_execution_failure
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_execution_failure ... ok
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_name
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_name ... ok
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_success
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_success ... ok
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_success_without_agent
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_success_without_agent ... ok
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_validation_failure
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_validation_failure ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_validate_config_unsupported_config_by_mstflint_package
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_validate_config_unsupported_config_by_mstflint_package ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test__query_device
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test__query_device ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_fw_update_if_needed
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_fw_update_if_needed ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_fw_update_if_needed_with_reset
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_fw_update_if_needed_with_reset ... ok
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_command_map
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_command_map ...    ERROR [root] Command failed: fake_async_command, error: An error occurred: failed
 Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 268, in execute_command
-    result = ext.execute(command_part, **kwargs)
-             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
+    result = self.execute_method(**self.command_params)
+             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/tests/unit/extensions/test_base.py", line 38, in fake_async_command
+    raise ExecutionError()
+ironic_python_agent.tests.unit.extensions.test_base.ExecutionError: An error occurred: failed
+ok
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_sync_command_execution_failure
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_sync_command_execution_failure ... ok
+   ERROR [root] Error performing clean step erase_devices
+Traceback (most recent call last):
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/clean.py", line 77, in execute_clean_step
+    result = hardware.dispatch_to_managers(step['step'], node, ports,
+             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "<string>", line 3, in dispatch_to_managers
   File "/usr/lib/python3.12/unittest/mock.py", line 1139, in __call__
     return self._mock_call(*args, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -7059,25 +7194,16 @@
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/usr/lib/python3.12/unittest/mock.py", line 1198, in _execute_mock_call
     raise effect
-ironic_python_agent.errors.InvalidContentError: Invalid request body: baz
-   ERROR [root] Failed to query firmware of device <Mock name='mock.dev_pci' id='3025254848'>: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: None
-Stderr: None
-   ERROR [root] Command failed: fake_async_command, error: An error occurred: failed
+ironic_python_agent.errors.BlockDeviceError: Block device caused unknown error: I'm a teapot
+   ERROR [root] Command failed: execute_clean_step, error: Block device caused unknown error: I'm a teapot
 Traceback (most recent call last):
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
     result = self.execute_method(**self.command_params)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/tests/unit/extensions/test_base.py", line 38, in fake_async_command
-    raise ExecutionError()
-ironic_python_agent.tests.unit.extensions.test_base.ExecutionError: An error occurred: failed
-   ERROR [root] Command execution error: Command execution failed: foo bar baz
-Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 268, in execute_command
-    result = ext.execute(command_part, **kwargs)
-             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/clean.py", line 77, in execute_clean_step
+    result = hardware.dispatch_to_managers(step['step'], node, ports,
+             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "<string>", line 3, in dispatch_to_managers
   File "/usr/lib/python3.12/unittest/mock.py", line 1139, in __call__
     return self._mock_call(*args, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -7086,53 +7212,48 @@
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/usr/lib/python3.12/unittest/mock.py", line 1198, in _execute_mock_call
     raise effect
-ironic_python_agent.errors.CommandExecutionError: Command execution failed: foo bar baz
- WARNING [ironic_python_agent.extensions.image] Boot mode mismatch: target boot mode is bios, current boot mode is uefi. Installing boot loader may fail or work incorrectly.
-   ERROR [root] Failed to set configuration of device <Mock name='mock.dev_pci' id='3022542408'>,  ['SRIOV_EN=20']: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: None
-Stderr: None
- WARNING [ironic_python_agent.extensions.image] Falling back to fstab entry addition label of UUID. We could not identify which UUID or PARTUUID identifier label should be used, thus UUID will be used.
-   ERROR [root] Extension do not found
+ironic_python_agent.errors.BlockDeviceError: Block device caused unknown error: I'm a teapot
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_get_nic_psid
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_get_nic_psid ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_is_image_changed_true
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_is_image_changed_true ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_parse_mstflint_query_output
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_parse_mstflint_query_output ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_parse_mstflint_query_output_no_data
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_parse_mstflint_query_output_no_data ... ok
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_sync_command_name
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_sync_command_name ... ok
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_sync_command_success
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_sync_command_success ... ok
+   ERROR [root] Malformed clean_step, no "step" key: {}
+   ERROR [root] Command failed: execute_clean_step, error: Malformed clean_step, no "step" key: {}
 Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 267, in execute_command
-    ext = self.get_extension(extension_part)
-          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 238, in get_extension
-    ext = self.ext_mgr[extension_name].obj
-          ~~~~~~~~~~~~^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3/dist-packages/stevedore/extension.py", line 340, in __getitem__
-    return self._extensions_by_name[name]
-           ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
-KeyError: 'do'
-   ERROR [root] Configuraiton ESWITCH_HAIRPIN_TOT_BUFFER_SIZE[8] for device <Mock name='mock.dev_pci' id='3025592416'> is not supported with current fw
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_apply_net_firmware_update
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_apply_net_firmware_update ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_filter_images
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_filter_images ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_filter_images_duplicate_component_flavor_exception
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_filter_images_duplicate_component_flavor_exception ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_validate_images_schema
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_validate_images_schema ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_validate_images_schema_invalid_parameter
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_validate_images_schema_invalid_parameter ... ok
-   ERROR [root] Configuraiton: UNSUPPORTED_PARAM is not supported by mstconfig, please update to the latest mstflint package.
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__get_device_conf_dict
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__get_device_conf_dict ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__get_device_conf_dict_exception
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__get_device_conf_dict_exception ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__mstconfig_parse_data
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__mstconfig_parse_data ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__mstconfig_parse_data_no_data
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__mstconfig_parse_data_no_data ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__param_supp_by_config_tool
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__param_supp_by_config_tool ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__param_supp_by_config_tool_exception
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__param_supp_by_config_tool_exception ... ok
-   ERROR [root] Unexpected exception performing clean step erase_devices. RuntimeError: boom
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
+    result = self.execute_method(**self.command_params)
+             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/clean.py", line 74, in execute_clean_step
+    raise ValueError(msg)
+ValueError: Malformed clean_step, no "step" key: {}
+ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step
+ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step ... ok
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_sync_command_validation_failure
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_sync_command_validation_failure ... ok
+ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_exception
+ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_exception ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_parse_mstflint_query_output_with_running_fw
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_parse_mstflint_query_output_with_running_fw ... ok
+ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_fail
+ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_fail ... ok
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_wait_async_command_execution_failure
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_wait_async_command_execution_failure ... ok
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_wait_async_command_success
+ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_wait_async_command_success ... ok
+   ERROR [root] Clean version mismatch for command execute_clean_step
+ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_no_step
+ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_no_step ... ok
+   ERROR [root] Unexpected exception performing deploy step erase_devices. RuntimeError: boom
 Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/clean.py", line 77, in execute_clean_step
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/deploy.py", line 77, in execute_deploy_step
     result = hardware.dispatch_to_managers(step['step'], node, ports,
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "<string>", line 3, in dispatch_to_managers
@@ -7145,9 +7266,9 @@
   File "/usr/lib/python3.12/unittest/mock.py", line 1198, in _execute_mock_call
     raise effect
 RuntimeError: boom
-   ERROR [root] Command failed: execute_clean_step, error: Clean step failed: Unexpected exception performing clean step erase_devices. RuntimeError: boom
+   ERROR [root] Command failed: execute_deploy_step, error: Deploy step failed: Unexpected exception performing deploy step erase_devices. RuntimeError: boom
 Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/clean.py", line 77, in execute_clean_step
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/deploy.py", line 77, in execute_deploy_step
     result = hardware.dispatch_to_managers(step['step'], node, ports,
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "<string>", line 3, in dispatch_to_managers
@@ -7167,14 +7288,12 @@
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
     result = self.execute_method(**self.command_params)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/clean.py", line 88, in execute_clean_step
-    raise errors.CleaningError(msg)
-ironic_python_agent.errors.CleaningError: Clean step failed: Unexpected exception performing clean step erase_devices. RuntimeError: boom
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__param_supp_by_fw
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__param_supp_by_fw ... ok
-   ERROR [root] Error performing clean step erase_devices
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/deploy.py", line 88, in execute_deploy_step
+    raise errors.DeploymentError(msg)
+ironic_python_agent.errors.DeploymentError: Deploy step failed: Unexpected exception performing deploy step erase_devices. RuntimeError: boom
+   ERROR [root] Error performing deploy step erase_devices
 Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/clean.py", line 77, in execute_clean_step
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/deploy.py", line 77, in execute_deploy_step
     result = hardware.dispatch_to_managers(step['step'], node, ports,
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "<string>", line 3, in dispatch_to_managers
@@ -7187,12 +7306,12 @@
   File "/usr/lib/python3.12/unittest/mock.py", line 1198, in _execute_mock_call
     raise effect
 ironic_python_agent.errors.BlockDeviceError: Block device caused unknown error: I'm a teapot
-   ERROR [root] Command failed: execute_clean_step, error: Block device caused unknown error: I'm a teapot
+   ERROR [root] Command failed: execute_deploy_step, error: Block device caused unknown error: I'm a teapot
 Traceback (most recent call last):
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
     result = self.execute_method(**self.command_params)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/clean.py", line 77, in execute_clean_step
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/deploy.py", line 77, in execute_deploy_step
     result = hardware.dispatch_to_managers(step['step'], node, ports,
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "<string>", line 3, in dispatch_to_managers
@@ -7205,47 +7324,71 @@
   File "/usr/lib/python3.12/unittest/mock.py", line 1198, in _execute_mock_call
     raise effect
 ironic_python_agent.errors.BlockDeviceError: Block device caused unknown error: I'm a teapot
-   ERROR [root] Malformed clean_step, no "step" key: {}
 ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step
-ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step   ERROR [root] Command failed: execute_clean_step, error: Malformed clean_step, no "step" key: {}
+ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step ... ok
+ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_tuple_result
+ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_tuple_result ... ok
+ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_version_mismatch
+ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_version_mismatch ...  WARNING [ironic_python_agent.agent] Cannot get route to host 1.2.1.2: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+ok
+ WARNING [ironic_python_agent.agent] Cannot get route to host 1.2.1.2: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+ WARNING [ironic_python_agent.agent] Cannot get route to host 1.2.1.2: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+ WARNING [ironic_python_agent.agent] Cannot get route to host 1.2.1.2: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+ WARNING [ironic_python_agent.agent] Cannot get route to host 1.2.1.2: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+ironic_python_agent.tests.unit.extensions.test_log.TestLogExtension.test_collect_system_logs
+ironic_python_agent.tests.unit.extensions.test_log.TestLogExtension.test_collect_system_logs ... ok
+   ERROR [root] Malformed deploy_step, no "step" key: {}
+ironic_python_agent.tests.unit.extensions.test_rescue.TestRescueExtension.test_finalize_rescue
+ironic_python_agent.tests.unit.extensions.test_rescue.TestRescueExtension.test_finalize_rescue   ERROR [root] Command failed: execute_deploy_step, error: Malformed deploy_step, no "step" key: {}
 Traceback (most recent call last):
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
     result = self.execute_method(**self.command_params)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/clean.py", line 74, in execute_clean_step
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/deploy.py", line 73, in execute_deploy_step
     raise ValueError(msg)
-ValueError: Malformed clean_step, no "step" key: {}
+ValueError: Malformed deploy_step, no "step" key: {}
  ... ok
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_advertise_address_provided
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_advertise_address_provided ... ok
 ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_exception
 ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_exception ... ok
+ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_with_args
+ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_with_args ... ok
 ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_fail
 ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_fail ... ok
-ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_no_step
-ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_no_step ... ok
-ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_tuple_result
-ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_tuple_result ... ok
-   ERROR [root] Command failed: fake_async_command, error: An error occurred: failed
-Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
-    result = self.execute_method(**self.command_params)
-             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/tests/unit/extensions/test_base.py", line 38, in fake_async_command
-    raise ExecutionError()
-ironic_python_agent.tests.unit.extensions.test_base.ExecutionError: An error occurred: failed
-   ERROR [root] Clean version mismatch for command execute_clean_step
-ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_version_mismatch
-ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_version_mismatch ... ok
-ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_with_args
-ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_with_args ... ok
-   ERROR [ironic_python_agent.extensions.image] Error setting up bootloader. Error meow
-   ERROR [root] Command failed: install_bootloader, error: meow
+ironic_python_agent.tests.unit.extensions.test_rescue.TestRescueExtension.test_hashed_passwords
+ironic_python_agent.tests.unit.extensions.test_rescue.TestRescueExtension.test_hashed_passwords ... ok
+ironic_python_agent.tests.unit.extensions.test_rescue.TestRescueExtension.test_write_rescue_password
+ironic_python_agent.tests.unit.extensions.test_rescue.TestRescueExtension.test_write_rescue_password ... ok
+ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_get_clean_steps
+ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_get_clean_steps ... ok
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_failed
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_failed ... ok
+   ERROR [root] Rescue Operation failed when writing the hashed rescue password to the password file. Error 
 Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
-    result = self.execute_method(**self.command_params)
-             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/image.py", line 721, in install_bootloader
-    _install_grub2(device,
-  File "<string>", line 3, in _install_grub2
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/rescue.py", line 48, in write_rescue_password
+    with open(PASSWORD_FILE, 'w') as f:
+         ^^^^^^^^^^^^^^^^^^^^^^^^
   File "/usr/lib/python3.12/unittest/mock.py", line 1139, in __call__
     return self._mock_call(*args, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -7254,22 +7397,14 @@
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/usr/lib/python3.12/unittest/mock.py", line 1198, in _execute_mock_call
     raise effect
-OSError: meow
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__param_supp_by_fw_exception
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test__param_supp_by_fw_exception ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_set_config
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_set_config ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_set_config_exception
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_set_config_exception ... ok
-   ERROR [ironic_python_agent.extensions.image] Error setting up bootloader. Error meow
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_validate_config
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_validate_config ... ok
-ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_get_deploy_steps
-ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_get_deploy_steps ... ok
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__add_multi_bootloaders
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__add_multi_bootloaders ... ok
-   ERROR [ironic_python_agent.extensions.poll] Node lookup data can only be set when the Ironic Python Agent is running in standalone mode.
-   ERROR [ironic_python_agent.disk_utils] Security: Detected image format was qcow3, but only raw, qcow2 are allowed
+OSError
+ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_no_step
+ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_no_step ... ok
+ WARNING [ironic_python_agent.agent] Cannot get route to host 1.2.1.2: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
    ERROR [root] Command failed: sleep, error: An error occurred: An unexpected error occurred. Please try back later.
 Traceback (most recent call last):
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
@@ -7286,6 +7421,11 @@
   File "/usr/lib/python3.12/unittest/mock.py", line 1198, in _execute_mock_call
     raise effect
 ironic_python_agent.errors.RESTError: An error occurred: An unexpected error occurred. Please try back later.
+ WARNING [ironic_python_agent.agent] No route to host 1.2.1.2, route record: Error: some error text
+ironic_python_agent.tests.unit.extensions.test_rescue.TestRescueExtension.test_write_rescue_password_ioerror
+ironic_python_agent.tests.unit.extensions.test_rescue.TestRescueExtension.test_write_rescue_password_ioerror ... ok
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_retry
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_retry ... ok
    ERROR [root] Command failed: start_flow, error: Command execution failed: fake.sleep was failed
 Traceback (most recent call last):
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
@@ -7294,8 +7434,30 @@
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/flow.py", line 44, in start_flow
     raise errors.CommandExecutionError(
 ironic_python_agent.errors.CommandExecutionError: Command execution failed: fake.sleep was failed
-   ERROR [ironic_python_agent.extensions.image] Error setting up bootloader. Error meow
-   ERROR [ironic_python_agent.disk_utils] Security: Detected image format was qcow3, but only raw, qcow2 are allowed
+ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_sleep_flow_failed
+ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_sleep_flow_failed ... ok
+ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_tuple_result
+ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_tuple_result ... ok
+ WARNING [ironic_python_agent.agent] Cannot get route to host fc00:1111::1: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+ WARNING [ironic_python_agent.agent] No route to host 1.2.1.2, route record: Error: some error text
+ WARNING [ironic_python_agent.agent] Cannot get route to host fc00:1111::1: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_several_urls_and_retries
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_several_urls_and_retries ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image ... ok
+   ERROR [root] Clean version mismatch for command execute_deploy_step
+ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_version_mismatch
+ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_version_mismatch ... ok
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_with_host
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_with_host ... ok
    ERROR [root] Command failed: sleep, error: foo
 Traceback (most recent call last):
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
@@ -7320,17 +7482,46 @@
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/flow.py", line 44, in start_flow
     raise errors.CommandExecutionError(
 ironic_python_agent.errors.CommandExecutionError: Command execution failed: fake.sleep was failed
-   ERROR [ironic_python_agent.extensions.image] Error setting up bootloader. Error meow
- WARNING [ironic_python_agent.disk_utils] Failed to verify partition tables on device /dev/fake: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: None
-Stderr: None
-   ERROR [root] Rescue Operation failed when writing the hashed rescue password to the password file. Error 
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_centos_checksum_md5
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_centos_checksum_md5 ... ok
+ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_sleep_flow_failed_on_second_command
+ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_sleep_flow_failed_on_second_command ... ok
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_with_ip
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_with_ip ... ok
+ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_with_args
+ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_execute_deploy_step_with_args ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_centos_checksum_sha256
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_centos_checksum_sha256 ... ok
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_with_ipv6
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_with_ipv6 ... ok
+ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_get_deploy_steps
+ironic_python_agent.tests.unit.extensions.test_deploy.TestDeployExtension.test_get_deploy_steps ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_centos_checksum_sha512
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_centos_checksum_sha512 ... ok
+ WARNING [root] Can't find field vendor for device lo in device class net
+ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_sleep_flow_success
+ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_sleep_flow_success ... ok
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_with_network_interface
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_with_network_interface ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum ... ok
+ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step
+ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step ... ok
+ WARNING [root] Can't find field vendor for device lo in device class net
+ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_validate_exts_failed_empty_command_map
+ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_validate_exts_failed_empty_command_map ... ok
+ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_validate_exts_failed_missing_command
+ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_validate_exts_failed_missing_command ... ok
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_with_network_interface_failed
+ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_with_network_interface_failed ... ok
+ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_validate_exts_failed_to_find_extension
+ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_validate_exts_failed_to_find_extension ... ok
+   ERROR [root] Unexpected exception performing service step erase_devices. RuntimeError: boom
 Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/rescue.py", line 48, in write_rescue_password
-    with open(PASSWORD_FILE, 'w') as f:
-         ^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/service.py", line 77, in execute_service_step
+    result = hardware.dispatch_to_managers(step['step'], node, ports,
+             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "<string>", line 3, in dispatch_to_managers
   File "/usr/lib/python3.12/unittest/mock.py", line 1139, in __call__
     return self._mock_call(*args, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -7339,533 +7530,548 @@
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/usr/lib/python3.12/unittest/mock.py", line 1198, in _execute_mock_call
     raise effect
-OSError
-   ERROR [ironic_python_agent.extensions.image] Installing GRUB2 boot loader to device /dev/fake failed with Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None.
- WARNING [ironic_python_agent.extensions.image] Unable to umount vfat partitions. Error: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
- WARNING [ironic_python_agent.extensions.image] Unable to umount /tmp/fake-dir/dev. Error: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
- WARNING [ironic_python_agent.extensions.image] Unable to umount /tmp/fake-dir/proc. Error: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
- WARNING [ironic_python_agent.extensions.image] Unable to umount /tmp/fake-dir/run. Error: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
- WARNING [ironic_python_agent.extensions.image] Unable to umount /tmp/fake-dir/sys. Error: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__append_uefi_to_fstab_handles_error
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__append_uefi_to_fstab_handles_error ... ok
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_bios
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_bios ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_validate_config_unsupported_config_by_fw
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_validate_config_unsupported_config_by_fw ... ok
- WARNING [root] Device /dev/fake1 is inaccessible, skipping... Error: nope
-   ERROR [ironic_python_agent.extensions.standby] Failed to sync hardware clock: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boop'
-Stderr: None
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_no_root
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_no_root ... ok
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_prep
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_prep ... ok
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_uefi
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_uefi ... ok
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_uefi_grub_failure_api_override
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_uefi_grub_failure_api_override ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_validate_config_unsupported_config_by_mstflint_package
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicConfig.test_validate_config_unsupported_config_by_mstflint_package ... ok
-ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_busy
-ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_busy ... ok
-ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_command
-ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_command ... ok
-ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_command_invalid_content
-ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_command_invalid_content ... ok
-ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_command_other_exception
-ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_command_other_exception ... ok
-ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_command_success
-ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_command_success ... ok
-ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_invalid_command
-ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_invalid_command ... ok
-ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_unknown_extension
-ironic_python_agent.tests.unit.extensions.test_base.TestExecuteCommandMixin.test_execute_unknown_extension ... ok
-ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step
-ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step ... ok
-ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_exception
-ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_exception ... ok
-ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_fail
-ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_fail ... ok
-ironic_python_agent.tests.unit.test_base.BlockExecuteTestCase.test_can_mock_execute
-ironic_python_agent.tests.unit.test_base.BlockExecuteTestCase.test_can_mock_execute ... ok
-ironic_python_agent.tests.unit.test_base.BlockExecuteTestCase.test_exception_raised_for_execute
-ironic_python_agent.tests.unit.test_base.BlockExecuteTestCase.test_exception_raised_for_execute ... ok
-ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_no_step
-ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_no_step ... ok
-ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_tuple_result
-ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_tuple_result ... ok
-ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_version_mismatch
-ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_version_mismatch ... ok
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_uefi_ignores_grub_failure
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_uefi_ignores_grub_failure ... ok
-ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_with_args
-ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_execute_clean_step_with_args ... ok
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_uefi_ignores_grub_failure_api_override
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_uefi_ignores_grub_failure_api_override ... ok
-ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_get_clean_steps
-ironic_python_agent.tests.unit.extensions.test_clean.TestCleanExtension.test_get_clean_steps ... ok
-ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_sleep_flow_failed
-ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_sleep_flow_failed ... ok
-ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_sleep_flow_failed_on_second_command
-ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_sleep_flow_failed_on_second_command ... ok
-ironic_python_agent.tests.unit.test_base.DontBlockExecuteTestCase.test_no_exception_raised_for_execute
-ironic_python_agent.tests.unit.test_base.DontBlockExecuteTestCase.test_no_exception_raised_for_execute ... ok
-ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_add_partition
-ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_add_partition ... ok
-ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_commit
-ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_commit ... ok
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_uefi_ignores_manage_failure
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_uefi_ignores_manage_failure ... ok
-ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_commit_with_device_disconnected
-ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_commit_with_device_disconnected ... ok
-ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_commit_with_device_is_always_busy
-ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_commit_with_device_is_always_busy ... ok
-ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_commit_with_device_is_busy_once
-ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_commit_with_device_is_busy_once ... ok
+RuntimeError: boom
+   ERROR [root] Command failed: execute_service_step, error: Service step failed: Unexpected exception performing service step erase_devices. RuntimeError: boom
+Traceback (most recent call last):
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/service.py", line 77, in execute_service_step
+    result = hardware.dispatch_to_managers(step['step'], node, ports,
+             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "<string>", line 3, in dispatch_to_managers
+  File "/usr/lib/python3.12/unittest/mock.py", line 1139, in __call__
+    return self._mock_call(*args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.12/unittest/mock.py", line 1143, in _mock_call
+    return self._execute_mock_call(*args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.12/unittest/mock.py", line 1198, in _execute_mock_call
+    raise effect
+RuntimeError: boom
+
+During handling of the above exception, another exception occurred:
+
+Traceback (most recent call last):
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
+    result = self.execute_method(**self.command_params)
+             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/service.py", line 88, in execute_service_step
+    raise errors.ServicingError(msg)
+ironic_python_agent.errors.ServicingError: Service step failed: Unexpected exception performing service step erase_devices. RuntimeError: boom
 ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata
 ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata ... ok
 ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_4096
 ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_4096 ... ok
+ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_validate_exts_success
+ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_validate_exts_success ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_empty_file
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_empty_file ... ok
+ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_exception
+ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_exception ... ok
 ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_ebr
 ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_ebr ... ok
+ WARNING [ironic_python_agent.extensions.image] Boot mode mismatch: target boot mode is bios, current boot mode is uefi. Installing boot loader may fail or work incorrectly.
 ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_sgdisk_fail
 ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_sgdisk_fail ... ok
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__add_multi_bootloaders
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__add_multi_bootloaders ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_empty_file_md5
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_empty_file_md5 ... ok
 ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_tiny_partition
 ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_tiny_partition ... ok
 ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_wipefs_fail
 ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_wipefs_fail ... ok
+ WARNING [ironic_python_agent.extensions.image] Falling back to fstab entry addition label of UUID. We could not identify which UUID or PARTUUID identifier label should be used, thus UUID will be used.
+   ERROR [root] Error performing service step erase_devices
+Traceback (most recent call last):
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/service.py", line 77, in execute_service_step
+    result = hardware.dispatch_to_managers(step['step'], node, ports,
+             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "<string>", line 3, in dispatch_to_managers
+  File "/usr/lib/python3.12/unittest/mock.py", line 1139, in __call__
+    return self._mock_call(*args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.12/unittest/mock.py", line 1143, in _mock_call
+    return self._execute_mock_call(*args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.12/unittest/mock.py", line 1198, in _execute_mock_call
+    raise effect
+ironic_python_agent.errors.BlockDeviceError: Block device caused unknown error: I'm a teapot
+   ERROR [root] Command failed: execute_service_step, error: Block device caused unknown error: I'm a teapot
+Traceback (most recent call last):
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
+    result = self.execute_method(**self.command_params)
+             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/service.py", line 77, in execute_service_step
+    result = hardware.dispatch_to_managers(step['step'], node, ports,
+             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "<string>", line 3, in dispatch_to_managers
+  File "/usr/lib/python3.12/unittest/mock.py", line 1139, in __call__
+    return self._mock_call(*args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.12/unittest/mock.py", line 1143, in _mock_call
+    return self._execute_mock_call(*args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.12/unittest/mock.py", line 1198, in _execute_mock_call
+    raise effect
+ironic_python_agent.errors.BlockDeviceError: Block device caused unknown error: I'm a teapot
 ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_wipefs_not_support_force
 ironic_python_agent.tests.unit.test_disk_utils.DestroyMetaDataTestCase.test_destroy_disk_metadata_wipefs_not_support_force ... ok
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__append_uefi_to_fstab_handles_error
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__append_uefi_to_fstab_handles_error ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_failed
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_failed ... ok
 ironic_python_agent.tests.unit.test_disk_utils.FindEfiPartitionTestCase.test_find_efi_partition
 ironic_python_agent.tests.unit.test_disk_utils.FindEfiPartitionTestCase.test_find_efi_partition ... ok
+ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_fail
+ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_fail ... ok
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_bios
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_bios ... ok
 ironic_python_agent.tests.unit.test_disk_utils.FindEfiPartitionTestCase.test_find_efi_partition_not_found
 ironic_python_agent.tests.unit.test_disk_utils.FindEfiPartitionTestCase.test_find_efi_partition_not_found ... ok
-ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_sleep_flow_success
-ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_sleep_flow_success ... ok
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_no_root
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_no_root ... ok
 ironic_python_agent.tests.unit.test_disk_utils.FindEfiPartitionTestCase.test_find_efi_partition_only_boot_flag_gpt
 ironic_python_agent.tests.unit.test_disk_utils.FindEfiPartitionTestCase.test_find_efi_partition_only_boot_flag_gpt ... ok
+   ERROR [root] Malformed service_step, no "step" key: {}
+   ERROR [root] Command failed: execute_service_step, error: Malformed service_step, no "step" key: {}
+Traceback (most recent call last):
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
+    result = self.execute_method(**self.command_params)
+             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/service.py", line 74, in execute_service_step
+    raise ValueError(msg)
+ValueError: Malformed service_step, no "step" key: {}
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_failed_md5
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_failed_md5 ... ok
+   ERROR [ironic_python_agent.disk_utils] Security: Detected image format was qcow3, but only raw, qcow2 are allowed
+ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_no_step
+ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_no_step ... ok
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_prep
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_prep ... ok
 ironic_python_agent.tests.unit.test_disk_utils.FindEfiPartitionTestCase.test_find_efi_partition_only_boot_flag_mbr
 ironic_python_agent.tests.unit.test_disk_utils.FindEfiPartitionTestCase.test_find_efi_partition_only_boot_flag_mbr ... ok
-ironic_python_agent.tests.unit.test_disk_utils.FixGptStructsTestCases.test_fix_gpt_structs_exc
-ironic_python_agent.tests.unit.test_disk_utils.FixGptStructsTestCases.test_fix_gpt_structs_exc ... ok
-ironic_python_agent.tests.unit.test_disk_utils.FixGptStructsTestCases.test_fix_gpt_structs_fix_not_required
-ironic_python_agent.tests.unit.test_disk_utils.FixGptStructsTestCases.test_fix_gpt_structs_fix_not_required ... ok
-ironic_python_agent.tests.unit.test_disk_utils.FixGptStructsTestCases.test_fix_gpt_structs_fix_required
-ironic_python_agent.tests.unit.test_disk_utils.FixGptStructsTestCases.test_fix_gpt_structs_fix_required ... ok
- WARNING [ironic_python_agent.extensions.image] GRUB2 will be installed for UEFI on efi partition /dev/md/esp using the install command which does not place Secure Boot signed binaries.
- WARNING [ironic_python_agent.extensions.image] Ignoring GRUB2 boot loader installation failure: Unexpected error while running command.
-Command: grub2-install
-Exit code: 1
-Stdout: ''
-Stderr: 'grub2-install: error: this utility cannot be used for EFI platforms because it does not support UEFI Secure Boot.\n'.
 ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_format_mismatch
 ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_format_mismatch ... ok
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_uefi
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_uefi ... ok
 ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_format_mismatch_but_disabled
 ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_format_mismatch_but_disabled ... ok
- WARNING [ironic_python_agent.extensions.image] Ignoring GRUB2 boot loader installation failure: Unexpected error while running command.
-Command: grub2-install
-Exit code: 1
-Stdout: ''
-Stderr: 'grub2-install: error: this utility cannot be used for EFI platforms because it does not support UEFI Secure Boot.\n'.
+   ERROR [ironic_python_agent.disk_utils] Security: Detected image format was qcow3, but only raw, qcow2 are allowed
+   ERROR [ironic_python_agent.extensions.image] Error setting up bootloader. Error meow
 ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_format_type_disallowed
 ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_format_type_disallowed ... ok
+   ERROR [root] Command failed: install_bootloader, error: meow
+Traceback (most recent call last):
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
+    result = self.execute_method(**self.command_params)
+             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/image.py", line 721, in install_bootloader
+    _install_grub2(device,
+  File "<string>", line 3, in _install_grub2
+  File "/usr/lib/python3.12/unittest/mock.py", line 1139, in __call__
+    return self._mock_call(*args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.12/unittest/mock.py", line 1143, in _mock_call
+    return self._execute_mock_call(*args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.12/unittest/mock.py", line 1198, in _execute_mock_call
+    raise effect
+OSError: meow
+ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_tuple_result
+ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_tuple_result ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_md5
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_md5 ... ok
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_uefi_grub_failure_api_override
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_uefi_grub_failure_api_override ... ok
 ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_happy_qcow2
 ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_happy_qcow2 ... ok
+   ERROR [root] Clean version mismatch for command execute_service_step
 ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_happy_raw
 ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_happy_raw ... ok
+   ERROR [ironic_python_agent.extensions.image] Error setting up bootloader. Error meow
+ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_version_mismatch
+ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_version_mismatch ... ok
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_uefi_ignores_grub_failure
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_uefi_ignores_grub_failure ... ok
 ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_safety_check_fail_but_disabled
 ironic_python_agent.tests.unit.test_disk_utils.GetAndValidateImageFormat.test_safety_check_fail_but_disabled ... ok
-ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_validate_exts_failed_empty_command_map
-ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_validate_exts_failed_empty_command_map ... ok
-ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_validate_exts_failed_missing_command
-ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_validate_exts_failed_missing_command ... ok
-ironic_python_agent.tests.unit.test_disk_utils.ListPartitionsTestCase.test_correct
-ironic_python_agent.tests.unit.test_disk_utils.ListPartitionsTestCase.test_correct ... ok
-ironic_python_agent.tests.unit.test_disk_utils.ListPartitionsTestCase.test_correct_gpt_nvme
-ironic_python_agent.tests.unit.test_disk_utils.ListPartitionsTestCase.test_correct_gpt_nvme ... ok
-ironic_python_agent.tests.unit.test_disk_utils.ListPartitionsTestCase.test_incorrect
-ironic_python_agent.tests.unit.test_disk_utils.ListPartitionsTestCase.test_incorrect ... ok
-ironic_python_agent.tests.unit.test_disk_utils.ListPartitionsTestCase.test_incorrect_gpt
-ironic_python_agent.tests.unit.test_disk_utils.ListPartitionsTestCase.test_incorrect_gpt ... ok
-ironic_python_agent.tests.unit.test_disk_utils.TriggerDeviceRescanTestCase.test_custom_attempts
-ironic_python_agent.tests.unit.test_disk_utils.TriggerDeviceRescanTestCase.test_custom_attempts ... ok
-ironic_python_agent.tests.unit.test_disk_utils.TriggerDeviceRescanTestCase.test_fails
-ironic_python_agent.tests.unit.test_disk_utils.TriggerDeviceRescanTestCase.test_fails ... ok
-ironic_python_agent.tests.unit.test_disk_utils.TriggerDeviceRescanTestCase.test_trigger
-ironic_python_agent.tests.unit.test_disk_utils.TriggerDeviceRescanTestCase.test_trigger ... ok
-ironic_python_agent.tests.unit.test_encoding.TestSerializableComparable.test_childclass_equal
-ironic_python_agent.tests.unit.test_encoding.TestSerializableComparable.test_childclass_equal ... ok
-ironic_python_agent.tests.unit.test_encoding.TestSerializableComparable.test_childclass_hash
-ironic_python_agent.tests.unit.test_encoding.TestSerializableComparable.test_childclass_hash ... ok
-ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_validate_exts_failed_to_find_extension
-ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_validate_exts_failed_to_find_extension ... ok
-ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_validate_exts_success
-ironic_python_agent.tests.unit.extensions.test_flow.TestFlowExtension.test_validate_exts_success ... ok
-ironic_python_agent.tests.unit.test_encoding.TestSerializableComparable.test_childclass_notequal
-ironic_python_agent.tests.unit.test_encoding.TestSerializableComparable.test_childclass_notequal ... ok
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_execution_failure
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_execution_failure ... ok
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_name
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_name ... ok
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_success
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_success ... ok
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_success_without_agent
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_success_without_agent ... ok
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_validation_failure
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_async_command_validation_failure ... ok
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_command_map
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_command_map ... ok
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_sync_command_execution_failure
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_sync_command_execution_failure ... ok
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_sync_command_name
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_sync_command_name ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test__message_format_partition_bios
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test__message_format_partition_bios ... ok
-ironic_python_agent.tests.unit.test_hardware.TestCollectSystemLogs.test__collect_udev
-ironic_python_agent.tests.unit.test_hardware.TestCollectSystemLogs.test__collect_udev ... ok
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_sync_command_success
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_sync_command_success ... ok
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_sync_command_validation_failure
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_sync_command_validation_failure ... ok
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_wait_async_command_execution_failure
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_wait_async_command_execution_failure ... ok
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_wait_async_command_success
-ironic_python_agent.tests.unit.extensions.test_base.TestExtensionDecorators.test_wait_async_command_success ... ok
-ironic_python_agent.tests.unit.extensions.test_log.TestLogExtension.test_collect_system_logs
-ironic_python_agent.tests.unit.extensions.test_log.TestLogExtension.test_collect_system_logs ... ok
-ironic_python_agent.tests.unit.extensions.test_poll.TestPollExtension.test_get_hardware_info_success
-ironic_python_agent.tests.unit.extensions.test_poll.TestPollExtension.test_get_hardware_info_success ... ok
-ironic_python_agent.tests.unit.extensions.test_poll.TestPollExtension.test_set_node_info_not_standalone
-ironic_python_agent.tests.unit.extensions.test_poll.TestPollExtension.test_set_node_info_not_standalone ... ok
-ironic_python_agent.tests.unit.extensions.test_poll.TestPollExtension.test_set_node_info_success
-ironic_python_agent.tests.unit.extensions.test_poll.TestPollExtension.test_set_node_info_success ... ok
-ironic_python_agent.tests.unit.extensions.test_rescue.TestRescueExtension.test_finalize_rescue
-ironic_python_agent.tests.unit.extensions.test_rescue.TestRescueExtension.test_finalize_rescue ... ok
-ironic_python_agent.tests.unit.extensions.test_rescue.TestRescueExtension.test_hashed_passwords
-ironic_python_agent.tests.unit.extensions.test_rescue.TestRescueExtension.test_hashed_passwords ... ok
-ironic_python_agent.tests.unit.extensions.test_rescue.TestRescueExtension.test_write_rescue_password
-ironic_python_agent.tests.unit.extensions.test_rescue.TestRescueExtension.test_write_rescue_password ... ok
+ironic_python_agent.tests.unit.test_disk_utils.GetDeviceInformationTestCase.test_empty
+ironic_python_agent.tests.unit.test_disk_utils.GetDeviceInformationTestCase.test_empty ... ok
+   ERROR [ironic_python_agent.extensions.image] Error setting up bootloader. Error meow
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_multiple_md5
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_multiple_md5 ... ok
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_uefi_ignores_grub_failure_api_override
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_uefi_ignores_grub_failure_api_override ... ok
+ironic_python_agent.tests.unit.test_disk_utils.GetDeviceInformationTestCase.test_fields
+ironic_python_agent.tests.unit.test_disk_utils.GetDeviceInformationTestCase.test_fields ... ok
+ironic_python_agent.tests.unit.test_disk_utils.GetDeviceInformationTestCase.test_normal
+ironic_python_agent.tests.unit.test_disk_utils.GetDeviceInformationTestCase.test_normal ... ok
+   ERROR [ironic_python_agent.extensions.image] Error setting up bootloader. Error meow
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_uefi_ignores_manage_failure
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_bootloader_uefi_ignores_manage_failure ... ok
+ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available
+ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available ... ok
+ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_with_args
+ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_with_args ... ok
+ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_dev_becomes_avail_busybox
+ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_dev_becomes_avail_busybox ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_multiple_sha256
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_multiple_sha256 ... ok
+ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_dev_becomes_avail_psmisc
+ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_dev_becomes_avail_psmisc ... ok
+ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_device_in_use_busybox
+ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_device_in_use_busybox ... ok
+ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_device_in_use_psmisc
+ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_device_in_use_psmisc ... ok
+ WARNING [ironic_python_agent.disk_utils] Failed to check the device fake-dev with fuser: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: None
+Stderr: 'fake'
+ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_no_device
+ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_no_device ... ok
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2 ... ok
+ WARNING [ironic_python_agent.disk_utils] Failed to check the device fake-dev with fuser: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: None
+Stderr: 'fake'
+   ERROR [ironic_python_agent.extensions.image] Installing GRUB2 boot loader to device /dev/fake failed with Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None.
+ WARNING [ironic_python_agent.extensions.image] Unable to umount vfat partitions. Error: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+ WARNING [ironic_python_agent.extensions.image] Unable to umount /tmp/fake-dir/dev. Error: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+ WARNING [ironic_python_agent.extensions.image] Unable to umount /tmp/fake-dir/proc. Error: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+ WARNING [ironic_python_agent.extensions.image] Unable to umount /tmp/fake-dir/run. Error: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+ WARNING [ironic_python_agent.extensions.image] Unable to umount /tmp/fake-dir/sys. Error: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_no_fuser
+ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_no_fuser ... ok
+ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_get_service_steps
+ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_get_service_steps ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_multiple_sha512
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_multiple_sha512 ... ok
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_command_fail
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_command_fail ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_unknown_file
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_unknown_file ... ok
+ironic_python_agent.tests.unit.test_efi_utils.TestGetEfiBootloaders.test__get_efi_bootloaders
+ironic_python_agent.tests.unit.test_efi_utils.TestGetEfiBootloaders.test__get_efi_bootloaders ... ok
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_prep
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_prep ... ok
-ironic_python_agent.tests.unit.extensions.test_rescue.TestRescueExtension.test_write_rescue_password_ioerror
-ironic_python_agent.tests.unit.extensions.test_rescue.TestRescueExtension.test_write_rescue_password_ioerror ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_centos_checksum_md5
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_centos_checksum_md5 ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_centos_checksum_sha256
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_centos_checksum_sha256 ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_centos_checksum_sha512
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_centos_checksum_sha512 ... ok
-ironic_python_agent.tests.unit.test_hardware.TestCollectSystemLogs.test_collect_system_logs
-ironic_python_agent.tests.unit.test_hardware.TestCollectSystemLogs.test_collect_system_logs ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__ata_erase_security_enabled_set_password_exception
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__ata_erase_security_enabled_set_password_exception ... ok
- WARNING [ironic_python_agent.extensions.image] GRUB2 will be installed for UEFI on efi partition /dev/fake1 using the install command which does not place Secure Boot signed binaries.
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test__message_format_partition_bios
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test__message_format_partition_bios ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_unknown_file_md5
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_unknown_file_md5 ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test__message_format_partition_uefi
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test__message_format_partition_uefi ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_invalid_checksum
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_invalid_checksum ... ok
+ironic_python_agent.tests.unit.test_efi_utils.TestGetEfiBootloaders.test__get_efi_bootloaders_no_csv
+ironic_python_agent.tests.unit.test_efi_utils.TestGetEfiBootloaders.test__get_efi_bootloaders_no_csv ... ok
+   ERROR [ironic_python_agent.extensions.standby] Failed to sync hardware clock: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boop'
+Stderr: None
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_softraid_bios
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_softraid_bios ... ok
+ironic_python_agent.tests.unit.test_efi_utils.TestGetEfiBootloaders.test__get_windows_efi_bootloaders
+ironic_python_agent.tests.unit.test_efi_utils.TestGetEfiBootloaders.test__get_windows_efi_bootloaders ... ok
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.008979320526123047 seconds. Error: Received status code 401 from http://example.org, expected 200. Response body: Unauthorized Response headers: <MagicMock name='get().headers' id='4110730200'>
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test__sync_clock
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test__sync_clock ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_empty_file
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_empty_file ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__ata_erase_security_enabled_unlock_exception
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__ata_erase_security_enabled_unlock_exception ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__ata_erase_security_erase_exec_exception
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__ata_erase_security_erase_exec_exception ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__find_pstore_mount_point
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__find_pstore_mount_point ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__find_pstore_mount_point_no_pstore
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__find_pstore_mount_point_no_pstore ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__get_device_info
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__get_device_info ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__get_md_uuid
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__get_md_uuid ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_linux_raid_member
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_linux_raid_member ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_linux_raid_member_false
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_linux_raid_member_false ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_fail
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_fail ... ok
+ WARNING [ironic_python_agent.extensions.standby] Unable to connect to http://example.org, retrying. Error: Error downloading image: Download of image fake_id failed: Received status code 500 from http://example.org, expected 200. Response body: Oops Response headers: <MagicMock name='get().headers' id='4110645576'>
+ironic_python_agent.tests.unit.test_efi_utils.TestGetEfiBootloaders.test__no_efi_bootloaders
+ironic_python_agent.tests.unit.test_efi_utils.TestGetEfiBootloaders.test__no_efi_bootloaders ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_cache_and_write_image
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_cache_and_write_image ... ok
+ WARNING [ironic_python_agent.extensions.standby] Unable to connect to http://example.org, retrying. Error: Error downloading image: Download of image fake_id failed: Received status code 500 from http://example.org, expected 200. Response body: Oops Response headers: <MagicMock name='get().headers' id='4110645576'>
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.00788569450378418 seconds. Error: Received status code 500 from http://example.org, expected 200. Response body: Oops Response headers: <MagicMock name='get().headers' id='4110645576'>
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_retries
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_retries ... ok
+ironic_python_agent.tests.unit.test_hardware.TestHardwareManagerLoading.test_get_managers
+ironic_python_agent.tests.unit.test_hardware.TestHardwareManagerLoading.test_get_managers ... ok
+ WARNING [ironic_python_agent.extensions.standby] Unable to connect to http://example.org, retrying. Error: 
+ WARNING [ironic_python_agent.extensions.standby] Unable to connect to http://example.org, retrying. Error: Error downloading image: Download of image fake_id failed: Received status code 500 from http://example.org, expected 200. Response body:   Response headers: <Mock name='mock.headers' id='4110873632'>
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_cache_and_write_image_configdirve
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_cache_and_write_image_configdirve ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image ... ok
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.00040435791015625 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 0 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.00040435791015625 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_empty_file_md5
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_empty_file_md5 ... ok
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0021228790283203125 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 1 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.0021228790283203125 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_failed
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_failed ... ok
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.005319833755493164 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 2 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.005319833755493164 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_failed_md5
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_failed_md5 ... ok
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.006103038787841797 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 3 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.006103038787841797 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_md5
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_md5 ... ok
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_softraid_bios
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_softraid_bios WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0067901611328125 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- ... ok
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 4 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.0067901611328125 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_retries_success
+ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_retries_success ... ok
+ WARNING [ironic_python_agent.extensions.image] GRUB2 will be installed for UEFI on efi partition /dev/md/esp using the install command which does not place Secure Boot signed binaries.
+ WARNING [ironic_python_agent.extensions.image] Ignoring GRUB2 boot loader installation failure: Unexpected error while running command.
+Command: grub2-install
+Exit code: 1
+Stdout: ''
+Stderr: 'grub2-install: error: this utility cannot be used for EFI platforms because it does not support UEFI Secure Boot.\n'.
+ WARNING [ironic_python_agent.extensions.image] Ignoring GRUB2 boot loader installation failure: Unexpected error while running command.
+Command: grub2-install
+Exit code: 1
+Stdout: ''
+Stderr: 'grub2-install: error: this utility cannot be used for EFI platforms because it does not support UEFI Secure Boot.\n'.
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestCheckPrereq.test_check_prereq
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestCheckPrereq.test_check_prereq ... ok
+   ERROR [root] Failed Prerequisite check. Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: None
+Stderr: None
+ironic_python_agent.tests.unit.test_hardware.TestHardwareManagerLoading.test_get_managers_detail
+ironic_python_agent.tests.unit.test_hardware.TestHardwareManagerLoading.test_get_managers_detail ... ok
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_softraid_uefi_gpt
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_softraid_uefi_gpt ... ok
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.007382869720458984 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi ... ok
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 5 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.007382869720458984 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.007976293563842773 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 6 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.007976293563842773 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.009249687194824219 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 7 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.009249687194824219 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.009851932525634766 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 8 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.009851932525634766 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.010811567306518555 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestCheckPrereq.test_check_prereq_exception
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestCheckPrereq.test_check_prereq_exception ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image ... ok
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.00039458274841308594 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 0 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.00039458274841308594 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_already_running
+ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_already_running ... ok
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.007089853286743164 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 1 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.007089853286743164 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.011073112487792969 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 2 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.011073112487792969 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [root] Attempted to invoke multipath utilities, but we encountered an error: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'lacking kernel support'
+Stderr: None
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.01509857177734375 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 3 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.01509857177734375 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.019101381301879883 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 4 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.019101381301879883 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0203249454498291 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 5 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.0203249454498291 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_lacking_support
+ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_lacking_support ... ok
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.024245262145996094 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 6 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.024245262145996094 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.03109264373779297 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 7 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.03109264373779297 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [root] Attempted to invoke multipath utilities, but we encountered an error: 
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.03513669967651367 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 8 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.03513669967651367 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.039084434509277344 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_bad_basic_auth_conf_credential
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_bad_basic_auth_conf_credential ... ok
- WARNING [root] Could not determine if /dev/sdfake is aread-only device. Error: 
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_multiple_md5
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_multiple_md5 ... ok
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.00025010108947753906 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 0 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.00025010108947753906 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device_error
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device_error ... ok
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.002458333969116211 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 1 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.002458333969116211 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0031888484954833984 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 2 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.0031888484954833984 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.003889322280883789 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 3 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.003889322280883789 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.004607677459716797 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 4 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.004607677459716797 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
  WARNING [ironic_python_agent.extensions.image] GRUB2 will be installed for UEFI on efi partition /dev/fake1 using the install command which does not place Secure Boot signed binaries.
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.005377769470214844 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 5 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.005377769470214844 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.00608062744140625 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 6 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.00608062744140625 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.006822347640991211 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 7 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.006822347640991211 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_ll_fails
+ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_ll_fails ... ok
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi ... ok
+ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_mpathconf
+ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_mpathconf ... ok
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.000270843505859375 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 0 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.000270843505859375 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.005446672439575195 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 1 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.005446672439575195 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.011322498321533203 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_no_multipath
+ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_no_multipath ... ok
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 2 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.011322498321533203 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.019272565841674805 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 3 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.019272565841674805 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.02330183982849121 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 4 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.02330183982849121 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.027240991592407227 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 5 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.027240991592407227 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.031238555908203125 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 6 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.031238555908203125 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.035245418548583984 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 7 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.035245418548583984 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [root] Attempted to determine if multipath tools were present. Not detected. Error recorded: 
+ WARNING [ironic_python_agent.extensions.image] GRUB2 will be installed for UEFI on efi partition /dev/fake1 using the install command which does not place Secure Boot signed binaries.
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.03928709030151367 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 8 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.03928709030151367 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
  WARNING [root] Path /dev/disk/by-path is inaccessible, /dev/disk/by-path/* version of block device name is unavailable Cause: [Errno 2] No such file or directory: '/dev/disk/by-path'
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0075724124908447266 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 8 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.0075724124908447266 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.008239030838012695 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
  WARNING [root] Device /dev/sda1 is inaccessible, skipping... Error: [Errno 2] No such file or directory: '/dev/sda1'
  WARNING [root] Could not find the SCSI address (HCTL) for device /dev/sda1. Skipping
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.04326152801513672 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
  WARNING [ironic_python_agent.extensions.image] Falling back to fstab entry addition label of UUID. We could not identify which UUID or PARTUUID identifier label should be used, thus UUID will be used.
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_bad_basic_auth_image_info_credential
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_bad_basic_auth_image_info_credential ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_multiple_sha256
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_multiple_sha256 ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device_false
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device_false ... ok
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0027747154235839844 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 0 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.0027747154235839844 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_fstab
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_fstab ... ok
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.005415916442871094 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 1 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.005415916442871094 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.006121635437011719 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 2 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.006121635437011719 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.006788730621337891 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 3 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.006788730621337891 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.007475137710571289 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 4 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.007475137710571289 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.008135080337524414 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 5 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.008135080337524414 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.008843660354614258 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 6 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.008843660354614258 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.009511947631835938 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 7 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.009511947631835938 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.01016855239868164 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 8 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.01016855239868164 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.01085805892944336 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [root] Could not determine if /dev/sdfake1 is aread-only device. Error: 
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device_partition_error
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device_partition_error ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_multiple_sha512
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_multiple_sha512 ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_bad_basic_auth_mixed_credential
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_bad_basic_auth_mixed_credential ... ok
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.00032401084899902344 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 0 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.00032401084899902344 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0015974044799804688 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 1 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.0015974044799804688 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.00234222412109375 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 2 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.00234222412109375 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0030221939086914062 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 3 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.0030221939086914062 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.003695964813232422 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 4 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.003695964813232422 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.004346609115600586 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_unknown_file
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_unknown_file ... ok
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 5 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.004346609115600586 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0066149234771728516 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 6 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.0066149234771728516 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.007296323776245117 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 7 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.007296323776245117 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.007968902587890625 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 8 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.007968902587890625 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.008635759353637695 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_not_found_mpath_config
+ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_not_found_mpath_config ... ok
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0002636909484863281 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 0 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.0002636909484863281 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_with_config
+ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_with_config ... ok
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0081787109375 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 1 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.0081787109375 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.014664888381958008 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 2 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.014664888381958008 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
    ERROR [ironic_python_agent.extensions.image] Installing GRUB2 boot loader to device /dev/fake failed with Unexpected error while running command.
 Command: None
 Exit code: -
 Stdout: 'error'
 Stderr: None.
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device_partition_ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device_partition_ok ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_bad_basic_auth_mixed_credential_second
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_bad_basic_auth_mixed_credential_second ... ok
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.018649578094482422 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 3 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.018649578094482422 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.022654056549072266 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ironic_python_agent.tests.unit.test_hardware.TestProtectedDiskSafetyChecks.test_special_filesystem_guard_enabled_no_results
+ironic_python_agent.tests.unit.test_hardware.TestProtectedDiskSafetyChecks.test_special_filesystem_guard_enabled_no_results ... ok
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 4 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.022654056549072266 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_mount_fails
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_mount_fails ... ok
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.002847909927368164 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3014005600'> Response headers: <MagicMock name='get().headers' id='3014038512'>
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_unknown_file_md5
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_checksum_unknown_file_md5 ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_virtual_media_device_exists
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_virtual_media_device_exists ... ok
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 0 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.002847909927368164 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3014005600'> Response headers: <MagicMock name='get().headers' id='3014038512'>
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.006527900695800781 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3014005600'> Response headers: <MagicMock name='get().headers' id='3014038512'>
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 1 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.006527900695800781 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3014005600'> Response headers: <MagicMock name='get().headers' id='3014038512'>
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0077304840087890625 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3014005600'> Response headers: <MagicMock name='get().headers' id='3014038512'>
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 2 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.0077304840087890625 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3014005600'> Response headers: <MagicMock name='get().headers' id='3014038512'>
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.008867740631103516 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3014005600'> Response headers: <MagicMock name='get().headers' id='3014038512'>
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 3 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.008867740631103516 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3014005600'> Response headers: <MagicMock name='get().headers' id='3014038512'>
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.00988626480102539 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3014005600'> Response headers: <MagicMock name='get().headers' id='3014038512'>
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 4 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.00988626480102539 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3014005600'> Response headers: <MagicMock name='get().headers' id='3014038512'>
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.010908842086791992 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3014005600'> Response headers: <MagicMock name='get().headers' id='3014038512'>
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 5 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.010908842086791992 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3014005600'> Response headers: <MagicMock name='get().headers' id='3014038512'>
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.012020111083984375 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3014005600'> Response headers: <MagicMock name='get().headers' id='3014038512'>
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 6 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.012020111083984375 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3014005600'> Response headers: <MagicMock name='get().headers' id='3014038512'>
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.01310873031616211 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3014005600'> Response headers: <MagicMock name='get().headers' id='3014038512'>
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 7 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.01310873031616211 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3014005600'> Response headers: <MagicMock name='get().headers' id='3014038512'>
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.014163494110107422 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3014005600'> Response headers: <MagicMock name='get().headers' id='3014038512'>
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 8 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.014163494110107422 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3014005600'> Response headers: <MagicMock name='get().headers' id='3014038512'>
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.015231132507324219 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='3014005600'> Response headers: <MagicMock name='get().headers' id='3014038512'>
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_invalid_checksum
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_and_invalid_checksum ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_bad_status
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_bad_status ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_virtual_media_device_exists_no_match
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_virtual_media_device_exists_no_match ... ok
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_mount_fails ...  WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.024809837341308594 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ok
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 5 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.024809837341308594 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.03067636489868164 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 6 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.03067636489868164 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0346531867980957 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 7 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.0346531867980957 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.03867053985595703 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 8 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.03867053985595703 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.04263710975646973 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ironic_python_agent.tests.unit.test_hardware.TestProtectedDiskSafetyChecks.test_special_filesystem_guard_node_indicates_skip
+ironic_python_agent.tests.unit.test_hardware.TestProtectedDiskSafetyChecks.test_special_filesystem_guard_node_indicates_skip ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_bad_basic_auth_mixed_credential
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_bad_basic_auth_mixed_credential ... ok
+ironic_python_agent.tests.unit.test_hardware.TestProtectedDiskSafetyChecks.test_special_filesystem_guard_not_enabled
+ironic_python_agent.tests.unit.test_hardware.TestProtectedDiskSafetyChecks.test_special_filesystem_guard_not_enabled ... ok
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.00032067298889160156 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
  WARNING [ironic_python_agent.extensions.image] GRUB2 will be installed for UEFI on efi partition /dev/fake1 using the install command which does not place Secure Boot signed binaries.
  WARNING [root] Path /dev/disk/by-path is inaccessible, /dev/disk/by-path/* version of block device name is unavailable Cause: [Errno 2] No such file or directory: '/dev/disk/by-path'
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 0 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.00032067298889160156 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
  WARNING [root] Device /dev/sda1 is inaccessible, skipping... Error: [Errno 2] No such file or directory: '/dev/sda1'
  WARNING [root] Could not find the SCSI address (HCTL) for device /dev/sda1. Skipping
  WARNING [ironic_python_agent.extensions.image] Falling back to fstab entry addition label of UUID. We could not identify which UUID or PARTUUID identifier label should be used, thus UUID will be used.
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0018312931060791016 seconds. Error: Received status code 401 from http://example.org, expected 200. Response body: Unauthorized Response headers: <MagicMock name='get().headers' id='3012072216'>
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_fail
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_fail ... ok
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.010346174240112305 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 1 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.010346174240112305 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.013894081115722656 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ironic_python_agent.tests.unit.test_hardware.TestProtectedDiskSafetyChecks.test_special_filesystem_guard_raises
+ironic_python_agent.tests.unit.test_hardware.TestProtectedDiskSafetyChecks.test_special_filesystem_guard_raises ...  WARNING [ironic_python_agent.extensions.standby] Image download failed, 2 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.013894081115722656 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ok
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_no_fstab
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_no_fstab ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_virtual_media_device_path_doesnt_exist
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_virtual_media_device_path_doesnt_exist ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_basic_auth_conf_success
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_basic_auth_conf_success WARNING [ironic_python_agent.extensions.standby] Unable to connect to http://example.org, retrying. Error: Error downloading image: Download of image fake_id failed: Received status code 500 from http://example.org, expected 200. Response body: Oops Response headers: <MagicMock name='get().headers' id='3012534016'>
- ... ok
- WARNING [ironic_python_agent.extensions.standby] Unable to connect to http://example.org, retrying. Error: Error downloading image: Download of image fake_id failed: Received status code 500 from http://example.org, expected 200. Response body: Oops Response headers: <MagicMock name='get().headers' id='3012534016'>
- WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0034542083740234375 seconds. Error: Received status code 500 from http://example.org, expected 200. Response body: Oops Response headers: <MagicMock name='get().headers' id='3012534016'>
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_retries
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_retries ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_apply_configuration
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_apply_configuration ... ok
- WARNING [ironic_python_agent.extensions.standby] Unable to connect to http://example.org, retrying. Error: 
- WARNING [ironic_python_agent.extensions.standby] Unable to connect to http://example.org, retrying. Error: Error downloading image: Download of image fake_id failed: Received status code 500 from http://example.org, expected 200. Response body:   Response headers: <Mock name='mock.headers' id='3012404208'>
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_basic_auth_image_info_success
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_basic_auth_image_info_success ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_retries_success
-ironic_python_agent.tests.unit.extensions.test_standby.TestImageDownload.test_download_image_retries_success ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_apply_configuration_no_delete
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_apply_configuration_no_delete ... ok
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_no_fstab ...  WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.01618361473083496 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ok
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 3 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.01618361473083496 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.022514820098876953 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 4 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.022514820098876953 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.026510000228881836 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 5 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.026510000228881836 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.03047919273376465 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 6 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.03047919273376465 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.03374361991882324 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_with_on_as_number
+ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_with_on_as_number ...  WARNING [ironic_python_agent.extensions.standby] Image download failed, 7 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.03374361991882324 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ok
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.03582310676574707 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 8 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.03582310676574707 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.039449214935302734 seconds. Error: Missing ['user', 'password'] fields from HTTP(S) basic auth config
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_bad_basic_auth_mixed_credential_second
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_bad_basic_auth_mixed_credential_second ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_with_on_as_number_nvme
+ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_with_on_as_number_nvme ... ok
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.002273082733154297 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4102145608'> Response headers: <MagicMock name='get().headers' id='4102135312'>
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 0 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.002273082733154297 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4102145608'> Response headers: <MagicMock name='get().headers' id='4102135312'>
+ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_with_on_as_path
+ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_with_on_as_path ... ok
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.0061872005462646484 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4102145608'> Response headers: <MagicMock name='get().headers' id='4102135312'>
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 1 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.0061872005462646484 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4102145608'> Response headers: <MagicMock name='get().headers' id='4102135312'>
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.009696483612060547 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4102145608'> Response headers: <MagicMock name='get().headers' id='4102135312'>
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 2 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.009696483612060547 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4102145608'> Response headers: <MagicMock name='get().headers' id='4102135312'>
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.010994195938110352 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4102145608'> Response headers: <MagicMock name='get().headers' id='4102135312'>
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 3 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.010994195938110352 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4102145608'> Response headers: <MagicMock name='get().headers' id='4102135312'>
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.012045145034790039 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4102145608'> Response headers: <MagicMock name='get().headers' id='4102135312'>
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 4 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.012045145034790039 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4102145608'> Response headers: <MagicMock name='get().headers' id='4102135312'>
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.013163328170776367 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4102145608'> Response headers: <MagicMock name='get().headers' id='4102135312'>
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 5 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.013163328170776367 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4102145608'> Response headers: <MagicMock name='get().headers' id='4102135312'>
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.016830921173095703 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4102145608'> Response headers: <MagicMock name='get().headers' id='4102135312'>
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 6 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.016830921173095703 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4102145608'> Response headers: <MagicMock name='get().headers' id='4102135312'>
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.01805281639099121 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4102145608'> Response headers: <MagicMock name='get().headers' id='4102135312'>
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_loader
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_loader ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestUpdatenvidiaNicFirmwareSettings.test_update_nvidia_nic_firmware_settings_exception
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestUpdatenvidiaNicFirmwareSettings.test_update_nvidia_nic_firmware_settings_exception ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_clean_steps_exist
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_clean_steps_exist ... ok
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_detect_cna_card
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_detect_cna_card ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_clean_uefi_invalid
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_clean_uefi_invalid ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_proxy
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_proxy ... ok
- WARNING [root] Something went wrong when readlink for interface eth2. Error: fake
-   ERROR [ironic_python_agent.extensions.standby] Image failed to verify against checksum. location: /tmp/tmp9v3mwjpl/fake_id; image ID: fake_id; image checksum: fake-checksum; verification checksum: invalid-checksum
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 7 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.01805281639099121 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4102145608'> Response headers: <MagicMock name='get().headers' id='4102135312'>
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.020079612731933594 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4102145608'> Response headers: <MagicMock name='get().headers' id='4102135312'>
+ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_without_on
+ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_without_on ... ok
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 8 of 9: Error downloading image: Download of image fake_id failed: URL: http://example.org; time: 0.020079612731933594 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4102145608'> Response headers: <MagicMock name='get().headers' id='4102135312'>
+ WARNING [ironic_python_agent.extensions.standby] URL: http://example.org; time: 0.021898746490478516 seconds. Error: Received status code 404 from http://example.org, expected 200. Response body: <MagicMock name='get().text' id='4102145608'> Response headers: <MagicMock name='get().headers' id='4102135312'>
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_bad_status
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_bad_status ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_without_on_wrong_path
+ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_without_on_wrong_path ... ok
  WARNING [ironic_python_agent.extensions.image] Failed to copy grub.cfg file for EFI boot operation. Error copy failed
  WARNING [ironic_python_agent.extensions.image] Failed to copy grub.cfg file for EFI boot operation. Error copy failed
  WARNING [ironic_python_agent.extensions.image] Failed to copy grubenv file. Error: copy failed
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_detect_cna_card_execute_error
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_detect_cna_card_execute_error ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_clean_uefi_nvram
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_clean_uefi_nvram ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_verify_fails
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_verify_fails ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_basic_auth_conf_success
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_basic_auth_conf_success ... ok
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_loader_grubcfg_fails
 ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_loader_grubcfg_fails ... ok
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_detect_cna_card_no_i40e_driver
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_detect_cna_card_no_i40e_driver ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_delete
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_delete ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_delete_not_exists
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_delete_not_exists ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_basic_auth_image_info_success
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_basic_auth_image_info_success ... ok
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_loader_with_grubcfg
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_loader_with_grubcfg ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_proxy
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_proxy ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_modes
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_modes ... ok
+ WARNING [ironic_python_agent.extensions.image] GRUB2 will be installed for UEFI on efi partition /dev/fake1 using the install command which does not place Secure Boot signed binaries.
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_no_loader
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_no_loader ... ok
+   ERROR [ironic_python_agent.extensions.standby] Image failed to verify against checksum. location: /tmp/tmpwp0l0ber/fake_id; image ID: fake_id; image checksum: fake-checksum; verification checksum: invalid-checksum
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_verify_fails
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_download_image_verify_fails ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_modes_exists
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_modes_exists ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_gen_auth_from_image_info_user_pass_none
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_gen_auth_from_image_info_user_pass_none ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_clean_uefi_nvram_defaults
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_clean_uefi_nvram_defaults ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_on
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_on ... ok
+ WARNING [ironic_python_agent.extensions.image] GRUB2 will be installed for UEFI on efi partition /dev/fake1 using the install command which does not place Secure Boot signed binaries.
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_gen_auth_from_image_info_user_pass_success
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_gen_auth_from_image_info_user_pass_success ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_collect_lldp_data
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_collect_lldp_data ... ok
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_preserve_failure
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_preserve_failure ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_gen_auth_from_oslo_conf_user_pass_none
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_gen_auth_from_oslo_conf_user_pass_none ... ok
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_disable_embedded_lldp_agent_in_cna_card
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_disable_embedded_lldp_agent_in_cna_card ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_owner
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_owner ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_gen_auth_from_oslo_conf_user_pass_success
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_gen_auth_from_oslo_conf_user_pass_success ... ok
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_loader_with_grubcfg
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_loader_with_grubcfg ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_owner_and_group
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_owner_and_group ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_get_partition_uuids
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_get_partition_uuids ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_collect_lldp_data_decode_exception
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_collect_lldp_data_decode_exception ... ok
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_disable_embedded_lldp_agent_write_error
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_disable_embedded_lldp_agent_write_error ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_collect_lldp_data_netutils_exception
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_collect_lldp_data_netutils_exception ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_image_location
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_image_location ... ok
  WARNING [ironic_python_agent.extensions.image] GRUB2 will be installed for UEFI on efi partition /dev/fake1 using the install command which does not place Secure Boot signed binaries.
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_url
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_url ... ok
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_preserve_failure2
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_preserve_failure2 ... ok
    ERROR [ironic_python_agent.extensions.standby] Failed to sync hardware clock: Unexpected error while running command.
 Command: None
 Exit code: -
@@ -7916,14 +8122,12 @@
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/standby.py", line 1045, in _run_shutdown_command
     raise errors.SystemRebootError(e.exit_code, e.stdout, e.stderr)
 ironic_python_agent.errors.SystemRebootError: Error rebooting system: Reboot script failed with exit code None. stdout: None. stderr: None.
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_no_loader
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_no_loader ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_url_formatting
+ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_url_formatting ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_power_off
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_power_off ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration ... ok
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_disable_embedded_lldp_agent_wrong_dir_path
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_disable_embedded_lldp_agent_wrong_dir_path ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_content_and_deleted
+ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_content_and_deleted ... ok
    ERROR [ironic_python_agent.utils] Failed to sync with ntp server: 192.168.1.1: Unexpected error while running command.
 Command: None
 Exit code: -
@@ -7934,6 +8138,17 @@
 Exit code: -
 Stdout: None
 Stderr: None
+ WARNING [ironic_python_agent.extensions.image] GRUB2 will be installed for UEFI on efi partition /dev/fake1 using the install command which does not place Secure Boot signed binaries.
+   ERROR [ironic_python_agent.extensions.image] Installing GRUB2 boot loader to device /dev/fake failed with Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'error'
+Stderr: None.
+   ERROR [ironic_python_agent.extensions.image] Umounting efi system partition failed. Attempted 3 times. Error: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'error'
+Stderr: None
    ERROR [root] Command failed: power_off, error: Error syncing system clock: Failed to sync hardware clock: Command execution failed: Failed to sync with ntp server: 192.168.1.1: Unexpected error while running command.
 Command: None
 Exit code: -
@@ -7987,21 +8202,30 @@
 Exit code: -
 Stdout: None
 Stderr: None
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_device_handling_failures
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_device_handling_failures ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_missing_path
+ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_missing_path ... ok
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_umount_fails
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_umount_fails ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_power_off_with_ntp_server
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_power_off_with_ntp_server ... ok
- WARNING [ironic_python_agent.extensions.image] GRUB2 will be installed for UEFI on efi partition /dev/fake1 using the install command which does not place Secure Boot signed binaries.
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_evaluate_hardware_support_no_cna_card_detected
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_evaluate_hardware_support_no_cna_card_detected ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_device_handling_failures_raid5
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_device_handling_failures_raid5 ... ok
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_preserve_failure
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_preserve_failure ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_no_directories
+ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_no_directories ... ok
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__is_bootloader_loaded
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__is_bootloader_loaded ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_numeric_fields
+ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_numeric_fields ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_image
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_image ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_device_handling_failures_raid6
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_device_handling_failures_raid6 ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_root_without_on
+ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_root_without_on ... ok
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__is_bootloader_loaded_empty
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__is_bootloader_loaded_empty ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_unknown_fields
+ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_unknown_fields ... ok
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__is_bootloader_loaded_not_bootable
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__is_bootloader_loaded_not_bootable ... ok
+ironic_python_agent.tests.unit.test_inspector.TestNormalizeMac.test_correct_mac
+ironic_python_agent.tests.unit.test_inspector.TestNormalizeMac.test_correct_mac ... ok
    ERROR [root] Command failed: prepare_image, error: Don't call ironic_lib.utils.execute() / processutils.execute() or similar functions in tests!
 Traceback (most recent call last):
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
@@ -8016,86 +8240,139 @@
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/tests/unit/base.py", line 89, in do_not_call
     raise Exception(
 Exception: Don't call ironic_lib.utils.execute() / processutils.execute() or similar functions in tests!
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_evaluate_hardware_support_with_collect_lldp_disabled
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_evaluate_hardware_support_with_collect_lldp_disabled ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_efi
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_efi ... ok
- WARNING [ironic_python_agent.extensions.image] GRUB2 will be installed for UEFI on efi partition /dev/fake1 using the install command which does not place Secure Boot signed binaries.
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_image_bad_partition
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_image_bad_partition ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_empty_target_raid_config
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_empty_target_raid_config ... ok
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_preserve_failure2
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_partition_image_with_preserve_failure2 ... ok
+ironic_python_agent.tests.unit.test_inspector.TestNormalizeMac.test_pxelinux_mac
+ironic_python_agent.tests.unit.test_inspector.TestNormalizeMac.test_pxelinux_mac ... ok
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__is_bootloader_loaded_uefi_mode
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__is_bootloader_loaded_uefi_mode ... ok
+ironic_python_agent.tests.unit.test_inspector.TestWaitForDhcp.test_all
+ironic_python_agent.tests.unit.test_inspector.TestWaitForDhcp.test_all ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_image_no_configdrive
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_image_no_configdrive ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_failure_with_nvme
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_failure_with_nvme ... ok
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_evaluate_hardware_support_with_collect_lldp_enabled
-ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_evaluate_hardware_support_with_collect_lldp_enabled ... ok
- WARNING [ironic_python_agent.extensions.image] GRUB2 will be installed for UEFI on efi partition /dev/fake1 using the install command which does not place Secure Boot signed binaries.
-   ERROR [ironic_python_agent.extensions.image] Installing GRUB2 boot loader to device /dev/fake failed with Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'error'
-Stderr: None.
-   ERROR [ironic_python_agent.extensions.image] Umounting efi system partition failed. Attempted 3 times. Error: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'error'
-Stderr: None
+ WARNING [ironic_python_agent.extensions.image] Boot mode mismatch: target boot mode is bios, current boot mode is uefi. Installing boot loader may fail or work incorrectly.
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__uefi_bootloader_find_partition
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__uefi_bootloader_find_partition ... ok
+ironic_python_agent.tests.unit.test_inspector.TestWaitForDhcp.test_boot_only
+ironic_python_agent.tests.unit.test_inspector.TestWaitForDhcp.test_boot_only ... ok
+ WARNING [ironic_python_agent.extensions.image] Boot mode mismatch: target boot mode is bios, current boot mode is uefi. Installing boot loader may fail or work incorrectly.
  WARNING [ironic_python_agent.extensions.standby] Failed to call get_disk_identifier: Unable to obtain the root_uuid parameter: The hexdump tool may be missing in IPA: 
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__uefi_bootloader_given_partition
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__uefi_bootloader_given_partition ... ok
+ironic_python_agent.tests.unit.test_inspector.TestWaitForDhcp.test_disabled
+ironic_python_agent.tests.unit.test_inspector.TestWaitForDhcp.test_disabled ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_image_no_hexdump
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_image_no_hexdump ... ok
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_umount_fails
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__install_grub2_uefi_umount_fails ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_force_gpt_with_disk_label
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_force_gpt_with_disk_label ... ok
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__is_bootloader_loaded
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__is_bootloader_loaded ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_invalid_hints
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_invalid_hints ... ok
- WARNING [root] Path /dev/disk/by-path is inaccessible, /dev/disk/by-path/* version of block device name is unavailable Cause: [Errno 2] No such file or directory: '/dev/disk/by-path'
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test__get_ironic_api_version_already_set
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test__get_ironic_api_version_already_set ... ok
+ WARNING [ironic_python_agent.extensions.image] Boot mode mismatch: target boot mode is bios, current boot mode is uefi. Installing boot loader may fail or work incorrectly.
+   ERROR [ironic_python_agent.ironic_api_client] An error occurred while attempting to discover the available Ironic API versions, falling back to using version 1.31
+Traceback (most recent call last):
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/ironic_api_client.py", line 130, in _get_ironic_api_version
+    response = self._request('GET', '/')
+               ^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/ironic_api_client.py", line 90, in _request
+    resp = self.session.request(method,
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "<string>", line 3, in request
+  File "/usr/lib/python3.12/unittest/mock.py", line 1139, in __call__
+    return self._mock_call(*args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.12/unittest/mock.py", line 1143, in _mock_call
+    return self._execute_mock_call(*args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.12/unittest/mock.py", line 1198, in _execute_mock_call
+    raise effect
+Exception: Boom
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__uefi_bootloader_with_entry_removal
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__uefi_bootloader_with_entry_removal ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test__get_ironic_api_version_error
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test__get_ironic_api_version_error ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_image_raw_and_stream_false
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_image_raw_and_stream_false ... ok
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__is_bootloader_loaded_empty
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__is_bootloader_loaded_empty ... ok
- WARNING [root] Device /dev/sda is inaccessible, skipping... Error: [Errno 2] No such file or directory: '/dev/sda'
- WARNING [root] Could not find the SCSI address (HCTL) for device /dev/sda. Skipping
- WARNING [root] Can't find field vendor for device sda in device class block
- WARNING [root] Device /dev/sdb is inaccessible, skipping... Error: [Errno 2] No such file or directory: '/dev/sdb'
- WARNING [root] Could not find the SCSI address (HCTL) for device /dev/sdb. Skipping
- WARNING [root] Can't find field vendor for device sdb in device class block
- WARNING [root] Device /dev/md0 is inaccessible, skipping... Error: [Errno 2] No such file or directory: '/dev/md0'
- WARNING [root] Could not find the SCSI address (HCTL) for device /dev/md0. Skipping
- WARNING [root] Can't find field vendor for device md0 in device class block
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__is_bootloader_loaded_not_bootable
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__is_bootloader_loaded_not_bootable ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_invalid_raid_config
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_invalid_raid_config ... ok
+ WARNING [ironic_python_agent.extensions.image] Boot mode mismatch: target boot mode is bios, current boot mode is uefi. Installing boot loader may fail or work incorrectly.
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test__get_ironic_api_version_fresh
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test__get_ironic_api_version_fresh ... ok
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__uefi_bootloader_with_entry_removal_lenovo
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__uefi_bootloader_with_entry_removal_lenovo ... ok
+ WARNING [ironic_python_agent.extensions.image] Boot mode mismatch: target boot mode is bios, current boot mode is uefi. Installing boot loader may fail or work incorrectly.
+ WARNING [ironic_python_agent.extensions.image] efibootmgr is not available in the ramdisk
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test__get_ironic_api_version_set_via_conf
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test__get_ironic_api_version_set_via_conf   ERROR [ironic_python_agent.extensions.image] Error setting up bootloader. Error 
+ ... ok
+   ERROR [root] Command failed: install_bootloader, error: 
+Traceback (most recent call last):
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
+    result = self.execute_method(**self.command_params)
+             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/image.py", line 721, in install_bootloader
+    _install_grub2(device,
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/image.py", line 167, in _install_grub2
+    root_partition = partition_utils.get_partition(device, uuid=root_uuid)
+                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/partition_utils.py", line 615, in get_partition
+    ipa_utils.rescan_device(device)
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/utils.py", line 921, in rescan_device
+    execute('partx', '-av', device, attempts=3, delay_on_retry=True)
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/utils.py", line 77, in execute
+    return ironic_utils.execute(*cmd, **kwargs)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "<string>", line 3, in do_not_call
+  File "/usr/lib/python3.12/unittest/mock.py", line 1139, in __call__
+    return self._mock_call(*args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.12/unittest/mock.py", line 1143, in _mock_call
+    return self._execute_mock_call(*args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.12/unittest/mock.py", line 1198, in _execute_mock_call
+    raise effect
+FileNotFoundError
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test_install_bootloader_failure
+ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test_install_bootloader_failure ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_image_raw_stream_true
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_image_raw_stream_true ... ok
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__is_bootloader_loaded_uefi_mode
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__is_bootloader_loaded_uefi_mode ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_max_is_first_logical
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_max_is_first_logical ... ok
+   ERROR [ironic_python_agent.extensions.poll] Node lookup data can only be set when the Ironic Python Agent is running in standalone mode.
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup ... ok
+ironic_python_agent.tests.unit.extensions.test_poll.TestPollExtension.test_get_hardware_info_success
+ironic_python_agent.tests.unit.extensions.test_poll.TestPollExtension.test_get_hardware_info_success ... ok
+ironic_python_agent.tests.unit.extensions.test_poll.TestPollExtension.test_set_node_info_not_standalone
+ironic_python_agent.tests.unit.extensions.test_poll.TestPollExtension.test_set_node_info_not_standalone ... ok
+ironic_python_agent.tests.unit.extensions.test_poll.TestPollExtension.test_set_node_info_success
+ironic_python_agent.tests.unit.extensions.test_poll.TestPollExtension.test_set_node_info_success ... ok
+ WARNING [ironic_python_agent.ironic_api_client] Got invalid node data in response to query for node with addresses '00:0c:29:8c:11:b1,00:0c:29:8c:11:b2' from http://agent-api.ironic.example.org: {'node_node': 'also_not_node'}
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_bad_response_body
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_bad_response_body ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_partition_image
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_partition_image ... ok
- WARNING [ironic_python_agent.extensions.image] Boot mode mismatch: target boot mode is bios, current boot mode is uefi. Installing boot loader may fail or work incorrectly.
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__uefi_bootloader_find_partition
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__uefi_bootloader_find_partition ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_file
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_file ... ok
+ WARNING [ironic_python_agent.ironic_api_client] Failed looking up node with addresses '00:0c:29:8c:11:b1,00:0c:29:8c:11:b2' at http://agent-api.ironic.example.org. Check if inspection has completed? Error 400: {"node": {"uuid": "deadbeef-dabb-ad00-b105-f00d00bab10c"}}
+   ERROR [root] Failed to move file: /firmware_images/fw1.bin, 
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_bad_response_code
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_bad_response_code ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_file_not_found
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_file_not_found ... ok
+ WARNING [ironic_python_agent.ironic_api_client] Got invalid node data in response to query for node with addresses '00:0c:29:8c:11:b1,00:0c:29:8c:11:b2' from http://agent-api.ironic.example.org: {'heartbeat_timeout': 300}
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_partition_image_raw_and_stream_false
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_partition_image_raw_and_stream_false ... ok
- WARNING [ironic_python_agent.extensions.image] Boot mode mismatch: target boot mode is bios, current boot mode is uefi. Installing boot loader may fail or work incorrectly.
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__uefi_bootloader_given_partition
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__uefi_bootloader_given_partition ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_mismatching_hints
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_mismatching_hints ... ok
-ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test__wait_for_interface
-ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test__wait_for_interface ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_bad_response_data
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_bad_response_data ... ok
+ WARNING [ironic_python_agent.ironic_api_client] Got invalid heartbeat from the API: {'node': {'uuid': 'deadbeef-dabb-ad00-b105-f00d00bab10c'}}
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_http
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_http ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_no_heartbeat_timeout
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_no_heartbeat_timeout ... ok
+   ERROR [root] Failed to open URL data: HTTP Error 500: Internal Error
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_http_err
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_http_err ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_partition_image_raw_stream_true
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_partition_image_raw_stream_true ... ok
- WARNING [ironic_python_agent.extensions.image] Boot mode mismatch: target boot mode is bios, current boot mode is uefi. Installing boot loader may fail or work incorrectly.
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_prepare_partition_image_raw_stream_true   ERROR [root] Failed to open URL data: <urlopen error URL error>
+ ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_http_url_err
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_http_url_err ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_node_locked
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_node_locked ... ok
    ERROR [ironic_python_agent.extensions.standby] Failed to sync hardware clock: Unexpected error while running command.
 Command: None
 Exit code: -
@@ -8146,286 +8423,224 @@
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/standby.py", line 1045, in _run_shutdown_command
     raise errors.SystemRebootError(e.exit_code, e.stdout, e.stderr)
 ironic_python_agent.errors.SystemRebootError: Error rebooting system: Reboot script failed with exit code None. stdout: None. stderr: None.
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__uefi_bootloader_with_entry_removal
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__uefi_bootloader_with_entry_removal ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_no_max
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_no_max ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_run_image
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_run_image ... ok
-ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test__wait_for_interface_expired
-ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test__wait_for_interface_expired ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_https
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_https ... ok
    ERROR [ironic_python_agent.extensions.standby] Failed to sync hardware clock: Unexpected error while running command.
 Command: None
 Exit code: -
 Stdout: None
 Stderr: None
- WARNING [ironic_python_agent.extensions.image] Boot mode mismatch: target boot mode is bios, current boot mode is uefi. Installing boot loader may fail or work incorrectly.
    ERROR [ironic_python_agent.extensions.standby] Flushing file system buffers failed. Error: Unexpected error while running command.
 Command: None
 Exit code: -
 Stdout: None
 Stderr: None
- WARNING [ironic_python_agent.extensions.standby] Failed to sync file system buffers: Command execution failed: Flushing file system buffers failed. Error: Unexpected error while running command.
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_transient_exceptions
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_transient_exceptions WARNING [ironic_python_agent.extensions.standby] Failed to sync file system buffers: Command execution failed: Flushing file system buffers failed. Error: Unexpected error while running command.
 Command: None
 Exit code: -
 Stdout: None
 Stderr: None
+ ... ok
  WARNING [ironic_python_agent.extensions.standby] reboot command failed with error Unexpected error while running command.
 Command: None
 Exit code: -
 Stdout: None
 Stderr: None, falling back to sysrq-trigger
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_partitions_detected
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_partitions_detected ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_run_shutdown_command_fails
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_run_shutdown_command_fails ... ok
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__uefi_bootloader_with_entry_removal_lenovo
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test__uefi_bootloader_with_entry_removal_lenovo ... ok
- WARNING [ironic_python_agent.extensions.image] Boot mode mismatch: target boot mode is bios, current boot mode is uefi. Installing boot loader may fail or work incorrectly.
- WARNING [ironic_python_agent.extensions.image] efibootmgr is not available in the ramdisk
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_run_shutdown_command_invalid
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_run_shutdown_command_invalid ... ok
-   ERROR [ironic_python_agent.extensions.image] Error setting up bootloader. Error 
-   ERROR [root] Command failed: foo_command, error: command execution failed
-Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
-    result = self.execute_method(**self.command_params)
-             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/tests/unit/test_agent.py", line 44, in foo_execute
-    raise EXPECTED_ERROR
-RuntimeError: command execution failed
-   ERROR [root] Command failed: install_bootloader, error: 
-Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
-    result = self.execute_method(**self.command_params)
-             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/image.py", line 721, in install_bootloader
-    _install_grub2(device,
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/image.py", line 167, in _install_grub2
-    root_partition = partition_utils.get_partition(device, uuid=root_uuid)
-                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/partition_utils.py", line 615, in get_partition
-    ipa_utils.rescan_device(device)
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/utils.py", line 921, in rescan_device
-    execute('partx', '-av', device, attempts=3, delay_on_retry=True)
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/utils.py", line 77, in execute
-    return ironic_utils.execute(*cmd, **kwargs)
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "<string>", line 3, in do_not_call
-  File "/usr/lib/python3.12/unittest/mock.py", line 1139, in __call__
-    return self._mock_call(*args, **kwargs)
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.12/unittest/mock.py", line 1143, in _mock_call
-    return self._execute_mock_call(*args, **kwargs)
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.12/unittest/mock.py", line 1198, in _execute_mock_call
-    raise effect
-FileNotFoundError
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_raid_5
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_raid_5 ... ok
-ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_async_command_failure
-ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_async_command_failure ... ok
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test_install_bootloader_failure
-ironic_python_agent.tests.unit.extensions.test_image.TestImageExtension.test_install_bootloader_failure ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_unknown_exception
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_unknown_exception ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_run_shutdown_command_valid
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_run_shutdown_command_valid ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_invalid_url_scheme
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_invalid_url_scheme ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_unknown_exception_fallback
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_unknown_exception_fallback ... ok
  WARNING [ironic_python_agent.extensions.standby] poweroff command failed with error Unexpected error while running command.
 Command: None
 Exit code: -
 Stdout: ''
 Stderr: None, falling back to sysrq-trigger
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_raid_6
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_raid_6 ... ok
-ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step
-ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_with_uuid
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_with_uuid ... ok
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_run_shutdown_command_valid_poweroff_sysrq
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_run_shutdown_command_valid_poweroff_sysrq ... ok
-ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_async_command_success
-ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_async_command_success ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_get_agent_url_ipv4
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_get_agent_url_ipv4 ... ok
+   ERROR [root] Mismatch provided checksum a94e683ea16d9ae44768f0a65942234d for image http://10.10.10.10/firmware_images/fw1.bin
  WARNING [ironic_python_agent.extensions.standby] reboot command has been ignored, falling back to sysrq-trigger
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_skip_list_existing_device_does_not_match
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_skip_list_existing_device_does_not_match ... ok
-   ERROR [root] Unexpected exception performing service step erase_devices. RuntimeError: boom
-Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/service.py", line 77, in execute_service_step
-    result = hardware.dispatch_to_managers(step['step'], node, ports,
-             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "<string>", line 3, in dispatch_to_managers
-  File "/usr/lib/python3.12/unittest/mock.py", line 1139, in __call__
-    return self._mock_call(*args, **kwargs)
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.12/unittest/mock.py", line 1143, in _mock_call
-    return self._execute_mock_call(*args, **kwargs)
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.12/unittest/mock.py", line 1198, in _execute_mock_call
-    raise effect
-RuntimeError: boom
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_run_shutdown_command_valid_reboot_sysrq
 ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_run_shutdown_command_valid_reboot_sysrq ... ok
-   ERROR [root] Command failed: execute_service_step, error: Service step failed: Unexpected exception performing service step erase_devices. RuntimeError: boom
-Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/service.py", line 77, in execute_service_step
-    result = hardware.dispatch_to_managers(step['step'], node, ports,
-             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "<string>", line 3, in dispatch_to_managers
-  File "/usr/lib/python3.12/unittest/mock.py", line 1139, in __call__
-    return self._mock_call(*args, **kwargs)
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.12/unittest/mock.py", line 1143, in _mock_call
-    return self._execute_mock_call(*args, **kwargs)
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.12/unittest/mock.py", line 1198, in _execute_mock_call
-    raise effect
-RuntimeError: boom
-
-During handling of the above exception, another exception occurred:
-
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_get_agent_url_ipv6
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_get_agent_url_ipv6 ... ok
+ironic_python_agent.tests.unit.test_agent.TestAgentStandalone.test_run
+ironic_python_agent.tests.unit.test_agent.TestAgentStandalone.test_run ... ok
+   ERROR [root] The provided psid MT_0000000227 does not match the image psid MT_0000000228
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_get_agent_url_protocol
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_get_agent_url_protocol ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_mismatch_checksum
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_mismatch_checksum ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_mismatch_component_flavor
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_mismatch_component_flavor ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_409_status_code
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_409_status_code ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_agent_version_unsupported
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_agent_version_unsupported ... ok
+   ERROR [root] The provided firmware version 20.34.1012 does not match image firmware version 20.35.1012
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_mismatch_fw_version
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_mismatch_fw_version ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_error_format_1
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_error_format_1 ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNics.test_nvidia_nics
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNics.test_nvidia_nics ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_error_format_2
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_error_format_2 ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_stream_raw_image_onto_device
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_stream_raw_image_onto_device ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicsConfig.test_create_settings_map
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicsConfig.test_create_settings_map ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_error_format_3
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_error_format_3 ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_invalid_status_code
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_invalid_status_code ... ok
+   ERROR [root] duplicate settings for device ID 1017 
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicsConfig.test_create_settings_map_duplicate_device_id
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicsConfig.test_create_settings_map_duplicate_device_id ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_requests_connection_error
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_requests_connection_error ... ok
+   ERROR [root] There is no deviceID provided for this settings
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicsConfig.test_create_settings_map_invalid_firmware_settings_config
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicsConfig.test_create_settings_map_invalid_firmware_settings_config ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_requests_exception
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_requests_exception ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicsConfig.test_prepare_nvidia_nic_config
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicsConfig.test_prepare_nvidia_nic_config ... ok
+ WARNING [ironic_python_agent.ironic_api_client] Connection error when accessing 2001:db8::1/v1/heartbeat/meow, trying the next URL. Error: 
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_requests_several_urls
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_requests_several_urls ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestUpdateNvidiaNicFirmwareImage.test_update_nvidia_nic_firmware_image_exception
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestUpdateNvidiaNicFirmwareImage.test_update_nvidia_nic_firmware_image_exception ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_lookup_node
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_lookup_node ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_lookup_node_retries
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_lookup_node_retries ... ok
+ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test__wait_for_interface
+ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test__wait_for_interface ... ok
+ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test__wait_for_interface_expired
+ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test__wait_for_interface_expired ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_lookup_timeout
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_lookup_timeout ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_successful_heartbeat
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_successful_heartbeat ... ok
+   ERROR [root] Command failed: foo_command, error: command execution failed
 Traceback (most recent call last):
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
     result = self.execute_method(**self.command_params)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/service.py", line 88, in execute_service_step
-    raise errors.ServicingError(msg)
-ironic_python_agent.errors.ServicingError: Service step failed: Unexpected exception performing service step erase_devices. RuntimeError: boom
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/tests/unit/test_agent.py", line 44, in foo_execute
+    raise EXPECTED_ERROR
+RuntimeError: command execution failed
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_successful_heartbeat_ip6
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_successful_heartbeat_ip6 ... ok
+ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_async_command_failure
+ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_async_command_failure ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_successful_heartbeat_with_token
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_successful_heartbeat_with_token ... ok
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_successful_heartbeat_with_verify_ca
+ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_successful_heartbeat_with_verify_ca ... ok
+ WARNING [ironic_python_agent.numa_inspector] Failed to get some NUMA information (Error in NUMA node data format: An unexpected error occurred. Please try back later.)
+ironic_python_agent.tests.unit.test_numa_inspector.TestCollectNumaTopologyInfo.test_collect_failure
+ironic_python_agent.tests.unit.test_numa_inspector.TestCollectNumaTopologyInfo.test_collect_failure ... ok
+ WARNING [ironic_python_agent.numa_inspector] Failed to get some NUMA information (Error in NUMA node data format: An unexpected error occurred. Please try back later.)
+ironic_python_agent.tests.unit.test_numa_inspector.TestCollectNumaTopologyInfo.test_collect_no_nics_dirs
+ironic_python_agent.tests.unit.test_numa_inspector.TestCollectNumaTopologyInfo.test_collect_no_nics_dirs ... ok
+ WARNING [ironic_python_agent.numa_inspector] Failed to get list of NUMA nodes, NUMA node path does not exist: /sys/devices/system/node/
+ironic_python_agent.tests.unit.test_numa_inspector.TestCollectNumaTopologyInfo.test_collect_no_numa_dirs
+ironic_python_agent.tests.unit.test_numa_inspector.TestCollectNumaTopologyInfo.test_collect_no_numa_dirs ... ok
+ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_async_command_success
+ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_async_command_success ... ok
+ironic_python_agent.tests.unit.test_numa_inspector.TestCollectNumaTopologyInfo.test_collect_success
+ironic_python_agent.tests.unit.test_numa_inspector.TestCollectNumaTopologyInfo.test_collect_success ... ok
+   ERROR [root] Encountered issue attempting to validate the supplied configuration drive. Error: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+ WARNING [ironic_lib.utils] Failed to unlink /tmp/tmpe1_ayxia/tmp3tltoeay, error: [Errno 21] Is a directory: '/tmp/tmpe1_ayxia/tmp3tltoeay'
+ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__does_config_drive_failed
+ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__does_config_drive_failed ... ok
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_get_node_uuid
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_get_node_uuid ... ok
-ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_exception
-ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_exception ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_with_complete_skip_list
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_with_complete_skip_list ... ok
-   ERROR [root] Error performing service step erase_devices
-Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/service.py", line 77, in execute_service_step
-    result = hardware.dispatch_to_managers(step['step'], node, ports,
-             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "<string>", line 3, in dispatch_to_managers
-  File "/usr/lib/python3.12/unittest/mock.py", line 1139, in __call__
-    return self._mock_call(*args, **kwargs)
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.12/unittest/mock.py", line 1143, in _mock_call
-    return self._execute_mock_call(*args, **kwargs)
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.12/unittest/mock.py", line 1198, in _execute_mock_call
-    raise effect
-ironic_python_agent.errors.BlockDeviceError: Block device caused unknown error: I'm a teapot
-   ERROR [root] Command failed: execute_service_step, error: Block device caused unknown error: I'm a teapot
-Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
-    result = self.execute_method(**self.command_params)
-             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/service.py", line 77, in execute_service_step
-    result = hardware.dispatch_to_managers(step['step'], node, ports,
-             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "<string>", line 3, in dispatch_to_managers
-  File "/usr/lib/python3.12/unittest/mock.py", line 1139, in __call__
-    return self._mock_call(*args, **kwargs)
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.12/unittest/mock.py", line 1143, in _mock_call
-    return self._execute_mock_call(*args, **kwargs)
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.12/unittest/mock.py", line 1198, in _execute_mock_call
-    raise effect
-ironic_python_agent.errors.BlockDeviceError: Block device caused unknown error: I'm a teapot
-ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_fail
-ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_fail ... ok
+ WARNING [ironic_lib.utils] Failed to unlink /tmp/tmp4r25dbu6/tmpfr_p9_q9, error: [Errno 21] Is a directory: '/tmp/tmp4r25dbu6/tmpfr_p9_q9'
+ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__does_config_drive_work
+ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__does_config_drive_work ... ok
+ WARNING [ironic_lib.utils] Failed to unlink /tmp/tmpdzchke7q/tmp2tzrxqmv, error: [Errno 21] Is a directory: '/tmp/tmpdzchke7q/tmp2tzrxqmv'
+ WARNING [ironic_lib.utils] Failed to unlink /tmp/tmpdzchke7q/tmpk597z7im, error: [Errno 21] Is a directory: '/tmp/tmpdzchke7q/tmpk597z7im'
+ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__try_build_fat32_config_drive
+ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__try_build_fat32_config_drive ... ok
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_get_node_uuid_invalid_node
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_get_node_uuid_invalid_node ... ok
-   ERROR [root] Malformed service_step, no "step" key: {}
-   ERROR [root] Command failed: execute_service_step, error: Malformed service_step, no "step" key: {}
-Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/base.py", line 174, in run
-    result = self.execute_method(**self.command_params)
-             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/extensions/service.py", line 74, in execute_service_step
-    raise ValueError(msg)
-ValueError: Malformed service_step, no "step" key: {}
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_stream_raw_image_onto_device
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_stream_raw_image_onto_device ... ok
-ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_no_step
-ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_no_step ... ok
+   ERROR [root] We were unable to make a new filesystem for the configuration drive. Error: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+ WARNING [ironic_lib.utils] Failed to unlink /tmp/tmpek8wakdd/tmpc52b0xpw, error: [Errno 21] Is a directory: '/tmp/tmpek8wakdd/tmpc52b0xpw'
+ WARNING [ironic_lib.utils] Failed to unlink /tmp/tmpek8wakdd/tmpxhfvc6wd, error: [Errno 21] Is a directory: '/tmp/tmpek8wakdd/tmpxhfvc6wd'
+ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__try_build_fat32_config_drive_fails_once_invalid
+ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__try_build_fat32_config_drive_fails_once_invalid ... ok
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_get_node_uuid_unassociated
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_get_node_uuid_unassociated ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_with_hints
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_with_hints ... ok
-ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_tuple_result
-ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_tuple_result ... ok
-   ERROR [root] Clean version mismatch for command execute_service_step
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_with_nvme
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_with_nvme ... ok
-ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_version_mismatch
-ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_version_mismatch ... ok
-ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_get_route_source_indexerror
-ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_get_route_source_indexerror ... ok
- WARNING [root] Failed to remove partitions on /dev/sda: Unexpected error while running command.
+ WARNING [root] We were unable to examine the configuration drive, bypassing. Error: Unexpected error while running command.
 Command: None
 Exit code: -
-Stdout: 'No md superblock detected'
+Stdout: 'boom'
 Stderr: None
- WARNING [root] Failed to remove partitions on /dev/sdb: Unexpected error while running command.
+ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__try_build_fat32_config_drive_graceful_fail
+ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__try_build_fat32_config_drive_graceful_fail ... ok
+ironic_python_agent.tests.unit.test_partition_utils.TestGetPartition.test
+ironic_python_agent.tests.unit.test_partition_utils.TestGetPartition.test ... ok
+   ERROR [root] Finding the partition with UUID 11111111-2222-3333-4444-555555555555 on device /dev/fake failed with Unexpected error while running command.
 Command: None
 Exit code: -
-Stdout: 'No md superblock detected'
+Stdout: 'boom'
 Stderr: None
-ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_with_args
-ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_execute_service_step_with_args ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_delete_configuration
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_delete_configuration ... ok
-ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_get_service_steps
-ironic_python_agent.tests.unit.extensions.test_service.TestServiceExtension.test_get_service_steps ... ok
-   ERROR [root] Unable to clean all softraid correctly. Remaining ['/dev/md0']
+ironic_python_agent.tests.unit.test_partition_utils.TestGetPartition.test_command_fail
+ironic_python_agent.tests.unit.test_partition_utils.TestGetPartition.test_command_fail ... ok
+ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_get_route_source_indexerror
+ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_get_route_source_indexerror ... ok
+ironic_python_agent.tests.unit.test_partition_utils.TestGetPartition.test_fallback_partuuid
+ironic_python_agent.tests.unit.test_partition_utils.TestGetPartition.test_fallback_partuuid ... ok
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_get_route_source_ipv4
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_get_route_source_ipv4 ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_delete_configuration_failure_blocks_remaining
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_delete_configuration_failure_blocks_remaining ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestCheckPrereq.test_check_prereq
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestCheckPrereq.test_check_prereq ... ok
-   ERROR [root] Failed Prerequisite check. Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: None
-Stderr: None
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestCheckPrereq.test_check_prereq_exception
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestCheckPrereq.test_check_prereq_exception ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_delete_configuration_partition
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_delete_configuration_partition ... ok
+ironic_python_agent.tests.unit.test_partition_utils.TestGetPartition.test_label
+ironic_python_agent.tests.unit.test_partition_utils.TestGetPartition.test_label ... ok
+   ERROR [root] No partition with UUID 11111111-2222-3333-4444-555555555555 found on device /dev/fake
+ironic_python_agent.tests.unit.test_partition_utils.TestGetPartition.test_no_device_found
+ironic_python_agent.tests.unit.test_partition_utils.TestGetPartition.test_no_device_found ... ok
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_get_route_source_ipv6
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_get_route_source_ipv6 ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_file
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_file ... ok
- WARNING [root] RAID device /dev/md1 will not be deleted
- WARNING [root] Software RAID device /dev/md1 is not going to be deleted as its volume name - small - is on the skip list
- WARNING [root] Software RAID device /dev/md1 was not deleted
- WARNING [root] Holder disk /dev/sda contains logical disk on the skip list. Deleting just partitions: ['1']
- WARNING [root] Holder disk /dev/sdb contains logical disk on the skip list. Deleting just partitions: ['1']
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_delete_configuration_skip_list
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_delete_configuration_skip_list ... ok
+ironic_python_agent.tests.unit.test_partition_utils.TestGetPartition.test_partuuid
+ironic_python_agent.tests.unit.test_partition_utils.TestGetPartition.test_partuuid ... ok
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_get_route_source_ipv6_linklocal
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_get_route_source_ipv6_linklocal ... ok
-   ERROR [root] Failed to move file: /firmware_images/fw1.bin, 
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_file_not_found
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_file_not_found ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_deploy_steps_exist
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_deploy_steps_exist ... ok
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_convert_to_sparse
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_convert_to_sparse ... ok
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_gpt_disk_label
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_gpt_disk_label ... ok
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_get_status
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_get_status ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_http
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_http ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_erase_disabled
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_erase_disabled ... ok
-   ERROR [root] Failed to open URL data: HTTP Error 500: Internal Error
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_http_err
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_http_err ... ok
-   ERROR [root] Failed to invoke secure erase, fallback to shred is not enabled: Error erasing block device: An unknown error occurred erasing block device /dev/sda
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_failed
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_failed ... ok
-   ERROR [root] Failed to open URL data: <urlopen error URL error>
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_http_url_err
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_http_url_err ... ok
- WARNING [root] Failed to invoke secure erase, falling back to shred: Error erasing block device: An unknown error occurred erasing block device /dev/sda
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_failed_continued
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_failed_continued ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_https
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_https ... ok
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_no_configdrive_partition
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_no_configdrive_partition ... ok
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_no_ephemeral_partition
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_no_ephemeral_partition ... ok
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_no_root_partition
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_no_root_partition ... ok
    ERROR [ironic_python_agent.ironic_api_client] An error occurred while attempting to discover the available Ironic API versions, falling back to using version 1.31
 Traceback (most recent call last):
   File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 463, in resolve
@@ -8485,7 +8700,7 @@
                        ^^^^^^^^^^^^^^^^
   File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 206, in _new_conn
     raise NameResolutionError(self.host, self, e) from e
-urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xb3818d80>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)
+urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xf4640a08>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)
 
 The above exception was the direct cause of the following exception:
 
@@ -8499,7 +8714,7 @@
   File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 519, in increment
     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb3818d80>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
+urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf4640a08>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
 
 During handling of the above exception, another exception occurred:
 
@@ -8518,26 +8733,16 @@
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/usr/lib/python3/dist-packages/requests/adapters.py", line 700, in send
     raise ConnectionError(e, request=request)
-requests.exceptions.ConnectionError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb3818d80>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
+requests.exceptions.ConnectionError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf4640a08>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
  WARNING [ironic_python_agent.agent] Ironic does not support automated TLS
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_no_swap_partition
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_no_swap_partition ... ok
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_invalid_url_scheme
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_invalid_url_scheme ... ok
-   ERROR [root] Failed to invoke secure erase, fallback to shred is not enabled: Error erasing block device: Block device /dev/sda is frozen and cannot be erased
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_frozen
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_frozen ... ok
-   ERROR [root] Mismatch provided checksum a94e683ea16d9ae44768f0a65942234d for image http://10.10.10.10/firmware_images/fw1.bin
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_mismatch_checksum
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_mismatch_checksum ... ok
-   ERROR [root] Failed to invoke secure erase, fallback to shred is not enabled: Error erasing block device: Block device /dev/sda already has a security password set
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_security_enabled
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_security_enabled ... ok
-   ERROR [root] The provided psid MT_0000000227 does not match the image psid MT_0000000228
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_mismatch_component_flavor
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_mismatch_component_flavor ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_security_enabled_unlock_attempt
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_security_enabled_unlock_attempt ... ok
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_ppc64le_prep_part
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_ppc64le_prep_part ... ok
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_preserve_ephemeral
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_preserve_ephemeral ... ok
    ERROR [ironic_python_agent.ironic_api_client] An error occurred while attempting to discover the available Ironic API versions, falling back to using version 1.31
 Traceback (most recent call last):
   File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 463, in resolve
@@ -8597,7 +8802,7 @@
                        ^^^^^^^^^^^^^^^^
   File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 206, in _new_conn
     raise NameResolutionError(self.host, self, e) from e
-urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xb4346ea0>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)
+urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xf3c985b8>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)
 
 The above exception was the direct cause of the following exception:
 
@@ -8611,7 +8816,7 @@
   File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 519, in increment
     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb4346ea0>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
+urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf3c985b8>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
 
 During handling of the above exception, another exception occurred:
 
@@ -8630,26 +8835,16 @@
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/usr/lib/python3/dist-packages/requests/adapters.py", line 700, in send
     raise ConnectionError(e, request=request)
-requests.exceptions.ConnectionError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb4346ea0>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
+requests.exceptions.ConnectionError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf3c985b8>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
  WARNING [ironic_python_agent.agent] Ironic does not support automated TLS
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run_agent_token
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run_agent_token ... ok
-   ERROR [root] The provided firmware version 20.34.1012 does not match image firmware version 20.35.1012
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_mismatch_fw_version
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareBinary.test_nvidia_nic_firmware_binray_mismatch_fw_version ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_security_unlock_fallback_pass
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_security_unlock_fallback_pass ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test__query_device
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test__query_device ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_success
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_success ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_fw_update_if_needed
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_fw_update_if_needed ... ok
- WARNING [root] Unable to execute `smartctl` utility: boom
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_fw_update_if_needed_with_reset
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_fw_update_if_needed_with_reset ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_success_no_smartctl
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_success_no_smartctl ... ok
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_uefi
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_uefi ... ok
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_without_image
+ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_without_image ... ok
+ironic_python_agent.tests.unit.test_raid_utils.TestFindESPRAID.test_esp_raid
+ironic_python_agent.tests.unit.test_raid_utils.TestFindESPRAID.test_esp_raid ... ok
    ERROR [ironic_python_agent.ironic_api_client] An error occurred while attempting to discover the available Ironic API versions, falling back to using version 1.31
 Traceback (most recent call last):
   File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 463, in resolve
@@ -8709,7 +8904,7 @@
                        ^^^^^^^^^^^^^^^^
   File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 206, in _new_conn
     raise NameResolutionError(self.host, self, e) from e
-urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xb3804360>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)
+urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xf3c87948>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)
 
 The above exception was the direct cause of the following exception:
 
@@ -8723,7 +8918,7 @@
   File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 519, in increment
     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb3804360>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
+urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf3c87948>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
 
 During handling of the above exception, another exception occurred:
 
@@ -8742,26 +8937,22 @@
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/usr/lib/python3/dist-packages/requests/adapters.py", line 700, in send
     raise ConnectionError(e, request=request)
-requests.exceptions.ConnectionError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb3804360>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
+requests.exceptions.ConnectionError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf3c87948>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
  WARNING [ironic_python_agent.agent] Ironic does not support automated TLS
+ironic_python_agent.tests.unit.test_raid_utils.TestFindESPRAID.test_no_esp_raid
+ironic_python_agent.tests.unit.test_raid_utils.TestFindESPRAID.test_no_esp_raid ... ok
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run_listen_host_port
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run_listen_host_port ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_get_nic_psid
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_get_nic_psid ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nosecurity_shred
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nosecurity_shred ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_is_image_changed_true
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_is_image_changed_true ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_parse_mstflint_query_output
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_parse_mstflint_query_output ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_notsupported_shred
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_notsupported_shred ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_parse_mstflint_query_output_no_data
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_parse_mstflint_query_output_no_data ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nvme_crypto_success
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nvme_crypto_success ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_parse_mstflint_query_output_with_running_fw
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicFirmwareOps.test_parse_mstflint_query_output_with_running_fw ... ok
+/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/tests/unit/test_tls_utils.py:57: CryptographyDeprecationWarning: Properties that return a naïve datetime object have been deprecated. Please switch to not_valid_before_utc.
+  self.assertLess(cert.not_valid_before,
+/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/tests/unit/test_tls_utils.py:59: CryptographyDeprecationWarning: Properties that return a naïve datetime object have been deprecated. Please switch to not_valid_after_utc.
+  self.assertGreater(cert.not_valid_after,
+ironic_python_agent.tests.unit.test_tls_utils.GenerateTestCase.test__generate
+ironic_python_agent.tests.unit.test_tls_utils.GenerateTestCase.test__generate ... ok
+ironic_python_agent.tests.unit.test_tls_utils.GenerateTestCase.test_generate
+ironic_python_agent.tests.unit.test_tls_utils.GenerateTestCase.test_generate ... ok
+ironic_python_agent.tests.unit.test_utils.ExecuteTestCase.test_execute
+ironic_python_agent.tests.unit.test_utils.ExecuteTestCase.test_execute ... ok
    ERROR [ironic_python_agent.ironic_api_client] An error occurred while attempting to discover the available Ironic API versions, falling back to using version 1.31
 Traceback (most recent call last):
   File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 463, in resolve
@@ -8821,7 +9012,7 @@
                        ^^^^^^^^^^^^^^^^
   File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 206, in _new_conn
     raise NameResolutionError(self.host, self, e) from e
-urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xb376e978>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)
+urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xf3a7eb58>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)
 
 The above exception was the direct cause of the following exception:
 
@@ -8835,7 +9026,7 @@
   File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 519, in increment
     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb376e978>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
+urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf3a7eb58>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
 
 During handling of the above exception, another exception occurred:
 
@@ -8854,28 +9045,19 @@
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/usr/lib/python3/dist-packages/requests/adapters.py", line 700, in send
     raise ConnectionError(e, request=request)
-requests.exceptions.ConnectionError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb376e978>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
+requests.exceptions.ConnectionError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf3a7eb58>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
  WARNING [ironic_python_agent.agent] Ironic does not support automated TLS
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicsConfig.test_create_settings_map
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicsConfig.test_create_settings_map ... ok
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run_raise_keyboard_interrupt
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run_raise_keyboard_interrupt ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nvme_failed
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nvme_failed ... ok
-   ERROR [root] duplicate settings for device ID 1017 
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicsConfig.test_create_settings_map_duplicate_device_id
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicsConfig.test_create_settings_map_duplicate_device_id ... ok
-   ERROR [root] nvme-cli did not return any supported format modes for device: /dev/nvme0n1
-   ERROR [root] There is no deviceID provided for this settings
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nvme_format_unsupported
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nvme_format_unsupported ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicsConfig.test_create_settings_map_invalid_firmware_settings_config
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicsConfig.test_create_settings_map_invalid_firmware_settings_config ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nvme_userdata_success
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nvme_userdata_success ... ok
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_determine_time_method_chronyd
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_determine_time_method_chronyd ... ok
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_determine_time_method_none
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_determine_time_method_none ... ok
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_determine_time_method_ntpdate
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_determine_time_method_ntpdate ... ok
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_chrony
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_chrony ... ok
  WARNING [root] Can't find field vendor for device lo in device class net
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_shred_0_pass_no_zeroize
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_shred_0_pass_no_zeroize ... ok
    ERROR [ironic_python_agent.ironic_api_client] An error occurred while attempting to discover the available Ironic API versions, falling back to using version 1.31
 Traceback (most recent call last):
   File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 463, in resolve
@@ -8935,7 +9117,7 @@
                        ^^^^^^^^^^^^^^^^
   File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 206, in _new_conn
     raise NameResolutionError(self.host, self, e) from e
-urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xb380bea0>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)
+urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xf3ac8bb8>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)
 
 The above exception was the direct cause of the following exception:
 
@@ -8949,7 +9131,7 @@
   File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 519, in increment
     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb380bea0>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
+urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf3ac8bb8>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
 
 During handling of the above exception, another exception occurred:
 
@@ -8968,22 +9150,24 @@
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/usr/lib/python3/dist-packages/requests/adapters.py", line 700, in send
     raise ConnectionError(e, request=request)
-requests.exceptions.ConnectionError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb380bea0>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
+requests.exceptions.ConnectionError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf3ac8bb8>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
+ironic_python_agent.tests.unit.test_agent.TestAgentStandalone.test_run_no_tls
+ironic_python_agent.tests.unit.test_agent.TestAgentStandalone.test_run_no_tls ... ok
  WARNING [ironic_python_agent.agent] Ironic does not support automated TLS
-ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run_with_inspection
-ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run_with_inspection ... ok
-   ERROR [root] Erasing block device /dev/sda failed with error 
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_shred_fail_oserror
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_shred_fail_oserror ... ok
-   ERROR [root] Erasing block device /dev/sda failed with error Unexpected error while running command.
+   ERROR [ironic_python_agent.utils] Failed to sync time using chrony to ntp server: 192.168.1.1: Unexpected error while running command.
 Command: None
 Exit code: -
 Stdout: None
-Stderr: None
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_shred_fail_processerror
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_shred_fail_processerror ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_shred_uses_internal_info
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_shred_uses_internal_info ... ok
+Stderr: 'time verboten'
+ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run_with_inspection
+ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run_with_inspection ... ok
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_chrony_failure
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_chrony_failure ... ok
+   ERROR [ironic_python_agent.utils] Unable to sync clock, available methods of 'ntpdate' or 'chrony' not found.
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_none
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_none ... ok
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_params_validation
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_params_validation ... ok
    ERROR [ironic_lib.exception] Exception in string format operation (arguments )
 Traceback (most recent call last):
   File "/usr/lib/python3/dist-packages/ironic_lib/exception.py", line 134, in __init__
@@ -8991,29 +9175,23 @@
               ~~~~~~~~~~~~~~^~~~~~~~
 KeyError: 'service'
  WARNING [ironic_python_agent.agent] Could not get baremetal endpoint from mDNS, will not heartbeat
- WARNING [root] Refusing to permit ATA Secure Erase as direct ATA commands via the `smartctl` utility with device /dev/sda do not succeed.
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_smartctl_fails_security_fallback_to_shred
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_smartctl_fails_security_fallback_to_shred ... ok
+   ERROR [ironic_python_agent.extensions.standby] Timeout reached waiting for a chunk of data from a remote server.
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 0 of 2: Error downloading image: Download of image fake_id failed: Unable to write image to device /dev/foo. Error: Error downloading image: Download of image fake_id failed: Timed out reading next chunk from webserver
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_ntp
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_ntp ... ok
  WARNING [root] Can't find field vendor for device lo in device class net
  WARNING [ironic_python_agent.agent] Ironic does not support automated TLS
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicsConfig.test_prepare_nvidia_nic_config
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNicsConfig.test_prepare_nvidia_nic_config ... ok
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run_with_inspection_without_apiurl
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run_with_inspection_without_apiurl ... ok
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_detect_hardware
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_detect_hardware ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_smartctl_unsupported_shred
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_smartctl_unsupported_shred ... ok
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_detect_hardware_error
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_detect_hardware_error ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_virtual_media
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_virtual_media ... ok
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_detect_hardware_no_mlnx
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_detect_hardware_no_mlnx ... ok
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_evaluate_hardware_support
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_evaluate_hardware_support ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_concurrency
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_concurrency ... ok
+   ERROR [ironic_python_agent.utils] Failed to sync with ntp server: 192.168.1.1: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: None
+Stderr: None
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_ntp_raises_exception
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_ntp_raises_exception ... ok
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_success_no_wait
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_success_no_wait ... ok
    ERROR [ironic_python_agent.ironic_api_client] An error occurred while attempting to discover the available Ironic API versions, falling back to using version 1.31
 Traceback (most recent call last):
   File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 463, in resolve
@@ -9073,7 +9251,7 @@
                        ^^^^^^^^^^^^^^^^
   File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 206, in _new_conn
     raise NameResolutionError(self.host, self, e) from e
-urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xb370b390>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)
+urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xf3c84f60>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)
 
 The above exception was the direct cause of the following exception:
 
@@ -9087,7 +9265,7 @@
   File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 519, in increment
     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb370b390>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
+urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf3c84f60>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
 
 During handling of the above exception, another exception occurred:
 
@@ -9106,78 +9284,62 @@
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/usr/lib/python3/dist-packages/requests/adapters.py", line 700, in send
     raise ConnectionError(e, request=request)
-requests.exceptions.ConnectionError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb370b390>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
+requests.exceptions.ConnectionError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf3c84f60>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
  WARNING [ironic_python_agent.agent] Ironic does not support automated TLS
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_ntp_server_is_none
+ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_ntp_server_is_none ... ok
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run_with_sleep
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run_with_sleep ... ok
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_evaluate_hardware_support_no_mlnx
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_evaluate_hardware_support_no_mlnx ... ok
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_generate_client_id
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_generate_client_id ... ok
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_clean_steps
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_clean_steps ... ok
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_interface_info
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_interface_info ... ok
+ironic-python-agent: Copying configuration from /tmp/tmpcby8szux/etc/ironic-python-agent to /etc/ironic-python-agent
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_success_with_false_wait
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_success_with_false_wait ... ok
+ironic-python-agent: Copying configuration from /tmp/tmpcby8szux/etc/ironic-python-agent.d to /etc/ironic-python-agent.d
+ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_copy
+ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_copy ... ok
+ironic-python-agent: Copying configuration from /tmp/tmpt2dah4m0/etc/ironic-python-agent to /etc/ironic-python-agent
+ironic-python-agent: Copying configuration from /tmp/tmpt2dah4m0/etc/ironic-python-agent.d to /etc/ironic-python-agent.d
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run_with_ssl
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run_with_ssl ... ok
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_interface_info_no_ib_interface
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_interface_info_no_ib_interface ... ok
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_interface_info_no_mac_address
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_interface_info_no_mac_address ... ok
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_interface_info_no_mlnx_interface
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_interface_info_no_mlnx_interface ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_concurrency_pool_size
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_concurrency_pool_size ... ok
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_infiniband_address_to_mac
-ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_infiniband_address_to_mac ... ok
-ironic_python_agent.tests.unit.test_disk_utils.GetPartitionTableTypeTestCase.test_gpt
-ironic_python_agent.tests.unit.test_disk_utils.GetPartitionTableTypeTestCase.test_gpt ... ok
+ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_copy_mounted
+ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_copy_mounted ... ok
+ironic-python-agent: /some/path/etc/ironic-python-agent not found
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_success_with_true_wait
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_success_with_true_wait ... ok
+ironic-python-agent: /some/path/etc/ironic-python-agent.d not found
+ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_mounted_no_files
+ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_mounted_no_files ... ok
+ironic-python-agent: /tmp/tmplwfjzwjw/etc/ironic-python-agent not found
+ironic-python-agent: /tmp/tmplwfjzwjw/etc/ironic-python-agent.d not found
+ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_no_files
+ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_no_files ... ok
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_validation
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_validation ... ok
+ironic-python-agent: No virtual media device detected
    ERROR [ironic_lib.exception] Exception in string format operation (arguments )
 Traceback (most recent call last):
   File "/usr/lib/python3/dist-packages/ironic_lib/exception.py", line 134, in __init__
     message = self._msg_fmt % kwargs
               ~~~~~~~~~~~~~~^~~~~~~~
 KeyError: 'service'
-ironic_python_agent.tests.unit.test_disk_utils.GetPartitionTableTypeTestCase.test_msdos
-ironic_python_agent.tests.unit.test_disk_utils.GetPartitionTableTypeTestCase.test_msdos ...  WARNING [ironic_python_agent.agent] Could not get baremetal endpoint from mDNS, will not heartbeat
-ok
- WARNING [ironic_python_agent.disk_utils] Unable to get partition table type for device hello
-ironic_python_agent.tests.unit.test_disk_utils.GetPartitionTableTypeTestCase.test_unknown
-ironic_python_agent.tests.unit.test_disk_utils.GetPartitionTableTypeTestCase.test_unknown ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_express
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_express   ERROR [ironic_python_agent.extensions.standby] Timeout reached waiting for a chunk of data from a remote server.
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 0 of 2: Error downloading image: Download of image fake_id failed: Unable to write image to device /dev/foo. Error: Error downloading image: Download of image fake_id failed: Timed out reading next chunk from webserver
- ... ok
+ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_no_vmedia
+ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_no_vmedia ... ok
+ WARNING [ironic_python_agent.agent] Could not get baremetal endpoint from mDNS, will not heartbeat
+ironic-python-agent: Cannot use configuration from virtual media as the agent was not booted from virtual media.
  WARNING [root] Can't find field vendor for device lo in device class net
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_with_token
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_with_token ... ok
+ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_vmedia_found_not_booted_from_vmedia
+ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_vmedia_found_not_booted_from_vmedia ... ok
    ERROR [ironic_python_agent.agent] Neither ipa-api-url nor inspection_callback_urlfound, please check your pxe append parameters.
  WARNING [ironic_python_agent.agent] Ironic does not support automated TLS
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run_without_inspection_and_apiurl
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_run_without_inspection_and_apiurl ... ok
- WARNING [ironic_python_agent.efi_utils] Invalid sgdisk line: I am a teaport
- WARNING [ironic_python_agent.efi_utils] No UUID information provided in sgdisk output for partition 1 on device /dev/fake
-ironic_python_agent.tests.unit.test_efi_utils.TestGetPartitionPathByNumber.test_broken
-ironic_python_agent.tests.unit.test_efi_utils.TestGetPartitionPathByNumber.test_broken ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_express_stops_on_safety_failure
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_express_stops_on_safety_failure ... ok
-ironic_python_agent.tests.unit.test_efi_utils.TestGetPartitionPathByNumber.test_ok
-ironic_python_agent.tests.unit.test_efi_utils.TestGetPartitionPathByNumber.test_ok ... ok
-ironic_python_agent.tests.unit.test_encoding.TestEncoder.test_encoder
-ironic_python_agent.tests.unit.test_encoding.TestEncoder.test_encoder ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_metadata
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_metadata ... ok
-ironic_python_agent.tests.unit.test_encoding.TestEncoder.test_ironic_lib
-ironic_python_agent.tests.unit.test_encoding.TestEncoder.test_ironic_lib ... ok
-ironic_python_agent.tests.unit.test_errors.TestErrors.test_RESTError
-ironic_python_agent.tests.unit.test_errors.TestErrors.test_RESTError ... ok
-   ERROR [root] Failed to erase the metadata on device "/dev/sdb". Error: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'Booo00000ooommmmm'
-Stderr: None
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_metadata_error
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_metadata_error ... ok
-ironic_python_agent.tests.unit.test_errors.TestErrors.test_RESTError_details
-ironic_python_agent.tests.unit.test_errors.TestErrors.test_RESTError_details ... ok
+ironic_python_agent.tests.unit.test_utils.TestStreamingClient.test_ok
+ironic_python_agent.tests.unit.test_utils.TestStreamingClient.test_ok ... ok
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_with_token_invalid
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_with_token_invalid ... ok
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_get_agent_status
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_get_agent_status ... ok
    ERROR [ironic_python_agent.ironic_api_client] An error occurred while attempting to discover the available Ironic API versions, falling back to using version 1.31
 Traceback (most recent call last):
   File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 463, in resolve
@@ -9237,7 +9399,7 @@
                        ^^^^^^^^^^^^^^^^
   File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 206, in _new_conn
     raise NameResolutionError(self.host, self, e) from e
-urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xb3749570>: Failed to resolve 'example.com' ([Errno -2] Name or service not known)
+urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xf39dcb10>: Failed to resolve 'example.com' ([Errno -2] Name or service not known)
 
 The above exception was the direct cause of the following exception:
 
@@ -9251,7 +9413,7 @@
   File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 519, in increment
     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb3749570>: Failed to resolve 'example.com' ([Errno -2] Name or service not known)"))
+urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf39dcb10>: Failed to resolve 'example.com' ([Errno -2] Name or service not known)"))
 
 During handling of the above exception, another exception occurred:
 
@@ -9270,21 +9432,18 @@
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/usr/lib/python3/dist-packages/requests/adapters.py", line 700, in send
     raise ConnectionError(e, request=request)
-requests.exceptions.ConnectionError: HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb3749570>: Failed to resolve 'example.com' ([Errno -2] Name or service not known)"))
+requests.exceptions.ConnectionError: HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf39dcb10>: Failed to resolve 'example.com' ([Errno -2] Name or service not known)"))
  WARNING [ironic_python_agent.agent] Ironic does not support automated TLS
-ironic_python_agent.tests.unit.test_errors.TestErrors.test_error_classes
-ironic_python_agent.tests.unit.test_errors.TestErrors.test_error_classes ... ok
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_get_command_result
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_get_command_result ... ok
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_url_from_mdns_by_default
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_url_from_mdns_by_default ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_metadata_safety_check
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_metadata_safety_check ... ok
-ironic_python_agent.tests.unit.test_errors.TestErrors.test_error_string
-ironic_python_agent.tests.unit.test_errors.TestErrors.test_error_string ... ok
-ironic_python_agent.tests.unit.test_hardware.TestListHardwareInfo.test_caching
-ironic_python_agent.tests.unit.test_hardware.TestListHardwareInfo.test_caching ... ok
- WARNING [root] No hardware manager was able to handle interface foobar
-ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces
-ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces ... ok
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_list_command_results
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_list_command_results ... ok
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_not_found
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_not_found ... ok
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_root
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_root ... ok
    ERROR [ironic_python_agent.ironic_api_client] An error occurred while attempting to discover the available Ironic API versions, falling back to using version 1.31
 Traceback (most recent call last):
   File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 463, in resolve
@@ -9344,7 +9503,7 @@
                        ^^^^^^^^^^^^^^^^
   File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 206, in _new_conn
     raise NameResolutionError(self.host, self, e) from e
-urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xb36b18e8>: Failed to resolve 'example.com' ([Errno -2] Name or service not known)
+urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xf55a40a8>: Failed to resolve 'example.com' ([Errno -2] Name or service not known)
 
 The above exception was the direct cause of the following exception:
 
@@ -9358,7 +9517,7 @@
   File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 519, in increment
     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb36b18e8>: Failed to resolve 'example.com' ([Errno -2] Name or service not known)"))
+urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf55a40a8>: Failed to resolve 'example.com' ([Errno -2] Name or service not known)"))
 
 During handling of the above exception, another exception occurred:
 
@@ -9377,47 +9536,749 @@
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/usr/lib/python3/dist-packages/requests/adapters.py", line 700, in send
     raise ConnectionError(e, request=request)
-requests.exceptions.ConnectionError: HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb36b18e8>: Failed to resolve 'example.com' ([Errno -2] Name or service not known)"))
+requests.exceptions.ConnectionError: HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf55a40a8>: Failed to resolve 'example.com' ([Errno -2] Name or service not known)"))
  WARNING [ironic_python_agent.agent] Ironic does not support automated TLS
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_url_from_mdns_explicitly
 ironic_python_agent.tests.unit.test_agent.TestBaseAgent.test_url_from_mdns_explicitly ... ok
- WARNING [root] Cannot find detailed information about interface eth0
-ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_no_carrier
-ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_no_carrier ... ok
-ironic_python_agent.tests.unit.test_agent.TestFromConfig.test_override_urls
-ironic_python_agent.tests.unit.test_agent.TestFromConfig.test_override_urls ... ok
- WARNING [root] Cannot find detailed information about interface eth0
-ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_biosdevname
-ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_biosdevname ... ok
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_v1_root
+ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_v1_root ... ok
 ironic_python_agent.tests.unit.test_burnin.TestBurnin.test__smart_test_status
 ironic_python_agent.tests.unit.test_burnin.TestBurnin.test__smart_test_status ... ok
    ERROR [ironic_python_agent.burnin] SMART test on /dev/sdj failed with 'string'
 ironic_python_agent.tests.unit.test_burnin.TestBurnin.test__smart_test_status_missing
 ironic_python_agent.tests.unit.test_burnin.TestBurnin.test__smart_test_status_missing ... ok
- WARNING [root] Cannot find detailed information about interface bond0
-ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_bond
-ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_bond ... ok
+   ERROR [ironic_python_agent.ironic_api_client] An error occurred while attempting to discover the available Ironic API versions, falling back to using version 1.31
+Traceback (most recent call last):
+  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 463, in resolve
+    return _proxy.query(name, rdtype, raise_on_no_answer=raises,
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 407, in query
+    step(self._resolver.query, qname, rdtype, rdclass, tcp, source, raise_on_no_answer=False)
+         ^^^^^^^^^^^^^^
+  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 347, in _resolver
+    self.clear()
+  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 355, in clear
+    self._resolver = dns.resolver.Resolver(filename=self._filename)
+                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3/dist-packages/dns/resolver.py", line 945, in __init__
+    self.read_resolv_conf(filename)
+  File "/usr/lib/python3/dist-packages/dns/resolver.py", line 1039, in read_resolv_conf
+    raise NoResolverConfiguration("no nameservers")
+dns.resolver.NoResolverConfiguration: no nameservers
+
+During handling of the above exception, another exception occurred:
+
+Traceback (most recent call last):
+  File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 199, in _new_conn
+    sock = connection.create_connection(
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3/dist-packages/urllib3/util/connection.py", line 60, in create_connection
+    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):
+               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 558, in getaddrinfo
+    qname, addrs = _getaddrinfo_lookup(host, family, flags)
+                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 529, in _getaddrinfo_lookup
+    raise err
+  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 518, in _getaddrinfo_lookup
+    answer = resolve(host, qfamily, False, use_network=use_network)
+             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 473, in resolve
+    _raise_new_error(EAI_NODATA_ERROR)
+  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 100, in _raise_new_error
+    raise error_instance.__class__(*error_instance.args)
+socket.gaierror: [Errno -2] Name or service not known
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 789, in urlopen
+    response = self._make_request(
+               ^^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 490, in _make_request
+    raise new_e
+  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 466, in _make_request
+    self._validate_conn(conn)
+  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 1095, in _validate_conn
+    conn.connect()
+  File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 693, in connect
+    self.sock = sock = self._new_conn()
+                       ^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 206, in _new_conn
+    raise NameResolutionError(self.host, self, e) from e
+urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xf39c7c48>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "/usr/lib/python3/dist-packages/requests/adapters.py", line 667, in send
+    resp = conn.urlopen(
+           ^^^^^^^^^^^^^
+  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 843, in urlopen
+    retries = retries.increment(
+              ^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 519, in increment
+    raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf39c7c48>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
+
+During handling of the above exception, another exception occurred:
+
+Traceback (most recent call last):
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/ironic_api_client.py", line 130, in _get_ironic_api_version
+    response = self._request('GET', '/')
+               ^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/ironic_api_client.py", line 90, in _request
+    resp = self.session.request(method,
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 589, in request
+    resp = self.send(prep, **send_kwargs)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 703, in send
+    r = adapter.send(request, **kwargs)
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3/dist-packages/requests/adapters.py", line 700, in send
+    raise ConnectionError(e, request=request)
+requests.exceptions.ConnectionError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xf39c7c48>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
+ WARNING [ironic_python_agent.agent] Ironic does not support automated TLS
 ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_disk_default
 ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_disk_default ... ok
+ironic_python_agent.tests.unit.test_agent.TestBaseAgentVMediaToken.test_run_agent_token_vmedia
+ironic_python_agent.tests.unit.test_agent.TestBaseAgentVMediaToken.test_run_agent_token_vmedia ... ok
 ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_disk_no_default
 ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_disk_no_default ... ok
- WARNING [root] Cannot find detailed information about interface eth0
-ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_lldp
-ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_lldp ... ok
    ERROR [ironic_python_agent.burnin] fio (disk) failed with error Unexpected error while running command.
 Command: None
 Exit code: -
 Stdout: None
 Stderr: None
+ironic_python_agent.tests.unit.test_agent.TestFromConfig.test_override_urls
+ironic_python_agent.tests.unit.test_agent.TestFromConfig.test_override_urls ... ok
 ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_disk_no_fio
 ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_disk_no_fio ... ok
- WARNING [root] Cannot find detailed information about interface eth0
 ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_disk_smart_test
 ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_disk_smart_test ... ok
+ironic_python_agent.tests.unit.test_agent.TestHeartbeater.test__heartbeat_expected
+ironic_python_agent.tests.unit.test_agent.TestHeartbeater.test__heartbeat_expected ... ok
+   ERROR [ironic_python_agent.agent] error sending heartbeat to <Mock name='mock.api_urls' id='4086352608'>
+Traceback (most recent call last):
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/agent.py", line 148, in do_heartbeat
+    self.api.heartbeat(
+  File "/usr/lib/python3.12/unittest/mock.py", line 1139, in __call__
+    return self._mock_call(*args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.12/unittest/mock.py", line 1143, in _mock_call
+    return self._execute_mock_call(*args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.12/unittest/mock.py", line 1198, in _execute_mock_call
+    raise effect
+Exception: uh oh!
+ironic_python_agent.tests.unit.test_agent.TestHeartbeater.test_heartbeat
+ironic_python_agent.tests.unit.test_agent.TestHeartbeater.test_heartbeat ... ok
+ironic_python_agent.tests.unit.test_base.DontBlockExecuteTestCase.test_no_exception_raised_for_execute
+ironic_python_agent.tests.unit.test_base.DontBlockExecuteTestCase.test_no_exception_raised_for_execute ... ok
+ironic_python_agent.tests.unit.test_disk_utils.ListPartitionsTestCase.test_correct
+ironic_python_agent.tests.unit.test_disk_utils.ListPartitionsTestCase.test_correct ... ok
+ironic_python_agent.tests.unit.test_disk_utils.ListPartitionsTestCase.test_correct_gpt_nvme
+ironic_python_agent.tests.unit.test_disk_utils.ListPartitionsTestCase.test_correct_gpt_nvme ... ok
+ironic_python_agent.tests.unit.test_disk_utils.ListPartitionsTestCase.test_incorrect
+ironic_python_agent.tests.unit.test_disk_utils.ListPartitionsTestCase.test_incorrect ... ok
+ironic_python_agent.tests.unit.test_disk_utils.ListPartitionsTestCase.test_incorrect_gpt
+ironic_python_agent.tests.unit.test_disk_utils.ListPartitionsTestCase.test_incorrect_gpt ... ok
+ WARNING [ironic_python_agent.efi_utils] Invalid sgdisk line: I am a teaport
+ WARNING [ironic_python_agent.efi_utils] No UUID information provided in sgdisk output for partition 1 on device /dev/fake
+ironic_python_agent.tests.unit.test_efi_utils.TestGetPartitionPathByNumber.test_broken
+ironic_python_agent.tests.unit.test_efi_utils.TestGetPartitionPathByNumber.test_broken ... ok
+ironic_python_agent.tests.unit.test_efi_utils.TestGetPartitionPathByNumber.test_ok
+ironic_python_agent.tests.unit.test_efi_utils.TestGetPartitionPathByNumber.test_ok ... ok
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_clean_boot_records
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_clean_boot_records ... ok
+ WARNING [ironic_python_agent.efi_utils] Empty EFI partition detected.
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_empty_partition_by_uuid
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_empty_partition_by_uuid ... ok
+   ERROR [ironic_python_agent.efi_utils] Could not configure UEFI boot on device /dev/fake: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+Traceback (most recent call last):
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/efi_utils.py", line 131, in manage_uefi
+    utils.execute('mount', efi_partition, efi_partition_mount_point)
+  File "<string>", line 3, in execute
+  File "/usr/lib/python3.12/unittest/mock.py", line 1139, in __call__
+    return self._mock_call(*args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.12/unittest/mock.py", line 1143, in _mock_call
+    return self._execute_mock_call(*args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.12/unittest/mock.py", line 1198, in _execute_mock_call
+    raise effect
+oslo_concurrency.processutils.ProcessExecutionError: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_failure
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_failure ... ok
+   ERROR [ironic_python_agent.efi_utils] Could not configure UEFI boot on device /dev/fake: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+Traceback (most recent call last):
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/efi_utils.py", line 185, in manage_uefi
+    _run_efibootmgr(valid_efi_bootloaders, efi_dev, efi_part,
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/efi_utils.py", line 351, in _run_efibootmgr
+    boot_records = list(get_boot_records())
+                   ^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/efi_utils.py", line 282, in get_boot_records
+    efi_output = utils.execute('efibootmgr', '-v', binary=True)
+                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "<string>", line 3, in execute
+  File "/usr/lib/python3.12/unittest/mock.py", line 1139, in __call__
+    return self._mock_call(*args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.12/unittest/mock.py", line 1143, in _mock_call
+    return self._execute_mock_call(*args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.12/unittest/mock.py", line 1202, in _execute_mock_call
+    raise result
+oslo_concurrency.processutils.ProcessExecutionError: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+   ERROR [ironic_python_agent.efi_utils] Umounting efi system partition failed. Attempted 3 times. Error: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'no umount'
+Stderr: None
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_failure_after_failure
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_failure_after_failure ... ok
+   ERROR [ironic_python_agent.efi_utils] Could not configure UEFI boot on device /dev/fake: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+Traceback (most recent call last):
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/efi_utils.py", line 185, in manage_uefi
+    _run_efibootmgr(valid_efi_bootloaders, efi_dev, efi_part,
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/efi_utils.py", line 351, in _run_efibootmgr
+    boot_records = list(get_boot_records())
+                   ^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/efi_utils.py", line 282, in get_boot_records
+    efi_output = utils.execute('efibootmgr', '-v', binary=True)
+                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "<string>", line 3, in execute
+  File "/usr/lib/python3.12/unittest/mock.py", line 1139, in __call__
+    return self._mock_call(*args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.12/unittest/mock.py", line 1143, in _mock_call
+    return self._execute_mock_call(*args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/lib/python3.12/unittest/mock.py", line 1202, in _execute_mock_call
+    raise result
+oslo_concurrency.processutils.ProcessExecutionError: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_failure_after_mount
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_failure_after_mount ... ok
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_found_csv
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_found_csv ... ok
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_get_boot_records
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_get_boot_records ... ok
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_no_partition
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_no_partition ... ok
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_nvme_device
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_nvme_device ... ok
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_ok
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_ok ... ok
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_software_raid
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_software_raid ... ok
+   ERROR [ironic_python_agent.extensions.standby] Timeout reached waiting for a chunk of data from a remote server.
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 1 of 2: Error downloading image: Download of image fake_id failed: Unable to write image to device /dev/foo. Error: Error downloading image: Download of image fake_id failed: Timed out reading next chunk from webserver
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_wholedisk
+ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_wholedisk ... ok
+ironic_python_agent.tests.unit.test_encoding.TestEncoder.test_encoder
+ironic_python_agent.tests.unit.test_encoding.TestEncoder.test_encoder ... ok
+ironic_python_agent.tests.unit.test_encoding.TestEncoder.test_ironic_lib
+ironic_python_agent.tests.unit.test_encoding.TestEncoder.test_ironic_lib ... ok
+ironic_python_agent.tests.unit.test_errors.TestErrors.test_RESTError
+ironic_python_agent.tests.unit.test_errors.TestErrors.test_RESTError ... ok
+ironic_python_agent.tests.unit.test_errors.TestErrors.test_RESTError_details
+ironic_python_agent.tests.unit.test_errors.TestErrors.test_RESTError_details ... ok
+ironic_python_agent.tests.unit.test_errors.TestErrors.test_error_classes
+ironic_python_agent.tests.unit.test_errors.TestErrors.test_error_classes ... ok
+ironic_python_agent.tests.unit.test_errors.TestErrors.test_error_string
+ironic_python_agent.tests.unit.test_errors.TestErrors.test_error_string ... ok
+ironic_python_agent.tests.unit.test_hardware.TestListHardwareInfo.test_caching
+ironic_python_agent.tests.unit.test_hardware.TestListHardwareInfo.test_caching ... ok
+ WARNING [root] Mismatched hardware managers versions. Agent version: {'specific': '1'}, node version: {'not_specific': '1'}
+ironic_python_agent.tests.unit.test_hardware.TestVersions.test_check_versions
+ironic_python_agent.tests.unit.test_hardware.TestVersions.test_check_versions ... ok
+ironic_python_agent.tests.unit.test_hardware.TestVersions.test_get_current_versions
+ironic_python_agent.tests.unit.test_hardware.TestVersions.test_get_current_versions ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_empty
+ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_empty ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_invalid_type_in_param
+ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_invalid_type_in_param ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_invalid_type_on_node
+ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_invalid_type_on_node ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_ok
+ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_ok ... ok
+ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_verify_false
+ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_verify_false ... ok
+ironic_python_agent.tests.unit.test_inspector.TestCollectExtraHardware.test_benchmarks
+ironic_python_agent.tests.unit.test_inspector.TestCollectExtraHardware.test_benchmarks ... ok
+ironic_python_agent.tests.unit.test_utils.TestStreamingClient.test_retries
+ironic_python_agent.tests.unit.test_utils.TestStreamingClient.test_retries ... ok
+   ERROR [ironic_python_agent.utils] failed to run hardware-detect utility: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: None
+Stderr: None
+ironic_python_agent.tests.unit.test_inspector.TestCollectExtraHardware.test_execute_failed
+ironic_python_agent.tests.unit.test_inspector.TestCollectExtraHardware.test_execute_failed ... ok
+ironic_python_agent.tests.unit.test_inspector.TestCollectExtraHardware.test_no_benchmarks
+ironic_python_agent.tests.unit.test_inspector.TestCollectExtraHardware.test_no_benchmarks ... ok
+   ERROR [ironic_python_agent.utils] JSON returned from hardware-detect cannot be decoded: Expecting value: line 1 column 1 (char 0)
+ironic_python_agent.tests.unit.test_inspector.TestCollectExtraHardware.test_parsing_failed
+ironic_python_agent.tests.unit.test_inspector.TestCollectExtraHardware.test_parsing_failed ... ok
+ironic_python_agent.tests.unit.test_multi_hardware_clean_steps.TestMultipleHardwareManagerCleanSteps.test_clean_step_ordering
+ironic_python_agent.tests.unit.test_multi_hardware_clean_steps.TestMultipleHardwareManagerCleanSteps.test_clean_step_ordering ... ok
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_bad_nodes_cores_info
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_bad_nodes_cores_info ... ok
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_bad_nodes_memory_info
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_bad_nodes_memory_info ... ok
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_bad_nodes_nics_info
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_bad_nodes_nics_info ... ok
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_bad_nodes_thread_dirs
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_bad_nodes_thread_dirs ... ok
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_nodes_cores_info
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_nodes_cores_info ... ok
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_nodes_memory_info
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_nodes_memory_info ... ok
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_nodes_nics_info
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_nodes_nics_info ... ok
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_numa_node_id_invalid_format
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_numa_node_id_invalid_format ... ok
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_numa_node_id_invalid_format_cores_info
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_numa_node_id_invalid_format_cores_info ... ok
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_numa_node_id_invalid_format_memory_info
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_numa_node_id_invalid_format_memory_info ... ok
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_numa_node_id_valid_format
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_numa_node_id_valid_format ... ok
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_no_nics_dir
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_no_nics_dir ... ok
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_nodes_invalid_memory_unit
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_nodes_invalid_memory_unit ... ok
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_nodes_invalid_numa_format_memory_info
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_nodes_invalid_numa_format_memory_info ... ok
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_nodes_invalid_threaddir_format_cores_info
+ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_nodes_invalid_threaddir_format_cores_info ... ok
+ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test__create_partition_mbr_disk_exceeds_2TB
+ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test__create_partition_mbr_disk_exceeds_2TB ... ok
+ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test__create_partition_mbr_disk_exceeds_2TB_nvme
+ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test__create_partition_mbr_disk_exceeds_2TB_nvme ... ok
+ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test__create_partition_mbr_disk_under_2TB
+ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test__create_partition_mbr_disk_under_2TB ... ok
+ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test__create_partition_mbr_disk_under_2TB_nvme
+ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test__create_partition_mbr_disk_under_2TB_nvme ... ok
+ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_conf_drive_error_counting
+ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_conf_drive_error_counting ... ok
+ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_conf_drive_sz_exceed
+ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_conf_drive_sz_exceed ... ok
+ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_exists
+ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_exists ... ok
+ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_gpt
+ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_gpt ... ok
+ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_gpt_use_vfat
+ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_gpt_use_vfat ... ok
+ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_gpt_with_fallback
+ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_gpt_with_fallback ... ok
+   ERROR [ironic_python_agent.extensions.standby] Timeout reached waiting for a chunk of data from a remote server.
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_stream_raw_image_onto_device_socket_read_timeout
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_stream_raw_image_onto_device_socket_read_timeout ... ok
+ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_num_parts_exceed
+ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_num_parts_exceed ... ok
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 0 of 9: Error downloading image: Download of image fake_id failed: Unable to write image to device /dev/foo. Error: Surprise!!!1!
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 1 of 9: Error downloading image: Download of image fake_id failed: Unable to write image to device /dev/foo. Error: Surprise!!!1!
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 2 of 9: Error downloading image: Download of image fake_id failed: Unable to write image to device /dev/foo. Error: Surprise!!!1!
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 3 of 9: Error downloading image: Download of image fake_id failed: Unable to write image to device /dev/foo. Error: Surprise!!!1!
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 4 of 9: Error downloading image: Download of image fake_id failed: Unable to write image to device /dev/foo. Error: Surprise!!!1!
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 5 of 9: Error downloading image: Download of image fake_id failed: Unable to write image to device /dev/foo. Error: Surprise!!!1!
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 6 of 9: Error downloading image: Download of image fake_id failed: Unable to write image to device /dev/foo. Error: Surprise!!!1!
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 7 of 9: Error downloading image: Download of image fake_id failed: Unable to write image to device /dev/foo. Error: Surprise!!!1!
+   ERROR [root] Failed to create config drive on disk /dev/fake for node 12345678-1234-1234-1234-1234567890abcxyz. Error: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: None
+Stderr: None
+ WARNING [ironic_python_agent.extensions.standby] Image download failed, 8 of 9: Error downloading image: Download of image fake_id failed: Unable to write image to device /dev/foo. Error: Surprise!!!1!
+ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_part_create_exc
+ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_part_create_exc ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_stream_raw_image_onto_device_write_error
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_stream_raw_image_onto_device_write_error ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_sync
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_sync ... ok
+ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_part_create_fail
+ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_part_create_fail ... ok
+   ERROR [ironic_python_agent.extensions.standby] Flushing file system buffers failed. Error: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: None
+Stderr: None
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_sync_error
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_sync_error ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_empty_checksum
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_empty_checksum ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_empty_urls
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_empty_urls ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_invalid_checksum
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_invalid_checksum ... ok
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_invalid_urls
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_invalid_urls ... ok
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_bad_status_code
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_bad_status_code ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_legacy_md5_checksum
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_legacy_md5_checksum ... ok
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_bad_url
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_bad_url ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_legacy_md5_checksum_enabled
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_legacy_md5_checksum_enabled ... ok
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_base64_error
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_base64_error ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_missing_field
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_missing_field ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_no_hash_algo
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_no_hash_algo ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_no_hash_value
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_no_hash_value ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_sha256
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_sha256 ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_success
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_success ... ok
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_base64_string
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_base64_string ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_success_ignore_none_md5
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_success_ignore_none_md5 ... ok
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_binary
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_binary ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_success_with_new_hash_fields
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_success_with_new_hash_fields ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_success_without_md5
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_success_without_md5 ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_url
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_url ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_basic_auth_creds
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_basic_auth_creds ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_basic_auth_creds_empty_password
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_basic_auth_creds_empty_password ... ok
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_gzip_error
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_gzip_error ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_basic_auth_creds_empty_user
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_basic_auth_creds_empty_user ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_basic_auth_creds_none_password
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_basic_auth_creds_none_password ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_basic_auth_creds_none_user
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_basic_auth_creds_none_user ... ok
+   ERROR [ironic_python_agent.extensions.standby] Unable to verify image fake_id with available checksums. Please make sure the specified 'os_hash_algo' (currently algo-beyond-milky-way) is supported by this ramdisk, or provide a md5 checksum via the 'checksum' field
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_fails_if_unknown_is_used
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_fails_if_unknown_is_used ... ok
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_insecure
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_insecure ... ok
+   ERROR [ironic_python_agent.extensions.standby] Image failed to verify against checksum. location: /foo/bar; image ID: fake_id; image checksum: fake-checksum; verification checksum: invalid-checksum
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_failure
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_failure ... ok
+   ERROR [ironic_python_agent.extensions.standby] Image failed to verify against checksum. location: /foo/bar; image ID: fake_id; image checksum: fake-sha512-value; verification checksum: invalid-checksum
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_failure_with_new_hash_fields
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_failure_with_new_hash_fields ... ok
+   ERROR [ironic_python_agent.extensions.standby] Unable to verify image fake_id with available checksums. Please make sure the specified 'os_hash_algo' (currently unsupported-algorithm) is supported by this ramdisk, or provide a md5 checksum via the 'checksum' field
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_failure_without_fallback
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_failure_without_fallback ... ok
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_ssl
+ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_ssl ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_success
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_success ... ok
+ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_DeployFail_exc
+ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_DeployFail_exc ... ok
+ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_absent
+ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_absent ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_success_with_md5_fallback
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_success_with_md5_fallback ... ok
+ WARNING [ironic_python_agent.disk_utils] Unable to probe for partitions on device /dev/fake, the partitioning table may be broken. Error: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: None
+Stderr: None
+ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_exc
+ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_exc ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_success_with_new_hash_fields
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_success_with_new_hash_fields ... ok
+ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_present
+ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_present ... ok
+ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_present_uppercase
+ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_present_uppercase ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_success_without_md5
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_success_without_md5 ... ok
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test__get_actual_component_devices
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test__get_actual_component_devices ... ok
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test__get_actual_component_devices_broken_raid0
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test__get_actual_component_devices_broken_raid0 ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_image
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_image ... ok
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device ... ok
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device_fail_create_device
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device_fail_create_device ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_image_fails
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_image_fails ... ok
+ WARNING [ironic_python_agent.raid_utils] Found /dev/sdb1 to be missing from /dev/md0 ... re-adding!
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device_fail_read_device
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device_fail_read_device ... ok
+   ERROR [ironic_lib.exception] Exception in string format operation (arguments )
+Traceback (most recent call last):
+  File "/usr/lib/python3/dist-packages/ironic_lib/exception.py", line 134, in __init__
+    message = self._msg_fmt % kwargs
+              ~~~~~~~~~~~~~~^~~~~~~~
+KeyError: 'reason'
+ WARNING [ironic_python_agent.raid_utils] Found /dev/sdb1 to be missing from /dev/md0 ... re-adding!
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_image_gpt_fails
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_image_gpt_fails ... ok
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device_missing_device
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device_missing_device ... ok
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device_with_volume_name
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device_with_volume_name ... ok
+   ERROR [ironic_python_agent.disk_utils] Failed to fix GPT partition on disk /dev/sda for node None. Error: Don't call ironic_lib.utils.execute() / processutils.execute() or similar functions in tests!
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_partition_image
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_partition_image ... ok
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_get_volume_name_of_raid_device
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_get_volume_name_of_raid_device ... ok
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_get_volume_name_of_raid_device_invalid
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_get_volume_name_of_raid_device_invalid ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_partition_image_exception
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_partition_image_exception ... ok
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_bios_gpt
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_bios_gpt ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_partition_image_exception_image_mb
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_partition_image_exception_image_mb ... ok
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_bios_msdos
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_bios_msdos ... ok
+   ERROR [ironic_python_agent.disk_utils] Failed to fix GPT partition on disk /dev/sda for node None. Error: Don't call ironic_lib.utils.execute() / processutils.execute() or similar functions in tests!
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_uefi_gpt
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_uefi_gpt ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_partition_image_no_node_uuid
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_partition_image_no_node_uuid ... ok
+   ERROR [ironic_python_agent.disk_utils] Failed to fix GPT partition on disk /dev/sda for node None. Error: Don't call ironic_lib.utils.execute() / processutils.execute() or similar functions in tests!
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_uefi_gpt_efi_provided
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_uefi_gpt_efi_provided ... ok
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_partition_image_no_node_uuid_uefi
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_partition_image_no_node_uuid_uefi ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_apply_net_firmware_update
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_apply_net_firmware_update ... ok
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_uefi_gpt_esp_not_found
+ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_uefi_gpt_esp_not_found ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_filter_images
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_filter_images ... ok
+ironic_python_agent.tests.unit.test_utils.TestCheckVirtualMedia.test_check_vmedia_device
+ironic_python_agent.tests.unit.test_utils.TestCheckVirtualMedia.test_check_vmedia_device ... ok
+   ERROR [root] Duplicate componentFlavor MT_0000000540
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_filter_images_duplicate_component_flavor_exception
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_filter_images_duplicate_component_flavor_exception ... ok
+ironic-python-agent: Device sdh was disqualified as virtual media. Type: other, Transport: usb
+ironic_python_agent.tests.unit.test_utils.TestCheckVirtualMedia.test_check_vmedia_device_other
+ironic_python_agent.tests.unit.test_utils.TestCheckVirtualMedia.test_check_vmedia_device_other ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_validate_images_schema
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_validate_images_schema ... ok
+ironic-python-agent: Excluding device sdh1 from virtual mediaconsideration as it is a partition.
+   ERROR [root] Invalid parameters for image {'url': 'http://10.10.10.10/firmware_images/fw2.bin', 'checksum': 'a94e683ea16d9ae44768f0a65942234c', 'checksumType': 'sha512', 'component': 'MT_0000000652', 'version': '24.34.1002'},please provide the following parameters url, checksum, checksumType, componentFlavor, version
+ironic_python_agent.tests.unit.test_utils.TestCheckVirtualMedia.test_check_vmedia_device_part
+ironic_python_agent.tests.unit.test_utils.TestCheckVirtualMedia.test_check_vmedia_device_part ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_validate_images_schema_invalid_parameter
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaFirmwareImages.test_validate_images_schema_invalid_parameter ... ok
+ironic_python_agent.tests.unit.test_utils.TestCheckVirtualMedia.test_check_vmedia_device_rom
+ironic_python_agent.tests.unit.test_utils.TestCheckVirtualMedia.test_check_vmedia_device_rom ... ok
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestUpdatenvidiaNicFirmwareSettings.test_update_nvidia_nic_firmware_settings_exception
+ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestUpdatenvidiaNicFirmwareSettings.test_update_nvidia_nic_firmware_settings_exception ... ok
+ironic-python-agent: Device sdh was disqualified as virtual media. Type: disk, Transport: sata
+ironic_python_agent.tests.unit.test_utils.TestCheckVirtualMedia.test_check_vmedia_device_sata
+ironic_python_agent.tests.unit.test_utils.TestCheckVirtualMedia.test_check_vmedia_device_sata ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_detect_cna_card
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_detect_cna_card ... ok
+ironic-python-agent: Device sdh was disqualified as virtual media. Type: other, Transport: scsi
+ironic_python_agent.tests.unit.test_utils.TestCheckVirtualMedia.test_check_vmedia_device_scsi
+ironic_python_agent.tests.unit.test_utils.TestCheckVirtualMedia.test_check_vmedia_device_scsi ... ok
+ WARNING [root] Something went wrong when readlink for interface eth2. Error: fake
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_detect_cna_card_execute_error
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_detect_cna_card_execute_error ... ok
+ironic-python-agent: Device sdh appears to not qualify as virtual due to the device size. Size: 1610612736000
+ironic-python-agent: Device sdh was disqualified as virtual media. Type: disk, Transport: usb
+ironic_python_agent.tests.unit.test_utils.TestCheckVirtualMedia.test_check_vmedia_device_too_large
+ironic_python_agent.tests.unit.test_utils.TestCheckVirtualMedia.test_check_vmedia_device_too_large ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_detect_cna_card_no_i40e_driver
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_detect_cna_card_no_i40e_driver ... ok
+ironic_python_agent.tests.unit.test_utils.TestUnmountOfConfig.test__unmount_any_config_drives
+ironic_python_agent.tests.unit.test_utils.TestUnmountOfConfig.test__unmount_any_config_drives ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_disable_embedded_lldp_agent_in_cna_card
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_disable_embedded_lldp_agent_in_cna_card ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_disable_embedded_lldp_agent_write_error
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_disable_embedded_lldp_agent_write_error ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_disable_embedded_lldp_agent_wrong_dir_path
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_disable_embedded_lldp_agent_wrong_dir_path ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_evaluate_hardware_support_no_cna_card_detected
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_evaluate_hardware_support_no_cna_card_detected ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_evaluate_hardware_support_with_collect_lldp_disabled
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_evaluate_hardware_support_with_collect_lldp_disabled ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_evaluate_hardware_support_with_collect_lldp_enabled
+ironic_python_agent.tests.unit.hardware_managers.test_cna.TestIntelCnaHardwareManager.test_evaluate_hardware_support_with_collect_lldp_enabled ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_detect_hardware
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_detect_hardware ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_detect_hardware_error
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_detect_hardware_error ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_detect_hardware_no_mlnx
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_detect_hardware_no_mlnx ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_evaluate_hardware_support
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_evaluate_hardware_support ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_evaluate_hardware_support_no_mlnx
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_evaluate_hardware_support_no_mlnx ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_generate_client_id
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_generate_client_id ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_clean_steps
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_clean_steps ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_interface_info
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_interface_info ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_interface_info_no_ib_interface
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_interface_info_no_ib_interface ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_interface_info_no_mac_address
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_interface_info_no_mac_address ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_interface_info_no_mlnx_interface
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_get_interface_info_no_mlnx_interface ... ok
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_infiniband_address_to_mac
+ironic_python_agent.tests.unit.hardware_managers.test_mlnx.MlnxHardwareManager.test_infiniband_address_to_mac ... ok
+ironic_python_agent.tests.unit.test_base.BlockExecuteTestCase.test_can_mock_execute
+ironic_python_agent.tests.unit.test_base.BlockExecuteTestCase.test_can_mock_execute ... ok
+ironic_python_agent.tests.unit.test_base.BlockExecuteTestCase.test_exception_raised_for_execute
+ironic_python_agent.tests.unit.test_base.BlockExecuteTestCase.test_exception_raised_for_execute ... ok
+ironic_python_agent.tests.unit.test_disk_utils.GetDeviceByteSizeTestCase.test_get_dev_byte_size
+ironic_python_agent.tests.unit.test_disk_utils.GetDeviceByteSizeTestCase.test_get_dev_byte_size ... ok
+ironic_python_agent.tests.unit.test_disk_utils.GetPartitionTableTypeTestCase.test_gpt
+ironic_python_agent.tests.unit.test_disk_utils.GetPartitionTableTypeTestCase.test_gpt ... ok
+ironic_python_agent.tests.unit.test_disk_utils.GetPartitionTableTypeTestCase.test_msdos
+ironic_python_agent.tests.unit.test_disk_utils.GetPartitionTableTypeTestCase.test_msdos ... ok
+ WARNING [ironic_python_agent.disk_utils] Unable to get partition table type for device hello
+ironic_python_agent.tests.unit.test_disk_utils.GetPartitionTableTypeTestCase.test_unknown
+ironic_python_agent.tests.unit.test_disk_utils.GetPartitionTableTypeTestCase.test_unknown ... ok
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions ... ok
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_disk_label_gpt
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_disk_label_gpt ... ok
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_gpt_with_prep
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_gpt_with_prep ... ok
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_local_boot
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_local_boot ... ok
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_local_boot_gpt_bios
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_local_boot_gpt_bios ... ok
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_local_boot_uefi
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_local_boot_uefi ... ok
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_mbr_with_prep
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_mbr_with_prep ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_find_pair_1st
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_find_pair_1st ... ok
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_with_ephemeral
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_with_ephemeral ... ok
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_with_iscsi_device
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_with_iscsi_device ... ok
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_with_local_device
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_with_local_device ... ok
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_with_nvme_device
+ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_with_nvme_device ... ok
+ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_block_uuid
+ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_block_uuid ... ok
+ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_block_uuid_fallback_to_uuid
+ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_block_uuid_fallback_to_uuid ... ok
+ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_count_mbr_partitions
+ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_count_mbr_partitions ... ok
+ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_count_mbr_partitions_no_logical_partitions
+ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_count_mbr_partitions_no_logical_partitions ... ok
+ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_count_mbr_partitions_wrong_partition_table
+ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_count_mbr_partitions_wrong_partition_table ... ok
+   ERROR [ironic_python_agent.disk_utils] Unable to stat device /dev/disk/by-path/ip-1.2.3.4:5678-iscsi-iqn.fake-lun-9 after attempting to verify 2 times.
+ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_is_block_device_attempts
+ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_is_block_device_attempts ... ok
+   ERROR [ironic_python_agent.disk_utils] Unable to stat device /dev/disk/by-path/ip-1.2.3.4:5678-iscsi-iqn.fake-lun-9 after attempting to verify 3 times.
+ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_is_block_device_raises
+ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_is_block_device_raises ... ok
+ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_is_block_device_works
+ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_is_block_device_works ... ok
+ironic_python_agent.tests.unit.test_efi_utils.TestRunEfiBootmgr.test__run_efibootmgr
+ironic_python_agent.tests.unit.test_efi_utils.TestRunEfiBootmgr.test__run_efibootmgr ... ok
+ironic_python_agent.tests.unit.test_efi_utils.TestRunEfiBootmgr.test__run_efibootmgr_no_bootloaders
+ironic_python_agent.tests.unit.test_efi_utils.TestRunEfiBootmgr.test__run_efibootmgr_no_bootloaders ... ok
+ironic_python_agent.tests.unit.test_encoding.TestSerializableComparable.test_childclass_equal
+ironic_python_agent.tests.unit.test_encoding.TestSerializableComparable.test_childclass_equal ... ok
+ironic_python_agent.tests.unit.test_encoding.TestSerializableComparable.test_childclass_hash
+ironic_python_agent.tests.unit.test_encoding.TestSerializableComparable.test_childclass_hash ... ok
+ironic_python_agent.tests.unit.test_encoding.TestSerializableComparable.test_childclass_notequal
+ironic_python_agent.tests.unit.test_encoding.TestSerializableComparable.test_childclass_notequal ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_capture_region
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_capture_region ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_get_inspector
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_get_inspector ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_info_wrapper_file_like
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_info_wrapper_file_like ... ok
+   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: fail
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_info_wrapper_file_like_eats_error
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_info_wrapper_file_like_eats_error ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_find_pair_2nd
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_find_pair_2nd ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_info_wrapper_iter_like
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_info_wrapper_iter_like ... ok
+   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: fail
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_info_wrapper_iter_like_eats_error
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_info_wrapper_iter_like_eats_error ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorsTargeted.test_vhd_table_over_limit
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorsTargeted.test_vhd_table_over_limit ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorsTargeted.test_vhd_table_under_limit
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorsTargeted.test_vhd_table_under_limit ... ok
+ WARNING [root] The root device was not detected in 27 seconds
+ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_disks_timeout
+ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_disks_timeout ... ok
+ WARNING [root] The root device was not detected in 45 seconds
+ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_disks_timeout_configured
+ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_disks_timeout_configured ... ok
+ WARNING [root] The root device was not detected in 27 seconds
+ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_disks_timeout_unconfigured
+ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_disks_timeout_unconfigured ... ok
+ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_no_wait_for_disks
+ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_no_wait_for_disks ... ok
+ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_waits_for_disks
+ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_waits_for_disks ... ok
+ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_waits_for_disks_configured
+ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_waits_for_disks_configured ... ok
+ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_waits_for_disks_nonconfigured
+ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_waits_for_disks_nonconfigured ... ok
+ WARNING [root] No hardware manager was able to handle interface foobar
+ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces
+ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces ... ok
+ WARNING [root] Cannot find detailed information about interface eth0
+ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_no_carrier
+ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_no_carrier ... ok
+ WARNING [root] Cannot find detailed information about interface eth0
+ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_biosdevname
+ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_biosdevname ... ok
+ WARNING [root] Cannot find detailed information about interface bond0
+ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_bond
+ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_bond ... ok
+ WARNING [root] Cannot find detailed information about interface eth0
+ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_lldp
+ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_lldp ... ok
+ WARNING [root] Cannot find detailed information about interface eth0
 ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_lldp_error
 ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_lldp_error ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_no_parallel_by_default
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_no_parallel_by_default ... ok
  WARNING [root] Cannot find detailed information about interface eth0
 ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_vendor_info
 ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_interfaces_with_vendor_info ... ok
@@ -9430,10 +10291,6 @@
  WARNING [root] Cannot find detailed information about interface eth0.101
 ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_vlan_interfaces_using_lldp
 ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_vlan_interfaces_using_lldp ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_no_parallel_by_default_protected_device
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_no_parallel_by_default_protected_device ... ok
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_without_disk
-ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_without_disk ... ok
  WARNING [root] Cannot find detailed information about interface eth0
  WARNING [root] Cannot find detailed information about interface eth1
  WARNING [root] Cannot find detailed information about interface eth0.100
@@ -9442,6 +10299,592 @@
  WARNING [root] Cannot find detailed information about interface eth1.103
 ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_vlan_interfaces_using_lldp_all
 ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_vlan_interfaces_using_lldp_all ... ok
+ WARNING [root] Cannot find detailed information about interface eth0
+ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_vlan_invalid_int
+ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_vlan_invalid_int ... ok
+   ERROR [ironic_python_agent.inspector] inspector url error 400: <MagicMock name='post().content.decode()' id='4113550048'>, proceeding with lookup
+ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_error
+ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_error ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_find_timeout
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_find_timeout ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_pairing_defaults
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_pairing_defaults ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_pairing_no_defaults
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_pairing_no_defaults ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_pairing_raise_missing_config
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_pairing_raise_missing_config ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_pairing_raise_wrong_config
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_pairing_raise_wrong_config ... ok
+   ERROR [ironic_python_agent.burnin] fio (network) failed with error Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'boom'
+Stderr: None
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_no_fio
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_no_fio ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_no_partner
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_no_partner ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_no_role
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_no_role ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_reader
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_reader ... ok
+   ERROR [ironic_python_agent.burnin] fio (network) failed with error Unexpected error while running command.
+Command: None
+Exit code: 16
+Stdout: 'Connection timeout'
+Stderr: None
+   ERROR [ironic_python_agent.burnin] fio (network) failed with error Unexpected error while running command.
+Command: None
+Exit code: 16
+Stdout: 'Connection timeout'
+Stderr: None
+   ERROR [ironic_python_agent.burnin] fio (network) failed with error Unexpected error while running command.
+Command: None
+Exit code: 16
+Stdout: 'Connection refused'
+Stderr: None
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_reader_loop
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_reader_loop ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_reader_w_logfile
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_reader_w_logfile ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_unknown_role
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_unknown_role ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_writer
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_writer ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_writer_w_logfile
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_writer_w_logfile ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_cpu_default
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_cpu_default ... ok
+   ERROR [ironic_python_agent.burnin] stress-ng (cpu) failed with error Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: None
+Stderr: None
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_cpu_no_stress_ng
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_cpu_no_stress_ng ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_cpu_non_default
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_cpu_non_default ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_vm_default
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_vm_default ... ok
+   ERROR [ironic_python_agent.burnin] stress-ng (vm) failed with error Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: None
+Stderr: None
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_vm_no_stress_ng
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_vm_no_stress_ng ... ok
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_vm_non_default
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_vm_non_default ... ok
+ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_add_partition
+ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_add_partition ... ok
+ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_commit
+ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_commit ... ok
+ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_commit_with_device_disconnected
+ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_commit_with_device_disconnected ... ok
+ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_commit_with_device_is_always_busy
+ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_commit_with_device_is_always_busy ... ok
+ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_commit_with_device_is_busy_once
+ironic_python_agent.tests.unit.test_disk_partitioner.DiskPartitionerTestCase.test_commit_with_device_is_busy_once ... ok
+ironic_python_agent.tests.unit.test_disk_utils.FixGptStructsTestCases.test_fix_gpt_structs_exc
+ironic_python_agent.tests.unit.test_disk_utils.FixGptStructsTestCases.test_fix_gpt_structs_exc ... ok
+ironic_python_agent.tests.unit.test_disk_utils.FixGptStructsTestCases.test_fix_gpt_structs_fix_not_required
+ironic_python_agent.tests.unit.test_disk_utils.FixGptStructsTestCases.test_fix_gpt_structs_fix_not_required ... ok
+   ERROR [ironic_python_agent.disk_utils] Security: Unable to safety check image
+   ERROR [ironic_python_agent.disk_utils] Security: Image failed safety check
+ironic_python_agent.tests.unit.test_disk_utils.FixGptStructsTestCases.test_fix_gpt_structs_fix_required
+ironic_python_agent.tests.unit.test_disk_utils.FixGptStructsTestCases.test_fix_gpt_structs_fix_required ... ok
+ironic_python_agent.tests.unit.test_disk_utils.ImageInspectionTest.test_image_inspection_fail_format_error
+ironic_python_agent.tests.unit.test_disk_utils.ImageInspectionTest.test_image_inspection_fail_format_error ... ok
+ironic_python_agent.tests.unit.test_disk_utils.ImageInspectionTest.test_image_inspection_fail_safety_check
+ironic_python_agent.tests.unit.test_disk_utils.ImageInspectionTest.test_image_inspection_fail_safety_check ... ok
+ironic_python_agent.tests.unit.test_disk_utils.ImageInspectionTest.test_image_inspection_pass
+ironic_python_agent.tests.unit.test_disk_utils.ImageInspectionTest.test_image_inspection_pass ... ok
+ironic_python_agent.tests.unit.test_disk_utils.PopulateImageTestCase.test_populate_qcow2_image
+ironic_python_agent.tests.unit.test_disk_utils.PopulateImageTestCase.test_populate_qcow2_image ... ok
+ WARNING [ironic_python_agent.disk_utils] Failed to verify partition tables on device /dev/fake: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: None
+Stderr: None
+ironic_python_agent.tests.unit.test_disk_utils.PopulateImageTestCase.test_populate_raw_image
+ironic_python_agent.tests.unit.test_disk_utils.PopulateImageTestCase.test_populate_raw_image ... ok
+ironic_python_agent.tests.unit.test_disk_utils.TriggerDeviceRescanTestCase.test_custom_attempts
+ironic_python_agent.tests.unit.test_disk_utils.TriggerDeviceRescanTestCase.test_custom_attempts ... ok
+ironic_python_agent.tests.unit.test_disk_utils.TriggerDeviceRescanTestCase.test_fails
+ironic_python_agent.tests.unit.test_disk_utils.TriggerDeviceRescanTestCase.test_fails ... ok
+ironic_python_agent.tests.unit.test_disk_utils.TriggerDeviceRescanTestCase.test_trigger
+ironic_python_agent.tests.unit.test_disk_utils.TriggerDeviceRescanTestCase.test_trigger ... ok
+ WARNING [ironic_python_agent.dmi_inspector] Failed to parse Handle type in dmi output: list index out of range
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_dmidecode_info_bad_data
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_dmidecode_info_bad_data ... ok
+   ERROR [ironic_python_agent.utils] failed to run dmidecode: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: None
+Stderr: None
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_dmidecode_info_failure
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_dmidecode_info_failure ... ok
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_dmidecode_info_ok
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_dmidecode_info_ok ... ok
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_parse_dmi_bios
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_parse_dmi_bios ... ok
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_parse_dmi_cpu
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_parse_dmi_cpu ... ok
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_parse_dmi_memory
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_parse_dmi_memory ... ok
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_save_data
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_save_data ... ok
+ WARNING [ironic_python_agent.dmi_inspector] Failed to process memory dmi data: 'Handle'
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_save_data_error_handle
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_save_data_error_handle ... ok
+ WARNING [ironic_python_agent.dmi_inspector] Failed to process memory dmi data: 'Number Of Devices'
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_save_data_error_number_of_devices
+ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_save_data_error_number_of_devices ... ok
+ironic_python_agent.tests.unit.test_encoding.TestSerializable.test_baseclass_serialize
+ironic_python_agent.tests.unit.test_encoding.TestSerializable.test_baseclass_serialize ... ok
+ironic_python_agent.tests.unit.test_encoding.TestSerializable.test_childclass_serialize
+ironic_python_agent.tests.unit.test_encoding.TestSerializable.test_childclass_serialize ... ok
+/bin/sh: line 1: mkisofs: command not found
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_bad_iso_qcow2
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_bad_iso_qcow2 ... skipped 'mkisofs not installed'
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_from_file_reads_minimum
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_from_file_reads_minimum ... ok
+/bin/sh: line 1: mkisofs: command not found
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_iso_9660
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_iso_9660 ... skipped 'mkisofs not installed'
+/bin/sh: line 1: mkisofs: command not found
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_iso_udf
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_iso_udf ... skipped 'mkisofs not installed'
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qcow2
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qcow2 ... ok
+ WARNING [ironic_python_agent.format_inspector] Found unknown feature bit in byte 7: 0b0/0b0
+ WARNING [ironic_python_agent.format_inspector] Found unknown feature bit in byte 0: 0b0/0b1111
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qcow2_feature_flag_checks
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qcow2_feature_flag_checks ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qcow2_invalid
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qcow2_invalid ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qcow2_safety_checks
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qcow2_safety_checks ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qed_always_unsafe
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qed_always_unsafe ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vdi
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vdi ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vdi_invalid
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vdi_invalid ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vhd
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vhd ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vhd_invalid
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vhd_invalid ... ok
+ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_retries
+ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_retries ... ok
+ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_retries_on_50X_error
+ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_retries_on_50X_error ... ok
+ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_retry_on_50X_and_succeed
+ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_retry_on_50X_and_succeed ... ok
+ WARNING [ironic_python_agent.inspector] Connection error when accessing url1, trying the next URL. Error: 
+ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_several_urls
+ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_several_urls ... ok
+ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_ok
+ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_ok ... ok
+ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_send_failure
+ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_send_failure ... ok
+ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_use_api_url
+ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_use_api_url ... ok
+ WARNING [ironic_python_agent.inspector] Connection error when accessing http://url1/v1/continue_inspection, trying the next URL. Error: 
+ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_use_several_api_urls
+ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_use_several_api_urls ... ok
+ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_both_succeed
+ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_both_succeed ... ok
+ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_dispatch_to_all_managers_both_succeed
+ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_dispatch_to_all_managers_both_succeed ... ok
+ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_dispatch_to_all_managers_generic_method_only
+ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_dispatch_to_all_managers_generic_method_only ... ok
+ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_dispatch_to_all_managers_mainline_fails
+ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_dispatch_to_all_managers_mainline_fails ... ok
+ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_dispatch_to_all_managers_mainline_only
+ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_dispatch_to_all_managers_mainline_only ... ok
+ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_dispatch_to_all_managers_manager_method_not_found
+ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_dispatch_to_all_managers_manager_method_not_found ... ok
+   ERROR [root] Unexpected error dispatching unexpected_fail to manager <ironic_python_agent.tests.unit.test_multi_hardware.FakeMainlineHardwareManager object at 0xf46a8e58>: A problem was encountered
+Traceback (most recent call last):
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/hardware.py", line 3468, in dispatch_to_all_managers
+    response = getattr(manager, method)(*args, **kwargs)
+               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/tests/unit/test_multi_hardware.py", line 32, in wrapper
+    return fn(self, *args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/tests/unit/test_multi_hardware.py", line 101, in unexpected_fail
+    raise RuntimeError('A problem was encountered')
+RuntimeError: A problem was encountered
+ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_dispatch_to_all_managers_method_fails
+ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_dispatch_to_all_managers_method_fails ... ok
+ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_generic_method_only
+ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_generic_method_only ... ok
+ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_mainline_fails
+ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_mainline_fails ... ok
+ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_mainline_method_only
+ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_mainline_method_only ... ok
+ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_manager_method_not_found
+ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_manager_method_not_found ... ok
+   ERROR [root] Unexpected error dispatching unexpected_fail to manager <ironic_python_agent.tests.unit.test_multi_hardware.FakeMainlineHardwareManager object at 0xf460f4b0>: A problem was encountered
+Traceback (most recent call last):
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/hardware.py", line 3512, in dispatch_to_managers
+    return getattr(manager, method)(*args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/tests/unit/test_multi_hardware.py", line 32, in wrapper
+    return fn(self, *args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/tests/unit/test_multi_hardware.py", line 101, in unexpected_fail
+    raise RuntimeError('A problem was encountered')
+RuntimeError: A problem was encountered
+ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_method_fails
+ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_method_fails ... ok
+ironic_python_agent.tests.unit.test_multi_hardware.TestNoHardwareManagerLoading.test_no_managers_found
+ironic_python_agent.tests.unit.test_multi_hardware.TestNoHardwareManagerLoading.test_no_managers_found ... ok
+ironic_python_agent.tests.unit.test_partition_utils.IsDiskLargerThanMaxSizeTestCases.test_is_disk_larger_than_max_size_exc
+ironic_python_agent.tests.unit.test_partition_utils.IsDiskLargerThanMaxSizeTestCases.test_is_disk_larger_than_max_size_exc ... ok
+ironic_python_agent.tests.unit.test_partition_utils.IsDiskLargerThanMaxSizeTestCases.test_is_disk_larger_than_max_size_false
+ironic_python_agent.tests.unit.test_partition_utils.IsDiskLargerThanMaxSizeTestCases.test_is_disk_larger_than_max_size_false ... ok
+ironic_python_agent.tests.unit.test_partition_utils.IsDiskLargerThanMaxSizeTestCases.test_is_disk_larger_than_max_size_true
+ironic_python_agent.tests.unit.test_partition_utils.IsDiskLargerThanMaxSizeTestCases.test_is_disk_larger_than_max_size_true ... ok
+ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image
+ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image ... ok
+ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_disabled
+ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_disabled ... ok
+ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_flags
+ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_flags ... ok
+ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_flags_disabled
+ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_flags_disabled ... ok
+ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_just_fails
+ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_just_fails ... ok
+ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_just_fails_disabled
+ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_just_fails_disabled ... ok
+ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_retries
+ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_retries ... ok
+ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_retries_alternate_error
+ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_retries_alternate_error ... ok
+ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_retries_alternate_error_disabled
+ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_retries_alternate_error_disabled ... ok
+ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_retries_and_fails
+ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_retries_and_fails ... ok
+ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_retries_and_fails_disabled
+ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_retries_and_fails_disabled ... ok
+ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_retries_disabled
+ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_retries_disabled ... ok
+ironic_python_agent.tests.unit.test_qemu_img.ImageInfoTestCase.test_image_info_path_doesnt_exist_disabled
+ironic_python_agent.tests.unit.test_qemu_img.ImageInfoTestCase.test_image_info_path_doesnt_exist_disabled ... ok
+ironic_python_agent.tests.unit.test_qemu_img.ImageInfoTestCase.test_image_info_path_exists_disabled
+ironic_python_agent.tests.unit.test_qemu_img.ImageInfoTestCase.test_image_info_path_exists_disabled ... ok
+ironic_python_agent.tests.unit.test_qemu_img.ImageInfoTestCase.test_image_info_path_exists_safe
+ironic_python_agent.tests.unit.test_qemu_img.ImageInfoTestCase.test_image_info_path_exists_safe ... ok
+ironic_python_agent.tests.unit.test_qemu_img.ImageInfoTestCase.test_image_info_path_exists_unsafe
+ironic_python_agent.tests.unit.test_qemu_img.ImageInfoTestCase.test_image_info_path_exists_unsafe ... ok
+ironic-python-agent: Excluding device sda1 from virtual mediaconsideration as it is a partition.
+ironic-python-agent: Found possible vmedia candidate /dev/sda2, however the device failed vmedia validity checking.
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__find_vmedia_device_by_labels
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__find_vmedia_device_by_labels ... ok
+ironic-python-agent: Was unable to execute the lsblk command. Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: None
+Stderr: None
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__find_vmedia_device_by_labels_handles_exec_error
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__find_vmedia_device_by_labels_handles_exec_error ... ok
+ironic-python-agent: Did not identify any virtual media candidates devices.
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__find_vmedia_device_by_labels_not_found
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__find_vmedia_device_by_labels_not_found ... ok
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_device
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_device ... ok
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_params
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_params ... ok
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_params_by_device
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_params_by_device ... ok
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_params_by_device_device_invalid
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_params_by_device_device_invalid ... ok
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_params_cannot_find_dev
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_params_cannot_find_dev ... ok
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__read_params_from_file
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__read_params_from_file ... ok
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__read_params_from_file_fail
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__read_params_from_file_fail ... ok
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test_get_agent_params_from_cache
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test_get_agent_params_from_cache ... ok
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test_get_agent_params_kernel_cmdline
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test_get_agent_params_kernel_cmdline ... ok
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test_get_agent_params_vmedia
+ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test_get_agent_params_vmedia ... ok
+ironic-python-agent: line 1.
+ironic-python-agent: line 2 message
+   ERROR [ironic_python_agent.utils] foo
+   ERROR [ironic_python_agent.utils] bar
+   ERROR [ironic_python_agent.utils] baz
+   ERROR [ironic_python_agent.utils] foo
+ironic_python_agent.tests.unit.test_utils.TestCheckEarlyLogging.test_early_logging_goes_to_logger
+ironic_python_agent.tests.unit.test_utils.TestCheckEarlyLogging.test_early_logging_goes_to_logger ... ok
+ironic_python_agent.tests.unit.test_utils.TestFailures.test_get_error
+ironic_python_agent.tests.unit.test_utils.TestFailures.test_get_error ... ok
+ironic_python_agent.tests.unit.test_utils.TestFailures.test_raise
+ironic_python_agent.tests.unit.test_utils.TestFailures.test_raise ... ok
+ironic_python_agent.tests.unit.test_utils.TestRemoveKeys.test_remove_keys
+ironic_python_agent.tests.unit.test_utils.TestRemoveKeys.test_remove_keys ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vhdx
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vhdx ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vhdx_invalid
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vhdx_invalid ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk ... ok
+5+0 records in
+5+0 records out
+5242880 bytes (5.2 MB, 5.0 MiB) copied, 0.0407745 s, 129 MB/s
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_mem_limit
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_mem_limit ... ok
+5+0 records in
+5+0 records out
+5242880 bytes (5.2 MB, 5.0 MiB) copied, 0.0400201 s, 131 MB/s
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_mem_limit_stream_optimized
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_mem_limit_stream_optimized ... ok
+   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Wrong descriptor location
+   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Wrong descriptor location
+   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Wrong descriptor location
+   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Wrong descriptor location
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_offset
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_offset ... ok
+   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Wrong descriptor location
+   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Wrong descriptor location
+   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Wrong descriptor location
+   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Wrong descriptor location
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_offset_stream_optimized
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_offset_stream_optimized ... ok
+   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Signature KDMV not found: b'# Co'
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_invalid
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_invalid ... ok
+   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Signature KDMV not found: b'# Co'
+ WARNING [ironic_python_agent.format_inspector] Unsupported VMDK format b'someunknownformat'
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_invalid_type
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_invalid_type ... ok
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_stream_optimized
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_stream_optimized ... ok
+ironic_python_agent.tests.unit.test_hardware.TestAPIClientSaveAndUse.test_save_api_client
+ironic_python_agent.tests.unit.test_hardware.TestAPIClientSaveAndUse.test_save_api_client ... ok
+ironic_python_agent.tests.unit.test_hardware.TestAPIClientSaveAndUse.test_update_node_cache
+ironic_python_agent.tests.unit.test_hardware.TestAPIClientSaveAndUse.test_update_node_cache ... ok
+ WARNING [root] Device /dev/fake1 is inaccessible, skipping... Error: nope
+ironic_python_agent.tests.unit.test_hardware.TestCollectSystemLogs.test__collect_udev
+ironic_python_agent.tests.unit.test_hardware.TestCollectSystemLogs.test__collect_udev ... ok
+ironic_python_agent.tests.unit.test_hardware.TestCollectSystemLogs.test_collect_system_logs
+ironic_python_agent.tests.unit.test_hardware.TestCollectSystemLogs.test_collect_system_logs ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__ata_erase_security_enabled_set_password_exception
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__ata_erase_security_enabled_set_password_exception ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__ata_erase_security_enabled_unlock_exception
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__ata_erase_security_enabled_unlock_exception ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__ata_erase_security_erase_exec_exception
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__ata_erase_security_erase_exec_exception ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__find_pstore_mount_point
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__find_pstore_mount_point ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__find_pstore_mount_point_no_pstore
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__find_pstore_mount_point_no_pstore ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__get_device_info
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__get_device_info ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__get_md_uuid
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__get_md_uuid ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_linux_raid_member
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_linux_raid_member ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_linux_raid_member_false
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_linux_raid_member_false ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device ... ok
+ WARNING [root] Could not determine if /dev/sdfake is aread-only device. Error: 
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device_error
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device_error ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device_false
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device_false ... ok
+ WARNING [root] Could not determine if /dev/sdfake1 is aread-only device. Error: 
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device_partition_error
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device_partition_error ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device_partition_ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_read_only_device_partition_ok ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_virtual_media_device_exists
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_virtual_media_device_exists ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_virtual_media_device_exists_no_match
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_virtual_media_device_exists_no_match ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_virtual_media_device_path_doesnt_exist
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test__is_virtual_media_device_path_doesnt_exist ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_apply_configuration
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_apply_configuration ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_apply_configuration_no_delete
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_apply_configuration_no_delete ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_clean_steps_exist
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_clean_steps_exist ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_clean_uefi_invalid
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_clean_uefi_invalid ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_clean_uefi_nvram
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_clean_uefi_nvram ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_clean_uefi_nvram_defaults
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_clean_uefi_nvram_defaults ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_collect_lldp_data
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_collect_lldp_data ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_collect_lldp_data_decode_exception
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_collect_lldp_data_decode_exception ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_collect_lldp_data_netutils_exception
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_collect_lldp_data_netutils_exception ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_device_handling_failures
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_device_handling_failures ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_device_handling_failures_raid5
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_device_handling_failures_raid5 ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_device_handling_failures_raid6
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_device_handling_failures_raid6 ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_efi
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_efi ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_empty_target_raid_config
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_empty_target_raid_config ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_failure_with_nvme
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_failure_with_nvme ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_force_gpt_with_disk_label
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_force_gpt_with_disk_label ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_invalid_hints
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_invalid_hints ... ok
+ WARNING [root] Path /dev/disk/by-path is inaccessible, /dev/disk/by-path/* version of block device name is unavailable Cause: [Errno 2] No such file or directory: '/dev/disk/by-path'
+ WARNING [root] Device /dev/sda is inaccessible, skipping... Error: [Errno 2] No such file or directory: '/dev/sda'
+ WARNING [root] Could not find the SCSI address (HCTL) for device /dev/sda. Skipping
+ WARNING [root] Can't find field vendor for device sda in device class block
+ WARNING [root] Device /dev/sdb is inaccessible, skipping... Error: [Errno 2] No such file or directory: '/dev/sdb'
+ WARNING [root] Could not find the SCSI address (HCTL) for device /dev/sdb. Skipping
+ WARNING [root] Can't find field vendor for device sdb in device class block
+ WARNING [root] Device /dev/md0 is inaccessible, skipping... Error: [Errno 2] No such file or directory: '/dev/md0'
+ WARNING [root] Could not find the SCSI address (HCTL) for device /dev/md0. Skipping
+ WARNING [root] Can't find field vendor for device md0 in device class block
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_invalid_raid_config
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_invalid_raid_config ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_max_is_first_logical
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_max_is_first_logical ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_mismatching_hints
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_mismatching_hints ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_no_max
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_no_max ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_partitions_detected
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_partitions_detected ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_raid_5
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_raid_5 ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_raid_6
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_raid_6 ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_skip_list_existing_device_does_not_match
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_skip_list_existing_device_does_not_match ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_with_complete_skip_list
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_with_complete_skip_list ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_with_hints
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_with_hints ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_with_nvme
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_create_configuration_with_nvme ... ok
+ WARNING [root] Failed to remove partitions on /dev/sda: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'No md superblock detected'
+Stderr: None
+ WARNING [root] Failed to remove partitions on /dev/sdb: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'No md superblock detected'
+Stderr: None
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_delete_configuration
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_delete_configuration ... ok
+   ERROR [root] Unable to clean all softraid correctly. Remaining ['/dev/md0']
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_delete_configuration_failure_blocks_remaining
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_delete_configuration_failure_blocks_remaining ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_delete_configuration_partition
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_delete_configuration_partition ... ok
+ WARNING [root] RAID device /dev/md1 will not be deleted
+ WARNING [root] Software RAID device /dev/md1 is not going to be deleted as its volume name - small - is on the skip list
+ WARNING [root] Software RAID device /dev/md1 was not deleted
+ WARNING [root] Holder disk /dev/sda contains logical disk on the skip list. Deleting just partitions: ['1']
+ WARNING [root] Holder disk /dev/sdb contains logical disk on the skip list. Deleting just partitions: ['1']
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_delete_configuration_skip_list
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_delete_configuration_skip_list ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_deploy_steps_exist
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_deploy_steps_exist ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_erase_disabled
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_erase_disabled ... ok
+   ERROR [root] Failed to invoke secure erase, fallback to shred is not enabled: Error erasing block device: An unknown error occurred erasing block device /dev/sda
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_failed
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_failed ... ok
+ WARNING [root] Failed to invoke secure erase, falling back to shred: Error erasing block device: An unknown error occurred erasing block device /dev/sda
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_failed_continued
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_failed_continued ... ok
+   ERROR [root] Failed to invoke secure erase, fallback to shred is not enabled: Error erasing block device: Block device /dev/sda is frozen and cannot be erased
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_frozen
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_frozen ... ok
+   ERROR [root] Failed to invoke secure erase, fallback to shred is not enabled: Error erasing block device: Block device /dev/sda already has a security password set
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_security_enabled
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_security_enabled ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_security_enabled_unlock_attempt
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_security_enabled_unlock_attempt ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_security_unlock_fallback_pass
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_security_unlock_fallback_pass ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_success
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_success ... ok
+ WARNING [root] Unable to execute `smartctl` utility: boom
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_success_no_smartctl
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_ata_success_no_smartctl ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nosecurity_shred
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nosecurity_shred ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_notsupported_shred
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_notsupported_shred ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nvme_crypto_success
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nvme_crypto_success ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nvme_failed
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nvme_failed ... ok
+   ERROR [root] nvme-cli did not return any supported format modes for device: /dev/nvme0n1
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nvme_format_unsupported
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nvme_format_unsupported ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nvme_userdata_success
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_nvme_userdata_success ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_shred_0_pass_no_zeroize
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_shred_0_pass_no_zeroize ... ok
+   ERROR [root] Erasing block device /dev/sda failed with error 
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_shred_fail_oserror
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_shred_fail_oserror ... ok
+   ERROR [root] Erasing block device /dev/sda failed with error Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: None
+Stderr: None
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_shred_fail_processerror
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_shred_fail_processerror ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_shred_uses_internal_info
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_shred_uses_internal_info ... ok
+ WARNING [root] Refusing to permit ATA Secure Erase as direct ATA commands via the `smartctl` utility with device /dev/sda do not succeed.
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_smartctl_fails_security_fallback_to_shred
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_smartctl_fails_security_fallback_to_shred ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_smartctl_unsupported_shred
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_smartctl_unsupported_shred ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_virtual_media
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_block_device_virtual_media ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_concurrency
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_concurrency ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_concurrency_pool_size
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_concurrency_pool_size ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_express
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_express ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_express_stops_on_safety_failure
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_express_stops_on_safety_failure ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_metadata
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_metadata ... ok
+   ERROR [root] Failed to erase the metadata on device "/dev/sdb". Error: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: 'Booo00000ooommmmm'
+Stderr: None
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_metadata_error
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_metadata_error ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_metadata_safety_check
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_metadata_safety_check ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_no_parallel_by_default
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_no_parallel_by_default ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_no_parallel_by_default_protected_device
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_no_parallel_by_default_protected_device ... ok
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_without_disk
+ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_devices_without_disk ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_pstore
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_erase_pstore ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bios_given_nic_name_ok
@@ -9449,48 +10892,19 @@
  WARNING [root] Executable 'biosdevname' not found
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bios_given_nic_name_oserror
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bios_given_nic_name_oserror ... ok
- WARNING [root] Cannot find detailed information about interface eth0
-ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_vlan_invalid_int
-ironic_python_agent.tests.unit.test_hardware.TestListNetworkInterfaces.test_list_network_vlan_invalid_int ... ok
-ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_already_running
-ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_already_running ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bios_given_nic_name_process_exec_err3
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bios_given_nic_name_process_exec_err3 ... ok
- WARNING [root] Attempted to invoke multipath utilities, but we encountered an error: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'lacking kernel support'
-Stderr: None
-ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_lacking_support
-ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_lacking_support ... ok
- WARNING [root] Attempted to invoke multipath utilities, but we encountered an error: 
-ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_ll_fails
-ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_ll_fails ... ok
-ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_mpathconf
-ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_mpathconf ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bios_given_nic_name_process_exec_err4
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bios_given_nic_name_process_exec_err4 ... ok
-ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_no_multipath
-ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_no_multipath ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_address
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_address ... ok
- WARNING [root] Attempted to determine if multipath tools were present. Not detected. Error recorded: 
-ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_not_found_mpath_config
-ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_not_found_mpath_config ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_address_invalid
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_address_invalid ... ok
  WARNING [root] Invalid IP address meow: 'meow' does not appear to be an IPv4 or IPv6 address
-ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_with_config
-ironic_python_agent.tests.unit.test_hardware.TestMultipathEnabled.test_enable_multipath_with_config ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_address_iterate_channels
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_address_iterate_channels ... ok
- WARNING [root] Mismatched hardware managers versions. Agent version: {'specific': '1'}, node version: {'not_specific': '1'}
-ironic_python_agent.tests.unit.test_hardware.TestVersions.test_check_versions
-ironic_python_agent.tests.unit.test_hardware.TestVersions.test_check_versions ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_address_no_ipmi_device
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_address_no_ipmi_device ... ok
-ironic_python_agent.tests.unit.test_hardware.TestVersions.test_get_current_versions
-ironic_python_agent.tests.unit.test_hardware.TestVersions.test_get_current_versions ... ok
  WARNING [root] Invalid IP address : '' does not appear to be an IPv4 or IPv6 address
  WARNING [root] Invalid IP address : '' does not appear to be an IPv4 or IPv6 address
  WARNING [root] Invalid IP address : '' does not appear to be an IPv4 or IPv6 address
@@ -9504,12 +10918,8 @@
  WARNING [root] Invalid IP address : '' does not appear to be an IPv4 or IPv6 address
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_address_not_available
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_address_not_available ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_delete
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_delete ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_address_random_error
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_address_random_error ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_delete_not_exists
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_delete_not_exists ... ok
  WARNING [root] Cannot get BMC address: Unexpected error while running command.
 Command: None
 Exit code: -
@@ -9517,31 +10927,17 @@
 Stderr: None
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_address_virt
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_address_virt ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_address_zeroed
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_address_zeroed ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_modes
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_modes ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_mac
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_mac ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_modes_exists
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_modes_exists ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_mac_invalid
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_mac_invalid ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_on
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_on ... ok
  WARNING [root] Invalid ipmitool output meow
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_mac_iterate_channels
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_mac_iterate_channels ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_owner
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_owner ... ok
-   ERROR [ironic_python_agent.extensions.standby] Timeout reached waiting for a chunk of data from a remote server.
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 1 of 2: Error downloading image: Download of image fake_id failed: Unable to write image to device /dev/foo. Error: Error downloading image: Download of image fake_id failed: Timed out reading next chunk from webserver
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_mac_no_ipmi_device
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_mac_no_ipmi_device ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_owner_and_group
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_plain_content_with_owner_and_group ... ok
  WARNING [root] Invalid ipmitool output 
  WARNING [root] Invalid ipmitool output 
  WARNING [root] Invalid ipmitool output 
@@ -9553,16 +10949,10 @@
  WARNING [root] Invalid ipmitool output 
  WARNING [root] Invalid ipmitool output 
  WARNING [root] Invalid ipmitool output 
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_url
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_url ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_mac_not_available
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_mac_not_available ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_url_formatting
-ironic_python_agent.tests.unit.test_inject_files.TestInjectOne.test_url_formatting ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_mac_random_error
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_mac_random_error ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_content_and_deleted
-ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_content_and_deleted ... ok
  WARNING [root] Cannot get BMC MAC address: Unexpected error while running command.
 Command: None
 Exit code: -
@@ -9570,51 +10960,22 @@
 Stderr: None
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_mac_virt
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_mac_virt ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_missing_path
-ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_missing_path ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_no_directories
-ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_no_directories ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_mac_zeroed
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_mac_zeroed ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_numeric_fields
-ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_numeric_fields ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_v6address_channel_7
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_v6address_channel_7 ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_root_without_on
-ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_root_without_on ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_unknown_fields
-ironic_python_agent.tests.unit.test_inject_files.TestValidateFiles.test_unknown_fields ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_v6address_dynamic_address
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_v6address_dynamic_address ... ok
-ironic_python_agent.tests.unit.test_inspector.TestCollectExtraHardware.test_benchmarks
-ironic_python_agent.tests.unit.test_inspector.TestCollectExtraHardware.test_benchmarks ... ok
-   ERROR [ironic_python_agent.utils] failed to run hardware-detect utility: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: None
-Stderr: None
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_v6address_invalid_enables
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_v6address_invalid_enables ... ok
-ironic_python_agent.tests.unit.test_inspector.TestCollectExtraHardware.test_execute_failed
-ironic_python_agent.tests.unit.test_inspector.TestCollectExtraHardware.test_execute_failed ... ok
-ironic_python_agent.tests.unit.test_inspector.TestCollectExtraHardware.test_no_benchmarks
-ironic_python_agent.tests.unit.test_inspector.TestCollectExtraHardware.test_no_benchmarks ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_v6address_invalid_get_address
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_v6address_invalid_get_address ... ok
-   ERROR [ironic_python_agent.utils] JSON returned from hardware-detect cannot be decoded: Expecting value: line 1 column 1 (char 0)
-ironic_python_agent.tests.unit.test_inspector.TestCollectExtraHardware.test_parsing_failed
-ironic_python_agent.tests.unit.test_inspector.TestCollectExtraHardware.test_parsing_failed ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_v6address_ipmitool_invalid_stdout_format
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_v6address_ipmitool_invalid_stdout_format ... ok
-   ERROR [ironic_python_agent.utils] collector <Mock name='mock.name' id='3023960272'> failed: boom
-ironic_python_agent.tests.unit.test_inspector.TestInspect.test_collector_failed
-ironic_python_agent.tests.unit.test_inspector.TestInspect.test_collector_failed ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_v6address_no_ipmi_device
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_v6address_no_ipmi_device ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_v6address_not_enabled
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_v6address_not_enabled ... ok
-ironic_python_agent.tests.unit.test_inspector.TestInspect.test_collectors_option
-ironic_python_agent.tests.unit.test_inspector.TestInspect.test_collectors_option ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_v6address_static_address_both
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_bmc_v6address_static_address_both ... ok
  WARNING [root] Cannot get BMC v6 address: Unexpected error while running command.
@@ -9628,33 +10989,22 @@
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_boot_info_bios ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_boot_info_pxe_interface
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_boot_info_pxe_interface ... ok
-ironic_python_agent.tests.unit.test_inspector.TestInspect.test_disabled
-ironic_python_agent.tests.unit.test_inspector.TestInspect.test_disabled ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_boot_info_uefi
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_boot_info_uefi ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_clean_steps
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_clean_steps ... ok
-   ERROR [ironic_python_agent.utils] boom
-ironic_python_agent.tests.unit.test_inspector.TestInspect.test_extensions_failed
-ironic_python_agent.tests.unit.test_inspector.TestInspect.test_extensions_failed ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_component_devices
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_component_devices ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_cpus_illegal_flags
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_cpus_illegal_flags ... ok
-ironic_python_agent.tests.unit.test_inspector.TestInspect.test_inspector_error
-ironic_python_agent.tests.unit.test_inspector.TestInspect.test_inspector_error ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_cpus_max_mhz_and_flag_fallback
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_cpus_max_mhz_and_flag_fallback ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_cpus_max_mhz_flag_fallback
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_cpus_max_mhz_flag_fallback ... ok
-ironic_python_agent.tests.unit.test_inspector.TestInspect.test_mdns
-ironic_python_agent.tests.unit.test_inspector.TestInspect.test_mdns ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_cpus_multi
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_cpus_multi ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_cpus_no_flags
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_cpus_no_flags ... ok
-ironic_python_agent.tests.unit.test_inspector.TestInspect.test_ok
-ironic_python_agent.tests.unit.test_inspector.TestInspect.test_ok ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_holder_disks
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_holder_disks ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_holder_disks_broken_raid0
@@ -9663,14 +11013,10 @@
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_holder_disks_poisoned_output ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_holder_disks_unexpected_devices
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_holder_disks_unexpected_devices ... ok
-ironic_python_agent.tests.unit.test_inspector.TestInspect.test_ok_with_ironic_url
-ironic_python_agent.tests.unit.test_inspector.TestInspect.test_ok_with_ironic_url ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_holder_disks_with_nvme
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_holder_disks_with_nvme ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_holder_disks_with_whole_device
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_holder_disks_with_whole_device ... ok
-ironic_python_agent.tests.unit.test_multi_hardware.TestNoHardwareManagerLoading.test_no_managers_found
-ironic_python_agent.tests.unit.test_multi_hardware.TestNoHardwareManagerLoading.test_no_managers_found ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_memory_arm64_lshw
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_memory_arm64_lshw ... ok
  WARNING [root] Could not get real physical RAM from lshw: 
@@ -9678,8 +11024,6 @@
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_memory_lshw_exception ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_memory_lshw_list
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_memory_lshw_list ... ok
-ironic_python_agent.tests.unit.test_multi_hardware_clean_steps.TestMultipleHardwareManagerCleanSteps.test_clean_step_ordering
-ironic_python_agent.tests.unit.test_multi_hardware_clean_steps.TestMultipleHardwareManagerCleanSteps.test_clean_step_ordering ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_memory_psutil_bank_size
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_memory_psutil_bank_size ... ok
    ERROR [root] Cannot fetch total memory size using psutil version 5
@@ -9699,8 +11043,6 @@
 AttributeError
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_memory_psutil_exception_v1
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_memory_psutil_exception_v1 ... ok
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_convert_to_sparse
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_convert_to_sparse ... ok
    ERROR [root] Cannot fetch total memory size using psutil version 5
 Traceback (most recent call last):
   File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/hardware.py", line 1648, in get_memory
@@ -9716,23 +11058,12 @@
   File "/usr/lib/python3.12/unittest/mock.py", line 1198, in _execute_mock_call
     raise effect
 AttributeError
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_gpt_disk_label
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_gpt_disk_label ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_memory_psutil_exception_v2
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_memory_psutil_exception_v2 ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_memory_psutil_v1
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_memory_psutil_v1 ... ok
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_no_configdrive_partition
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_no_configdrive_partition ... ok
-   ERROR [ironic_python_agent.extensions.standby] Timeout reached waiting for a chunk of data from a remote server.
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_no_ephemeral_partition
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_no_ephemeral_partition ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_stream_raw_image_onto_device_socket_read_timeout
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_stream_raw_image_onto_device_socket_read_timeout ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_memory_psutil_v2
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_memory_psutil_v2 ... ok
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_no_root_partition
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_no_root_partition ... ok
  WARNING [root] Device /dev/sda is inaccessible, skipping... Error: [Errno 2] No such file or directory: '/dev/sda'
  WARNING [root] Can't find field vendor for device sda in device class block
  WARNING [root] Device /dev/sdb is inaccessible, skipping... Error: [Errno 2] No such file or directory: '/dev/sdb'
@@ -9745,51 +11076,21 @@
  WARNING [root] Can't find field vendor for device dm-0 in device class block
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device ... ok
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_no_swap_partition
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_no_swap_partition ... ok
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 0 of 9: Error downloading image: Download of image fake_id failed: Unable to write image to device /dev/foo. Error: Surprise!!!1!
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 1 of 9: Error downloading image: Download of image fake_id failed: Unable to write image to device /dev/foo. Error: Surprise!!!1!
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 2 of 9: Error downloading image: Download of image fake_id failed: Unable to write image to device /dev/foo. Error: Surprise!!!1!
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 3 of 9: Error downloading image: Download of image fake_id failed: Unable to write image to device /dev/foo. Error: Surprise!!!1!
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 4 of 9: Error downloading image: Download of image fake_id failed: Unable to write image to device /dev/foo. Error: Surprise!!!1!
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 5 of 9: Error downloading image: Download of image fake_id failed: Unable to write image to device /dev/foo. Error: Surprise!!!1!
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 6 of 9: Error downloading image: Download of image fake_id failed: Unable to write image to device /dev/foo. Error: Surprise!!!1!
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 7 of 9: Error downloading image: Download of image fake_id failed: Unable to write image to device /dev/foo. Error: Surprise!!!1!
- WARNING [ironic_python_agent.extensions.standby] Image download failed, 8 of 9: Error downloading image: Download of image fake_id failed: Unable to write image to device /dev/foo. Error: Surprise!!!1!
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_stream_raw_image_onto_device_write_error
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_stream_raw_image_onto_device_write_error ... ok
  WARNING [root] Using hint {'vendor': 'basic vendor'} skipping devices: /dev/sda,/dev/sdb
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_complete_skip_list
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_complete_skip_list ... ok
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_ppc64le_prep_part
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_ppc64le_prep_part ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_sync
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_sync ... ok
  WARNING [root] Device /dev/sda is inaccessible, skipping... Error: [Errno 2] No such file or directory: '/dev/sda'
  WARNING [root] Can't find field vendor for device sda in device class block
  WARNING [root] Device /dev/sdb is inaccessible, skipping... Error: [Errno 2] No such file or directory: '/dev/sdb'
  WARNING [root] Can't find field vendor for device sdb in device class block
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_preserve_ephemeral
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_preserve_ephemeral ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_fails
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_fails ... ok
-   ERROR [ironic_python_agent.extensions.standby] Flushing file system buffers failed. Error: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: None
-Stderr: None
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_sync_error
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_sync_error ... ok
  WARNING [root] We have identified a multipath device sda, this is being ignored in favor of dm-0 and its related child devices.
  WARNING [root] We have identified a multipath device sda2, this is being ignored in favor of dm-0 and its related child devices.
  WARNING [root] We have identified a multipath device sda3, this is being ignored in favor of dm-0 and its related child devices.
  WARNING [root] We have identified a multipath device sda1, this is being ignored in favor of dm-0 and its related child devices.
  WARNING [root] Device /dev/dm-0 is inaccessible, skipping... Error: [Errno 2] No such file or directory: '/dev/dm-0'
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_empty_checksum
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_empty_checksum ... ok
  WARNING [root] Can't find field vendor for device dm-0 in device class block
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_uefi
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_uefi ... ok
  WARNING [root] We have identified a multipath device sdb, this is being ignored in favor of dm-0 and its related child devices.
  WARNING [root] We have identified a multipath device sdb2, this is being ignored in favor of dm-0 and its related child devices.
  WARNING [root] We have identified a multipath device sdb3, this is being ignored in favor of dm-0 and its related child devices.
@@ -9800,36 +11101,14 @@
  WARNING [root] Can't find field vendor for device dm-1 in device class block
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_multipath
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_multipath ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_empty_urls
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_empty_urls ... ok
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_without_image
-ironic_python_agent.tests.unit.test_partition_utils.WorkOnDiskTestCase.test_without_image ... ok
-ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image
-ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image ... ok
-ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_disabled
-ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_disabled ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_no_root_device
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_no_root_device ... ok
-ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_flags
-ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_flags ... ok
-ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_flags_disabled
-ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_flags_disabled ... ok
-ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_just_fails
-ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_just_fails ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_invalid_checksum
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_invalid_checksum ... ok
-ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_just_fails_disabled
-ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_just_fails_disabled ... ok
-ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_retries
-ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_retries ... ok
  WARNING [root] We have identified a multipath device sda, this is being ignored in favor of dm-0 and its related child devices.
  WARNING [root] We have identified a multipath device sda2, this is being ignored in favor of dm-0 and its related child devices.
  WARNING [root] We have identified a multipath device sda3, this is being ignored in favor of dm-0 and its related child devices.
  WARNING [root] We have identified a multipath device sda1, this is being ignored in favor of dm-0 and its related child devices.
  WARNING [root] Device /dev/dm-0 is inaccessible, skipping... Error: [Errno 2] No such file or directory: '/dev/dm-0'
  WARNING [root] Can't find field vendor for device dm-0 in device class block
-ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_retries_alternate_error
-ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_retries_alternate_error ... ok
  WARNING [root] We have identified a multipath device sdb, this is being ignored in favor of dm-0 and its related child devices.
  WARNING [root] We have identified a multipath device sdb2, this is being ignored in favor of dm-0 and its related child devices.
  WARNING [root] We have identified a multipath device sdb3, this is being ignored in favor of dm-0 and its related child devices.
@@ -9838,26 +11117,8 @@
  WARNING [root] Can't find field vendor for device sdc in device class block
  WARNING [root] Device /dev/dm-1 is inaccessible, skipping... Error: [Errno 2] No such file or directory: '/dev/dm-1'
  WARNING [root] Can't find field vendor for device dm-1 in device class block
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_invalid_urls
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_invalid_urls ... ok
-ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_retries_alternate_error_disabled
-ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_retries_alternate_error_disabled ... ok
-ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_retries_and_fails
-ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_retries_and_fails ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_not_multipath
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_not_multipath ... ok
-ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_retries_and_fails_disabled
-ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_retries_and_fails_disabled ... ok
-ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_retries_disabled
-ironic_python_agent.tests.unit.test_qemu_img.ConvertImageTestCase.test_convert_image_retries_disabled ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_legacy_md5_checksum
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_legacy_md5_checksum ... ok
-ironic-python-agent: Excluding device sda1 from virtual mediaconsideration as it is a partition.
-ironic-python-agent: Found possible vmedia candidate /dev/sda2, however the device failed vmedia validity checking.
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__find_vmedia_device_by_labels
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__find_vmedia_device_by_labels ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_legacy_md5_checksum_enabled
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_legacy_md5_checksum_enabled ... ok
  WARNING [root] Device /dev/sda is inaccessible, skipping... Error: [Errno 2] No such file or directory: '/dev/sda'
  WARNING [root] Can't find field vendor for device sda in device class block
  WARNING [root] Device /dev/sdb is inaccessible, skipping... Error: [Errno 2] No such file or directory: '/dev/sdb'
@@ -9866,160 +11127,19 @@
  WARNING [root] Can't find field vendor for device md0 in device class block
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_raid
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_raid ... ok
-ironic-python-agent: Was unable to execute the lsblk command. Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: None
-Stderr: None
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__find_vmedia_device_by_labels_handles_exec_error
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__find_vmedia_device_by_labels_handles_exec_error ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_missing_field
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_missing_field ... ok
-ironic-python-agent: Did not identify any virtual media candidates devices.
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__find_vmedia_device_by_labels_not_found
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__find_vmedia_device_by_labels_not_found ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_no_hash_algo
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_no_hash_algo ... ok
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_device
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_device ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_root_device_hints_by_path
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_root_device_hints_by_path ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_no_hash_value
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_no_hash_value ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_sha256
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_sha256 ... ok
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_params
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_params ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_success
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_success ... ok
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_params_by_device
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_params_by_device ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_success_ignore_none_md5
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_success_ignore_none_md5 ... ok
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_params_by_device_device_invalid
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_params_by_device_device_invalid ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_success_with_new_hash_fields
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_success_with_new_hash_fields ... ok
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_params_cannot_find_dev
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__get_vmedia_params_cannot_find_dev ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_success_without_md5
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_success_without_md5 ... ok
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__read_params_from_file
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__read_params_from_file ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_url
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_validate_image_info_url ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_root_device_hints_iinfo
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_root_device_hints_iinfo ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_basic_auth_creds
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_basic_auth_creds ... ok
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__read_params_from_file_fail
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test__read_params_from_file_fail ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_basic_auth_creds_empty_password
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_basic_auth_creds_empty_password ... ok
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test_get_agent_params_from_cache
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test_get_agent_params_from_cache ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_basic_auth_creds_empty_user
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_basic_auth_creds_empty_user ... ok
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test_get_agent_params_kernel_cmdline
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test_get_agent_params_kernel_cmdline ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_root_device_hints_model
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_root_device_hints_model ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_basic_auth_creds_none_password
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_basic_auth_creds_none_password ... ok
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test_get_agent_params_vmedia
-ironic_python_agent.tests.unit.test_utils.GetAgentParamsTestCase.test_get_agent_params_vmedia ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_basic_auth_creds_none_user
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_basic_auth_creds_none_user ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_root_device_hints_name
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_root_device_hints_name ... ok
-   ERROR [ironic_python_agent.extensions.standby] Unable to verify image fake_id with available checksums. Please make sure the specified 'os_hash_algo' (currently algo-beyond-milky-way) is supported by this ramdisk, or provide a md5 checksum via the 'checksum' field
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_fails_if_unknown_is_used
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_fails_if_unknown_is_used ... ok
-ironic-python-agent: line 1.
-ironic-python-agent: line 2 message
-ironic_python_agent.tests.unit.test_utils.TestCheckEarlyLogging.test_early_logging_goes_to_logger
-ironic_python_agent.tests.unit.test_utils.TestCheckEarlyLogging.test_early_logging_goes_to_logger ... ok
-ironic_python_agent.tests.unit.test_utils.TestCheckVirtualMedia.test_check_vmedia_device
-ironic_python_agent.tests.unit.test_utils.TestCheckVirtualMedia.test_check_vmedia_device ... ok
-   ERROR [ironic_python_agent.extensions.standby] Image failed to verify against checksum. location: /foo/bar; image ID: fake_id; image checksum: fake-checksum; verification checksum: invalid-checksum
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_failure
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_failure ... ok
-ironic-python-agent: Device sdh was disqualified as virtual media. Type: other, Transport: usb
-ironic_python_agent.tests.unit.test_utils.TestCheckVirtualMedia.test_check_vmedia_device_other
-ironic_python_agent.tests.unit.test_utils.TestCheckVirtualMedia.test_check_vmedia_device_other ... ok
-ironic-python-agent: Excluding device sdh1 from virtual mediaconsideration as it is a partition.
-ironic_python_agent.tests.unit.test_utils.TestCheckVirtualMedia.test_check_vmedia_device_part
-ironic_python_agent.tests.unit.test_utils.TestCheckVirtualMedia.test_check_vmedia_device_part ... ok
-   ERROR [ironic_python_agent.extensions.standby] Image failed to verify against checksum. location: /foo/bar; image ID: fake_id; image checksum: fake-sha512-value; verification checksum: invalid-checksum
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_failure_with_new_hash_fields
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_failure_with_new_hash_fields ... ok
-ironic_python_agent.tests.unit.test_utils.TestCheckVirtualMedia.test_check_vmedia_device_rom
-ironic_python_agent.tests.unit.test_utils.TestCheckVirtualMedia.test_check_vmedia_device_rom ... ok
-   ERROR [ironic_python_agent.extensions.standby] Unable to verify image fake_id with available checksums. Please make sure the specified 'os_hash_algo' (currently unsupported-algorithm) is supported by this ramdisk, or provide a md5 checksum via the 'checksum' field
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_failure_without_fallback
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_failure_without_fallback ... ok
-ironic-python-agent: Device sdh was disqualified as virtual media. Type: disk, Transport: sata
-ironic_python_agent.tests.unit.test_utils.TestCheckVirtualMedia.test_check_vmedia_device_sata
-ironic_python_agent.tests.unit.test_utils.TestCheckVirtualMedia.test_check_vmedia_device_sata ... ok
-ironic-python-agent: Device sdh was disqualified as virtual media. Type: other, Transport: scsi
-ironic_python_agent.tests.unit.test_utils.TestCheckVirtualMedia.test_check_vmedia_device_scsi
-ironic_python_agent.tests.unit.test_utils.TestCheckVirtualMedia.test_check_vmedia_device_scsi ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_success
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_success ... ok
-ironic-python-agent: Device sdh appears to not qualify as virtual due to the device size. Size: 1610612736000
-ironic-python-agent: Device sdh was disqualified as virtual media. Type: disk, Transport: usb
-   ERROR [ironic_python_agent.utils] foo
-   ERROR [ironic_python_agent.utils] bar
-   ERROR [ironic_python_agent.utils] baz
-ironic_python_agent.tests.unit.test_utils.TestCheckVirtualMedia.test_check_vmedia_device_too_large
-ironic_python_agent.tests.unit.test_utils.TestCheckVirtualMedia.test_check_vmedia_device_too_large ... ok
-   ERROR [ironic_python_agent.utils] foo
-ironic_python_agent.tests.unit.test_utils.TestFailures.test_get_error
-ironic_python_agent.tests.unit.test_utils.TestFailures.test_get_error ... ok
-ironic_python_agent.tests.unit.test_utils.TestFailures.test_raise
-ironic_python_agent.tests.unit.test_utils.TestFailures.test_raise ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_success_with_md5_fallback
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_success_with_md5_fallback ... ok
-ironic_python_agent.tests.unit.test_utils.TestStreamingClient.test_ok
-ironic_python_agent.tests.unit.test_utils.TestStreamingClient.test_ok ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_success_with_new_hash_fields
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_success_with_new_hash_fields ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_success_without_md5
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_verify_image_success_without_md5 ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_image
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_image ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_image_fails
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_image_fails ... ok
-   ERROR [ironic_lib.exception] Exception in string format operation (arguments )
-Traceback (most recent call last):
-  File "/usr/lib/python3/dist-packages/ironic_lib/exception.py", line 134, in __init__
-    message = self._msg_fmt % kwargs
-              ~~~~~~~~~~~~~~^~~~~~~~
-KeyError: 'reason'
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_image_gpt_fails
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_image_gpt_fails ... ok
-   ERROR [ironic_python_agent.disk_utils] Failed to fix GPT partition on disk /dev/sda for node None. Error: Don't call ironic_lib.utils.execute() / processutils.execute() or similar functions in tests!
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_partition_image
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_partition_image ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_partition_image_exception
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_partition_image_exception ... ok
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_partition_image_exception_image_mb
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_partition_image_exception_image_mb ... ok
-   ERROR [ironic_python_agent.disk_utils] Failed to fix GPT partition on disk /dev/sda for node None. Error: Don't call ironic_lib.utils.execute() / processutils.execute() or similar functions in tests!
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_partition_image_no_node_uuid
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_partition_image_no_node_uuid ... ok
  WARNING [ironic_lib.utils] No device found that matches the root device hints {'model': 'fastable sd131 7', 'wwn': 'fake-wwn', 'serial': 'fake-serial', 'vendor': 'fake-vendor', 'size': 10}
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_root_device_hints_no_device_found
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_root_device_hints_no_device_found ... ok
-   ERROR [ironic_python_agent.disk_utils] Failed to fix GPT partition on disk /dev/sda for node None. Error: Don't call ironic_lib.utils.execute() / processutils.execute() or similar functions in tests!
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_partition_image_no_node_uuid_uefi
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_write_partition_image_no_node_uuid_uefi ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNics.test_nvidia_nics
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestNvidiaNics.test_nvidia_nics ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_root_device_hints_rotational
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_root_device_hints_rotational ... ok
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestUpdateNvidiaNicFirmwareImage.test_update_nvidia_nic_firmware_image_exception
-ironic_python_agent.tests.unit.hardware_managers.nvidia.test_nvidia_fw_update.TestUpdateNvidiaNicFirmwareImage.test_update_nvidia_nic_firmware_image_exception ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_root_device_hints_serial
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_root_device_hints_serial ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_root_device_hints_size
@@ -10028,87 +11148,25 @@
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_root_device_hints_size_not_int ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_root_device_hints_size_str
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_root_device_hints_size_str ... ok
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_advertise_address_provided
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_advertise_address_provided ... ok
  WARNING [root] Using hint {'vendor': 'fake-vendor'} skipping devices: /dev/sdb
- WARNING [ironic_python_agent.agent] Cannot get route to host 1.2.1.2: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
- WARNING [ironic_python_agent.agent] Cannot get route to host 1.2.1.2: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
- WARNING [ironic_python_agent.agent] Cannot get route to host 1.2.1.2: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
- WARNING [ironic_python_agent.agent] Cannot get route to host 1.2.1.2: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
- WARNING [ironic_python_agent.agent] Cannot get route to host 1.2.1.2: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_failed
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_failed ... ok
- WARNING [ironic_python_agent.agent] Cannot get route to host 1.2.1.2: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
- WARNING [ironic_python_agent.agent] No route to host 1.2.1.2, route record: Error: some error text
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_retry
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_retry ... ok
- WARNING [ironic_python_agent.agent] Cannot get route to host fc00:1111::1: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
- WARNING [ironic_python_agent.agent] No route to host 1.2.1.2, route record: Error: some error text
- WARNING [ironic_python_agent.agent] Cannot get route to host fc00:1111::1: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
  WARNING [ironic_lib.utils] No device found that matches the root device hints {'wwn': 'fake-wwn'}
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_root_device_hints_skip_list
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_root_device_hints_skip_list ... ok
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_several_urls_and_retries
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_several_urls_and_retries ... ok
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_with_host
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_with_host ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_root_device_hints_vendor
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_root_device_hints_vendor ... ok
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_with_ip
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_with_ip ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_root_device_hints_wwn
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_root_device_hints_wwn ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_skip_list_non_exist
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_os_install_device_skip_list_non_exist ... ok
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_with_ipv6
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_route_with_ipv6 ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_skip_list_from_node_block_devices_just_raids
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_skip_list_from_node_block_devices_just_raids ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_skip_list_from_node_block_devices_no_skip_list
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_skip_list_from_node_block_devices_no_skip_list ... ok
- WARNING [root] Can't find field vendor for device lo in device class net
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_with_network_interface
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_with_network_interface ... ok
  WARNING [root] Using hint {'name': '/dev/sdj'} skipping devices: /dev/sdj
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_skip_list_from_node_block_devices_with_skip_list
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_skip_list_from_node_block_devices_with_skip_list ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_system_vendor_info
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_system_vendor_info ... ok
- WARNING [root] Can't find field vendor for device lo in device class net
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_with_network_interface_failed
-ironic_python_agent.tests.unit.test_agent.TestAdvertiseAddress.test_with_network_interface_failed ... ok
  WARNING [root] Could not retrieve vendor info from lshw: Unexpected error while running command.
 Command: None
 Exit code: -
@@ -10118,8 +11176,6 @@
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_system_vendor_info_failure ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_system_vendor_info_lshw_list
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_system_vendor_info_lshw_list ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_find_pair_1st
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_find_pair_1st ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_usb_devices
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_get_usb_devices ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_ipmi_device_exists
@@ -10139,8 +11195,6 @@
  WARNING [root] Could not find the SCSI address (HCTL) for device /dev/sdb. Skipping
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_list_all_block_device_hctl_fail
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_list_all_block_device_hctl_fail ... ok
-ironic_python_agent.tests.unit.test_utils.TestStreamingClient.test_retries
-ironic_python_agent.tests.unit.test_utils.TestStreamingClient.test_retries ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_list_all_block_device_with_only_udev
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_list_all_block_device_with_only_udev ... ok
  WARNING [root] We have identified a multipath device sdd, this is being ignored in favor of dm-0 and its related child devices.
@@ -10148,8 +11202,6 @@
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_list_all_block_device_with_udev ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_list_block_devices
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_list_block_devices ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_find_pair_2nd
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_find_pair_2nd ... ok
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_list_block_devices_check_skip_list_no_skip_list
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_list_block_devices_check_skip_list_no_skip_list ... ok
  WARNING [root] Using hint {'name': '/dev/sdj'} skipping devices: /dev/sdj
@@ -10223,42 +11275,35 @@
  WARNING [root] Can't find field vendor for device md0 in device class block
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_validate_configuration_valid_raid1_raidN
 ironic_python_agent.tests.unit.test_hardware.TestGenericHardwareManager.test_validate_configuration_valid_raid1_raidN ... ok
-ironic_python_agent.tests.unit.test_hardware.TestProtectedDiskSafetyChecks.test_special_filesystem_guard_enabled_no_results
-ironic_python_agent.tests.unit.test_hardware.TestProtectedDiskSafetyChecks.test_special_filesystem_guard_enabled_no_results ... ok
-ironic_python_agent.tests.unit.test_hardware.TestProtectedDiskSafetyChecks.test_special_filesystem_guard_node_indicates_skip
-ironic_python_agent.tests.unit.test_hardware.TestProtectedDiskSafetyChecks.test_special_filesystem_guard_node_indicates_skip ... ok
-ironic_python_agent.tests.unit.test_hardware.TestProtectedDiskSafetyChecks.test_special_filesystem_guard_not_enabled
-ironic_python_agent.tests.unit.test_hardware.TestProtectedDiskSafetyChecks.test_special_filesystem_guard_not_enabled ... ok
-ironic_python_agent.tests.unit.test_hardware.TestProtectedDiskSafetyChecks.test_special_filesystem_guard_raises
-ironic_python_agent.tests.unit.test_hardware.TestProtectedDiskSafetyChecks.test_special_filesystem_guard_raises ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_with_on_as_number
-ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_with_on_as_number ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_with_on_as_number_nvme
-ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_with_on_as_number_nvme ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_with_on_as_path
-ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_with_on_as_path ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_without_on
-ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_without_on ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_without_on_wrong_path
-ironic_python_agent.tests.unit.test_inject_files.TestFindAndMountPath.test_without_on_wrong_path ... ok
+ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test__check_for_iscsi
+ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test__check_for_iscsi ... ok
+ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test__check_for_iscsi_no_iscsi
+ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test__check_for_iscsi_no_iscsi ... ok
+ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test__load_ipmi_modules
+ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test__load_ipmi_modules ... ok
+ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_missing
+ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_missing ... ok
+ WARNING [root] Could not find the SCSI address (HCTL) for device /dev/sda1. Skipping
+ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_partuuid_success
+ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_partuuid_success ... ok
+ WARNING [root] Could not find the SCSI address (HCTL) for device /dev/sda. Skipping
+ WARNING [root] Could not find the SCSI address (HCTL) for device /dev/sdb. Skipping
+ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_success
+ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_success ... ok
+ WARNING [root] Could not find the SCSI address (HCTL) for device /dev/sda. Skipping
+ WARNING [root] Could not find the SCSI address (HCTL) for device /dev/sdb. Skipping
+ WARNING [root] Could not find the SCSI address (HCTL) for device /dev/md0. Skipping
+ WARNING [root] Could not find the SCSI address (HCTL) for device /dev/md1. Skipping
+ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_success_raid
+ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_success_raid ... ok
+ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_wrong_block_type
+ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_wrong_block_type ... ok
 ironic_python_agent.tests.unit.test_inject_files.TestFindPartitionWithPath.test_found
 ironic_python_agent.tests.unit.test_inject_files.TestFindPartitionWithPath.test_found ... ok
 ironic_python_agent.tests.unit.test_inject_files.TestFindPartitionWithPath.test_found_with_dev
 ironic_python_agent.tests.unit.test_inject_files.TestFindPartitionWithPath.test_found_with_dev ... ok
 ironic_python_agent.tests.unit.test_inject_files.TestFindPartitionWithPath.test_not_found
 ironic_python_agent.tests.unit.test_inject_files.TestFindPartitionWithPath.test_not_found ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_empty
-ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_empty ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_invalid_type_in_param
-ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_invalid_type_in_param ... ok
-ironic_python_agent.tests.unit.test_agent.TestAgentStandalone.test_run
-ironic_python_agent.tests.unit.test_agent.TestAgentStandalone.test_run ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_invalid_type_on_node
-ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_invalid_type_on_node ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_ok
-ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_ok ... ok
-ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_verify_false
-ironic_python_agent.tests.unit.test_inject_files.TestInjectFiles.test_verify_false ... ok
 ironic_python_agent.tests.unit.test_inspector.TestCollectDefault.test_cache_hardware_info
 ironic_python_agent.tests.unit.test_inspector.TestCollectDefault.test_cache_hardware_info ... ok
  WARNING [ironic_python_agent.inspector] no suitable root device detected
@@ -10271,234 +11316,62 @@
  WARNING [ironic_python_agent.inspector] failed to get system journal
 ironic_python_agent.tests.unit.test_inspector.TestCollectLogs.test_fail
 ironic_python_agent.tests.unit.test_inspector.TestCollectLogs.test_fail ... ok
-ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_both_succeed
-ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_both_succeed ... ok
-ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_dispatch_to_all_managers_both_succeed
-ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_dispatch_to_all_managers_both_succeed ... ok
-ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_dispatch_to_all_managers_generic_method_only
-ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_dispatch_to_all_managers_generic_method_only ... ok
-ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_dispatch_to_all_managers_mainline_fails
-ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_dispatch_to_all_managers_mainline_fails ... ok
-ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_dispatch_to_all_managers_mainline_only
-ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_dispatch_to_all_managers_mainline_only ... ok
-ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_dispatch_to_all_managers_manager_method_not_found
-ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_dispatch_to_all_managers_manager_method_not_found ... ok
-   ERROR [root] Unexpected error dispatching unexpected_fail to manager <ironic_python_agent.tests.unit.test_multi_hardware.FakeMainlineHardwareManager object at 0xb420ba98>: A problem was encountered
-Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/hardware.py", line 3468, in dispatch_to_all_managers
-    response = getattr(manager, method)(*args, **kwargs)
-               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/tests/unit/test_multi_hardware.py", line 32, in wrapper
-    return fn(self, *args, **kwargs)
-           ^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/tests/unit/test_multi_hardware.py", line 101, in unexpected_fail
-    raise RuntimeError('A problem was encountered')
-RuntimeError: A problem was encountered
-ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_dispatch_to_all_managers_method_fails
-ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_dispatch_to_all_managers_method_fails ... ok
-ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_generic_method_only
-ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_generic_method_only ... ok
-ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_mainline_fails
-ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_mainline_fails ... ok
-ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_mainline_method_only
-ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_mainline_method_only ... ok
-ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_manager_method_not_found
-ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_manager_method_not_found ... ok
-   ERROR [root] Unexpected error dispatching unexpected_fail to manager <ironic_python_agent.tests.unit.test_multi_hardware.FakeMainlineHardwareManager object at 0xb2d81210>: A problem was encountered
-Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/hardware.py", line 3512, in dispatch_to_managers
-    return getattr(manager, method)(*args, **kwargs)
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/tests/unit/test_multi_hardware.py", line 32, in wrapper
-    return fn(self, *args, **kwargs)
-           ^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/tests/unit/test_multi_hardware.py", line 101, in unexpected_fail
-    raise RuntimeError('A problem was encountered')
-RuntimeError: A problem was encountered
-ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_method_fails
-ironic_python_agent.tests.unit.test_multi_hardware.TestMultipleHardwareManagerLoading.test_method_fails ... ok
-ironic_python_agent.tests.unit.test_partition_utils.TestGetPartition.test
-ironic_python_agent.tests.unit.test_partition_utils.TestGetPartition.test ... ok
-   ERROR [root] Finding the partition with UUID 11111111-2222-3333-4444-555555555555 on device /dev/fake failed with Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
-ironic_python_agent.tests.unit.test_partition_utils.TestGetPartition.test_command_fail
-ironic_python_agent.tests.unit.test_partition_utils.TestGetPartition.test_command_fail ... ok
-ironic_python_agent.tests.unit.test_partition_utils.TestGetPartition.test_fallback_partuuid
-ironic_python_agent.tests.unit.test_partition_utils.TestGetPartition.test_fallback_partuuid ... ok
-ironic_python_agent.tests.unit.test_partition_utils.TestGetPartition.test_label
-ironic_python_agent.tests.unit.test_partition_utils.TestGetPartition.test_label ... ok
-   ERROR [root] No partition with UUID 11111111-2222-3333-4444-555555555555 found on device /dev/fake
-ironic_python_agent.tests.unit.test_partition_utils.TestGetPartition.test_no_device_found
-ironic_python_agent.tests.unit.test_partition_utils.TestGetPartition.test_no_device_found ... ok
-ironic_python_agent.tests.unit.test_agent.TestAgentStandalone.test_run_no_tls
-ironic_python_agent.tests.unit.test_agent.TestAgentStandalone.test_run_no_tls ... ok
-ironic_python_agent.tests.unit.test_partition_utils.TestGetPartition.test_partuuid
-ironic_python_agent.tests.unit.test_partition_utils.TestGetPartition.test_partuuid ... ok
-ironic_python_agent.tests.unit.test_qemu_img.ImageInfoTestCase.test_image_info_path_doesnt_exist_disabled
-ironic_python_agent.tests.unit.test_qemu_img.ImageInfoTestCase.test_image_info_path_doesnt_exist_disabled ... ok
-ironic_python_agent.tests.unit.test_qemu_img.ImageInfoTestCase.test_image_info_path_exists_disabled
-ironic_python_agent.tests.unit.test_qemu_img.ImageInfoTestCase.test_image_info_path_exists_disabled ... ok
-ironic_python_agent.tests.unit.test_qemu_img.ImageInfoTestCase.test_image_info_path_exists_safe
-ironic_python_agent.tests.unit.test_qemu_img.ImageInfoTestCase.test_image_info_path_exists_safe ... ok
-   ERROR [ironic_python_agent.ironic_api_client] An error occurred while attempting to discover the available Ironic API versions, falling back to using version 1.31
-Traceback (most recent call last):
-  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 463, in resolve
-    return _proxy.query(name, rdtype, raise_on_no_answer=raises,
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 407, in query
-    step(self._resolver.query, qname, rdtype, rdclass, tcp, source, raise_on_no_answer=False)
-         ^^^^^^^^^^^^^^
-  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 347, in _resolver
-    self.clear()
-  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 355, in clear
-    self._resolver = dns.resolver.Resolver(filename=self._filename)
-                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3/dist-packages/dns/resolver.py", line 945, in __init__
-    self.read_resolv_conf(filename)
-  File "/usr/lib/python3/dist-packages/dns/resolver.py", line 1039, in read_resolv_conf
-    raise NoResolverConfiguration("no nameservers")
-dns.resolver.NoResolverConfiguration: no nameservers
-
-During handling of the above exception, another exception occurred:
-
-Traceback (most recent call last):
-  File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 199, in _new_conn
-    sock = connection.create_connection(
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3/dist-packages/urllib3/util/connection.py", line 60, in create_connection
-    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):
-               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 558, in getaddrinfo
-    qname, addrs = _getaddrinfo_lookup(host, family, flags)
-                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 529, in _getaddrinfo_lookup
-    raise err
-  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 518, in _getaddrinfo_lookup
-    answer = resolve(host, qfamily, False, use_network=use_network)
-             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 473, in resolve
-    _raise_new_error(EAI_NODATA_ERROR)
-  File "/usr/lib/python3/dist-packages/eventlet/support/greendns.py", line 100, in _raise_new_error
-    raise error_instance.__class__(*error_instance.args)
-socket.gaierror: [Errno -2] Name or service not known
-
-The above exception was the direct cause of the following exception:
-
-Traceback (most recent call last):
-  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 789, in urlopen
-    response = self._make_request(
-               ^^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 490, in _make_request
-    raise new_e
-  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 466, in _make_request
-    self._validate_conn(conn)
-  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 1095, in _validate_conn
-    conn.connect()
-  File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 693, in connect
-    self.sock = sock = self._new_conn()
-                       ^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 206, in _new_conn
-    raise NameResolutionError(self.host, self, e) from e
-urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0xb42b1c60>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)
-
-The above exception was the direct cause of the following exception:
-
-Traceback (most recent call last):
-  File "/usr/lib/python3/dist-packages/requests/adapters.py", line 667, in send
-    resp = conn.urlopen(
-           ^^^^^^^^^^^^^
-  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 843, in urlopen
-    retries = retries.increment(
-              ^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 519, in increment
-    raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]
-    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb42b1c60>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
-
-During handling of the above exception, another exception occurred:
-
-Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/ironic_api_client.py", line 130, in _get_ironic_api_version
-    response = self._request('GET', '/')
-               ^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/ironic_api_client.py", line 90, in _request
-    resp = self.session.request(method,
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 589, in request
-    resp = self.send(prep, **send_kwargs)
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 703, in send
-    r = adapter.send(request, **kwargs)
-        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3/dist-packages/requests/adapters.py", line 700, in send
-    raise ConnectionError(e, request=request)
-requests.exceptions.ConnectionError: HTTPSConnectionPool(host='fake_api.example.org', port=8081): Max retries exceeded with url: / (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xb42b1c60>: Failed to resolve 'fake_api.example.org' ([Errno -2] Name or service not known)"))
- WARNING [ironic_python_agent.agent] Ironic does not support automated TLS
-ironic_python_agent.tests.unit.test_agent.TestBaseAgentVMediaToken.test_run_agent_token_vmedia
-ironic_python_agent.tests.unit.test_agent.TestBaseAgentVMediaToken.test_run_agent_token_vmedia ... ok
-ironic_python_agent.tests.unit.test_qemu_img.ImageInfoTestCase.test_image_info_path_exists_unsafe
-ironic_python_agent.tests.unit.test_qemu_img.ImageInfoTestCase.test_image_info_path_exists_unsafe ... ok
-ironic_python_agent.tests.unit.test_raid_utils.TestFindESPRAID.test_esp_raid
-ironic_python_agent.tests.unit.test_raid_utils.TestFindESPRAID.test_esp_raid ... ok
-ironic_python_agent.tests.unit.test_raid_utils.TestFindESPRAID.test_no_esp_raid
-ironic_python_agent.tests.unit.test_raid_utils.TestFindESPRAID.test_no_esp_raid ... ok
-ironic_python_agent.tests.unit.test_raid_utils.TestGetNextFreeRaidDevice.test_no_device
-ironic_python_agent.tests.unit.test_raid_utils.TestGetNextFreeRaidDevice.test_no_device ... ok
-ironic_python_agent.tests.unit.test_raid_utils.TestGetNextFreeRaidDevice.test_ok
-ironic_python_agent.tests.unit.test_raid_utils.TestGetNextFreeRaidDevice.test_ok ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_find_timeout
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_find_timeout ... ok
-/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/tests/unit/test_tls_utils.py:57: CryptographyDeprecationWarning: Properties that return a naïve datetime object have been deprecated. Please switch to not_valid_before_utc.
-  self.assertLess(cert.not_valid_before,
-/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/tests/unit/test_tls_utils.py:59: CryptographyDeprecationWarning: Properties that return a naïve datetime object have been deprecated. Please switch to not_valid_after_utc.
-  self.assertGreater(cert.not_valid_after,
-ironic_python_agent.tests.unit.test_tls_utils.GenerateTestCase.test__generate
-ironic_python_agent.tests.unit.test_tls_utils.GenerateTestCase.test__generate ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_pairing_defaults
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_pairing_defaults ... ok
-ironic_python_agent.tests.unit.test_agent.TestHeartbeater.test__heartbeat_expected
-ironic_python_agent.tests.unit.test_agent.TestHeartbeater.test__heartbeat_expected ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_pairing_no_defaults
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_pairing_no_defaults ... ok
-ironic_python_agent.tests.unit.test_tls_utils.GenerateTestCase.test_generate
-ironic_python_agent.tests.unit.test_tls_utils.GenerateTestCase.test_generate ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_pairing_raise_missing_config
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_pairing_raise_missing_config ... ok
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_determine_time_method_chronyd
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_determine_time_method_chronyd ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_pairing_raise_wrong_config
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_pairing_raise_wrong_config ... ok
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_determine_time_method_none
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_determine_time_method_none ... ok
-   ERROR [ironic_python_agent.burnin] fio (network) failed with error Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_no_fio
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_no_fio ... ok
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_determine_time_method_ntpdate
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_determine_time_method_ntpdate ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_no_partner
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_no_partner ... ok
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_chrony
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_chrony ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_no_role
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_no_role ... ok
-   ERROR [ironic_python_agent.utils] Failed to sync time using chrony to ntp server: 192.168.1.1: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: None
-Stderr: 'time verboten'
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_chrony_failure
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_chrony_failure ... ok
-   ERROR [ironic_python_agent.agent] error sending heartbeat to <Mock name='mock.api_urls' id='3000609768'>
+ WARNING [ironic_python_agent.inspector] Failed to gather vendor id, product id or pci class from PCI device bar: 
+ WARNING [ironic_python_agent.inspector] Wrong format of vendor id, product id or pci class in PCI device baz: 
+ironic_python_agent.tests.unit.test_inspector.TestCollectPciDevicesInfo.test_bad_pci_device_info
+ironic_python_agent.tests.unit.test_inspector.TestCollectPciDevicesInfo.test_bad_pci_device_info ... ok
+ironic_python_agent.tests.unit.test_inspector.TestCollectPciDevicesInfo.test_success
+ironic_python_agent.tests.unit.test_inspector.TestCollectPciDevicesInfo.test_success ... ok
+ WARNING [ironic_python_agent.inspector] Failed to gather numa_node id from PCI device foo: 
+ WARNING [ironic_python_agent.inspector] Failed to gather numa_node id from PCI device bar: 
+ironic_python_agent.tests.unit.test_inspector.TestCollectPciDevicesInfo.test_success_numa_ioerror
+ironic_python_agent.tests.unit.test_inspector.TestCollectPciDevicesInfo.test_success_numa_ioerror ... ok
+   ERROR [ironic_python_agent.utils] Failed to get list of PCI devices: 
+ironic_python_agent.tests.unit.test_inspector.TestCollectPciDevicesInfo.test_wrong_path
+ironic_python_agent.tests.unit.test_inspector.TestCollectPciDevicesInfo.test_wrong_path ... ok
+   ERROR [ironic_python_agent.utils] collector <Mock name='mock.name' id='4110680304'> failed: boom
+ironic_python_agent.tests.unit.test_inspector.TestInspect.test_collector_failed
+ironic_python_agent.tests.unit.test_inspector.TestInspect.test_collector_failed ... ok
+ironic_python_agent.tests.unit.test_inspector.TestInspect.test_collectors_option
+ironic_python_agent.tests.unit.test_inspector.TestInspect.test_collectors_option ... ok
+ironic_python_agent.tests.unit.test_inspector.TestInspect.test_disabled
+ironic_python_agent.tests.unit.test_inspector.TestInspect.test_disabled ... ok
+   ERROR [ironic_python_agent.utils] boom
+ironic_python_agent.tests.unit.test_inspector.TestInspect.test_extensions_failed
+ironic_python_agent.tests.unit.test_inspector.TestInspect.test_extensions_failed ... ok
+ironic_python_agent.tests.unit.test_inspector.TestInspect.test_inspector_error
+ironic_python_agent.tests.unit.test_inspector.TestInspect.test_inspector_error ... ok
+ironic_python_agent.tests.unit.test_inspector.TestInspect.test_mdns
+ironic_python_agent.tests.unit.test_inspector.TestInspect.test_mdns ... ok
+ironic_python_agent.tests.unit.test_inspector.TestInspect.test_ok
+ironic_python_agent.tests.unit.test_inspector.TestInspect.test_ok ... ok
+ironic_python_agent.tests.unit.test_inspector.TestInspect.test_ok_with_ironic_url
+ironic_python_agent.tests.unit.test_inspector.TestInspect.test_ok_with_ironic_url ... ok
+ironic_python_agent.tests.unit.test_inspector.TestMisc.test_default_collector_loadable
+ironic_python_agent.tests.unit.test_inspector.TestMisc.test_default_collector_loadable ... ok
+ironic_python_agent.tests.unit.test_inspector.TestMisc.test_raise_on_wrong_collector
+ironic_python_agent.tests.unit.test_inspector.TestMisc.test_raise_on_wrong_collector ... ok
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info ... ok
+ WARNING [ironic_python_agent.netutils] LLDP timed out, remaining interfaces: [('eth0', <Mock id='4100301088'>), ('eth1', <Mock id='4100304256'>)]
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_empty
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_empty ... ok
+ WARNING [ironic_python_agent.netutils] Trailing byte received in an LLDP package: b'5'
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_malformed
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_malformed ... ok
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_multiple
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_multiple ... ok
+ WARNING [ironic_python_agent.netutils] LLDP timed out, remaining interfaces: [('eth1', <Mock id='4100504840'>)]
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_one_empty_interface
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_one_empty_interface ... ok
+   ERROR [ironic_python_agent.netutils] Socket for network interface eth0 said that it was ready to read we were unable to read from the socket while trying to get LLDP packet. Skipping this network interface.
 Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/agent.py", line 148, in do_heartbeat
-    self.api.heartbeat(
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/netutils.py", line 197, in _get_lldp_info
+    lldp_info[interface[0]] = _receive_lldp_packets(s)
+                              ^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/netutils.py", line 160, in _receive_lldp_packets
+    pkt = sock.recv(1600)
+          ^^^^^^^^^^^^^^^
   File "/usr/lib/python3.12/unittest/mock.py", line 1139, in __call__
     return self._mock_call(*args, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -10507,922 +11380,100 @@
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   File "/usr/lib/python3.12/unittest/mock.py", line 1198, in _execute_mock_call
     raise effect
-Exception: uh oh!
-ironic_python_agent.tests.unit.test_agent.TestHeartbeater.test_heartbeat
-ironic_python_agent.tests.unit.test_agent.TestHeartbeater.test_heartbeat ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_reader
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_reader ... ok
-   ERROR [ironic_python_agent.utils] Unable to sync clock, available methods of 'ntpdate' or 'chrony' not found.
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_none
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_none ... ok
-   ERROR [ironic_python_agent.burnin] fio (network) failed with error Unexpected error while running command.
-Command: None
-Exit code: 16
-Stdout: 'Connection timeout'
-Stderr: None
-   ERROR [ironic_python_agent.burnin] fio (network) failed with error Unexpected error while running command.
-Command: None
-Exit code: 16
-Stdout: 'Connection timeout'
-Stderr: None
-   ERROR [ironic_python_agent.burnin] fio (network) failed with error Unexpected error while running command.
-Command: None
-Exit code: 16
-Stdout: 'Connection refused'
-Stderr: None
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_reader_loop
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_reader_loop ... ok
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_ntp
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_ntp ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_reader_w_logfile
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_reader_w_logfile ... ok
-   ERROR [ironic_python_agent.utils] Failed to sync with ntp server: 192.168.1.1: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: None
-Stderr: None
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_ntp_raises_exception
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_ntp_raises_exception ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_unknown_role
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_unknown_role ... ok
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_ntp_server_is_none
-ironic_python_agent.tests.unit.test_utils.TestClockSyncUtils.test_sync_clock_ntp_server_is_none ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_writer
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_writer ... ok
-ironic_python_agent.tests.unit.test_utils.TestUnmountOfConfig.test__unmount_any_config_drives
-ironic_python_agent.tests.unit.test_utils.TestUnmountOfConfig.test__unmount_any_config_drives ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_writer_w_logfile
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_writer_w_logfile ... ok
+OSError: BOOM
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_socket_recv_error
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_socket_recv_error ... ok
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_raw_promiscuous_sockets
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_raw_promiscuous_sockets ... ok
+   ERROR [ironic_python_agent.netutils] Failed to open all RawPromiscuousSockets, attempting to close any opened sockets.
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_raw_promiscuous_sockets_bind_fail
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_raw_promiscuous_sockets_bind_fail ... ok
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_raw_promiscuous_sockets_exception
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_raw_promiscuous_sockets_exception ... ok
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_wrap_ipv6
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_wrap_ipv6 ... ok
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_wrap_ipv6_with_ipv4
+ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_wrap_ipv6_with_ipv4 ... ok
+ironic_python_agent.tests.unit.test_partition_utils.RealFilePartitioningTestCase.test_different_sizes
+ironic_python_agent.tests.unit.test_partition_utils.RealFilePartitioningTestCase.test_different_sizes ... skipped "parted utility was not found: [Errno 2] No such file or directory: 'parted'"
+ironic_python_agent.tests.unit.test_partition_utils.RealFilePartitioningTestCase.test_whole_disk
+ironic_python_agent.tests.unit.test_partition_utils.RealFilePartitioningTestCase.test_whole_disk ... skipped "parted utility was not found: [Errno 2] No such file or directory: 'parted'"
+ironic_python_agent.tests.unit.test_raid_utils.TestGetNextFreeRaidDevice.test_no_device
+ironic_python_agent.tests.unit.test_raid_utils.TestGetNextFreeRaidDevice.test_no_device ... ok
+ironic_python_agent.tests.unit.test_raid_utils.TestGetNextFreeRaidDevice.test_ok
+ironic_python_agent.tests.unit.test_raid_utils.TestGetNextFreeRaidDevice.test_ok ... ok
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_fallback_bios
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_fallback_bios ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_cpu_default
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_cpu_default ... ok
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_fallback_uefi
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_fallback_uefi ... ok
-   ERROR [ironic_python_agent.burnin] stress-ng (cpu) failed with error Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: None
-Stderr: None
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_cpu_no_stress_ng
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_cpu_no_stress_ng ... ok
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_from_driver_internal_info
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_from_driver_internal_info ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_cpu_non_default
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_cpu_non_default ... ok
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_params_validation
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_params_validation ... ok
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_from_properties_dict
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_from_properties_dict ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_vm_default
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_vm_default ... ok
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_from_properties_json_str
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_from_properties_json_str ... ok
-   ERROR [ironic_python_agent.burnin] stress-ng (vm) failed with error Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: None
-Stderr: None
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_vm_no_stress_ng
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_vm_no_stress_ng ... ok
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_success_no_wait
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_success_no_wait ... ok
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_from_properties_str
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_from_properties_str ... ok
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_vm_non_default
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_stress_ng_vm_non_default ... ok
-ironic_python_agent.tests.unit.test_disk_utils.GetDeviceByteSizeTestCase.test_get_dev_byte_size
-ironic_python_agent.tests.unit.test_disk_utils.GetDeviceByteSizeTestCase.test_get_dev_byte_size ... ok
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_implicit_with_secure_boot
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_implicit_with_secure_boot ... ok
-ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_block_uuid
-ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_block_uuid ... ok
-ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_block_uuid_fallback_to_uuid
-ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_block_uuid_fallback_to_uuid ... ok
-ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_count_mbr_partitions
-ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_count_mbr_partitions ... ok
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_success_with_false_wait
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_success_with_false_wait ... ok
-ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_count_mbr_partitions_no_logical_partitions
-ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_count_mbr_partitions_no_logical_partitions ... ok
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_invalid_cap
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_invalid_cap ... ok
-ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_count_mbr_partitions_wrong_partition_table
-ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_count_mbr_partitions_wrong_partition_table ... ok
-   ERROR [ironic_python_agent.disk_utils] Unable to stat device /dev/disk/by-path/ip-1.2.3.4:5678-iscsi-iqn.fake-lun-9 after attempting to verify 2 times.
-ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_is_block_device_attempts
-ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_is_block_device_attempts ... ok
-   ERROR [ironic_python_agent.disk_utils] Unable to stat device /dev/disk/by-path/ip-1.2.3.4:5678-iscsi-iqn.fake-lun-9 after attempting to verify 3 times.
-ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_is_block_device_raises
-ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_is_block_device_raises ... ok
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_override_with_instance_info
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_boot_mode_override_with_instance_info ... ok
-ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_is_block_device_works
-ironic_python_agent.tests.unit.test_disk_utils.OtherFunctionTestCase.test_is_block_device_works ... ok
-ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available
-ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available ... ok
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_success_with_true_wait
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_success_with_true_wait ... ok
-ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_dev_becomes_avail_busybox
-ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_dev_becomes_avail_busybox ... ok
-ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_dev_becomes_avail_psmisc
-ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_dev_becomes_avail_psmisc ... ok
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_collect_system_logs_journald
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_collect_system_logs_journald ... ok
-ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_device_in_use_busybox
-ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_device_in_use_busybox ... ok
-ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_device_in_use_psmisc
-ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_device_in_use_psmisc ... ok
-ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_no_device
-ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_no_device ... ok
- WARNING [ironic_python_agent.disk_utils] Failed to check the device fake-dev with fuser: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: None
-Stderr: 'fake'
- WARNING [ironic_python_agent.disk_utils] Failed to check the device fake-dev with fuser: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: None
-Stderr: 'fake'
-ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_no_fuser
-ironic_python_agent.tests.unit.test_disk_utils.WaitForDisk.test_wait_for_disk_to_become_available_no_fuser ... ok
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_validation
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_validation ... ok
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_collect_system_logs_journald_with_logfile
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_collect_system_logs_journald_with_logfile ... ok
- WARNING [ironic_python_agent.dmi_inspector] Failed to parse Handle type in dmi output: list index out of range
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_dmidecode_info_bad_data
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_dmidecode_info_bad_data ... ok
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_collect_system_logs_non_journald
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_collect_system_logs_non_journald ... ok
-   ERROR [ironic_python_agent.utils] failed to run dmidecode: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: None
-Stderr: None
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_dmidecode_info_failure
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_dmidecode_info_failure ... ok
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_with_token
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_with_token ... ok
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_collect_system_logs_non_journald_with_logfile
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_collect_system_logs_non_journald_with_logfile ... ok
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_dmidecode_info_ok
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_dmidecode_info_ok ... ok
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_device_extractor
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_device_extractor ... ok
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_parse_dmi_bios
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_parse_dmi_bios ... ok
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_with_token_invalid
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_execute_agent_command_with_token_invalid ... ok
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_extract_capability_from_dict
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_extract_capability_from_dict ... ok
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_parse_dmi_cpu
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_parse_dmi_cpu ... ok
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_extract_capability_from_json_string
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_extract_capability_from_json_string ... ok
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_parse_dmi_memory
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_parse_dmi_memory ... ok
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_get_agent_status
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_get_agent_status ... ok
  WARNING [ironic_python_agent.utils] Ignoring malformed capability 'test:world:2'. Format should be 'key:val'.
  WARNING [ironic_python_agent.utils] Ignoring malformed capability 'badformat'. Format should be 'key:val'.
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_extract_capability_from_old_format_caps
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_extract_capability_from_old_format_caps ... ok
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_save_data
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_save_data ... ok
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_command_output
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_command_output ... ok
- WARNING [ironic_python_agent.dmi_inspector] Failed to process memory dmi data: 'Handle'
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_get_command_result
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_get_command_result ... ok
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_save_data_error_handle
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_save_data_error_handle ... ok
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_journalctl_output
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_journalctl_output ... ok
- WARNING [ironic_python_agent.dmi_inspector] Failed to process memory dmi data: 'Number Of Devices'
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_save_data_error_number_of_devices
-ironic_python_agent.tests.unit.test_dmi_inspector.TestCollectDmidecodeInfo.test_save_data_error_number_of_devices ... ok
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_journalctl_output_fail
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_journalctl_output_fail ... ok
-ironic_python_agent.tests.unit.test_efi_utils.TestGetEfiBootloaders.test__get_efi_bootloaders
-ironic_python_agent.tests.unit.test_efi_utils.TestGetEfiBootloaders.test__get_efi_bootloaders ... ok
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_list_command_results
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_list_command_results ... ok
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_journalctl_output_with_lines
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_journalctl_output_with_lines ... ok
-ironic_python_agent.tests.unit.test_efi_utils.TestGetEfiBootloaders.test__get_efi_bootloaders_no_csv
-ironic_python_agent.tests.unit.test_efi_utils.TestGetEfiBootloaders.test__get_efi_bootloaders_no_csv ... ok
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_journalctl_output_with_units
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_journalctl_output_with_units ... ok
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_not_found
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_not_found ... ok
-ironic_python_agent.tests.unit.test_efi_utils.TestGetEfiBootloaders.test__get_windows_efi_bootloaders
-ironic_python_agent.tests.unit.test_efi_utils.TestGetEfiBootloaders.test__get_windows_efi_bootloaders ... ok
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_ssl_client_options
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_get_ssl_client_options ... ok
-ironic_python_agent.tests.unit.test_efi_utils.TestGetEfiBootloaders.test__no_efi_bootloaders
-ironic_python_agent.tests.unit.test_efi_utils.TestGetEfiBootloaders.test__no_efi_bootloaders ... ok
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_guess_root_disk_disks_too_small
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_guess_root_disk_disks_too_small ... ok
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_root
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_root ... ok
-ironic_python_agent.tests.unit.test_efi_utils.TestRunEfiBootmgr.test__run_efibootmgr
-ironic_python_agent.tests.unit.test_efi_utils.TestRunEfiBootmgr.test__run_efibootmgr ... ok
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_guess_root_disk_primary_sort
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_guess_root_disk_primary_sort ... ok
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_v1_root
-ironic_python_agent.tests.unit.test_api.TestIronicAPI.test_v1_root ... ok
-ironic_python_agent.tests.unit.test_efi_utils.TestRunEfiBootmgr.test__run_efibootmgr_no_bootloaders
-ironic_python_agent.tests.unit.test_efi_utils.TestRunEfiBootmgr.test__run_efibootmgr_no_bootloaders ... ok
-ironic_python_agent.tests.unit.test_disk_utils.GetDeviceInformationTestCase.test_empty
-ironic_python_agent.tests.unit.test_disk_utils.GetDeviceInformationTestCase.test_empty ... ok
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_guess_root_disk_secondary_sort
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_guess_root_disk_secondary_sort ... ok
-ironic_python_agent.tests.unit.test_disk_utils.GetDeviceInformationTestCase.test_fields
-ironic_python_agent.tests.unit.test_disk_utils.GetDeviceInformationTestCase.test_fields ... ok
-ironic_python_agent.tests.unit.test_disk_utils.GetDeviceInformationTestCase.test_normal
-ironic_python_agent.tests.unit.test_disk_utils.GetDeviceInformationTestCase.test_normal ... ok
-   ERROR [ironic_python_agent.disk_utils] Security: Unable to safety check image
-ironic_python_agent.tests.unit.test_hardware.TestAPIClientSaveAndUse.test_save_api_client
-ironic_python_agent.tests.unit.test_hardware.TestAPIClientSaveAndUse.test_save_api_client ... ok
-ironic_python_agent.tests.unit.test_disk_utils.ImageInspectionTest.test_image_inspection_fail_format_error
-ironic_python_agent.tests.unit.test_disk_utils.ImageInspectionTest.test_image_inspection_fail_format_error ... ok
-   ERROR [ironic_python_agent.disk_utils] Security: Image failed safety check
-ironic_python_agent.tests.unit.test_disk_utils.ImageInspectionTest.test_image_inspection_fail_safety_check
-ironic_python_agent.tests.unit.test_disk_utils.ImageInspectionTest.test_image_inspection_fail_safety_check ... ok
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_gzip_and_b64encode
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_gzip_and_b64encode ... ok
-ironic_python_agent.tests.unit.test_disk_utils.ImageInspectionTest.test_image_inspection_pass
-ironic_python_agent.tests.unit.test_disk_utils.ImageInspectionTest.test_image_inspection_pass ... ok
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions ... ok
-ironic_python_agent.tests.unit.test_hardware.TestAPIClientSaveAndUse.test_update_node_cache
-ironic_python_agent.tests.unit.test_hardware.TestAPIClientSaveAndUse.test_update_node_cache ... ok
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_disk_label_gpt
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_disk_label_gpt ... ok
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_is_journalctl_present
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_is_journalctl_present ... ok
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_gpt_with_prep
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_gpt_with_prep ... ok
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_local_boot
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_local_boot ... ok
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_local_boot_gpt_bios
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_local_boot_gpt_bios ... ok
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_is_journalctl_present_false
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_is_journalctl_present_false ... ok
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_local_boot_uefi
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_local_boot_uefi ... ok
- WARNING [root] The root device was not detected in 27 seconds
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_mbr_with_prep
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_mbr_with_prep ... ok
-ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_disks_timeout
-ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_disks_timeout ... ok
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_with_ephemeral
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_with_ephemeral ... ok
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_secure_boot_overriden_with_instance_info_caps
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_secure_boot_overriden_with_instance_info_caps ... ok
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_with_iscsi_device
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_with_iscsi_device ... ok
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_with_local_device
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_with_local_device ... ok
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_with_nvme_device
-ironic_python_agent.tests.unit.test_disk_utils.MakePartitionsTestCase.test_make_partitions_with_nvme_device ... ok
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_specified_partition_table_type
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_specified_partition_table_type ... ok
- WARNING [root] The root device was not detected in 45 seconds
-ironic_python_agent.tests.unit.test_disk_utils.PopulateImageTestCase.test_populate_qcow2_image
-ironic_python_agent.tests.unit.test_disk_utils.PopulateImageTestCase.test_populate_qcow2_image ... ok
-ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_disks_timeout_configured
-ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_disks_timeout_configured ... ok
-ironic_python_agent.tests.unit.test_disk_utils.PopulateImageTestCase.test_populate_raw_image
-ironic_python_agent.tests.unit.test_disk_utils.PopulateImageTestCase.test_populate_raw_image ... ok
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_specified_partition_table_type_disk_label_ignored_with_uefi
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_specified_partition_table_type_disk_label_ignored_with_uefi ... ok
- WARNING [root] The root device was not detected in 27 seconds
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_specified_partition_table_type_gpt
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_specified_partition_table_type_gpt ... ok
-ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_disks_timeout_unconfigured
-ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_disks_timeout_unconfigured ... ok
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_clean_boot_records
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_clean_boot_records ... ok
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_specified_partition_table_type_with_disk_label
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_specified_partition_table_type_with_disk_label ... ok
- WARNING [ironic_python_agent.efi_utils] Empty EFI partition detected.
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_empty_partition_by_uuid
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_empty_partition_by_uuid ... ok
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_specified_partition_table_type_with_instance_disk_label
 ironic_python_agent.tests.unit.test_utils.TestUtils.test_specified_partition_table_type_with_instance_disk_label ... ok
-ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_no_wait_for_disks
-ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_no_wait_for_disks ... ok
-   ERROR [ironic_python_agent.efi_utils] Could not configure UEFI boot on device /dev/fake: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
-Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/efi_utils.py", line 131, in manage_uefi
-    utils.execute('mount', efi_partition, efi_partition_mount_point)
-  File "<string>", line 3, in execute
-  File "/usr/lib/python3.12/unittest/mock.py", line 1139, in __call__
-    return self._mock_call(*args, **kwargs)
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.12/unittest/mock.py", line 1143, in _mock_call
-    return self._execute_mock_call(*args, **kwargs)
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.12/unittest/mock.py", line 1198, in _execute_mock_call
-    raise effect
-oslo_concurrency.processutils.ProcessExecutionError: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_failure
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_failure ... ok
-ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_waits_for_disks
-ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_waits_for_disks ... ok
-   ERROR [ironic_python_agent.efi_utils] Could not configure UEFI boot on device /dev/fake: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
-Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/efi_utils.py", line 185, in manage_uefi
-    _run_efibootmgr(valid_efi_bootloaders, efi_dev, efi_part,
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/efi_utils.py", line 351, in _run_efibootmgr
-    boot_records = list(get_boot_records())
-                   ^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/efi_utils.py", line 282, in get_boot_records
-    efi_output = utils.execute('efibootmgr', '-v', binary=True)
-                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "<string>", line 3, in execute
-  File "/usr/lib/python3.12/unittest/mock.py", line 1139, in __call__
-    return self._mock_call(*args, **kwargs)
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.12/unittest/mock.py", line 1143, in _mock_call
-    return self._execute_mock_call(*args, **kwargs)
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.12/unittest/mock.py", line 1202, in _execute_mock_call
-    raise result
-oslo_concurrency.processutils.ProcessExecutionError: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
-   ERROR [ironic_python_agent.efi_utils] Umounting efi system partition failed. Attempted 3 times. Error: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'no umount'
-Stderr: None
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_failure_after_failure
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_failure_after_failure ... ok
-   ERROR [ironic_python_agent.efi_utils] Could not configure UEFI boot on device /dev/fake: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
-Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/efi_utils.py", line 185, in manage_uefi
-    _run_efibootmgr(valid_efi_bootloaders, efi_dev, efi_part,
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/efi_utils.py", line 351, in _run_efibootmgr
-    boot_records = list(get_boot_records())
-                   ^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/efi_utils.py", line 282, in get_boot_records
-    efi_output = utils.execute('efibootmgr', '-v', binary=True)
-                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "<string>", line 3, in execute
-  File "/usr/lib/python3.12/unittest/mock.py", line 1139, in __call__
-    return self._mock_call(*args, **kwargs)
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.12/unittest/mock.py", line 1143, in _mock_call
-    return self._execute_mock_call(*args, **kwargs)
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.12/unittest/mock.py", line 1202, in _execute_mock_call
-    raise result
-oslo_concurrency.processutils.ProcessExecutionError: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_failure_after_mount
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_failure_after_mount ... ok
-ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_waits_for_disks_configured
-ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_waits_for_disks_configured ... ok
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_found_csv
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_found_csv ... ok
-ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_waits_for_disks_nonconfigured
-ironic_python_agent.tests.unit.test_hardware.TestEvaluateHardwareSupport.test_evaluate_hw_waits_for_disks_nonconfigured ... ok
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_get_boot_records
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_get_boot_records ... ok
-   ERROR [ironic_python_agent.inspector] inspector url error 400: <MagicMock name='post().content.decode()' id='3009794008'>, proceeding with lookup
-ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_error
-ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_error ... ok
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_no_partition
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_no_partition ... ok
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_nvme_device
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_nvme_device ... ok
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_ok
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_ok ... ok
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_software_raid
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_software_raid ... ok
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_wholedisk
-ironic_python_agent.tests.unit.test_efi_utils.TestManageUefi.test_wholedisk ... ok
-ironic_python_agent.tests.unit.test_encoding.TestSerializable.test_baseclass_serialize
-ironic_python_agent.tests.unit.test_encoding.TestSerializable.test_baseclass_serialize ... ok
-ironic_python_agent.tests.unit.test_encoding.TestSerializable.test_childclass_serialize
-ironic_python_agent.tests.unit.test_encoding.TestSerializable.test_childclass_serialize ... ok
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_capture_region
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_capture_region ... ok
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_get_inspector
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_get_inspector ... ok
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_info_wrapper_file_like
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_info_wrapper_file_like ... ok
-   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: fail
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_info_wrapper_file_like_eats_error
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_info_wrapper_file_like_eats_error ... ok
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_info_wrapper_iter_like
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_info_wrapper_iter_like ... ok
-   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: fail
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_info_wrapper_iter_like_eats_error
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorInfra.test_info_wrapper_iter_like_eats_error ... ok
-/bin/sh: 1: mkisofs: not found
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_bad_iso_qcow2
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_bad_iso_qcow2 ... skipped 'mkisofs not installed'
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_from_file_reads_minimum
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_from_file_reads_minimum ... ok
-/bin/sh: 1: mkisofs: not found
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_iso_9660
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_iso_9660 ... skipped 'mkisofs not installed'
-/bin/sh: 1: mkisofs: not found
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_iso_udf
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_iso_udf ... skipped 'mkisofs not installed'
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qcow2
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qcow2 ... ok
- WARNING [ironic_python_agent.format_inspector] Found unknown feature bit in byte 7: 0b0/0b0
- WARNING [ironic_python_agent.format_inspector] Found unknown feature bit in byte 0: 0b0/0b1111
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qcow2_feature_flag_checks
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qcow2_feature_flag_checks ... ok
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qcow2_invalid
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qcow2_invalid ... ok
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qcow2_safety_checks
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qcow2_safety_checks ... ok
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qed_always_unsafe
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_qed_always_unsafe ... ok
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vdi
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vdi ... ok
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vdi_invalid
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vdi_invalid ... ok
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vhd
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vhd ... ok
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vhd_invalid
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vhd_invalid ... ok
-ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_retries
-ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_retries ... ok
-ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_retries_on_50X_error
-ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_retries_on_50X_error ... ok
-ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_retry_on_50X_and_succeed
-ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_retry_on_50X_and_succeed ... ok
- WARNING [ironic_python_agent.inspector] Connection error when accessing url1, trying the next URL. Error: 
-ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_several_urls
-ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_several_urls ... ok
-ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_ok
-ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_ok ... ok
-ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_send_failure
-ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_send_failure ... ok
-ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_use_api_url
-ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_use_api_url ... ok
- WARNING [ironic_python_agent.inspector] Connection error when accessing http://url1/v1/continue_inspection, trying the next URL. Error: 
-ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_use_several_api_urls
-ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_use_several_api_urls ... ok
-ironic_python_agent.tests.unit.test_inspector.TestNormalizeMac.test_correct_mac
-ironic_python_agent.tests.unit.test_inspector.TestNormalizeMac.test_correct_mac ... ok
-ironic_python_agent.tests.unit.test_inspector.TestNormalizeMac.test_pxelinux_mac
-ironic_python_agent.tests.unit.test_inspector.TestNormalizeMac.test_pxelinux_mac ... ok
-ironic_python_agent.tests.unit.test_inspector.TestWaitForDhcp.test_all
-ironic_python_agent.tests.unit.test_inspector.TestWaitForDhcp.test_all ... ok
-ironic_python_agent.tests.unit.test_inspector.TestWaitForDhcp.test_boot_only
-ironic_python_agent.tests.unit.test_inspector.TestWaitForDhcp.test_boot_only ... ok
-ironic_python_agent.tests.unit.test_inspector.TestWaitForDhcp.test_disabled
-ironic_python_agent.tests.unit.test_inspector.TestWaitForDhcp.test_disabled ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test__get_ironic_api_version_already_set
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test__get_ironic_api_version_already_set ... ok
-   ERROR [ironic_python_agent.ironic_api_client] An error occurred while attempting to discover the available Ironic API versions, falling back to using version 1.31
-Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/ironic_api_client.py", line 130, in _get_ironic_api_version
-    response = self._request('GET', '/')
-               ^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/ironic_api_client.py", line 90, in _request
-    resp = self.session.request(method,
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "<string>", line 3, in request
-  File "/usr/lib/python3.12/unittest/mock.py", line 1139, in __call__
-    return self._mock_call(*args, **kwargs)
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.12/unittest/mock.py", line 1143, in _mock_call
-    return self._execute_mock_call(*args, **kwargs)
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.12/unittest/mock.py", line 1198, in _execute_mock_call
-    raise effect
-Exception: Boom
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test__get_ironic_api_version_error
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test__get_ironic_api_version_error ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test__get_ironic_api_version_fresh
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test__get_ironic_api_version_fresh ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test__get_ironic_api_version_set_via_conf
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test__get_ironic_api_version_set_via_conf ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup ... ok
- WARNING [ironic_python_agent.ironic_api_client] Got invalid node data in response to query for node with addresses '00:0c:29:8c:11:b1,00:0c:29:8c:11:b2' from http://agent-api.ironic.example.org: {'node_node': 'also_not_node'}
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_bad_response_body
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_bad_response_body ... ok
- WARNING [ironic_python_agent.ironic_api_client] Failed looking up node with addresses '00:0c:29:8c:11:b1,00:0c:29:8c:11:b2' at http://agent-api.ironic.example.org. Check if inspection has completed? Error 400: {"node": {"uuid": "deadbeef-dabb-ad00-b105-f00d00bab10c"}}
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_bad_response_code
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_bad_response_code ... ok
- WARNING [ironic_python_agent.ironic_api_client] Got invalid node data in response to query for node with addresses '00:0c:29:8c:11:b1,00:0c:29:8c:11:b2' from http://agent-api.ironic.example.org: {'heartbeat_timeout': 300}
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_bad_response_data
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_bad_response_data ... ok
- WARNING [ironic_python_agent.ironic_api_client] Got invalid heartbeat from the API: {'node': {'uuid': 'deadbeef-dabb-ad00-b105-f00d00bab10c'}}
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_no_heartbeat_timeout
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_no_heartbeat_timeout ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_node_locked
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_node_locked ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_transient_exceptions
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_transient_exceptions ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_unknown_exception
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_unknown_exception ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_unknown_exception_fallback
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_unknown_exception_fallback ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_with_uuid
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_do_lookup_with_uuid ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_get_agent_url_ipv4
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_get_agent_url_ipv4 ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_get_agent_url_ipv6
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_get_agent_url_ipv6 ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_get_agent_url_protocol
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_get_agent_url_protocol ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_409_status_code
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_409_status_code ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_agent_version_unsupported
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_agent_version_unsupported ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_error_format_1
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_error_format_1 ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_error_format_2
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_error_format_2 ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_error_format_3
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_error_format_3 ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_invalid_status_code
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_invalid_status_code ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_requests_connection_error
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_requests_connection_error ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_requests_exception
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_requests_exception ... ok
- WARNING [ironic_python_agent.ironic_api_client] Connection error when accessing 2001:db8::1/v1/heartbeat/meow, trying the next URL. Error: 
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_requests_several_urls
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_heartbeat_requests_several_urls ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_lookup_node
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_lookup_node ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_lookup_node_retries
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_lookup_node_retries ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_lookup_timeout
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_lookup_timeout ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_successful_heartbeat
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_successful_heartbeat ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_successful_heartbeat_ip6
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_successful_heartbeat_ip6 ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_successful_heartbeat_with_token
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_successful_heartbeat_with_token ... ok
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_successful_heartbeat_with_verify_ca
-ironic_python_agent.tests.unit.test_ironic_api_client.TestBaseIronicPythonAgent.test_successful_heartbeat_with_verify_ca ... ok
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info ... ok
- WARNING [ironic_python_agent.netutils] LLDP timed out, remaining interfaces: [('eth0', <Mock id='3023322760'>), ('eth1', <Mock id='3023321824'>)]
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_empty
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_empty ... ok
- WARNING [ironic_python_agent.netutils] Trailing byte received in an LLDP package: b'5'
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_malformed
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_malformed ... ok
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_multiple
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_multiple ... ok
- WARNING [ironic_python_agent.netutils] LLDP timed out, remaining interfaces: [('eth1', <Mock id='3012380568'>)]
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_one_empty_interface
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_one_empty_interface ... ok
-   ERROR [ironic_python_agent.netutils] Socket for network interface eth0 said that it was ready to read we were unable to read from the socket while trying to get LLDP packet. Skipping this network interface.
-Traceback (most recent call last):
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/netutils.py", line 197, in _get_lldp_info
-    lldp_info[interface[0]] = _receive_lldp_packets(s)
-                              ^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/build/reproducible-path/ironic-python-agent-9.14.0/ironic_python_agent/netutils.py", line 160, in _receive_lldp_packets
-    pkt = sock.recv(1600)
-          ^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.12/unittest/mock.py", line 1139, in __call__
-    return self._mock_call(*args, **kwargs)
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.12/unittest/mock.py", line 1143, in _mock_call
-    return self._execute_mock_call(*args, **kwargs)
-           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-  File "/usr/lib/python3.12/unittest/mock.py", line 1198, in _execute_mock_call
-    raise effect
-OSError: BOOM
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_socket_recv_error
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_get_lldp_info_socket_recv_error ... ok
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_raw_promiscuous_sockets
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_raw_promiscuous_sockets ... ok
-   ERROR [ironic_python_agent.netutils] Failed to open all RawPromiscuousSockets, attempting to close any opened sockets.
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_raw_promiscuous_sockets_bind_fail
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_raw_promiscuous_sockets_bind_fail ... ok
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_raw_promiscuous_sockets_exception
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_raw_promiscuous_sockets_exception ... ok
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_wrap_ipv6
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_wrap_ipv6 ... ok
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_wrap_ipv6_with_ipv4
-ironic_python_agent.tests.unit.test_netutils.TestNetutils.test_wrap_ipv6_with_ipv4 ... ok
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_bad_nodes_cores_info
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_bad_nodes_cores_info ... ok
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_bad_nodes_memory_info
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_bad_nodes_memory_info ... ok
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_bad_nodes_nics_info
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_bad_nodes_nics_info ... ok
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_bad_nodes_thread_dirs
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_bad_nodes_thread_dirs ... ok
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_nodes_cores_info
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_nodes_cores_info ... ok
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_nodes_memory_info
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_nodes_memory_info ... ok
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_nodes_nics_info
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_nodes_nics_info ... ok
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_numa_node_id_invalid_format
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_numa_node_id_invalid_format ... ok
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_numa_node_id_invalid_format_cores_info
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_numa_node_id_invalid_format_cores_info ... ok
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_numa_node_id_invalid_format_memory_info
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_numa_node_id_invalid_format_memory_info ... ok
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_numa_node_id_valid_format
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_get_numa_node_id_valid_format ... ok
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_no_nics_dir
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_no_nics_dir ... ok
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_nodes_invalid_memory_unit
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_nodes_invalid_memory_unit ... ok
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_nodes_invalid_numa_format_memory_info
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_nodes_invalid_numa_format_memory_info ... ok
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_nodes_invalid_threaddir_format_cores_info
-ironic_python_agent.tests.unit.test_numa_inspector.TestGetNumaTopologyInfo.test_nodes_invalid_threaddir_format_cores_info ... ok
-ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test__create_partition_mbr_disk_exceeds_2TB
-ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test__create_partition_mbr_disk_exceeds_2TB ... ok
-ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test__create_partition_mbr_disk_exceeds_2TB_nvme
-ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test__create_partition_mbr_disk_exceeds_2TB_nvme ... ok
-ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test__create_partition_mbr_disk_under_2TB
-ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test__create_partition_mbr_disk_under_2TB ... ok
-ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test__create_partition_mbr_disk_under_2TB_nvme
-ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test__create_partition_mbr_disk_under_2TB_nvme ... ok
-ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_conf_drive_error_counting
-ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_conf_drive_error_counting ... ok
-ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_conf_drive_sz_exceed
-ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_conf_drive_sz_exceed ... ok
-ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_exists
-ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_exists ... ok
-ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_gpt
-ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_gpt ... ok
-ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_gpt_use_vfat
-ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_gpt_use_vfat ... ok
-ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_gpt_with_fallback
-ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_gpt_with_fallback ... ok
-ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_num_parts_exceed
-ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_num_parts_exceed ... ok
-   ERROR [root] Failed to create config drive on disk /dev/fake for node 12345678-1234-1234-1234-1234567890abcxyz. Error: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: None
-Stderr: None
-ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_part_create_exc
-ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_part_create_exc ... ok
-ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_part_create_fail
-ironic_python_agent.tests.unit.test_partition_utils.CreateConfigDriveTestCases.test_create_partition_part_create_fail ... ok
-ironic_python_agent.tests.unit.test_partition_utils.RealFilePartitioningTestCase.test_different_sizes
-ironic_python_agent.tests.unit.test_partition_utils.RealFilePartitioningTestCase.test_different_sizes ... skipped "parted utility was not found: [Errno 2] No such file or directory: 'parted'"
-ironic_python_agent.tests.unit.test_partition_utils.RealFilePartitioningTestCase.test_whole_disk
-ironic_python_agent.tests.unit.test_partition_utils.RealFilePartitioningTestCase.test_whole_disk ... skipped "parted utility was not found: [Errno 2] No such file or directory: 'parted'"
-   ERROR [root] Encountered issue attempting to validate the supplied configuration drive. Error: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
- WARNING [ironic_lib.utils] Failed to unlink /tmp/tmpl2mu0m3y/tmpt7fklsui, error: [Errno 21] Is a directory: '/tmp/tmpl2mu0m3y/tmpt7fklsui'
-ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__does_config_drive_failed
-ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__does_config_drive_failed ... ok
- WARNING [ironic_lib.utils] Failed to unlink /tmp/tmp5sy1d1a4/tmp17jf3pg9, error: [Errno 21] Is a directory: '/tmp/tmp5sy1d1a4/tmp17jf3pg9'
-ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__does_config_drive_work
-ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__does_config_drive_work ... ok
- WARNING [ironic_lib.utils] Failed to unlink /tmp/tmp3hm1x6_f/tmp47cw6gt8, error: [Errno 21] Is a directory: '/tmp/tmp3hm1x6_f/tmp47cw6gt8'
- WARNING [ironic_lib.utils] Failed to unlink /tmp/tmp3hm1x6_f/tmptrryshsc, error: [Errno 21] Is a directory: '/tmp/tmp3hm1x6_f/tmptrryshsc'
-ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__try_build_fat32_config_drive
-ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__try_build_fat32_config_drive ... ok
-   ERROR [root] We were unable to make a new filesystem for the configuration drive. Error: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
- WARNING [ironic_lib.utils] Failed to unlink /tmp/tmpzaob3jb4/tmp3zwr7vm4, error: [Errno 21] Is a directory: '/tmp/tmpzaob3jb4/tmp3zwr7vm4'
- WARNING [ironic_lib.utils] Failed to unlink /tmp/tmpzaob3jb4/tmpmf9ovzgg, error: [Errno 21] Is a directory: '/tmp/tmpzaob3jb4/tmpmf9ovzgg'
-ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__try_build_fat32_config_drive_fails_once_invalid
-ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__try_build_fat32_config_drive_fails_once_invalid ... ok
- WARNING [root] We were unable to examine the configuration drive, bypassing. Error: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: 'boom'
-Stderr: None
-ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__try_build_fat32_config_drive_graceful_fail
-ironic_python_agent.tests.unit.test_partition_utils.TestConfigDriveTestRecovery.test__try_build_fat32_config_drive_graceful_fail ... ok
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test__get_actual_component_devices
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test__get_actual_component_devices ... ok
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test__get_actual_component_devices_broken_raid0
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test__get_actual_component_devices_broken_raid0 ... ok
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device ... ok
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device_fail_create_device
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device_fail_create_device ... ok
- WARNING [ironic_python_agent.raid_utils] Found /dev/sdb1 to be missing from /dev/md0 ... re-adding!
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device_fail_read_device
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device_fail_read_device ... ok
- WARNING [ironic_python_agent.raid_utils] Found /dev/sdb1 to be missing from /dev/md0 ... re-adding!
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device_missing_device
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device_missing_device ... ok
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device_with_volume_name
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_create_raid_device_with_volume_name ... ok
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_get_volume_name_of_raid_device
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_get_volume_name_of_raid_device ... ok
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_get_volume_name_of_raid_device_invalid
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_get_volume_name_of_raid_device_invalid ... ok
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_bios_gpt
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_bios_gpt ... ok
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_bios_msdos
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_bios_msdos ... ok
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_uefi_gpt
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_uefi_gpt ... ok
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_uefi_gpt_efi_provided
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_uefi_gpt_efi_provided ... ok
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_uefi_gpt_esp_not_found
-ironic_python_agent.tests.unit.test_raid_utils.TestRaidUtils.test_prepare_boot_partitions_for_softraid_uefi_gpt_esp_not_found ... ok
-ironic_python_agent.tests.unit.test_utils.TestRemoveKeys.test_remove_keys
-ironic_python_agent.tests.unit.test_utils.TestRemoveKeys.test_remove_keys ... ok
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vhdx
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vhdx ... ok
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vhdx_invalid
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vhdx_invalid ... ok
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk ... ok
-5+0 records in
-5+0 records out
-5242880 bytes (5.2 MB, 5.0 MiB) copied, 0.0455394 s, 115 MB/s
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_mem_limit
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_mem_limit ... ok
-5+0 records in
-5+0 records out
-5242880 bytes (5.2 MB, 5.0 MiB) copied, 0.0453223 s, 116 MB/s
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_mem_limit_stream_optimized
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_mem_limit_stream_optimized ... ok
-   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Wrong descriptor location
-   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Wrong descriptor location
-   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Wrong descriptor location
-   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Wrong descriptor location
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_offset
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_offset ... ok
-   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Wrong descriptor location
-   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Wrong descriptor location
-   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Wrong descriptor location
-   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Wrong descriptor location
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_offset_stream_optimized
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_offset_stream_optimized ... ok
-   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Signature KDMV not found: b'# Co'
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_invalid
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_invalid ... ok
-   ERROR [ironic_python_agent.format_inspector] Format inspector failed, aborting: Signature KDMV not found: b'# Co'
- WARNING [ironic_python_agent.format_inspector] Unsupported VMDK format b'someunknownformat'
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_invalid_type
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_invalid_type ... ok
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_stream_optimized
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_stream_optimized ... ok
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorsTargeted.test_vhd_table_over_limit
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorsTargeted.test_vhd_table_over_limit ... ok
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorsTargeted.test_vhd_table_under_limit
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectorsTargeted.test_vhd_table_under_limit ... ok
-ironic_python_agent.tests.unit.test_hardware.TestHardwareManagerLoading.test_get_managers
-ironic_python_agent.tests.unit.test_hardware.TestHardwareManagerLoading.test_get_managers ... ok
-ironic_python_agent.tests.unit.test_hardware.TestHardwareManagerLoading.test_get_managers_detail
-ironic_python_agent.tests.unit.test_hardware.TestHardwareManagerLoading.test_get_managers_detail ... ok
-ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test__check_for_iscsi
-ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test__check_for_iscsi ... ok
-ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test__check_for_iscsi_no_iscsi
-ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test__check_for_iscsi_no_iscsi ... ok
-ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test__load_ipmi_modules
-ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test__load_ipmi_modules ... ok
-ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_missing
-ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_missing ... ok
- WARNING [root] Could not find the SCSI address (HCTL) for device /dev/sda1. Skipping
-ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_partuuid_success
-ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_partuuid_success ... ok
- WARNING [root] Could not find the SCSI address (HCTL) for device /dev/sda. Skipping
- WARNING [root] Could not find the SCSI address (HCTL) for device /dev/sdb. Skipping
-ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_success
-ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_success ... ok
- WARNING [root] Could not find the SCSI address (HCTL) for device /dev/sda. Skipping
- WARNING [root] Could not find the SCSI address (HCTL) for device /dev/sdb. Skipping
- WARNING [root] Could not find the SCSI address (HCTL) for device /dev/md0. Skipping
- WARNING [root] Could not find the SCSI address (HCTL) for device /dev/md1. Skipping
-ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_success_raid
-ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_success_raid ... ok
-ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_wrong_block_type
-ironic_python_agent.tests.unit.test_hardware.TestModuleFunctions.test_list_all_block_devices_wrong_block_type ... ok
- WARNING [ironic_python_agent.inspector] Failed to gather vendor id, product id or pci class from PCI device bar: 
- WARNING [ironic_python_agent.inspector] Wrong format of vendor id, product id or pci class in PCI device baz: 
-ironic_python_agent.tests.unit.test_inspector.TestCollectPciDevicesInfo.test_bad_pci_device_info
-ironic_python_agent.tests.unit.test_inspector.TestCollectPciDevicesInfo.test_bad_pci_device_info ... ok
-ironic_python_agent.tests.unit.test_inspector.TestCollectPciDevicesInfo.test_success
-ironic_python_agent.tests.unit.test_inspector.TestCollectPciDevicesInfo.test_success ... ok
- WARNING [ironic_python_agent.inspector] Failed to gather numa_node id from PCI device foo: 
- WARNING [ironic_python_agent.inspector] Failed to gather numa_node id from PCI device bar: 
-ironic_python_agent.tests.unit.test_inspector.TestCollectPciDevicesInfo.test_success_numa_ioerror
-ironic_python_agent.tests.unit.test_inspector.TestCollectPciDevicesInfo.test_success_numa_ioerror ... ok
-   ERROR [ironic_python_agent.utils] Failed to get list of PCI devices: 
-ironic_python_agent.tests.unit.test_inspector.TestCollectPciDevicesInfo.test_wrong_path
-ironic_python_agent.tests.unit.test_inspector.TestCollectPciDevicesInfo.test_wrong_path ... ok
-ironic_python_agent.tests.unit.test_inspector.TestMisc.test_default_collector_loadable
-ironic_python_agent.tests.unit.test_inspector.TestMisc.test_default_collector_loadable ... ok
-ironic_python_agent.tests.unit.test_inspector.TestMisc.test_raise_on_wrong_collector
-ironic_python_agent.tests.unit.test_inspector.TestMisc.test_raise_on_wrong_collector ... ok
- WARNING [ironic_python_agent.numa_inspector] Failed to get some NUMA information (Error in NUMA node data format: An unexpected error occurred. Please try back later.)
-ironic_python_agent.tests.unit.test_numa_inspector.TestCollectNumaTopologyInfo.test_collect_failure
-ironic_python_agent.tests.unit.test_numa_inspector.TestCollectNumaTopologyInfo.test_collect_failure ... ok
- WARNING [ironic_python_agent.numa_inspector] Failed to get some NUMA information (Error in NUMA node data format: An unexpected error occurred. Please try back later.)
-ironic_python_agent.tests.unit.test_numa_inspector.TestCollectNumaTopologyInfo.test_collect_no_nics_dirs
-ironic_python_agent.tests.unit.test_numa_inspector.TestCollectNumaTopologyInfo.test_collect_no_nics_dirs ... ok
- WARNING [ironic_python_agent.numa_inspector] Failed to get list of NUMA nodes, NUMA node path does not exist: /sys/devices/system/node/
-ironic_python_agent.tests.unit.test_numa_inspector.TestCollectNumaTopologyInfo.test_collect_no_numa_dirs
-ironic_python_agent.tests.unit.test_numa_inspector.TestCollectNumaTopologyInfo.test_collect_no_numa_dirs ... ok
-ironic_python_agent.tests.unit.test_numa_inspector.TestCollectNumaTopologyInfo.test_collect_success
-ironic_python_agent.tests.unit.test_numa_inspector.TestCollectNumaTopologyInfo.test_collect_success ... ok
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive ... ok
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_bad_status_code
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_bad_status_code ... ok
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_bad_url
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_bad_url ... ok
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_base64_error
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_base64_error ... ok
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_base64_string
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_base64_string ... ok
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_binary
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_binary ... ok
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_gzip_error
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_gzip_error ... ok
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_insecure
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_insecure ... ok
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_ssl
-ironic_python_agent.tests.unit.test_partition_utils.GetConfigdriveTestCase.test_get_configdrive_ssl ... ok
-ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_DeployFail_exc
-ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_DeployFail_exc ... ok
-ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_absent
-ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_absent ... ok
- WARNING [ironic_python_agent.disk_utils] Unable to probe for partitions on device /dev/fake, the partitioning table may be broken. Error: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: None
-Stderr: None
-ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_exc
-ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_exc ... ok
-ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_present
-ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_present ... ok
-ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_present_uppercase
-ironic_python_agent.tests.unit.test_partition_utils.GetLabelledPartitionTestCases.test_get_partition_present_uppercase ... ok
-ironic_python_agent.tests.unit.test_partition_utils.IsDiskLargerThanMaxSizeTestCases.test_is_disk_larger_than_max_size_exc
-ironic_python_agent.tests.unit.test_partition_utils.IsDiskLargerThanMaxSizeTestCases.test_is_disk_larger_than_max_size_exc ... ok
-ironic_python_agent.tests.unit.test_partition_utils.IsDiskLargerThanMaxSizeTestCases.test_is_disk_larger_than_max_size_false
-ironic_python_agent.tests.unit.test_partition_utils.IsDiskLargerThanMaxSizeTestCases.test_is_disk_larger_than_max_size_false ... ok
-ironic_python_agent.tests.unit.test_partition_utils.IsDiskLargerThanMaxSizeTestCases.test_is_disk_larger_than_max_size_true
-ironic_python_agent.tests.unit.test_partition_utils.IsDiskLargerThanMaxSizeTestCases.test_is_disk_larger_than_max_size_true ... ok
-ironic_python_agent.tests.unit.test_utils.ExecuteTestCase.test_execute
-ironic_python_agent.tests.unit.test_utils.ExecuteTestCase.test_execute ... ok
-ironic-python-agent: Copying configuration from /tmp/tmpd8jpi99b/etc/ironic-python-agent to /etc/ironic-python-agent
-ironic-python-agent: Copying configuration from /tmp/tmpd8jpi99b/etc/ironic-python-agent.d to /etc/ironic-python-agent.d
-ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_copy
-ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_copy ... ok
-ironic-python-agent: Copying configuration from /tmp/tmp0g_4h_9r/etc/ironic-python-agent to /etc/ironic-python-agent
-ironic-python-agent: Copying configuration from /tmp/tmp0g_4h_9r/etc/ironic-python-agent.d to /etc/ironic-python-agent.d
-ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_copy_mounted
-ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_copy_mounted ... ok
-ironic-python-agent: /some/path/etc/ironic-python-agent not found
-ironic-python-agent: /some/path/etc/ironic-python-agent.d not found
-ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_mounted_no_files
-ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_mounted_no_files ... ok
-ironic-python-agent: /tmp/tmpg9u4vnbc/etc/ironic-python-agent not found
-ironic-python-agent: /tmp/tmpg9u4vnbc/etc/ironic-python-agent.d not found
-ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_no_files
-ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_no_files ... ok
-ironic-python-agent: No virtual media device detected
-ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_no_vmedia
-ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_no_vmedia ... ok
-ironic-python-agent: Cannot use configuration from virtual media as the agent was not booted from virtual media.
-ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_vmedia_found_not_booted_from_vmedia
-ironic_python_agent.tests.unit.test_utils.TestCopyConfigFromVmedia.test_vmedia_found_not_booted_from_vmedia ... ok
 POST: /v1/commands {'name': 'do_things', 'params': []}
 GOT:<WrapperTestResponse streamed [400 BAD REQUEST]>
 POST: /v1/commands {'name': 'do_things', 'params': {'key': 'value'}}
@@ -11451,22 +11502,22 @@
 GOT:<WrapperTestResponse streamed [200 OK]>
 
 ----------------------------------------------------------------------
-Ran 1023 tests in 118.580s
+Ran 1023 tests in 114.823s
 
 OK (skipped=5)
 + stestr slowest
 Test id                                                                                                                            Runtime (s)
 ---------------------------------------------------------------------------------------------------------------------------------  -----------
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_mem_limit_stream_optimized      39.058
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_mem_limit                       37.596
-ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vhdx                                                17.523
-ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_retries                                              4.022
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_find_pair_1st                                        3.185
-ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_stream_raw_image_onto_device_socket_read_timeout   3.054
-ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_find_timeout                                         2.035
-ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_retry_on_50X_and_succeed                             2.022
-ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_retries_on_50X_error                                 2.022
-ironic_python_agent.tests.unit.test_agent.TestAgentStandalone.test_run                                                              1.073
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_mem_limit_stream_optimized      35.286
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vmdk_bad_descriptor_mem_limit                       33.488
+ironic_python_agent.tests.unit.test_format_inspector.TestFormatInspectors.test_vhdx                                                13.318
+ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_retries                                              4.024
+ironic_python_agent.tests.unit.extensions.test_standby.TestStandbyExtension.test_stream_raw_image_onto_device_socket_read_timeout   3.119
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_find_pair_1st                                        3.033
+ironic_python_agent.tests.unit.test_burnin.TestBurnin.test_fio_network_dynamic_find_timeout                                         2.041
+ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_retry_on_50X_and_succeed                             2.019
+ironic_python_agent.tests.unit.test_inspector.TestCallInspector.test_inspector_retries_on_50X_error                                 2.018
+ironic_python_agent.tests.unit.test_agent.TestAgentStandalone.test_run                                                              1.261
 + rm -rf .stestr
 mkdir -p /build/reproducible-path/ironic-python-agent-9.14.0/debian/ironic-python-agent/etc/ironic-python-agent
 PYTHONPATH=/build/reproducible-path/ironic-python-agent-9.14.0/debian/tmp/usr/lib/python3/dist-packages oslo-config-generator \
@@ -11508,20 +11559,21 @@
 	cat /usr/share/openstack-pkg-tools/init-script-template >>$MYINIT.init ; \
 	pkgos-gen-systemd-unit $i ; \
 done
-+ ls -1 debian/ironic-python-agent.init.in
-+ echo debian/ironic-python-agent.init.in+ 
-sed s/.init.in//
+++ ls -1 debian/ironic-python-agent.init.in
++ for i in `ls -1 debian/*.init.in`
+++ echo debian/ironic-python-agent.init.in
+++ sed s/.init.in//
 + MYINIT=debian/ironic-python-agent
 + cp debian/ironic-python-agent.init.in debian/ironic-python-agent.init
 + cat /usr/share/openstack-pkg-tools/init-script-template
 + pkgos-gen-systemd-unit debian/ironic-python-agent.init.in
-/usr/bin/pkgos-gen-systemd-unit: 22: debian/ironic-python-agent.init.in: modprobe: not found
+debian/ironic-python-agent.init.in: line 22: modprobe: command not found
 # If there's a service.in file, use that one instead of the generated one
 set -e ; set -x ; for i in `ls -1 debian/*.service.in`; do \
 	MYPKG=`echo $i | sed s/.service.in//` ; \
 	cp $MYPKG.service.in $MYPKG.service ; \
 done
-+ ls -1 debian/*.service.in
+++ ls -1 'debian/*.service.in'
 ls: cannot access 'debian/*.service.in': No such file or directory
 # Generate the systemd unit if there's no already existing .service.in
 set -e ; set -x ; for i in `ls debian/*.init.in` ; do \
@@ -11530,13 +11582,14 @@
 		pkgos-gen-systemd-unit $i ; \
 	fi \
 done
-+ ls debian/ironic-python-agent.init.in
-+ echo+  debian/ironic-python-agent.init.insed
- s/.init.in/.service.in/
+++ ls debian/ironic-python-agent.init.in
++ for i in `ls debian/*.init.in`
+++ echo debian/ironic-python-agent.init.in
+++ sed s/.init.in/.service.in/
 + MYINIT=debian/ironic-python-agent.service.in
-+ [ -e debian/ironic-python-agent.service.in ]
++ '[' -e debian/ironic-python-agent.service.in ']'
 + pkgos-gen-systemd-unit debian/ironic-python-agent.init.in
-/usr/bin/pkgos-gen-systemd-unit: 22: debian/ironic-python-agent.init.in: modprobe: not found
+debian/ironic-python-agent.init.in: line 22: modprobe: command not found
 dh_installinit --error-handler=true
 make[1]: Leaving directory '/build/reproducible-path/ironic-python-agent-9.14.0'
    debian/rules override_dh_installsystemd
@@ -11550,20 +11603,21 @@
 	cat /usr/share/openstack-pkg-tools/init-script-template >>$MYINIT.init ; \
 	pkgos-gen-systemd-unit $i ; \
 done
-+ ls -1 debian/ironic-python-agent.init.in
-+ echo debian/ironic-python-agent.init.in
-+ sed s/.init.in//
+++ ls -1 debian/ironic-python-agent.init.in
++ for i in `ls -1 debian/*.init.in`
+++ sed s/.init.in//
+++ echo debian/ironic-python-agent.init.in
 + MYINIT=debian/ironic-python-agent
 + cp debian/ironic-python-agent.init.in debian/ironic-python-agent.init
 + cat /usr/share/openstack-pkg-tools/init-script-template
 + pkgos-gen-systemd-unit debian/ironic-python-agent.init.in
-/usr/bin/pkgos-gen-systemd-unit: 22: debian/ironic-python-agent.init.in: modprobe: not found
+debian/ironic-python-agent.init.in: line 22: modprobe: command not found
 # If there's a service.in file, use that one instead of the generated one
 set -e ; set -x ; for i in `ls -1 debian/*.service.in`; do \
 	MYPKG=`echo $i | sed s/.service.in//` ; \
 	cp $MYPKG.service.in $MYPKG.service ; \
 done
-+ ls -1 debian/*.service.in
+++ ls -1 'debian/*.service.in'
 ls: cannot access 'debian/*.service.in': No such file or directory
 # Generate the systemd unit if there's no already existing .service.in
 set -e ; set -x ; for i in `ls debian/*.init.in` ; do \
@@ -11572,13 +11626,14 @@
 		pkgos-gen-systemd-unit $i ; \
 	fi \
 done
-+ ls debian/ironic-python-agent.init.in
-+ echo+  debian/ironic-python-agent.init.in
-sed s/.init.in/.service.in/
+++ ls debian/ironic-python-agent.init.in
++ for i in `ls debian/*.init.in`
+++ sed s/.init.in/.service.in/
+++ echo debian/ironic-python-agent.init.in
 + MYINIT=debian/ironic-python-agent.service.in
-+ [ -e debian/ironic-python-agent.service.in ]
++ '[' -e debian/ironic-python-agent.service.in ']'
 + pkgos-gen-systemd-unit debian/ironic-python-agent.init.in
-/usr/bin/pkgos-gen-systemd-unit: 22: debian/ironic-python-agent.init.in: modprobe: not found
+debian/ironic-python-agent.init.in: line 22: modprobe: command not found
 dh_installsystemd
 make[1]: Leaving directory '/build/reproducible-path/ironic-python-agent-9.14.0'
    dh_installlogrotate -O--buildsystem=pybuild
@@ -11610,12 +11665,14 @@
 dpkg-buildpackage: info: binary-only upload (no source included)
 dpkg-genchanges: info: not including original source code in upload
 I: copying local configuration
+I: user script /srv/workspace/pbuilder/8816/tmp/hooks/B01_cleanup starting
+I: user script /srv/workspace/pbuilder/8816/tmp/hooks/B01_cleanup finished
 I: unmounting dev/ptmx filesystem
 I: unmounting dev/pts filesystem
 I: unmounting dev/shm filesystem
 I: unmounting proc filesystem
 I: unmounting sys filesystem
 I: cleaning the build env 
-I: removing directory /srv/workspace/pbuilder/28659 and its subdirectories
-I: Current time: Sat Jan  4 09:53:59 -12 2025
-I: pbuilder-time-stamp: 1736027639
+I: removing directory /srv/workspace/pbuilder/8816 and its subdirectories
+I: Current time: Sun Jan  5 12:01:59 +14 2025
+I: pbuilder-time-stamp: 1736028119