Diff of the two buildlogs:

--
--- b1/build.log	2025-03-28 12:13:04.184782453 +0000
+++ b2/build.log	2025-03-28 12:15:51.265270319 +0000
@@ -1,6 +1,6 @@
 I: pbuilder: network access will be disabled during build
-I: Current time: Fri Mar 28 00:06:04 -12 2025
-I: pbuilder-time-stamp: 1743163564
+I: Current time: Fri May  1 08:36:06 +14 2026
+I: pbuilder-time-stamp: 1777574166
 I: Building the build Environment
 I: extracting base tarball [/var/cache/pbuilder/unstable-reproducible-base.tgz]
 I: copying local configuration
@@ -22,51 +22,83 @@
 dpkg-source: info: unpacking python-ironic-lib_7.0.0-2.debian.tar.xz
 I: using fakeroot in build.
 I: Installing the build-deps
-I: user script /srv/workspace/pbuilder/2091102/tmp/hooks/D02_print_environment starting
+I: user script /srv/workspace/pbuilder/2158572/tmp/hooks/D01_modify_environment starting
+debug: Running on infom02-amd64.
+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 Apr 30 18:36 /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/2158572/tmp/hooks/D01_modify_environment finished
+I: user script /srv/workspace/pbuilder/2158572/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='amd64'
-  DEBIAN_FRONTEND='noninteractive'
+  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]="x86_64-pc-linux-gnu")
+  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=amd64
+  DEBIAN_FRONTEND=noninteractive
   DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=12 '
-  DISTRIBUTION='unstable'
-  HOME='/root'
-  HOST_ARCH='amd64'
+  DIRSTACK=()
+  DISTRIBUTION=unstable
+  EUID=0
+  FUNCNAME=([0]="Echo" [1]="main")
+  GROUPS=()
+  HOME=/root
+  HOSTNAME=i-capture-the-hostname
+  HOSTTYPE=x86_64
+  HOST_ARCH=amd64
   IFS=' 	
   '
-  INVOCATION_ID='5a8381ca2b054412bf65d5433f7476ec'
-  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='2091102'
-  PS1='# '
-  PS2='> '
+  INVOCATION_ID=b674966b797e43e7b4641daf4548979e
+  LANG=C
+  LANGUAGE=et_EE:et
+  LC_ALL=C
+  MACHTYPE=x86_64-pc-linux-gnu
+  MAIL=/var/mail/root
+  OPTERR=1
+  OPTIND=1
+  OSTYPE=linux-gnu
+  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=2158572
   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.tnffxrr8/pbuilderrc_S5BJ --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.tnffxrr8/b1 --logfile b1/build.log python-ironic-lib_7.0.0-2.dsc'
-  SUDO_GID='109'
-  SUDO_UID='104'
-  SUDO_USER='jenkins'
-  TERM='unknown'
-  TZ='/usr/share/zoneinfo/Etc/GMT+12'
-  USER='root'
-  _='/usr/bin/systemd-run'
+  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.tnffxrr8/pbuilderrc_jerd --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.tnffxrr8/b2 --logfile b2/build.log python-ironic-lib_7.0.0-2.dsc'
+  SUDO_GID=109
+  SUDO_UID=104
+  SUDO_USER=jenkins
+  TERM=unknown
+  TZ=/usr/share/zoneinfo/Etc/GMT-14
+  UID=0
+  USER=root
+  _='I: set'
 I: uname -a
-  Linux infom01-amd64 6.1.0-32-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.129-1 (2025-03-06) x86_64 GNU/Linux
+  Linux i-capture-the-hostname 6.12.12+bpo-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.12-1~bpo12+1 (2025-02-23) x86_64 GNU/Linux
 I: ls -l /bin
-  lrwxrwxrwx 1 root root 7 Mar  4 11:20 /bin -> usr/bin
-I: user script /srv/workspace/pbuilder/2091102/tmp/hooks/D02_print_environment finished
+  lrwxrwxrwx 1 root root 7 Mar  4  2025 /bin -> usr/bin
+I: user script /srv/workspace/pbuilder/2158572/tmp/hooks/D02_print_environment finished
  -> Attempting to satisfy build-dependencies
  -> Creating pbuilder-satisfydepends-dummy package
 Package: pbuilder-satisfydepends-dummy
@@ -372,7 +404,7 @@
 Get: 230 http://deb.debian.org/debian unstable/main amd64 python3-oslotest all 1:5.0.0-4 [17.2 kB]
 Get: 231 http://deb.debian.org/debian unstable/main amd64 python3-pygments all 2.18.0+dfsg-2 [836 kB]
 Get: 232 http://deb.debian.org/debian unstable/main amd64 python3-zeroconf all 0.146.1-1 [81.0 kB]
-Fetched 55.2 MB in 6s (9116 kB/s)
+Fetched 55.2 MB in 3s (18.3 MB/s)
 Preconfiguring packages ...
 Selecting previously unselected package libpython3.13-minimal:amd64.
 (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 ... 19805 files and directories currently installed.)
@@ -1115,8 +1147,8 @@
 Setting up tzdata (2025b-1) ...
 
 Current default time zone: 'Etc/UTC'
-Local time is now:      Fri Mar 28 12:09:09 UTC 2025.
-Universal Time is now:  Fri Mar 28 12:09:09 UTC 2025.
+Local time is now:      Thu Apr 30 18:37:14 UTC 2026.
+Universal Time is now:  Thu Apr 30 18:37:14 UTC 2026.
 Run 'dpkg-reconfigure tzdata' if you wish to change it.
 
 Setting up libpgm-5.3-0t64:amd64 (5.3.128~dfsg-2.1+b1) ...
@@ -1345,7 +1377,11 @@
 fakeroot is already the newest version (1.37.1.1-1).
 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
 I: Building the package
-I: Running cd /build/reproducible-path/python-ironic-lib-7.0.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  > ../python-ironic-lib_7.0.0-2_source.changes
+I: user script /srv/workspace/pbuilder/2158572/tmp/hooks/A99_set_merged_usr starting
+Not re-configuring usrmerge for unstable
+I: user script /srv/workspace/pbuilder/2158572/tmp/hooks/A99_set_merged_usr finished
+hostname: Name or service not known
+I: Running cd /build/reproducible-path/python-ironic-lib-7.0.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  > ../python-ironic-lib_7.0.0-2_source.changes
 dpkg-buildpackage: info: source package python-ironic-lib
 dpkg-buildpackage: info: source version 7.0.0-2
 dpkg-buildpackage: info: source distribution unstable
@@ -1437,21 +1473,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=python-ironic-lib
-+ sed s/python-//
-+ echo python-ironic-lib
+++ echo python-ironic-lib
+++ sed s/python-//
 + PY_MODULE_NAME=ironic-lib
-+ py3versions -vr
+++ py3versions -vr
 + PYTHON3S=3.13
-+ [ yes = yes ]
++ '[' yes = yes ']'
 + TARGET_DIR=tmp
-+ pwd
++ for pyvers in ${PYTHON3S}
+++ pwd
 + python3.13 setup.py install --install-layout=deb --root /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp
 /usr/lib/python3/dist-packages/setuptools/__init__.py:94: _DeprecatedInstaller: setuptools.installer and fetch_build_eggs are deprecated.
 !!
@@ -1497,38 +1538,38 @@
 running build
 running build_py
 creating build/lib/ironic_lib/tests
-copying ironic_lib/tests/base.py -> build/lib/ironic_lib/tests
-copying ironic_lib/tests/test_utils.py -> build/lib/ironic_lib/tests
+copying ironic_lib/tests/test_metrics_statsd.py -> build/lib/ironic_lib/tests
 copying ironic_lib/tests/test_keystone.py -> build/lib/ironic_lib/tests
+copying ironic_lib/tests/base.py -> build/lib/ironic_lib/tests
+copying ironic_lib/tests/test_mdns.py -> build/lib/ironic_lib/tests
 copying ironic_lib/tests/test_base.py -> build/lib/ironic_lib/tests
 copying ironic_lib/tests/test_exception.py -> build/lib/ironic_lib/tests
-copying ironic_lib/tests/test_metrics_statsd.py -> build/lib/ironic_lib/tests
-copying ironic_lib/tests/test_json_rpc.py -> build/lib/ironic_lib/tests
-copying ironic_lib/tests/test_metrics_utils.py -> build/lib/ironic_lib/tests
-copying ironic_lib/tests/test_metrics.py -> build/lib/ironic_lib/tests
 copying ironic_lib/tests/__init__.py -> build/lib/ironic_lib/tests
-copying ironic_lib/tests/test_mdns.py -> build/lib/ironic_lib/tests
+copying ironic_lib/tests/test_metrics.py -> build/lib/ironic_lib/tests
+copying ironic_lib/tests/test_metrics_utils.py -> build/lib/ironic_lib/tests
+copying ironic_lib/tests/test_utils.py -> build/lib/ironic_lib/tests
+copying ironic_lib/tests/test_json_rpc.py -> build/lib/ironic_lib/tests
 copying ironic_lib/tests/test_basic_auth.py -> build/lib/ironic_lib/tests
 copying ironic_lib/tests/test_metrics_collector.py -> build/lib/ironic_lib/tests
+creating build/lib/ironic_lib/json_rpc
+copying ironic_lib/json_rpc/client.py -> build/lib/ironic_lib/json_rpc
+copying ironic_lib/json_rpc/server.py -> build/lib/ironic_lib/json_rpc
+copying ironic_lib/json_rpc/__init__.py -> build/lib/ironic_lib/json_rpc
 creating build/lib/ironic_lib/common
-copying ironic_lib/common/config.py -> build/lib/ironic_lib/common
 copying ironic_lib/common/i18n.py -> build/lib/ironic_lib/common
+copying ironic_lib/common/config.py -> build/lib/ironic_lib/common
 copying ironic_lib/common/__init__.py -> build/lib/ironic_lib/common
