Improve JSON parsing error handling. (#1221)

(cherry picked from commit 6ab8cc0d82)
This commit is contained in:
Felix Fontein 2025-12-06 22:25:30 +01:00
parent 091e393e6d
commit 4399cb5a35
2 changed files with 23 additions and 6 deletions

View File

@ -0,0 +1,3 @@
bugfixes:
- "CLI-based modules - when parsing JSON output fails, also provide standard error output. Also provide information on the command and its result in machine-readable way
(https://github.com/ansible-collections/community.docker/issues/1216, https://github.com/ansible-collections/community.docker/pull/1221)."

View File

@ -133,11 +133,18 @@ class AnsibleDockerClientBase(object):
try:
data = json.loads(stdout)
except Exception as exc:
self.fail('Error while parsing JSON output of {cmd}: {exc}\nJSON output: {stdout}'.format(
self.fail(
'Error while parsing JSON output of {cmd}: {exc}\nJSON output: {stdout}\n\nError output:\n{stderr}'.format(
cmd=self._compose_cmd_str(args),
exc=to_native(exc),
stdout=to_native(stdout),
stderr=to_native(stderr),
),
cmd=self._compose_cmd_str(args),
exc=to_native(exc),
rc=rc,
stdout=to_native(stdout),
))
stderr=to_native(stderr),
)
return rc, data, stderr
# def call_cli_json_stream(self, *args, check_rc=False, data=None, cwd=None, environ_update=None, warn_on_stderr=False):
@ -153,11 +160,18 @@ class AnsibleDockerClientBase(object):
if line.startswith(b'{'):
result.append(json.loads(line))
except Exception as exc:
self.fail('Error while parsing JSON output of {cmd}: {exc}\nJSON output: {stdout}'.format(
self.fail(
'Error while parsing JSON output of {cmd}: {exc}\nJSON output: {stdout}\n\nError output:\n{stderr}'.format(
cmd=self._compose_cmd_str(args),
exc=to_native(exc),
stdout=to_native(stdout),
stderr=to_native(stderr),
),
cmd=self._compose_cmd_str(args),
exc=to_native(exc),
rc=rc,
stdout=to_native(stdout),
))
stderr=to_native(stderr),
)
return rc, result, stderr
@abc.abstractmethod