yaml多行语法,没有换行符的换行符

Rus*_*ley 4 ansible

我有这样的字典:

env: qat
target_host: >
         {%if env in ['prd'] %}one
         {%elif env in ['qat','stg'] %}two
         {%else%}three
         {%endif%}
Run Code Online (Sandbox Code Playgroud)

当我打印它时,我得到:

ok:[localhost] => {"var":{"target_host":"two"}}

所以它将行末尾的\n转换为空格.这正是应该做的.但是在这种情况下,我只是试图分散线条以使if/else的结构更具可读性,而且我不想要额外的空间.如果我把它全部放在没有>的一行上,它可以正常工作但我希望能够使它成为多行,这样它更容易阅读.

我发现这个问题 有没有办法表示一个长字符串,在YAML文档中的多行上没有任何空格?

所以我能做到:

env: qat
target_host: "{%if env in ['prd'] %}one\
              {%elif env in ['qat','stg'] %}two\
              {%else%}three\
              {%endif%}"
Run Code Online (Sandbox Code Playgroud)

这给出了理想的结果.

无论如何要实现这一目标而不是更加混乱吗?

udo*_*dan 10

在Jinja*中,您可以通过在块的开头/结尾添加减号来删除空格/换行符.这应该做的伎俩:

env: qat
target_host: >
         {%if env in ['prd'] -%}one
         {%- elif env in ['qat','stg'] -%}two
         {%- else -%}three
         {%- endif%}
Run Code Online (Sandbox Code Playgroud)

*Jinja 2是Ansible使用的模板引擎.


小智 5

也许您需要的是|文字?

env: qat
target_host: |
         {%if env in ['prd'] %}one
         {%elif env in ['qat','stg'] %}two
         {%else%}three
         {%endif%}
Run Code Online (Sandbox Code Playgroud)

这不会将新行"折叠"到空格中,如果选择的那样 >

  • 这个给我加了“\n” (3认同)