From b1fc98c8ad9d56ee65cc43fb46de87f2ee52b18c Mon Sep 17 00:00:00 2001 From: Matt Davis <6775756+nitzmahone@users.noreply.github.com> Date: Mon, 18 Aug 2025 15:35:39 -0700 Subject: [PATCH] Include result origin in broken conditional message instead of result (#85695) Co-authored-by: Matt Clay --- changelogs/fragments/elide_broken_conditional_result.yml | 3 +++ lib/ansible/_internal/_templating/_engine.py | 7 ++++--- 2 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 changelogs/fragments/elide_broken_conditional_result.yml diff --git a/changelogs/fragments/elide_broken_conditional_result.yml b/changelogs/fragments/elide_broken_conditional_result.yml new file mode 100644 index 00000000000..195db72155c --- /dev/null +++ b/changelogs/fragments/elide_broken_conditional_result.yml @@ -0,0 +1,3 @@ +bugfixes: + - conditionals - When displaying a broken conditional error or deprecation warning, + the origin of the non-boolean result is included (if available), and the raw result is omitted. diff --git a/lib/ansible/_internal/_templating/_engine.py b/lib/ansible/_internal/_templating/_engine.py index 094d24dd86a..a56288dac29 100644 --- a/lib/ansible/_internal/_templating/_engine.py +++ b/lib/ansible/_internal/_templating/_engine.py @@ -6,7 +6,6 @@ from __future__ import annotations import copy import dataclasses import enum -import textwrap import typing as t import collections.abc as c import re @@ -560,9 +559,11 @@ class TemplateEngine: bool_result = bool(result) + result_origin = Origin.get_tag(result) or Origin.UNKNOWN + msg = ( - f'Conditional result was {textwrap.shorten(str(result), width=40)!r} of type {native_type_name(result)!r}, ' - f'which evaluates to {bool_result}. Conditionals must have a boolean result.' + f'Conditional result ({bool_result}) was derived from value of type {native_type_name(result)!r} at {str(result_origin)!r}. ' + 'Conditionals must have a boolean result.' ) if _TemplateConfig.allow_broken_conditionals: