2015-06-25 35 views
2

我有這樣的事情詞典:YAML多行語法空間轉換

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

當我打印,我得到:

OK:本地主機] => { 「變種「:{ 「target_host」: 「兩個」 }}

所以它是在該行的末尾轉換\ n至一個溫泉CE。這正是它應該做的。然而,在這種情況下,我只是試圖分解線條,以使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%}" 

這給出了期望的結果。

無論如何要做到這一點,不要把它弄得更糟?

+0

的可能的複製[YAML中,我該如何打破多行字符串?](https://stackoverflow.com/questions/3790454/in-yaml-how-do-i-break-a-string-over-multiple-lines) –

回答

6

在Jinja *中,可以通過在塊的開始/結尾添加一個減號來去除空格/換行符。這應該做的伎倆:

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

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

+0

完美!正是我想要的。 –

5

也許你需要的是|文字?

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

這不是「摺疊」換行符爲空格,如oposed到>