jinja2 templating - Ansible



在Ansible中,我目前有这样的变量设置


container_a_version: 1
container_b_version: 6
container_c_version: 3
container_d_version: 2
...

containers:
- container_a
- container_b
- container_c
- container_d  
... 

每个容器都有自己的模板文件,其中有一行类似于


image: registry.sportpesa.com/sportpesa/global/container-a:{{ container_a_version }}

我的战术手册


- name: Copy templates
template:
src: templates/docker-compose-{{ item }}.yml
dest: /srv/docker-compose-{{ item }}.yml
loop: "{{ containers }}"

如果我只想部署容器a和c。我将变量更改为这个


containers:
- container_a
# - container_b
- container_c
# - container_d 

我想做的是将我的变量压缩为只有1个变量,就像这个一样

containers:
- { name: a, version: 1 }
- { name: b, version: 6 }
- { name: c, version: 3 }
- { name: d, version: 2 }

但是,我不确定如何在我的模板中调用容器版本。这可能吗?

在循环中,您可以调用循环项的字段,如下所示:

name: {{ item.name }}
version: {{ item.version }}

我想你必须把这个放在你的特定上下文中。如有必要,请查看此文档以获取有关jinja模板的更多详细信息。

将数据放入字典

containers:
a: 1
b: 6
c: 3
d: 2
containers_enabled: [a, c]

并且仅迭代启用的容器。例如

- debug:
msg:
- "{{ src }}"
- "{{ dest }}"
- "{{ image }}"
loop: "{{ containers_enabled }}"
vars:
src: "templates/docker-compose-container_{{ item }}.yml"
dest: "/srv/docker-compose-container_{{ item }}.yml"
image: "container-{{ item }}{{ containers[item] }}"

未测试

最新更新