From ffbf121182230095cfce1dde26cdd151f980a2b0 Mon Sep 17 00:00:00 2001 From: Abhijeet Kasurde Date: Fri, 18 Apr 2025 20:40:28 -0700 Subject: [PATCH] comment: raise an exception when an invalid option is provided (#84984) Co-authored-by: Matt Clay Signed-off-by: Abhijeet Kasurde (cherry picked from commit 1daa8412d5a5ba8e1c2723127c4b5faf126b7036) --- changelogs/fragments/comment_fail.yml | 3 +++ lib/ansible/plugins/filter/core.py | 9 ++++++++- test/integration/targets/filter_core/tasks/main.yml | 13 +++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 changelogs/fragments/comment_fail.yml diff --git a/changelogs/fragments/comment_fail.yml b/changelogs/fragments/comment_fail.yml new file mode 100644 index 00000000000..5b122d4c9b9 --- /dev/null +++ b/changelogs/fragments/comment_fail.yml @@ -0,0 +1,3 @@ +--- +minor_changes: + - comment filter - Improve the error message shown when an invalid ``style`` argument is provided. diff --git a/lib/ansible/plugins/filter/core.py b/lib/ansible/plugins/filter/core.py index b5b7a145c2c..7dbbb0e0a57 100644 --- a/lib/ansible/plugins/filter/core.py +++ b/lib/ansible/plugins/filter/core.py @@ -26,7 +26,7 @@ from jinja2.filters import do_map, do_select, do_selectattr, do_reject, do_rejec from jinja2.environment import Environment from ansible._internal._templating import _lazy_containers -from ansible.errors import AnsibleFilterError, AnsibleTypeError +from ansible.errors import AnsibleFilterError, AnsibleTypeError, AnsibleTemplatePluginError from ansible.module_utils.datatag import native_type_name from ansible.module_utils.common.json import get_encoder, get_decoder from ansible.module_utils.six import string_types, integer_types, text_type @@ -405,6 +405,13 @@ def comment(text, style='plain', **kw): } } + if style not in comment_styles: + raise AnsibleTemplatePluginError( + message=f"Invalid style {style!r}.", + help_text=f"Available styles: {', '.join(comment_styles)}", + obj=style, + ) + # Pointer to the right comment type style_params = comment_styles[style] diff --git a/test/integration/targets/filter_core/tasks/main.yml b/test/integration/targets/filter_core/tasks/main.yml index 340fc61a354..7e82ab4b4e9 100644 --- a/test/integration/targets/filter_core/tasks/main.yml +++ b/test/integration/targets/filter_core/tasks/main.yml @@ -646,6 +646,19 @@ - '"boo!"|comment(decoration="") == "boo!\n"' - '"boo!"|comment(prefix="\n", prefix_count=20) == "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n# boo!\n#"' + +- name: Invalid style value for comment + set_fact: + foo: '{{ "boo" | comment(style="invalid") }}' + ignore_errors: yes + register: invalid_style_comment + +- name: Verify invalid comment value fails + assert: + that: + - invalid_style_comment is failed + - "'Invalid style' in invalid_style_comment.msg" + - name: Verify subelements throws on invalid obj set_fact: foo: '{{True|subelements("foo")}}'