Ironic inspection fails due to utf-8 decoding issue on Disk serial
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
ironic-lib |
Fix Released
|
Low
|
Unassigned |
Bug Description
This issue has been firstly reported as a bug downstream in Red Hat internal system.
The ironic-python-agent can't handle special characters in block device serial number.
Inspection fails during block devices identification if at least one of them contains special non utf-8 characters in the serial number.
Example from internal case:
Full stack trace:
~~~
Jul 03 09:16:11 master3.xxxxxx.yyy podman[2234]: 2024-07-03 09:16:11.628 1 DEBUG oslo_concurrenc
xecute /usr/lib/
Jul 03 09:16:11 master3.xxxxxx.yyy ironic-agent[2272]: --- Logging error ---
Jul 03 09:16:11 master3.xxxxxx.yyy podman[2234]: --- Logging error ---
Jul 03 09:16:11 master3.xxxxxx.yyy ironic-agent[2272]: Traceback (most recent call last):
Jul 03 09:16:11 master3.xxxxxx.yyy ironic-agent[2272]: File "/usr/lib64/
Jul 03 09:16:11 master3.xxxxxx.yyy podman[2234]: Traceback (most recent call last):
Jul 03 09:16:11 master3.xxxxxx.yyy podman[2234]: File "/usr/lib64/
Jul 03 09:16:11 master3.xxxxxx.yyy podman[2234]: stream.write(msg + self.terminator)
Jul 03 09:16:11 master3.xxxxxx.yyy podman[2234]: UnicodeEncodeError: 'utf-8' codec can't encode characters in position 1260-1267: surrogates not allowed
Jul 03 09:16:11 master3.xxxxxx.yyy podman[2234]: Call stack:
Jul 03 09:16:11 master3.xxxxxx.yyy ironic-agent[2272]: stream.write(msg + self.terminator)
Jul 03 09:16:11 master3.xxxxxx.yyy ironic-agent[2272]: UnicodeEncodeError: 'utf-8' codec can't encode characters in position 1260-1267: surrogates not allowed
Jul 03 09:16:11 master3.xxxxxx.yyy podman[2234]: File "/usr/bin/
Jul 03 09:16:11 master3.xxxxxx.yyy podman[2234]: sys.exit(run())
Jul 03 09:16:11 master3.xxxxxx.yyy podman[2234]: File "/usr/lib/
Jul 03 09:16:11 master3.xxxxxx.yyy podman[2234]: agent.IronicPyt
Jul 03 09:16:11 master3.xxxxxx.yyy ironic-agent[2272]: Call stack:
Jul 03 09:16:11 master3.xxxxxx.yyy podman[2234]: File "/usr/lib/
Jul 03 09:16:11 master3.xxxxxx.yyy podman[2234]: self.process_
Jul 03 09:16:11 master3.xxxxxx.yyy podman[2234]: File "/usr/lib/
Jul 03 09:16:11 master3.xxxxxx.yyy podman[2234]: hardware.
Jul 03 09:16:11 master3.xxxxxx.yyy podman[2234]: File "/usr/lib/
Jul 03 09:16:11 master3.xxxxxx.yyy podman[2234]: dispatch_
Jul 03 09:16:11 master3.xxxxxx.yyy podman[2234]: File "/usr/lib/
Jul 03 09:16:11 master3.xxxxxx.yyy podman[2234]: return getattr(manager, method)(*args, **kwargs)
Jul 03 09:16:11 master3.xxxxxx.yyy podman[2234]: File "/usr/lib/
Jul 03 09:16:11 master3.xxxxxx.yyy podman[2234]: self.get_
Jul 03 09:16:11 master3.xxxxxx.yyy podman[2234]: File "/usr/lib/
Jul 03 09:16:11 master3.xxxxxx.yyy podman[2234]: block_devices = self.list_
Jul 03 09:16:11 master3.xxxxxx.yyy podman[2234]: File "/usr/lib/
Jul 03 09:16:11 master3.xxxxxx.yyy podman[2234]: block_devices = self.list_
Jul 03 09:16:11 master3.xxxxxx.yyy podman[2234]: File "/usr/lib/
Jul 03 09:16:11 master3.xxxxxx.yyy podman[2234]: block_devices = list_all_
Jul 03 09:16:11 master3.xxxxxx.yyy podman[2234]: File "/usr/lib/
Jul 03 09:16:11 master3.xxxxxx.yyy podman[2234]: report = il_utils.
Jul 03 09:16:11 master3.xxxxxx.yyy podman[2234]: File "/usr/lib/
Jul 03 09:16:11 master3.xxxxxx.yyy podman[2234]: _log(result[0], result[1])
Jul 03 09:16:11 master3.xxxxxx.yyy podman[2234]: File "/usr/lib/
Jul 03 09:16:11 master3.xxxxxx.yyy podman[2234]: LOG.debug('Command stdout is: "%s"', stdout)
Jul 03 09:16:11 master3.xxxxxx.yyy podman[2234]: Message: 'Command stdout is: "%s"'
Jul 03 09:16:11 master3.xxxxxx.yyy podman[2234]: Arguments: ('{\n "blockdevices": [\n {\n "kname": "loop0",\n "model": null,\n "size": 67467313152,\n "rota": false,\n "type": "loop",\n "uuid": "28f5ff52-
tags: | added: bug |
Changed in ironic-python-agent: | |
importance: | Undecided → Medium |
affects: | ironic-python-agent → ironic-lib |
Changed in ironic-lib: | |
importance: | Medium → Undecided |
status: | New → Triaged |
importance: | Undecided → Low |
Reviewed: https:/ /review. opendev. org/c/openstack /ironic- lib/+/926045 /opendev. org/openstack/ ironic- lib/commit/ 1ca3c8cf1a90cca ed619df8b4ba97d bf9e386b98
Committed: https:/
Submitter: "Zuul (22348)"
Branch: master
commit 1ca3c8cf1a90cca ed619df8b4ba97d bf9e386b98
Author: Riccardo Pittau <email address hidden>
Date: Fri Aug 9 12:01:35 2024 +0200
Fix invalid UTF-8 characters in execute output
It's rare but the output of commands called by execute can
contain invalid UTF-8 characters.
While the execute command does not care about the output
itself and will finish execution correctly, transposing
that into string (for example when logging the output)
will raise a Unicode exception.
When that happens we should escape the invalid characters
and log a trimmed output.
Closes-Bug: 2071935 2b3220f573953bc ac1678883f2
Change-Id: I0c776e3fe5efa8