清除Ansible Jinja2 if语句中的尾随\n

清除Ansible Jinja2 if语句中的尾随\n,ansible,jinja2,newline,Ansible,Jinja2,Newline,到目前为止,我已经查看了大约10个stackoverflow帖子,但没有任何东西能够解决我的问题。我试图将变量设置为预定义值或新生成的值。为此,我使用Ansible Jinja2 if语句 我确实尝试过使用Jinja2空白控件({%-%}),它们对空白起作用,如前所述|修剪也不起作用。尾随的\n仍然存在 问题:当使用Ansible Jinja2if时,它会不断向字符串添加“\n” 示例: --- - name: Example Playbook hosts: localhost

到目前为止,我已经查看了大约10个stackoverflow帖子,但没有任何东西能够解决我的问题。我试图将变量设置为预定义值或新生成的值。为此,我使用Ansible Jinja2 if语句

我确实尝试过使用Jinja2空白控件
({%-%})
,它们对空白起作用,如前所述<代码>|修剪也不起作用。尾随的
\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'"
}
输出:

---

- 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
就消失了

见: