diff --git a/lib/ansible/template/__init__.py b/lib/ansible/template/__init__.py index 9f03a5a40d7..6c7ef828996 100644 --- a/lib/ansible/template/__init__.py +++ b/lib/ansible/template/__init__.py @@ -609,8 +609,13 @@ class Templar: def _finalize(self, thing): ''' - A custom finalize method for jinja2, which prevents None from being returned + A custom finalize method for jinja2, which prevents None from being returned. This + avoids a string of ``"None"`` as ``None`` has no importance in YAML. + + If using ANSIBLE_JINJA2_NATIVE we bypass this and return the actual value always ''' + if USE_JINJA2_NATIVE: + return thing return thing if thing is not None else '' def _fail_lookup(self, name, *args, **kwargs): diff --git a/test/integration/targets/jinja2_native_types/runtests.yml b/test/integration/targets/jinja2_native_types/runtests.yml index 8d00f471f5b..2e665da4f3d 100644 --- a/test/integration/targets/jinja2_native_types/runtests.yml +++ b/test/integration/targets/jinja2_native_types/runtests.yml @@ -29,6 +29,7 @@ b_false: False s_true: "True" s_false: "False" + yaml_none: ~ tasks: - name: check jinja version shell: python -c 'import jinja2; print(jinja2.__version__)' @@ -44,4 +45,5 @@ - import_tasks: test_bool.yml - import_tasks: test_dunder.yml - import_tasks: test_types.yml + - import_tasks: test_none.yml when: is_native diff --git a/test/integration/targets/jinja2_native_types/test_casting.yml b/test/integration/targets/jinja2_native_types/test_casting.yml index 7d4e3edaa35..5b4fe3ac0eb 100644 --- a/test/integration/targets/jinja2_native_types/test_casting.yml +++ b/test/integration/targets/jinja2_native_types/test_casting.yml @@ -11,11 +11,11 @@ - assert: that: - 'int_to_str == "2"' - - 'int_to_str|type_debug in ["string", "unicode"]' + - 'int_to_str|type_debug in ["str", "unicode"]' - 'str_to_int == 2' - 'str_to_int|type_debug == "int"' - - 'dict_to_str|type_debug in ["string", "unicode"]' - - 'list_to_str|type_debug in ["string", "unicode"]' + - 'dict_to_str|type_debug in ["str", "unicode"]' + - 'list_to_str|type_debug in ["str", "unicode"]' - 'int_to_bool is sameas true' - 'int_to_bool|type_debug == "bool"' - 'str_true_to_bool is sameas true' diff --git a/test/integration/targets/jinja2_native_types/test_concatentation.yml b/test/integration/targets/jinja2_native_types/test_concatentation.yml index 9a523e543d4..478182ab454 100644 --- a/test/integration/targets/jinja2_native_types/test_concatentation.yml +++ b/test/integration/targets/jinja2_native_types/test_concatentation.yml @@ -23,7 +23,7 @@ - assert: that: - 'string_sum == "12"' - - 'string_sum|type_debug in ["string", "unicode"]' + - 'string_sum|type_debug in ["str", "unicode"]' - name: add two lists set_fact: @@ -40,7 +40,7 @@ - assert: that: - - 'list_sum_multi|type_debug in ["string", "unicode"]' + - 'list_sum_multi|type_debug in ["str", "unicode"]' - name: add two dicts set_fact: @@ -58,7 +58,7 @@ - assert: that: - 'list_for_strings == "onetwo"' - - 'list_for_strings|type_debug in ["string", "unicode"]' + - 'list_for_strings|type_debug in ["str", "unicode"]' - name: loop through list with int set_fact: diff --git a/test/integration/targets/jinja2_native_types/test_dunder.yml b/test/integration/targets/jinja2_native_types/test_dunder.yml index 798e7710277..46fd4d0a90e 100644 --- a/test/integration/targets/jinja2_native_types/test_dunder.yml +++ b/test/integration/targets/jinja2_native_types/test_dunder.yml @@ -20,4 +20,4 @@ - assert: that: - - 'const_dunder|type_debug in ["string", "unicode"]' + - 'const_dunder|type_debug in ["str", "unicode"]' diff --git a/test/integration/targets/jinja2_native_types/test_none.yml b/test/integration/targets/jinja2_native_types/test_none.yml new file mode 100644 index 00000000000..1d26154c711 --- /dev/null +++ b/test/integration/targets/jinja2_native_types/test_none.yml @@ -0,0 +1,11 @@ +- name: test none + set_fact: + none_var: "{{ yaml_none }}" + none_var_direct: "{{ None }}" + +- assert: + that: + - 'none_var is sameas none' + - 'none_var|type_debug == "NoneType"' + - 'none_var_direct is sameas none' + - 'none_var_direct|type_debug == "NoneType"'