摆脱 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
到目前为止,我已经查看了大约 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