From 9aea625f63176e6f7b13212f495704305fe692aa Mon Sep 17 00:00:00 2001 From: Martin Krizek Date: Wed, 3 Sep 2025 01:06:43 +0200 Subject: [PATCH] [stable-2.19] ternary: evaluate values lazily (#85752) (#85753) Fixes #85743 (cherry picked from commit 6976e130757cd9e8b1346c21c28174e2903585b9) --- changelogs/fragments/85743-lazy-ternary.yml | 2 ++ lib/ansible/plugins/filter/core.py | 1 + test/integration/targets/filter_core/tasks/main.yml | 7 +++++++ 3 files changed, 10 insertions(+) create mode 100644 changelogs/fragments/85743-lazy-ternary.yml diff --git a/changelogs/fragments/85743-lazy-ternary.yml b/changelogs/fragments/85743-lazy-ternary.yml new file mode 100644 index 00000000000..e6e4872e668 --- /dev/null +++ b/changelogs/fragments/85743-lazy-ternary.yml @@ -0,0 +1,2 @@ +bugfixes: + - "``ternary`` filter - evaluate values lazily (https://github.com/ansible/ansible/issues/85743)" diff --git a/lib/ansible/plugins/filter/core.py b/lib/ansible/plugins/filter/core.py index f9f9da73a00..a07e14374a3 100644 --- a/lib/ansible/plugins/filter/core.py +++ b/lib/ansible/plugins/filter/core.py @@ -221,6 +221,7 @@ def regex_search(value, regex, *args, **kwargs): return items +@accept_args_markers def ternary(value, true_val, false_val, none_val=None): """ value ? true_val : false_val """ if value is None and none_val is not None: diff --git a/test/integration/targets/filter_core/tasks/main.yml b/test/integration/targets/filter_core/tasks/main.yml index c11b21c40c6..0d982a7736d 100644 --- a/test/integration/targets/filter_core/tasks/main.yml +++ b/test/integration/targets/filter_core/tasks/main.yml @@ -430,6 +430,13 @@ - '123|ternary("seven", "eight") == "seven"' - '"haha"|ternary("seven", "eight") == "seven"' +- name: Verify ternary does not evaluate unused values + assert: + that: + - (false | ternary(undefined_variable, 'seven')) == (false | ternary(d.no_such_key, 'seven')) + vars: + d: {} + - name: Verify regex_escape raises on posix_extended (failure expected) set_fact: foo: '{{"]]^"|regex_escape(re_type="posix_extended")}}'