[英]How to parse ansible vars dict with jinja2
假設我有這樣的主機特定變量:
projects:
- project1:
urls:
- "https://foo.bar"
- "https://foo2.bar2"
names:
- "some_name"
address:
city1:
- "street1"
- "street2"
city2:
- "streetX"
而且我必須使用 jinja2 模板生成文件(每個項目)。 我將使用所有嵌套變量...
我應該改變我的 vars dict 結構還是這個可以..? 我怎樣才能得到所有這些嵌套變量?
我試過了:
- name: Create projects
ansible.builtin.template:
src: project.yml.j2
dest: "/client/projects/{{ item | dict2items| json_query('[0].key') }}.yaml"
loop: "{{ projects }}"
然后,我在模板文件中迷失了所有循環和這些 json_queries 的 vars 長度......
您的實際結構沒有多大意義。 您要么想要使用列表或字典,而不是使用具有 null 值的鍵之間的東西
我懷疑您正在尋找字典:
projects:
project1:
urls:
- "https://foo.bar"
- "https://foo2.bar2"
names:
- "some_name"
address:
city1:
- "street1"
- "street2"
city2:
- "streetX"
project2:
# etc.
從那里,鑒於您的文件擴展名為 yaml,我猜您想要一個看起來像這個project.yml.j2
文件的模板:
---
{{ item.value | to_yaml }}
您將像這樣調用它來創建一個以每個項目命名的文件
- name: Create projects
template:
src: project.yml.j2
dest: "/client/projects/{{ item.key') }}.yaml"
loop: "{{ projects | dict2items }}"
請注意,對於簡單的事情,您可以通過直接在content
選項中使用copy
和流式傳輸內容來消除外部模板文件的負擔:
- name: Create projects
copy:
dest: "/client/projects/{{ item.key') }}.yaml"
content: "{{ item.value | to_yaml }}"
loop: "{{ projects | dict2items }}"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.