[英]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.