[英]How to append a string to each item in a list to display it in a template?
[英]Add new line to template for each item in a list
給定以下示例列表和 Jinja 模板:
列表:
list:
- foo
- bar
神社模板:
{% for key in list %}
results:
- "{{ key }}"
{% endfor %}
我能夠生成以下 output:
results:
- foo
results:
- bar
對於列表中的每個項目,我如何代替 append 一行到模板以產生此結果?
results:
- foo
- bar
Ansible 是否可以不使用lineinfile
之類的東西? 我或多或少地嘗試復制可能如下所示的Helm 范圍過濾器:
results:
{{- range .Values.list }}
- {{ . }}
{{- end }}
join
過濾器似乎讓我更接近了一點。 例如:
results:
- "{{ list | join('\n- ') }}"
產生以下內容。 但它在語法上還不正確:
results:
- "foo
- bar"
給定清單
list: - foo - bar
問: “產生這個結果!”
results: - foo - bar
A:還有更多選擇:
- copy: dest: /tmp/test.yml content: | results: {% for key in list %} - {{ key }} {% endfor %}
給
shell> cat /tmp/test.yml results: - foo - bar
您可以將模板放入文件中
shell> cat templates/test.yml.j2 results: {% for key in list %} - {{ key }} {% endfor %}
然后,模板模塊給出相同的結果
- template: dest: /tmp/test.yml src: test.yml.j2
shell> cat /tmp/test.yml
results:
- foo
- bar
- copy: dest: /tmp/test.yml content: | results: {% for key in list %} {{ '{}- {}'.format(tab, key) }} {% endfor %} vars: tab: "{{ '\t' }}"
標簽間距將取決於尋呼機
shell> cat /tmp/test.yml results: - foo - bar
它很難看,但我使用join
過濾器和一些轉義序列得到了它。 這個:
results:
- "{{ list | join('\"\n - \"') }}"
產生以下內容:
results:
- "foo"
- "bar"
為了未來的谷歌員工清楚起見,拆除它......
list | join('')
list | join('')
- 檢索可變列表並使用以下定界符序列“加入”它們,這會以迂回的方式有效地引入列表項
\"
- 在項目末尾添加一個"
字符
\n
- 在 4 個空格中添加換行符和制表符。 有關更多信息,請參見腳注。
- \"
- 在添加每個連續的列表項之前添加一個新的- "
。
不確定是否可以在不將每個模板化列表項用引號引起來的情況下實現這一點。 但這在語法上是正確的,所以我將保留它。
腳注:如果您使用\t
而不是添加空白字符,Ansible 將拋出以下錯誤:
味精:
加載 resource_definition 時出錯:掃描下一個標記時發現無法啟動任何標記的字符“\t”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.