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

时间:2015-06-25 20:28:36

标签: ansible

我有这样的词典:

def zip_folder():
  zf = zipfile.ZipFile(xbmc.translatePath(os.path.join(home, 'plugin.video.1addon.zip')), "w")
  for dirname, subdirs, files in os.walk("plugin.video.1addon"):
    zf.write(dirname)
    for filename in files:
      zf.write(os.path.join(dirname, filename))
  zf.close()

当我打印它时,我得到:

  

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

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

我发现了这个问题 Is there a way to represent a long string that doesnt have any whitespace on multiple lines in a YAML document?

所以我能做到:

env: qat
target_host: >
         {%if env in ['prd'] %}one
         {%elif env in ['qat','stg'] %}two
         {%else%}three
         {%endif%}

这会产生预期的结果。

无论如何要做到这一点而不会让它更加混乱吗?

2 个答案:

答案 0 :(得分:10)

在Jinja *中,您可以通过在块的开头/结尾添加减号来删除空格/换行符。这应该可以解决问题:

env: qat
target_host: >
         {%if env in ['prd'] -%}one
         {%- elif env in ['qat','stg'] -%}two
         {%- else -%}three
         {%- endif%}

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

答案 1 :(得分:5)

您可能需要的是|字面量?

env: qat
target_host: |
         {%if env in ['prd'] %}one
         {%elif env in ['qat','stg'] %}two
         {%else%}three
         {%endif%}

这不会折叠'空格中的换行符,显示为>