-copying ironic_lib/auth_basic.py -> build/lib/ironic_lib
+copying ironic_lib/utils.py -> build/lib/ironic_lib
+copying ironic_lib/keystone.py -> build/lib/ironic_lib
 copying ironic_lib/metrics_collector.py -> build/lib/ironic_lib
-copying ironic_lib/exception.py -> build/lib/ironic_lib
+copying ironic_lib/auth_basic.py -> build/lib/ironic_lib
 copying ironic_lib/wsgi.py -> build/lib/ironic_lib
-copying ironic_lib/metrics_statsd.py -> build/lib/ironic_lib
 copying ironic_lib/metrics_utils.py -> build/lib/ironic_lib
-copying ironic_lib/utils.py -> build/lib/ironic_lib
 copying ironic_lib/mdns.py -> build/lib/ironic_lib
+copying ironic_lib/metrics_statsd.py -> build/lib/ironic_lib
+copying ironic_lib/exception.py -> build/lib/ironic_lib
 copying ironic_lib/__init__.py -> build/lib/ironic_lib
-copying ironic_lib/keystone.py -> build/lib/ironic_lib
 copying ironic_lib/metrics.py -> build/lib/ironic_lib
-creating build/lib/ironic_lib/json_rpc
-copying ironic_lib/json_rpc/server.py -> build/lib/ironic_lib/json_rpc
-copying ironic_lib/json_rpc/__init__.py -> build/lib/ironic_lib/json_rpc
-copying ironic_lib/json_rpc/client.py -> build/lib/ironic_lib/json_rpc
 running egg_info
 creating ironic_lib.egg-info
 writing ironic_lib.egg-info/PKG-INFO
@@ -1554,69 +1595,69 @@
 running install_lib
 creating /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages
 creating /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib
-creating /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/json_rpc
-copying build/lib/ironic_lib/json_rpc/server.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/json_rpc
-copying build/lib/ironic_lib/json_rpc/__init__.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/json_rpc
-copying build/lib/ironic_lib/json_rpc/client.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/json_rpc
-copying build/lib/ironic_lib/auth_basic.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib
+copying build/lib/ironic_lib/utils.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib
+copying build/lib/ironic_lib/keystone.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib
 copying build/lib/ironic_lib/metrics_collector.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib
+copying build/lib/ironic_lib/auth_basic.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib
+copying build/lib/ironic_lib/wsgi.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib
 creating /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/common
-copying build/lib/ironic_lib/common/config.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/common
 copying build/lib/ironic_lib/common/i18n.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/common
+copying build/lib/ironic_lib/common/config.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/common
 copying build/lib/ironic_lib/common/__init__.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/common
-copying build/lib/ironic_lib/exception.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib
-copying build/lib/ironic_lib/wsgi.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib
-copying build/lib/ironic_lib/metrics_statsd.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib
 copying build/lib/ironic_lib/metrics_utils.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib
-copying build/lib/ironic_lib/utils.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib
+copying build/lib/ironic_lib/mdns.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib
+copying build/lib/ironic_lib/metrics_statsd.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib
+copying build/lib/ironic_lib/exception.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib
+copying build/lib/ironic_lib/__init__.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib
+creating /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/json_rpc
+copying build/lib/ironic_lib/json_rpc/client.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/json_rpc
+copying build/lib/ironic_lib/json_rpc/server.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/json_rpc
+copying build/lib/ironic_lib/json_rpc/__init__.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/json_rpc
+copying build/lib/ironic_lib/metrics.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib
 creating /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests
-copying build/lib/ironic_lib/tests/base.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests
-copying build/lib/ironic_lib/tests/test_utils.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests
+copying build/lib/ironic_lib/tests/test_metrics_statsd.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests
 copying build/lib/ironic_lib/tests/test_keystone.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests
+copying build/lib/ironic_lib/tests/base.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests
+copying build/lib/ironic_lib/tests/test_mdns.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests
 copying build/lib/ironic_lib/tests/test_base.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests
 copying build/lib/ironic_lib/tests/test_exception.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests
-copying build/lib/ironic_lib/tests/test_metrics_statsd.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests
-copying build/lib/ironic_lib/tests/test_json_rpc.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests
-copying build/lib/ironic_lib/tests/test_metrics_utils.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests
-copying build/lib/ironic_lib/tests/test_metrics.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests
 copying build/lib/ironic_lib/tests/__init__.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests
-copying build/lib/ironic_lib/tests/test_mdns.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests
+copying build/lib/ironic_lib/tests/test_metrics.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests
+copying build/lib/ironic_lib/tests/test_metrics_utils.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests
+copying build/lib/ironic_lib/tests/test_utils.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests
+copying build/lib/ironic_lib/tests/test_json_rpc.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests
 copying build/lib/ironic_lib/tests/test_basic_auth.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests
 copying build/lib/ironic_lib/tests/test_metrics_collector.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests
-copying build/lib/ironic_lib/mdns.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib
-copying build/lib/ironic_lib/__init__.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib
-copying build/lib/ironic_lib/keystone.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib
-copying build/lib/ironic_lib/metrics.py -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib
-byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/json_rpc/server.py to server.cpython-313.pyc
-byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/json_rpc/__init__.py to __init__.cpython-313.pyc
-byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/json_rpc/client.py to client.cpython-313.pyc
-byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/auth_basic.py to auth_basic.cpython-313.pyc
+byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/utils.py to utils.cpython-313.pyc
+byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/keystone.py to keystone.cpython-313.pyc
 byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/metrics_collector.py to metrics_collector.cpython-313.pyc
-byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/common/config.py to config.cpython-313.pyc
+byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/auth_basic.py to auth_basic.cpython-313.pyc
+byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/wsgi.py to wsgi.cpython-313.pyc
 byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/common/i18n.py to i18n.cpython-313.pyc
+byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/common/config.py to config.cpython-313.pyc
 byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/common/__init__.py to __init__.cpython-313.pyc
-byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/exception.py to exception.cpython-313.pyc
-byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/wsgi.py to wsgi.cpython-313.pyc
-byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/metrics_statsd.py to metrics_statsd.cpython-313.pyc
 byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/metrics_utils.py to metrics_utils.cpython-313.pyc
-byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/utils.py to utils.cpython-313.pyc
-byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests/base.py to base.cpython-313.pyc
-byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests/test_utils.py to test_utils.cpython-313.pyc
+byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/mdns.py to mdns.cpython-313.pyc
+byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/metrics_statsd.py to metrics_statsd.cpython-313.pyc
+byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/exception.py to exception.cpython-313.pyc
+byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/__init__.py to __init__.cpython-313.pyc
+byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/json_rpc/client.py to client.cpython-313.pyc
+byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/json_rpc/server.py to server.cpython-313.pyc
+byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/json_rpc/__init__.py to __init__.cpython-313.pyc
+byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/metrics.py to metrics.cpython-313.pyc
+byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests/test_metrics_statsd.py to test_metrics_statsd.cpython-313.pyc
 byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests/test_keystone.py to test_keystone.cpython-313.pyc
+byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests/base.py to base.cpython-313.pyc
+byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests/test_mdns.py to test_mdns.cpython-313.pyc
 byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests/test_base.py to test_base.cpython-313.pyc
 byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests/test_exception.py to test_exception.cpython-313.pyc
-byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests/test_metrics_statsd.py to test_metrics_statsd.cpython-313.pyc
-byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests/test_json_rpc.py to test_json_rpc.cpython-313.pyc
-byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests/test_metrics_utils.py to test_metrics_utils.cpython-313.pyc
-byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests/test_metrics.py to test_metrics.cpython-313.pyc
 byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests/__init__.py to __init__.cpython-313.pyc
-byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests/test_mdns.py to test_mdns.cpython-313.pyc
+byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests/test_metrics.py to test_metrics.cpython-313.pyc
+byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests/test_metrics_utils.py to test_metrics_utils.cpython-313.pyc
+byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests/test_utils.py to test_utils.cpython-313.pyc
+byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests/test_json_rpc.py to test_json_rpc.cpython-313.pyc
 byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests/test_basic_auth.py to test_basic_auth.cpython-313.pyc
 byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/tests/test_metrics_collector.py to test_metrics_collector.cpython-313.pyc
-byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/mdns.py to mdns.cpython-313.pyc
-byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/__init__.py to __init__.cpython-313.pyc
-byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/keystone.py to keystone.cpython-313.pyc
-byte-compiling /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib/metrics.py to metrics.cpython-313.pyc
 running install_data
 creating /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/etc/ironic/rootwrap.d
 copying etc/ironic/rootwrap.d/ironic-lib.filters -> /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/etc/ironic/rootwrap.d
@@ -1624,10 +1665,10 @@
 Copying ironic_lib.egg-info to /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages/ironic_lib-7.0.0.egg-info
 Skipping SOURCES.txt
 running install_scripts
