From 41db6d8d35900d425df3228406db3fec61ab2269 Mon Sep 17 00:00:00 2001 From: Matt Clay Date: Tue, 1 Feb 2022 09:01:18 -0800 Subject: [PATCH] Fix task path unicode error in junit callback. --- changelogs/fragments/junit-callback-task-path-unicode.yml | 2 ++ lib/ansible/plugins/callback/junit.py | 7 +++++-- 2 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 changelogs/fragments/junit-callback-task-path-unicode.yml diff --git a/changelogs/fragments/junit-callback-task-path-unicode.yml b/changelogs/fragments/junit-callback-task-path-unicode.yml new file mode 100644 index 00000000000..2b1ffd41eaf --- /dev/null +++ b/changelogs/fragments/junit-callback-task-path-unicode.yml @@ -0,0 +1,2 @@ +bugfixes: + - junit callback - Fix unicode error when handling non-ASCII task paths. diff --git a/lib/ansible/plugins/callback/junit.py b/lib/ansible/plugins/callback/junit.py index 0f42e303bfc..75cdbc74f6c 100644 --- a/lib/ansible/plugins/callback/junit.py +++ b/lib/ansible/plugins/callback/junit.py @@ -158,6 +158,9 @@ class CallbackModule(CallbackBase): self._task_data = {} + if self._replace_out_of_tree_path is not None: + self._replace_out_of_tree_path = to_text(self._replace_out_of_tree_path) + if not os.path.exists(self._output_dir): os.makedirs(self._output_dir) @@ -217,12 +220,12 @@ class CallbackModule(CallbackBase): duration = host_data.finish - task_data.start if self._task_relative_path and task_data.path: - junit_classname = os.path.relpath(task_data.path, self._task_relative_path) + junit_classname = to_text(os.path.relpath(to_bytes(task_data.path), to_bytes(self._task_relative_path))) else: junit_classname = task_data.path if self._replace_out_of_tree_path is not None and junit_classname.startswith('../'): - junit_classname = self._replace_out_of_tree_path + os.path.basename(junit_classname) + junit_classname = self._replace_out_of_tree_path + to_text(os.path.basename(to_bytes(junit_classname))) if self._task_class == 'true': junit_classname = re.sub(r'\.yml:[0-9]+$', '', junit_classname)