摆脱 Ansible Jinja2 if 语句中的尾随 \n

Getting rid of trailing \n in Ansible Jinja2 if statement

到目前为止,我已经查看了大约 10 个 Whosebug 帖子,但都没有解决我的问题。我正在尝试将变量设置为预定义值或新生成的值。为此,我正在使用 Ansible Jinja2 if 语句。

我确实尝试使用 Jinja2 空白控件 ({%- -%}) 并且它们适用于所描述的空白。 | trim 也没有用。尾随 \n 仍然存在。

问题: 使用 Ansible Jinja2 if 时,它一直在字符串中添加 "\n"

样本:

---

- name: Example Playbook
  hosts: localhost
  
  tasks:
    - name: Set password
      set_fact:
        password: "Testing"

    # Supposed to go route {{ password }}
    - name: Set Password 1
      set_fact:
        password1: >
          {% if password is defined -%}
            {{ password }}
          {%- else -%}
            {{ lookup('password', '/dev/null length=10 chars=ascii_letters,digits') }}
          {%- endif %}

    # Supposed to go route {{ lookup... }}
    - name: Set Password 2
      set_fact:
        password2: >
          {% if notexist is defined -%}
            {{ password }}
          {%- else -%}
            {{ lookup('password', '/dev/null length=10 chars=ascii_letters,digits') }}
          {%- endif %}

    # Directly setting password3 via {{ lookup... }}
    - name: Set Password 3
      set_fact:
        password3: "{{ lookup('password', '/dev/null length=10 chars=ascii_letters,digits') }}"

    - name: Output Passwords
      debug:
        msg: "Password1: '{{ password1 }}', Password2: '{{ password2 }}', Password3: '{{ password3 }}'"

...

输出:

TASK [Output Passwords] ****************************************************************************************************************
ok: [localhost] => {
    "msg": "Password1: 'Testing\n', Password2: 'DawDj7sXEb\n', Password3: 'F9rHw3StT6'"
}

- 添加到 if 语句确实会删除空格,但不会删除 '\n'。我需要没有换行符的字符串。

感谢您的帮助!

好的,这已经解决了。

这不是 Jinja2 造成的,而是 YAML 多行处理造成的 >。我只是在 > 中添加了一个 -,导致 >-\n 消失了。

参见:https://symfony.com/doc/current/components/yaml/yaml_format.html