-+ pwd
-+ rm -rf /build/reproducible-path/python-ironic-lib-7.0.0/debian/python*/usr/lib/python*/dist-packages/*.pth
-+ pwd
-+ rm -rf /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python*/dist-packages/*.pth
+++ pwd
++ rm -rf '/build/reproducible-path/python-ironic-lib-7.0.0/debian/python*/usr/lib/python*/dist-packages/*.pth'
+++ pwd
++ rm -rf '/build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python*/dist-packages/*.pth'
 pkgos-dh_auto_test --no-py2 'ironic_lib\.tests\.(?!(.*test_json_rpc\.TestService\.test_authenticated.*))'
 + PKGOS_TEST_PARALLEL=yes
 + PKGOS_TEST_SERIAL=no
@@ -1635,51 +1676,164 @@
 + 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
++ for i in $@
++ case "${1}" in
+++ py3versions -vr
 + PYTHON3S=3.13
-+ [ yes = no ]
-+ [ no = yes ]
-+ [ 3.13 = disabled ]
-+ echo 3.13+ 
-cut -d. -f1
++ '[' 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/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages ]
-+ [ -z  ]
-+ pwd
-+ echo Implicitly adding PYTHONPATH=/build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages
+++ pwd
++ '[' -d /build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages ']'
++ '[' -z '' ']'
+++ pwd
++ echo 'Implicitly adding PYTHONPATH=/build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages'
 Implicitly adding PYTHONPATH=/build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages
-+ pwd
+++ pwd
 + export PYTHONPATH=/build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages
-+ [ -e .stestr.conf ]
-+ [ -x /usr/bin/python3-stestr ]
++ PYTHONPATH=/build/reproducible-path/python-ironic-lib-7.0.0/debian/tmp/usr/lib/python3/dist-packages
++ '[' -e .stestr.conf ']'
++ '[' -x /usr/bin/python3-stestr ']'
 + STESTR=stestr
 + rm -rf .stestr
-+ PYTHON=python3.13+ subunit2pyunit
- stestr run --parallel --subunit ironic_lib\.tests\.(?!(.*test_json_rpc\.TestService\.test_authenticated.*))
-ironic_lib.tests.test_exception.TestIronicException.test___init___invalid_kwarg
-ironic_lib.tests.test_exception.TestIronicException.test___init___invalid_kwarg ... ok
-ironic_lib.tests.test_exception.TestIronicException.test___init___invalid_kwarg_reraise
-ironic_lib.tests.test_exception.TestIronicException.test___init___invalid_kwarg_reraise ... ok
-ironic_lib.tests.test_exception.TestIronicException.test___init___json_serializable
-ironic_lib.tests.test_exception.TestIronicException.test___init___json_serializable ... ok
-ironic_lib.tests.test_exception.TestIronicException.test___init___string_serializable
-ironic_lib.tests.test_exception.TestIronicException.test___init___string_serializable ... ok
++ PYTHON=python3.13
++ stestr run --parallel --subunit 'ironic_lib\.tests\.(?!(.*test_json_rpc\.TestService\.test_authenticated.*))'
++ subunit2pyunit
+ironic_lib.tests.test_base.DontBlockExecuteTestCase.test_no_exception_raised_for_execute
+ironic_lib.tests.test_base.DontBlockExecuteTestCase.test_no_exception_raised_for_execute ... ok
+ironic_lib.tests.test_mdns.ParseEndpointTestCase.test_resolve
+ironic_lib.tests.test_mdns.ParseEndpointTestCase.test_resolve ... ok
+ironic_lib.tests.test_mdns.ParseEndpointTestCase.test_simple
+ironic_lib.tests.test_mdns.ParseEndpointTestCase.test_simple ... ok
+ironic_lib.tests.test_mdns.ParseEndpointTestCase.test_simple_https
+ironic_lib.tests.test_mdns.ParseEndpointTestCase.test_simple_https ... ok
+ironic_lib.tests.test_keystone.KeystoneTestCase.test_get_adapter_from_config
+ironic_lib.tests.test_keystone.KeystoneTestCase.test_get_adapter_from_config ... ok
+ironic_lib.tests.test_mdns.ParseEndpointTestCase.test_with_path_and_port
+ironic_lib.tests.test_mdns.ParseEndpointTestCase.test_with_path_and_port ... ok
+ironic_lib.tests.test_keystone.KeystoneTestCase.test_get_auth
+ironic_lib.tests.test_keystone.KeystoneTestCase.test_get_auth ... ok
+   ERROR [ironic_lib.keystone] Failed to load auth plugin from group test_group
+ironic_lib.tests.test_utils.GetRouteSourceTestCase.test_get_route_source_indexerror
+ironic_lib.tests.test_utils.GetRouteSourceTestCase.test_get_route_source_indexerror ... ok
+ironic_lib.tests.test_utils.GetRouteSourceTestCase.test_get_route_source_ipv4
+ironic_lib.tests.test_utils.GetRouteSourceTestCase.test_get_route_source_ipv4 ... ok
+ironic_lib.tests.test_keystone.KeystoneTestCase.test_get_auth_fail
+ironic_lib.tests.test_keystone.KeystoneTestCase.test_get_auth_fail ... ok
+ironic_lib.tests.test_utils.GetRouteSourceTestCase.test_get_route_source_ipv6
+ironic_lib.tests.test_utils.GetRouteSourceTestCase.test_get_route_source_ipv6 ... ok
+ironic_lib.tests.test_utils.GetRouteSourceTestCase.test_get_route_source_ipv6_linklocal
+ironic_lib.tests.test_utils.GetRouteSourceTestCase.test_get_route_source_ipv6_linklocal ... ok
+ironic_lib.tests.test_utils.GetRouteSourceTestCase.test_get_route_source_ipv6_linklocal_allowed
+ironic_lib.tests.test_utils.GetRouteSourceTestCase.test_get_route_source_ipv6_linklocal_allowed ... ok
+ WARNING [ironic_lib.utils] Failed to unlink /fake/path, error: 2
+ironic_lib.tests.test_utils.BareMetalUtilsTestCase.test_unlink
+ironic_lib.tests.test_utils.BareMetalUtilsTestCase.test_unlink ... ok
+ironic_lib.tests.test_utils.BareMetalUtilsTestCase.test_unlink_ENOENT
+ironic_lib.tests.test_utils.BareMetalUtilsTestCase.test_unlink_ENOENT ... ok
+ironic_lib.tests.test_keystone.KeystoneTestCase.test_get_service_auth
+ironic_lib.tests.test_keystone.KeystoneTestCase.test_get_service_auth ... ok
+ironic_lib.tests.test_keystone.KeystoneTestCase.test_get_session
+ironic_lib.tests.test_keystone.KeystoneTestCase.test_get_session ... ok
+ironic_lib.tests.test_metrics_collector.TestDictCollectionMetricLogger.test_counter
+ironic_lib.tests.test_metrics_collector.TestDictCollectionMetricLogger.test_counter ... ok
+ironic_lib.tests.test_metrics_collector.TestDictCollectionMetricLogger.test_gauge
+ironic_lib.tests.test_metrics_collector.TestDictCollectionMetricLogger.test_gauge ... ok
+ironic_lib.tests.test_utils.ExecuteTestCase.test_execute_command_not_found
+ironic_lib.tests.test_utils.ExecuteTestCase.test_execute_command_not_found ... ok
+ironic_lib.tests.test_metrics_collector.TestDictCollectionMetricLogger.test_send
+ironic_lib.tests.test_metrics_collector.TestDictCollectionMetricLogger.test_send ... ok
+ironic_lib.tests.test_utils.ExecuteTestCase.test_execute_not_use_standard_locale
+ironic_lib.tests.test_utils.ExecuteTestCase.test_execute_not_use_standard_locale ... ok
+ironic_lib.tests.test_metrics_collector.TestDictCollectionMetricLogger.test_timer
+ironic_lib.tests.test_metrics_collector.TestDictCollectionMetricLogger.test_timer ... ok
+ironic_lib.tests.test_metrics.TestMetricLogger.test_context_mgr_counter
+ironic_lib.tests.test_metrics.TestMetricLogger.test_context_mgr_counter ... ok
+ironic_lib.tests.test_utils.ExecuteTestCase.test_execute_use_standard_locale_no_env_variables
+ironic_lib.tests.test_utils.ExecuteTestCase.test_execute_use_standard_locale_no_env_variables ... ok
+ironic_lib.tests.test_metrics.TestMetricLogger.test_context_mgr_counter_sample_rate
+ironic_lib.tests.test_metrics.TestMetricLogger.test_context_mgr_counter_sample_rate ... ok
+ironic_lib.tests.test_utils.ExecuteTestCase.test_execute_use_standard_locale_with_env_variables
+ironic_lib.tests.test_utils.ExecuteTestCase.test_execute_use_standard_locale_with_env_variables ... ok
+ironic_lib.tests.test_metrics.TestMetricLogger.test_context_mgr_timer
+ironic_lib.tests.test_metrics.TestMetricLogger.test_context_mgr_timer ... ok
+ironic_lib.tests.test_metrics.TestMetricLogger.test_decorator_counter
+ironic_lib.tests.test_metrics.TestMetricLogger.test_decorator_counter ... ok
+ironic_lib.tests.test_metrics.TestMetricLogger.test_decorator_counter_sample_rate
+ironic_lib.tests.test_metrics.TestMetricLogger.test_decorator_counter_sample_rate ... ok
+ironic_lib.tests.test_metrics.TestMetricLogger.test_decorator_gauge
+ironic_lib.tests.test_metrics.TestMetricLogger.test_decorator_gauge ... ok
+ironic_lib.tests.test_metrics.TestMetricLogger.test_decorator_timer
+ironic_lib.tests.test_metrics.TestMetricLogger.test_decorator_timer ... ok
+ironic_lib.tests.test_metrics.TestMetricLogger.test_get_metric_name
+ironic_lib.tests.test_metrics.TestMetricLogger.test_get_metric_name ... ok
+ironic_lib.tests.test_metrics.TestMetricLogger.test_init
+ironic_lib.tests.test_metrics.TestMetricLogger.test_init ... ok
+ironic_lib.tests.test_utils.ExecuteTestCase.test_execute_with_log_stdout_default
+ironic_lib.tests.test_utils.ExecuteTestCase.test_execute_with_log_stdout_default ... ok
+ironic_lib.tests.test_json_rpc.TestService.test_expected_failure
+ironic_lib.tests.test_json_rpc.TestService.test_expected_failure ... ok
+ironic_lib.tests.test_metrics.TestMetricLogger.test_send_counter
+ironic_lib.tests.test_metrics.TestMetricLogger.test_send_counter ... ok
+ironic_lib.tests.test_metrics.TestMetricLogger.test_send_gauge
+ironic_lib.tests.test_metrics.TestMetricLogger.test_send_gauge ... ok
+ironic_lib.tests.test_metrics.TestMetricLogger.test_send_timer
+ironic_lib.tests.test_metrics.TestMetricLogger.test_send_timer ... ok
+ironic_lib.tests.test_utils.IsHttpUrlTestCase.test_is_http_url
+ironic_lib.tests.test_utils.IsHttpUrlTestCase.test_is_http_url ... ok
+ironic_lib.tests.test_json_rpc.TestSession.test_http_basic
+ironic_lib.tests.test_json_rpc.TestSession.test_http_basic ... ok
+ironic_lib.tests.test_json_rpc.TestService.test_expected_failure_oslo
+ironic_lib.tests.test_json_rpc.TestService.test_expected_failure_oslo ... ok
+ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_find_devices_all
+ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_find_devices_all ... ok
+ironic_lib.tests.test_utils.ExecuteTestCase.test_execute_with_log_stdout_false
+ironic_lib.tests.test_utils.ExecuteTestCase.test_execute_with_log_stdout_false ... ok
+ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_find_devices_name
+ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_find_devices_name ... ok
+ironic_lib.tests.test_json_rpc.TestSession.test_http_basic_deprecated
+ironic_lib.tests.test_json_rpc.TestSession.test_http_basic_deprecated ... ok
+ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_find_devices_none
+ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_find_devices_none ... ok
+ironic_lib.tests.test_json_rpc.TestSession.test_keystone
+ironic_lib.tests.test_json_rpc.TestSession.test_keystone ... ok
+ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_empty_device_attribute
+ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_empty_device_attribute ... ok
+ironic_lib.tests.test_json_rpc.TestSession.test_noauth
+ironic_lib.tests.test_json_rpc.TestSession.test_noauth ... ok
+ironic_lib.tests.test_json_rpc.TestService.test_http_basic
+ironic_lib.tests.test_json_rpc.TestService.test_http_basic ... ok
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test__append_operator_to_hints
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test__append_operator_to_hints ... ok
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_extract_hint_operator_and_values_empty_value
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_extract_hint_operator_and_values_empty_value ... ok
+   ERROR [ironic_lib.json_rpc.client] Unexpected error from RPC: {'code': 500, 'message': 'AttributeError', 'data': {'class': 'AttributeError'}}
+ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_multiple_hints
+ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_multiple_hints ... ok
+ironic_lib.tests.test_json_rpc.TestClient.test_call_failure
+ironic_lib.tests.test_json_rpc.TestClient.test_call_failure ... ok
+ironic_lib.tests.test_json_rpc.TestClient.test_call_failure_with_foreign_class
+ironic_lib.tests.test_json_rpc.TestClient.test_call_failure_with_foreign_class ... ok
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_extract_hint_operator_and_values_integer
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_extract_hint_operator_and_values_integer ... ok
+ironic_lib.tests.test_utils.ExecuteTestCase.test_execute_with_log_stdout_true
+ironic_lib.tests.test_utils.ExecuteTestCase.test_execute_with_log_stdout_true ... ok
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_extract_hint_operator_and_values_multiple_values
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_extract_hint_operator_and_values_multiple_values ... ok
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_extract_hint_operator_and_values_multiple_values_space
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_extract_hint_operator_and_values_multiple_values_space ... ok
+ WARNING [ironic_lib.utils] The attribute "rotational" (with value "None") of device "/dev/sda" is not a valid Boolean. Skipping device.
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_extract_hint_operator_and_values_no_operator
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_extract_hint_operator_and_values_no_operator ... ok
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_extract_hint_operator_and_values_single_value
@@ -1702,6 +1856,10 @@
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_parse_root_device_hints_convert_rotational ... ok
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_parse_root_device_hints_convert_size
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_parse_root_device_hints_convert_size ... ok
+ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_multiple_hints2
+ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_multiple_hints2 ... ok
+ironic_lib.tests.test_json_rpc.TestClient.test_call_failure_with_version_and_cap
+ironic_lib.tests.test_json_rpc.TestClient.test_call_failure_with_version_and_cap ... ok
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_parse_root_device_hints_int_or
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_parse_root_device_hints_int_or ... ok
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_parse_root_device_hints_int_or_invalid
@@ -1714,6 +1872,11 @@
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_parse_root_device_hints_invalid_model ... ok
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_parse_root_device_hints_invalid_name
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_parse_root_device_hints_invalid_name ... ok
+ironic_lib.tests.test_json_rpc.TestService.test_http_basic_not_authenticated
+ironic_lib.tests.test_json_rpc.TestService.test_http_basic_not_authenticated ... ok
+ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_multiple_hints3
+ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_multiple_hints3 ... ok
+ WARNING [ironic_lib.utils] No device found that matches the root device hints {'size': '>=50', 'model': 's==foo'}
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_parse_root_device_hints_invalid_rotational
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_parse_root_device_hints_invalid_rotational ... ok
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_parse_root_device_hints_invalid_serial
@@ -1728,6 +1891,12 @@
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_parse_root_device_hints_invalid_wwn_vendor_extension ... ok
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_parse_root_device_hints_invalid_wwn_with_extension
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_parse_root_device_hints_invalid_wwn_with_extension ... ok
+ironic_lib.tests.test_json_rpc.TestClient.test_call_ipv4_success
+ironic_lib.tests.test_json_rpc.TestClient.test_call_ipv4_success ... ok
+ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_no_device_found
+ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_no_device_found ... ok
+ironic_lib.tests.test_json_rpc.TestClient.test_call_ipv6_success
+ironic_lib.tests.test_json_rpc.TestClient.test_call_ipv6_success ... ok
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_parse_root_device_hints_no_hints
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_parse_root_device_hints_no_hints ... ok
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_parse_root_device_hints_non_existent_hint
@@ -1736,169 +1905,63 @@
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_parse_root_device_hints_string_compare_operator_name ... ok
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_parse_root_device_hints_string_or_space
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_parse_root_device_hints_string_or_space ... ok
+ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_no_operators
+ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_no_operators ... ok
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_parse_root_device_hints_with_operators
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_parse_root_device_hints_with_operators ... ok
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_parse_root_device_hints_without_operators
 ironic_lib.tests.test_utils.ParseRootDeviceTestCase.test_parse_root_device_hints_without_operators ... ok
-ironic_lib.tests.test_metrics_collector.TestDictCollectionMetricLogger.test_counter
-ironic_lib.tests.test_metrics_collector.TestDictCollectionMetricLogger.test_counter ... ok
-ironic_lib.tests.test_metrics_collector.TestDictCollectionMetricLogger.test_gauge
-ironic_lib.tests.test_metrics_collector.TestDictCollectionMetricLogger.test_gauge ... ok
-ironic_lib.tests.test_metrics_collector.TestDictCollectionMetricLogger.test_send
-ironic_lib.tests.test_metrics_collector.TestDictCollectionMetricLogger.test_send ... ok
-ironic_lib.tests.test_metrics_collector.TestDictCollectionMetricLogger.test_timer
-ironic_lib.tests.test_metrics_collector.TestDictCollectionMetricLogger.test_timer ... ok
-ironic_lib.tests.test_mdns.GetEndpointTestCase.test_binary_data
-ironic_lib.tests.test_mdns.GetEndpointTestCase.test_binary_data ... ok
-ironic_lib.tests.test_utils.ExecuteTestCase.test_execute_command_not_found
-ironic_lib.tests.test_utils.ExecuteTestCase.test_execute_command_not_found ... ok
-ironic_lib.tests.test_utils.ExecuteTestCase.test_execute_not_use_standard_locale
-ironic_lib.tests.test_utils.ExecuteTestCase.test_execute_not_use_standard_locale ... ok
-ironic_lib.tests.test_utils.ExecuteTestCase.test_execute_use_standard_locale_no_env_variables
-ironic_lib.tests.test_utils.ExecuteTestCase.test_execute_use_standard_locale_no_env_variables ... ok
-ironic_lib.tests.test_utils.ExecuteTestCase.test_execute_use_standard_locale_with_env_variables
-ironic_lib.tests.test_utils.ExecuteTestCase.test_execute_use_standard_locale_with_env_variables ... ok
-ironic_lib.tests.test_utils.ExecuteTestCase.test_execute_with_log_stdout_default
-ironic_lib.tests.test_utils.ExecuteTestCase.test_execute_with_log_stdout_default ... ok
-ironic_lib.tests.test_utils.ExecuteTestCase.test_execute_with_log_stdout_false
-ironic_lib.tests.test_utils.ExecuteTestCase.test_execute_with_log_stdout_false ... ok
- WARNING [ironic_lib.mdns] None of addresses ['::2', '::3'] seem routable, using ::2
-ironic_lib.tests.test_mdns.GetEndpointTestCase.test_fallback
-ironic_lib.tests.test_mdns.GetEndpointTestCase.test_fallback ... ok
-ironic_lib.tests.test_utils.ExecuteTestCase.test_execute_with_log_stdout_true
-ironic_lib.tests.test_utils.ExecuteTestCase.test_execute_with_log_stdout_true ... ok
-ironic_lib.tests.test_mdns.GetEndpointTestCase.test_https
-ironic_lib.tests.test_mdns.GetEndpointTestCase.test_https ... ok
-ironic_lib.tests.test_mdns.GetEndpointTestCase.test_invalid_key
-ironic_lib.tests.test_mdns.GetEndpointTestCase.test_invalid_key ... ok
-ironic_lib.tests.test_mdns.ParseEndpointTestCase.test_resolve
-ironic_lib.tests.test_mdns.ParseEndpointTestCase.test_resolve ... ok
-ironic_lib.tests.test_mdns.ParseEndpointTestCase.test_simple
-ironic_lib.tests.test_mdns.ParseEndpointTestCase.test_simple ... ok
-ironic_lib.tests.test_mdns.ParseEndpointTestCase.test_simple_https
-ironic_lib.tests.test_mdns.ParseEndpointTestCase.test_simple_https ... ok
-ironic_lib.tests.test_mdns.ParseEndpointTestCase.test_with_path_and_port
-ironic_lib.tests.test_mdns.ParseEndpointTestCase.test_with_path_and_port ... ok
-ironic_lib.tests.test_metrics.TestMetricLogger.test_context_mgr_counter
-ironic_lib.tests.test_metrics.TestMetricLogger.test_context_mgr_counter ... ok
-ironic_lib.tests.test_metrics.TestMetricLogger.test_context_mgr_counter_sample_rate
-ironic_lib.tests.test_metrics.TestMetricLogger.test_context_mgr_counter_sample_rate ... ok
-ironic_lib.tests.test_metrics.TestMetricLogger.test_context_mgr_timer
-ironic_lib.tests.test_metrics.TestMetricLogger.test_context_mgr_timer ... ok
-ironic_lib.tests.test_metrics.TestMetricLogger.test_decorator_counter
-ironic_lib.tests.test_metrics.TestMetricLogger.test_decorator_counter ... ok
-ironic_lib.tests.test_metrics.TestMetricLogger.test_decorator_counter_sample_rate
-ironic_lib.tests.test_metrics.TestMetricLogger.test_decorator_counter_sample_rate ... ok
-ironic_lib.tests.test_metrics.TestMetricLogger.test_decorator_gauge
-ironic_lib.tests.test_metrics.TestMetricLogger.test_decorator_gauge ... ok
-ironic_lib.tests.test_metrics.TestMetricLogger.test_decorator_timer
-ironic_lib.tests.test_metrics.TestMetricLogger.test_decorator_timer ... ok
-ironic_lib.tests.test_metrics.TestMetricLogger.test_get_metric_name
-ironic_lib.tests.test_metrics.TestMetricLogger.test_get_metric_name ... ok
-ironic_lib.tests.test_metrics.TestMetricLogger.test_init
-ironic_lib.tests.test_metrics.TestMetricLogger.test_init ... ok
-ironic_lib.tests.test_metrics.TestMetricLogger.test_send_counter
-ironic_lib.tests.test_metrics.TestMetricLogger.test_send_counter ... ok
-ironic_lib.tests.test_metrics.TestMetricLogger.test_send_gauge
-ironic_lib.tests.test_metrics.TestMetricLogger.test_send_gauge ... ok
-ironic_lib.tests.test_metrics.TestMetricLogger.test_send_timer
-ironic_lib.tests.test_metrics.TestMetricLogger.test_send_timer ... ok
-ironic_lib.tests.test_mdns.GetEndpointTestCase.test_localhost_only
-ironic_lib.tests.test_mdns.GetEndpointTestCase.test_localhost_only ... ok
-ironic_lib.tests.test_mdns.GetEndpointTestCase.test_not_found
-ironic_lib.tests.test_mdns.GetEndpointTestCase.test_not_found ... ok
-ironic_lib.tests.test_json_rpc.TestService.test_expected_failure
-ironic_lib.tests.test_json_rpc.TestService.test_expected_failure ... ok
-ironic_lib.tests.test_json_rpc.TestService.test_expected_failure_oslo
-ironic_lib.tests.test_json_rpc.TestService.test_expected_failure_oslo ... ok
-ironic_lib.tests.test_json_rpc.TestService.test_http_basic
-ironic_lib.tests.test_json_rpc.TestService.test_http_basic ... ok
-ironic_lib.tests.test_metrics_statsd.TestStatsdMetricLogger.test_counter
-ironic_lib.tests.test_metrics_statsd.TestStatsdMetricLogger.test_counter ... ok
-ironic_lib.tests.test_metrics_statsd.TestStatsdMetricLogger.test_gauge
-ironic_lib.tests.test_metrics_statsd.TestStatsdMetricLogger.test_gauge ... ok
-ironic_lib.tests.test_metrics_statsd.TestStatsdMetricLogger.test_init
-ironic_lib.tests.test_metrics_statsd.TestStatsdMetricLogger.test_init ... ok
-ironic_lib.tests.test_metrics_statsd.TestStatsdMetricLogger.test_open_socket
-ironic_lib.tests.test_metrics_statsd.TestStatsdMetricLogger.test_open_socket ... ok
-ironic_lib.tests.test_metrics_statsd.TestStatsdMetricLogger.test_send
-ironic_lib.tests.test_metrics_statsd.TestStatsdMetricLogger.test_send ... ok
-ironic_lib.tests.test_mdns.GetEndpointTestCase.test_simple
-ironic_lib.tests.test_mdns.GetEndpointTestCase.test_simple ... ok
-ironic_lib.tests.test_json_rpc.TestService.test_http_basic_not_authenticated
-ironic_lib.tests.test_json_rpc.TestService.test_http_basic_not_authenticated ... ok
-ironic_lib.tests.test_keystone.AuthConfTestCase.test_add_auth_opts
-ironic_lib.tests.test_keystone.AuthConfTestCase.test_add_auth_opts ... ok
-ironic_lib.tests.test_metrics_statsd.TestStatsdMetricLogger.test_timer
-ironic_lib.tests.test_metrics_statsd.TestStatsdMetricLogger.test_timer ... ok
-ironic_lib.tests.test_utils.ParseDeviceTagsTestCase.test_empty
-ironic_lib.tests.test_utils.ParseDeviceTagsTestCase.test_empty ... ok
-ironic_lib.tests.test_utils.ParseDeviceTagsTestCase.test_parse
-ironic_lib.tests.test_utils.ParseDeviceTagsTestCase.test_parse ... ok
- WARNING [ironic_lib.utils] Failed to unlink /fake/path, error: 2
-ironic_lib.tests.test_keystone.AuthConfTestCase.test_os_service_types_alias
-ironic_lib.tests.test_keystone.AuthConfTestCase.test_os_service_types_alias ... ok
-ironic_lib.tests.test_utils.BareMetalUtilsTestCase.test_unlink
-ironic_lib.tests.test_utils.BareMetalUtilsTestCase.test_unlink ... ok
-ironic_lib.tests.test_json_rpc.TestClient.test_call_failure
-ironic_lib.tests.test_json_rpc.TestClient.test_call_failure ... ok
-ironic_lib.tests.test_utils.BareMetalUtilsTestCase.test_unlink_ENOENT
-ironic_lib.tests.test_utils.BareMetalUtilsTestCase.test_unlink_ENOENT ... ok
-ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_find_devices_all
-ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_find_devices_all ... ok
+ironic_lib.tests.test_json_rpc.TestClient.test_call_ipv6_success_rfc2732
+ironic_lib.tests.test_json_rpc.TestClient.test_call_ipv6_success_rfc2732 ... ok
+ WARNING [ironic_lib.utils] The attribute "rotational" (with value "None") of device "/dev/sda" is not a valid Boolean. Skipping device.
    ERROR [ironic_lib.json_rpc.server] JSON RPC request {'method': 'no_result', 'id': 'abcd', 'params': {'context': {'user_name': 'admin'}}} is invalid
+ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_one_hint
+ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_one_hint ... ok
    ERROR [ironic_lib.json_rpc.server] JSON RPC request {'jsonrpc': '2.0', 'id': 'abcd', 'params': {'context': {'user_name': 'admin'}}} is invalid
-   ERROR [ironic_lib.json_rpc.client] Unexpected error from RPC: {'code': 500, 'message': 'AttributeError', 'data': {'class': 'AttributeError'}}
    ERROR [ironic_lib.json_rpc.server] JSON RPC request {'method': 'no_result', 'params': {'context': {'user_name': 'admin'}}} is invalid
    ERROR [ironic_lib.json_rpc.server] JSON RPC request {'jsonrpc': '2.0', 'params': {'context': {'user_name': 'admin'}}} is invalid
    ERROR [ironic_lib.json_rpc.server] JSON RPC request 42 is not an object (batched requests are not supported)
    ERROR [ironic_lib.json_rpc.server] JSON RPC request [] is not an object (batched requests are not supported)
    ERROR [ironic_lib.json_rpc.server] JSON RPC request [{'jsonrpc': '2.0', 'method': 'no_result', 'params': {'context': {'user_name': 'admin'}}}] is not an object (batched requests are not supported)
-ironic_lib.tests.test_json_rpc.TestClient.test_call_failure_with_foreign_class
-ironic_lib.tests.test_json_rpc.TestClient.test_call_failure_with_foreign_class ... ok
-ironic_lib.tests.test_json_rpc.TestClient.test_call_failure_with_version_and_cap
-ironic_lib.tests.test_json_rpc.TestClient.test_call_failure_with_version_and_cap ... ok
-ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_find_devices_name
-ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_find_devices_name ... ok
+ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_rotational
+ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_rotational ... ok
+ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_rotational_convert_devices_bool
+ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_rotational_convert_devices_bool ... ok
+ironic_lib.tests.test_json_rpc.TestClient.test_call_success
+ironic_lib.tests.test_json_rpc.TestClient.test_call_success ... ok
+ironic_lib.tests.test_json_rpc.TestClient.test_call_success_with_version
+ironic_lib.tests.test_json_rpc.TestClient.test_call_success_with_version ... ok
 ironic_lib.tests.test_json_rpc.TestService.test_invalid_requests
 ironic_lib.tests.test_json_rpc.TestService.test_invalid_requests ... ok
+ironic_lib.tests.test_json_rpc.TestClient.test_call_success_with_version_and_cap
+ironic_lib.tests.test_json_rpc.TestClient.test_call_success_with_version_and_cap ... ok
+   ERROR [ironic_lib.json_rpc.client] Unexpected error from RPC: {'code': 500, 'message': 'AttributeError'}
+ironic_lib.tests.test_json_rpc.TestClient.test_call_unexpected_failure
+ironic_lib.tests.test_json_rpc.TestClient.test_call_unexpected_failure ... ok
+ironic_lib.tests.test_keystone.AuthConfTestCase.test_add_auth_opts
+ironic_lib.tests.test_keystone.AuthConfTestCase.test_add_auth_opts ... ok
+ironic_lib.tests.test_json_rpc.TestClient.test_call_with_ssl
+ironic_lib.tests.test_json_rpc.TestClient.test_call_with_ssl ... ok
 ironic_lib.tests.test_base.BlockExecuteTestCase.test_can_mock_execute
 ironic_lib.tests.test_base.BlockExecuteTestCase.test_can_mock_execute ... ok
+ironic_lib.tests.test_keystone.AuthConfTestCase.test_os_service_types_alias
+ironic_lib.tests.test_keystone.AuthConfTestCase.test_os_service_types_alias ... ok
+ironic_lib.tests.test_json_rpc.TestClient.test_can_send_version
+ironic_lib.tests.test_json_rpc.TestClient.test_can_send_version ... ok
+ironic_lib.tests.test_json_rpc.TestClient.test_cast_failure
+ironic_lib.tests.test_json_rpc.TestClient.test_cast_failure ... ok
 ironic_lib.tests.test_base.BlockExecuteTestCase.test_exception_raised_for_execute
 ironic_lib.tests.test_base.BlockExecuteTestCase.test_exception_raised_for_execute ... ok
 ironic_lib.tests.test_base.BlockExecuteTestCase.test_exception_raised_for_execute_parent_mocked
 ironic_lib.tests.test_base.BlockExecuteTestCase.test_exception_raised_for_execute_parent_mocked ... ok
-ironic_lib.tests.test_metrics.TestMetricReflection.test_counter_reflection
-ironic_lib.tests.test_metrics.TestMetricReflection.test_counter_reflection ... ok
-ironic_lib.tests.test_metrics.TestMetricReflection.test_gauge_reflection
-ironic_lib.tests.test_metrics.TestMetricReflection.test_gauge_reflection ... ok
-ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_find_devices_none
-ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_find_devices_none ... ok
-ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_empty_device_attribute
-ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_empty_device_attribute ... ok
-ironic_lib.tests.test_json_rpc.TestService.test_malformed_context
-ironic_lib.tests.test_json_rpc.TestService.test_malformed_context ... ok
-ironic_lib.tests.test_metrics.TestMetricReflection.test_timer_reflection
-ironic_lib.tests.test_metrics.TestMetricReflection.test_timer_reflection ... ok
-ironic_lib.tests.test_json_rpc.TestClient.test_call_ipv4_success
-ironic_lib.tests.test_json_rpc.TestClient.test_call_ipv4_success ... ok
-ironic_lib.tests.test_json_rpc.TestClient.test_call_ipv6_success
-ironic_lib.tests.test_json_rpc.TestClient.test_call_ipv6_success ... ok
-ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_multiple_hints
-ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_multiple_hints ... ok
-ironic_lib.tests.test_json_rpc.TestClient.test_call_ipv6_success_rfc2732
-ironic_lib.tests.test_json_rpc.TestClient.test_call_ipv6_success_rfc2732 ... ok
-ironic_lib.tests.test_json_rpc.TestClient.test_call_success
-ironic_lib.tests.test_json_rpc.TestClient.test_call_success ... ok
-ironic_lib.tests.test_json_rpc.TestService.test_mask_secrets
-ironic_lib.tests.test_json_rpc.TestService.test_mask_secrets ... ok
-ironic_lib.tests.test_base.DontBlockExecuteTestCase.test_no_exception_raised_for_execute
-ironic_lib.tests.test_base.DontBlockExecuteTestCase.test_no_exception_raised_for_execute ... ok
 ironic_lib.tests.test_utils.MkfsTestCase.test_mkfs
 ironic_lib.tests.test_utils.MkfsTestCase.test_mkfs ... ok
-   ERROR [ironic_lib.json_rpc.client] Unexpected error from RPC: {'code': 500, 'message': 'AttributeError'}
- WARNING [ironic_lib.utils] The attribute "rotational" (with value "None") of device "/dev/sda" is not a valid Boolean. Skipping device.
-   ERROR [ironic_lib.utils] Failed to create a file system in /my/block/dev. Error: Unexpected error while running command.
+ironic_lib.tests.test_json_rpc.TestService.test_malformed_context
+ironic_lib.tests.test_json_rpc.TestService.test_malformed_context ... ok
+ironic_lib.tests.test_utils.MkfsTestCase.test_mkfs_with_label
+ironic_lib.tests.test_utils.MkfsTestCase.test_mkfs_with_label ... ok
+ironic_lib.tests.test_metrics_statsd.TestStatsdMetricLogger.test_counter
+ironic_lib.tests.test_metrics_statsd.TestStatsdMetricLogger.test_counter   ERROR [ironic_lib.utils] Failed to create a file system in /my/block/dev. Error: Unexpected error while running command.
 Command: None
 Exit code: -
 Stdout: None
@@ -1921,17 +1984,23 @@
 Exit code: -
 Stdout: None
 Stderr: 'fake'
-ironic_lib.tests.test_json_rpc.TestClient.test_call_success_with_version
-ironic_lib.tests.test_json_rpc.TestClient.test_call_success_with_version ... ok
-ironic_lib.tests.test_json_rpc.TestClient.test_call_success_with_version_and_cap
-ironic_lib.tests.test_json_rpc.TestClient.test_call_success_with_version_and_cap ... ok
-ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_multiple_hints2
-ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_multiple_hints2 ... ok
-ironic_lib.tests.test_utils.MkfsTestCase.test_mkfs_with_label
-ironic_lib.tests.test_utils.MkfsTestCase.test_mkfs_with_label ... ok
- WARNING [ironic_lib.utils] No device found that matches the root device hints {'size': '>=50', 'model': 's==foo'}
-ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_multiple_hints3
-ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_multiple_hints3 ... ok
+ ... ok
+ironic_lib.tests.test_metrics_statsd.TestStatsdMetricLogger.test_gauge
+ironic_lib.tests.test_metrics_statsd.TestStatsdMetricLogger.test_gauge ... ok
+ironic_lib.tests.test_metrics_statsd.TestStatsdMetricLogger.test_init
+ironic_lib.tests.test_metrics_statsd.TestStatsdMetricLogger.test_init ... ok
+ironic_lib.tests.test_metrics_statsd.TestStatsdMetricLogger.test_open_socket
+ironic_lib.tests.test_metrics_statsd.TestStatsdMetricLogger.test_open_socket ... ok
+ironic_lib.tests.test_json_rpc.TestClient.test_cast_success
+ironic_lib.tests.test_json_rpc.TestClient.test_cast_success ... ok
+ironic_lib.tests.test_json_rpc.TestClient.test_cast_success_with_version
+ironic_lib.tests.test_json_rpc.TestClient.test_cast_success_with_version ... ok
+ironic_lib.tests.test_json_rpc.TestClient.test_mask_secrets
+ironic_lib.tests.test_json_rpc.TestClient.test_mask_secrets ... ok
+ironic_lib.tests.test_utils.MkfsTestCase.test_mkfs_with_unexpected_error
+ironic_lib.tests.test_utils.MkfsTestCase.test_mkfs_with_unexpected_error ... ok
+ironic_lib.tests.test_metrics_statsd.TestStatsdMetricLogger.test_send
+ironic_lib.tests.test_metrics_statsd.TestStatsdMetricLogger.test_send ... ok
    ERROR [ironic_lib.utils] Failed to make file system. File system foo is not supported.
 Traceback (most recent call last):
   File "/build/reproducible-path/python-ironic-lib-7.0.0/ironic_lib/utils.py", line 156, in mkfs
@@ -1951,108 +2020,72 @@
 Exit code: -
 Stdout: None
 Stderr: 'No such file or directory'
-ironic_lib.tests.test_json_rpc.TestClient.test_call_unexpected_failure
-ironic_lib.tests.test_json_rpc.TestClient.test_call_unexpected_failure ... ok
-ironic_lib.tests.test_json_rpc.TestClient.test_call_with_ssl
-ironic_lib.tests.test_json_rpc.TestClient.test_call_with_ssl ... ok
-ironic_lib.tests.test_json_rpc.TestClient.test_can_send_version
-ironic_lib.tests.test_json_rpc.TestClient.test_can_send_version ... ok
-ironic_lib.tests.test_utils.MkfsTestCase.test_mkfs_with_unexpected_error
-ironic_lib.tests.test_utils.MkfsTestCase.test_mkfs_with_unexpected_error ... ok
-ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_no_device_found
-ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_no_device_found ... ok
 ironic_lib.tests.test_utils.MkfsTestCase.test_mkfs_with_unsupported_fs
 ironic_lib.tests.test_utils.MkfsTestCase.test_mkfs_with_unsupported_fs ... ok
- WARNING [ironic_lib.utils] The attribute "rotational" (with value "None") of device "/dev/sda" is not a valid Boolean. Skipping device.
-ironic_lib.tests.test_mdns.GetEndpointTestCase.test_skip_invalid
-ironic_lib.tests.test_mdns.GetEndpointTestCase.test_skip_invalid ... ok
+ironic_lib.tests.test_metrics_statsd.TestStatsdMetricLogger.test_timer
+ironic_lib.tests.test_metrics_statsd.TestStatsdMetricLogger.test_timer ... ok
+ironic_lib.tests.test_json_rpc.TestService.test_mask_secrets
+ironic_lib.tests.test_json_rpc.TestService.test_mask_secrets ... ok
+ironic_lib.tests.test_utils.MountedTestCase.test_failed_to_mount
+ironic_lib.tests.test_utils.MountedTestCase.test_failed_to_mount ... ok
+ WARNING [ironic_lib.utils] Unable to unmount temporary location /mnt/fake: Unexpected error while running command.
+Command: None
+Exit code: -
+Stdout: None
+Stderr: None
+ironic_lib.tests.test_utils.MountedTestCase.test_failed_to_unmount
+ironic_lib.tests.test_utils.MountedTestCase.test_failed_to_unmount ... ok
 ironic_lib.tests.test_json_rpc.TestService.test_method_not_found
 ironic_lib.tests.test_json_rpc.TestService.test_method_not_found ... ok
-ironic_lib.tests.test_json_rpc.TestClient.test_cast_failure
-ironic_lib.tests.test_json_rpc.TestClient.test_cast_failure ... ok
-ironic_lib.tests.test_json_rpc.TestClient.test_cast_success
-ironic_lib.tests.test_json_rpc.TestClient.test_cast_success ... ok
-ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_no_operators
-ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_no_operators ... ok
-ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_one_hint
-ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_one_hint ... ok
-ironic_lib.tests.test_json_rpc.TestClient.test_cast_success_with_version
-ironic_lib.tests.test_json_rpc.TestClient.test_cast_success_with_version ... ok
-ironic_lib.tests.test_json_rpc.TestClient.test_mask_secrets
-ironic_lib.tests.test_json_rpc.TestClient.test_mask_secrets ... ok
+ironic_lib.tests.test_utils.MountedTestCase.test_temporary
+ironic_lib.tests.test_utils.MountedTestCase.test_temporary ... ok
+ironic_lib.tests.test_utils.MountedTestCase.test_with_dest
+ironic_lib.tests.test_utils.MountedTestCase.test_with_dest ... ok
 ironic_lib.tests.test_json_rpc.TestService.test_method_not_post
 ironic_lib.tests.test_json_rpc.TestService.test_method_not_post ... ok
-ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_rotational
-ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_rotational ... ok
-ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_rotational_convert_devices_bool
-ironic_lib.tests.test_utils.MatchRootDeviceTestCase.test_match_root_device_hints_rotational_convert_devices_bool ... ok
-ironic_lib.tests.test_keystone.KeystoneTestCase.test_get_adapter_from_config
-ironic_lib.tests.test_keystone.KeystoneTestCase.test_get_adapter_from_config ... ok
+ironic_lib.tests.test_utils.MountedTestCase.test_with_opts
+ironic_lib.tests.test_utils.MountedTestCase.test_with_opts ... ok
+ironic_lib.tests.test_utils.MountedTestCase.test_with_type
+ironic_lib.tests.test_utils.MountedTestCase.test_with_type ... ok
 ironic_lib.tests.test_json_rpc.TestService.test_missing_argument
 ironic_lib.tests.test_json_rpc.TestService.test_missing_argument ... ok
-   ERROR [ironic_lib.keystone] Failed to load auth plugin from group test_group
-ironic_lib.tests.test_keystone.KeystoneTestCase.test_get_auth
-ironic_lib.tests.test_keystone.KeystoneTestCase.test_get_auth ... ok
+ironic_lib.tests.test_mdns.RegisterServiceTestCase.test_failure
+ironic_lib.tests.test_mdns.RegisterServiceTestCase.test_failure ... ok
 ironic_lib.tests.test_json_rpc.TestService.test_no_context
 ironic_lib.tests.test_json_rpc.TestService.test_no_context ... ok
-ironic_lib.tests.test_keystone.KeystoneTestCase.test_get_auth_fail
-ironic_lib.tests.test_keystone.KeystoneTestCase.test_get_auth_fail ... ok
 ironic_lib.tests.test_json_rpc.TestService.test_no_deny_methods
 ironic_lib.tests.test_json_rpc.TestService.test_no_deny_methods ... ok
-ironic_lib.tests.test_mdns.GetEndpointTestCase.test_v6
-ironic_lib.tests.test_mdns.GetEndpointTestCase.test_v6 ... ok
    ERROR [ironic_lib.json_rpc.server] Cannot parse JSON RPC request as JSON
    ERROR [ironic_lib.json_rpc.server] Cannot parse JSON RPC request as JSON
    ERROR [ironic_lib.json_rpc.server] Cannot parse JSON RPC request as JSON
 ironic_lib.tests.test_json_rpc.TestService.test_non_json_body
 ironic_lib.tests.test_json_rpc.TestService.test_non_json_body ... ok
-ironic_lib.tests.test_mdns.RegisterServiceTestCase.test_failure
-ironic_lib.tests.test_mdns.RegisterServiceTestCase.test_failure ... ok
 ironic_lib.tests.test_json_rpc.TestService.test_notification
 ironic_lib.tests.test_json_rpc.TestService.test_notification ... ok
-ironic_lib.tests.test_keystone.KeystoneTestCase.test_get_service_auth
-ironic_lib.tests.test_keystone.KeystoneTestCase.test_get_service_auth ... ok
-ironic_lib.tests.test_keystone.KeystoneTestCase.test_get_session
-ironic_lib.tests.test_keystone.KeystoneTestCase.test_get_session ... ok
-ironic_lib.tests.test_utils.GetRouteSourceTestCase.test_get_route_source_indexerror
-ironic_lib.tests.test_utils.GetRouteSourceTestCase.test_get_route_source_indexerror ... ok
+ironic_lib.tests.test_mdns.GetEndpointTestCase.test_binary_data
+ironic_lib.tests.test_mdns.GetEndpointTestCase.test_binary_data ... ok
 ironic_lib.tests.test_json_rpc.TestService.test_success
 ironic_lib.tests.test_json_rpc.TestService.test_success ... ok
-ironic_lib.tests.test_utils.GetRouteSourceTestCase.test_get_route_source_ipv4
-ironic_lib.tests.test_utils.GetRouteSourceTestCase.test_get_route_source_ipv4 ... ok
-ironic_lib.tests.test_utils.GetRouteSourceTestCase.test_get_route_source_ipv6
-ironic_lib.tests.test_utils.GetRouteSourceTestCase.test_get_route_source_ipv6 ... ok
-ironic_lib.tests.test_utils.GetRouteSourceTestCase.test_get_route_source_ipv6_linklocal
-ironic_lib.tests.test_utils.GetRouteSourceTestCase.test_get_route_source_ipv6_linklocal ... ok
-ironic_lib.tests.test_utils.GetRouteSourceTestCase.test_get_route_source_ipv6_linklocal_allowed
-ironic_lib.tests.test_utils.GetRouteSourceTestCase.test_get_route_source_ipv6_linklocal_allowed ... ok
+ironic_lib.tests.test_mdns.RegisterServiceTestCase.test_ok
+ironic_lib.tests.test_mdns.RegisterServiceTestCase.test_ok ... ok
 ironic_lib.tests.test_json_rpc.TestService.test_success_no_result
 ironic_lib.tests.test_json_rpc.TestService.test_success_no_result ... ok
-ironic_lib.tests.test_mdns.GetEndpointTestCase.test_with_custom_port_and_path
-ironic_lib.tests.test_mdns.GetEndpointTestCase.test_with_custom_port_and_path ... ok
 ironic_lib.tests.test_json_rpc.TestService.test_unexpected_failure
 ironic_lib.tests.test_json_rpc.TestService.test_unexpected_failure ... ok
-ironic_lib.tests.test_json_rpc.TestSession.test_http_basic
-ironic_lib.tests.test_json_rpc.TestSession.test_http_basic ... ok
-ironic_lib.tests.test_json_rpc.TestSession.test_http_basic_deprecated
-ironic_lib.tests.test_json_rpc.TestSession.test_http_basic_deprecated ... ok
-ironic_lib.tests.test_json_rpc.TestSession.test_keystone
-ironic_lib.tests.test_json_rpc.TestSession.test_keystone ... ok
-ironic_lib.tests.test_json_rpc.TestSession.test_noauth
-ironic_lib.tests.test_json_rpc.TestSession.test_noauth ... ok
-ironic_lib.tests.test_utils.IsHttpUrlTestCase.test_is_http_url
-ironic_lib.tests.test_utils.IsHttpUrlTestCase.test_is_http_url ... ok
-ironic_lib.tests.test_mdns.RegisterServiceTestCase.test_ok
-ironic_lib.tests.test_mdns.RegisterServiceTestCase.test_ok ... ok
-ironic_lib.tests.test_mdns.GetEndpointTestCase.test_with_custom_port_path_and_protocol
-ironic_lib.tests.test_mdns.GetEndpointTestCase.test_with_custom_port_path_and_protocol ... ok
+ironic_lib.tests.test_metrics.TestMetricReflection.test_counter_reflection
+ironic_lib.tests.test_metrics.TestMetricReflection.test_counter_reflection ... ok
+ironic_lib.tests.test_metrics.TestMetricReflection.test_gauge_reflection
+ironic_lib.tests.test_metrics.TestMetricReflection.test_gauge_reflection ... ok
+ironic_lib.tests.test_metrics.TestMetricReflection.test_timer_reflection
+ironic_lib.tests.test_metrics.TestMetricReflection.test_timer_reflection ... ok
+ WARNING [ironic_lib.mdns] None of addresses ['::2', '::3'] seem routable, using ::2
+ironic_lib.tests.test_mdns.GetEndpointTestCase.test_fallback
+ironic_lib.tests.test_mdns.GetEndpointTestCase.test_fallback ... ok
 ironic_lib.tests.test_mdns.RegisterServiceTestCase.test_with_interfaces
 ironic_lib.tests.test_mdns.RegisterServiceTestCase.test_with_interfaces ... ok
-ironic_lib.tests.test_mdns.RegisterServiceTestCase.test_with_params
-ironic_lib.tests.test_mdns.RegisterServiceTestCase.test_with_params ... ok
 ironic_lib.tests.test_basic_auth.TestAuthBasic.test_auth_entry
 ironic_lib.tests.test_basic_auth.TestAuthBasic.test_auth_entry ... ok
-   ERROR [ironic_lib.auth_basic] Problem reading auth user file: [Errno 2] No such file or directory: '/tmp/tmps97gsmmr/tmpo2bjlgqu.missing'
+   ERROR [ironic_lib.auth_basic] Problem reading auth user file: [Errno 2] No such file or directory: '/tmp/tmpuq_wfcse/tmpbo13joo2.missing'
 ironic_lib.tests.test_basic_auth.TestAuthBasic.test_authenticate
 ironic_lib.tests.test_basic_auth.TestAuthBasic.test_authenticate ... ok
 ironic_lib.tests.test_basic_auth.TestAuthBasic.test_middleware_authenticate
@@ -2067,29 +2100,22 @@
 ironic_lib.tests.test_basic_auth.TestAuthBasic.test_unauthorized ... ok
 ironic_lib.tests.test_basic_auth.TestAuthBasic.test_validate_auth_file
 ironic_lib.tests.test_basic_auth.TestAuthBasic.test_validate_auth_file ... ok
+ironic_lib.tests.test_exception.TestIronicException.test___init___invalid_kwarg
+ironic_lib.tests.test_exception.TestIronicException.test___init___invalid_kwarg ... ok
+ironic_lib.tests.test_exception.TestIronicException.test___init___invalid_kwarg_reraise
+ironic_lib.tests.test_exception.TestIronicException.test___init___invalid_kwarg_reraise ... ok
+ironic_lib.tests.test_exception.TestIronicException.test___init___json_serializable
+ironic_lib.tests.test_exception.TestIronicException.test___init___json_serializable ... ok
+ironic_lib.tests.test_exception.TestIronicException.test___init___string_serializable
+ironic_lib.tests.test_exception.TestIronicException.test___init___string_serializable ... ok
+ironic_lib.tests.test_mdns.GetEndpointTestCase.test_https
+ironic_lib.tests.test_mdns.GetEndpointTestCase.test_https ... ok
+ironic_lib.tests.test_mdns.RegisterServiceTestCase.test_with_params
+ironic_lib.tests.test_mdns.RegisterServiceTestCase.test_with_params ... ok
+ironic_lib.tests.test_mdns.GetEndpointTestCase.test_invalid_key
+ironic_lib.tests.test_mdns.GetEndpointTestCase.test_invalid_key ... ok
 ironic_lib.tests.test_mdns.RegisterServiceTestCase.test_with_race
 ironic_lib.tests.test_mdns.RegisterServiceTestCase.test_with_race ... ok
-ironic_lib.tests.test_utils.MountedTestCase.test_failed_to_mount
-ironic_lib.tests.test_utils.MountedTestCase.test_failed_to_mount ... ok
- WARNING [ironic_lib.utils] Unable to unmount temporary location /mnt/fake: Unexpected error while running command.
-Command: None
-Exit code: -
-Stdout: None
-Stderr: None
-ironic_lib.tests.test_utils.MountedTestCase.test_failed_to_unmount
-ironic_lib.tests.test_utils.MountedTestCase.test_failed_to_unmount ... ok
-ironic_lib.tests.test_utils.MountedTestCase.test_temporary
-ironic_lib.tests.test_utils.MountedTestCase.test_temporary ... ok
-ironic_lib.tests.test_utils.MountedTestCase.test_with_dest
-ironic_lib.tests.test_utils.MountedTestCase.test_with_dest ... ok
-ironic_lib.tests.test_mdns.GetEndpointTestCase.test_with_params
-ironic_lib.tests.test_mdns.GetEndpointTestCase.test_with_params ... ok
-ironic_lib.tests.test_utils.MountedTestCase.test_with_opts
-ironic_lib.tests.test_utils.MountedTestCase.test_with_opts ... ok
-ironic_lib.tests.test_utils.MountedTestCase.test_with_type
-ironic_lib.tests.test_utils.MountedTestCase.test_with_type ... ok
-ironic_lib.tests.test_mdns.GetEndpointTestCase.test_with_server
-ironic_lib.tests.test_mdns.GetEndpointTestCase.test_with_server ... ok
 ironic_lib.tests.test_metrics_utils.TestGetLogger.test_default_backend
 ironic_lib.tests.test_metrics_utils.TestGetLogger.test_default_backend ... ok
 ironic_lib.tests.test_metrics_utils.TestGetLogger.test_default_prefix
@@ -2110,24 +2136,46 @@
 ironic_lib.tests.test_metrics_utils.TestGetLogger.test_prepend_other_delim ... ok
 ironic_lib.tests.test_metrics_utils.TestGetLogger.test_statsd_backend
 ironic_lib.tests.test_metrics_utils.TestGetLogger.test_statsd_backend ... ok
+ironic_lib.tests.test_mdns.GetEndpointTestCase.test_localhost_only
+ironic_lib.tests.test_mdns.GetEndpointTestCase.test_localhost_only ... ok
+ironic_lib.tests.test_mdns.GetEndpointTestCase.test_not_found
+ironic_lib.tests.test_mdns.GetEndpointTestCase.test_not_found ... ok
+ironic_lib.tests.test_mdns.GetEndpointTestCase.test_simple
+ironic_lib.tests.test_mdns.GetEndpointTestCase.test_simple ... ok
+ironic_lib.tests.test_mdns.GetEndpointTestCase.test_skip_invalid
+ironic_lib.tests.test_mdns.GetEndpointTestCase.test_skip_invalid ... ok
+ironic_lib.tests.test_mdns.GetEndpointTestCase.test_v6
+ironic_lib.tests.test_mdns.GetEndpointTestCase.test_v6 ... ok
+ironic_lib.tests.test_mdns.GetEndpointTestCase.test_with_custom_port_and_path
+ironic_lib.tests.test_mdns.GetEndpointTestCase.test_with_custom_port_and_path ... ok
+ironic_lib.tests.test_mdns.GetEndpointTestCase.test_with_custom_port_path_and_protocol
+ironic_lib.tests.test_mdns.GetEndpointTestCase.test_with_custom_port_path_and_protocol ... ok
+ironic_lib.tests.test_mdns.GetEndpointTestCase.test_with_params
+ironic_lib.tests.test_mdns.GetEndpointTestCase.test_with_params ... ok
+ironic_lib.tests.test_mdns.GetEndpointTestCase.test_with_server
+ironic_lib.tests.test_mdns.GetEndpointTestCase.test_with_server ... ok
+ironic_lib.tests.test_utils.ParseDeviceTagsTestCase.test_empty
+ironic_lib.tests.test_utils.ParseDeviceTagsTestCase.test_empty ... ok
+ironic_lib.tests.test_utils.ParseDeviceTagsTestCase.test_parse
+ironic_lib.tests.test_utils.ParseDeviceTagsTestCase.test_parse ... ok
 
 ----------------------------------------------------------------------
-Ran 191 tests in 9.247s
+Ran 191 tests in 3.230s
 
 OK
 + stestr slowest
-Test id                                                                                 Runtime (s)
---------------------------------------------------------------------------------------  -----------
-ironic_lib.tests.test_basic_auth.TestAuthBasic.test_auth_entry                          1.585
-ironic_lib.tests.test_mdns.GetEndpointTestCase.test_with_params                         0.488
-ironic_lib.tests.test_mdns.GetEndpointTestCase.test_binary_data                         0.326
-ironic_lib.tests.test_mdns.RegisterServiceTestCase.test_ok                              0.221
-ironic_lib.tests.test_mdns.RegisterServiceTestCase.test_failure                         0.193
-ironic_lib.tests.test_mdns.GetEndpointTestCase.test_skip_invalid                        0.181
-ironic_lib.tests.test_mdns.GetEndpointTestCase.test_with_custom_port_path_and_protocol  0.177
-ironic_lib.tests.test_mdns.RegisterServiceTestCase.test_with_interfaces                 0.167
-ironic_lib.tests.test_keystone.AuthConfTestCase.test_add_auth_opts                      0.162
-ironic_lib.tests.test_mdns.RegisterServiceTestCase.test_with_params                     0.160
+Test id                                                                        Runtime (s)
+-----------------------------------------------------------------------------  -----------
+ironic_lib.tests.test_basic_auth.TestAuthBasic.test_auth_entry                 0.464
+ironic_lib.tests.test_mdns.GetEndpointTestCase.test_with_params                0.112
+ironic_lib.tests.test_mdns.GetEndpointTestCase.test_binary_data                0.075
+ironic_lib.tests.test_mdns.RegisterServiceTestCase.test_failure                0.072
+ironic_lib.tests.test_mdns.GetEndpointTestCase.test_skip_invalid               0.071
+ironic_lib.tests.test_mdns.RegisterServiceTestCase.test_with_race              0.067
+ironic_lib.tests.test_mdns.GetEndpointTestCase.test_localhost_only             0.066
+ironic_lib.tests.test_mdns.RegisterServiceTestCase.test_with_interfaces        0.065
+ironic_lib.tests.test_mdns.GetEndpointTestCase.test_https                      0.065
+ironic_lib.tests.test_mdns.GetEndpointTestCase.test_with_custom_port_and_path  0.064
 + rm -rf .stestr
 make[1]: Leaving directory '/build/reproducible-path/python-ironic-lib-7.0.0'
    debian/rules override_dh_install
@@ -2161,14 +2209,14 @@
 	cat /usr/share/openstack-pkg-tools/init-script-template >>$MYINIT.init ; \
 	pkgos-gen-systemd-unit $i ; \
 done
-+ ls -1 debian/*.init.in
+++ ls -1 'debian/*.init.in'
 ls: cannot access 'debian/*.init.in': No such file or directory
 # 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 \
@@ -2177,7 +2225,7 @@
 		pkgos-gen-systemd-unit $i ; \
 	fi \
 done
-+ ls debian/*.init.in
+++ ls 'debian/*.init.in'
 ls: cannot access 'debian/*.init.in': No such file or directory
 dh_installinit --error-handler=true
 make[1]: Leaving directory '/build/reproducible-path/python-ironic-lib-7.0.0'
@@ -2210,12 +2258,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/2158572/tmp/hooks/B01_cleanup starting
+I: user script /srv/workspace/pbuilder/2158572/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/2091102 and its subdirectories
-I: Current time: Fri Mar 28 00:13:02 -12 2025
-I: pbuilder-time-stamp: 1743163982
+I: removing directory /srv/workspace/pbuilder/2158572 and its subdirectories
+I: Current time: Fri May  1 08:38:50 +14 2026
+I: pbuilder-time-stamp: 1777574330