ansible - 来自 jinja2 的 Ansible 模板
问题描述
谁能告诉你在输入名为region1a的模板时如何实现输出name1组中所有区域,输入名为region2b的模板时输出name2组中的所有区域
我这样实现它:有一个启动模板生成的任务:
vars:
AllCountry:
- name1
- name2
name1:
- region1a
- region1b
name2:
- region2a
- region2b
tasks:
- name:
template:
src: "regions.j2"
dest: "{{ item }}.conf"
loop:
- region1a
- region2b
---regions.j2---
regions [{%for count in name1%} "my country = {{count}}", {%end for %}]
这给出了所需的输出,但仅仅是因为它明确指定了要输出的名称(1 或 2)
regions "my country = region1a", "my country = region1b"
对于循环中指定的每个值,必须生成模板配置文件。当您在循环 region1a 和 region1b 中指定值时,模板应该在 region1a.conf 的配置文件中只生成一行
regions "my country = region1a", "my country = region1b"
对于 region1b,在 region1b.conf 的配置文件中只生成一行
regions "my country = region1a", "my country = region1b"
用户 β.εηοιτ.βε 提出了更优化的结构。如果方便,您可以使用它。
vars:
countries:
country1:
regions:
- region1
- region2
- region3
capital: region1
country2:
regions:
- region4
- region5
capital: region5
解决方案
谢谢大家的帮助。尽管如此,我还是设法自己弄清楚了。这是最终的解决方案:
{% for country in AllCountry %}
{% if item in lookup('vars', country) %}{% for count in lookup('vars', country) %} "My country = {{ count }}"{% if not loop.last %},{% endif %}{% endfor %}{% endif %}{% endfor %}
推荐阅读
- ms-access - 如何在 VBA Access 中的这些值也查询的两个记录集之间正确交换字段的值
- javascript - 如何访问数据库中的数据并将其作为数组返回?
- mysql - mysql slave总是显示“Slave_IO_Running: Connecting,Last_IO_Errno: 2061”,然后改成1129
- c++ - 我收到一个 C++ 错误,说我的类构造函数参数类型与我的参数类型不匹配
- java - youtube-api 的“下一曲目”功能很奇怪
- macos - React-Native info 命令抛出错误与 Babel 有关吗?如何解决?
- android-studio - Android Studio 显示错误的文件内容
- mysql - 从 SQL 管理工作室和/或 Power BI 连接到网站上托管的数据库 (phpmyadmin)
- typescript - 如何在 VSC for TS 中为不同的目录创建不同的“库”
- javascript - 使用 Promise 从数据库中获取身份值