【发布时间】:2019-01-08 13:03:20
【问题描述】:
我正在寻找一种方法来填充作为 Ansible 变量值一部分的 Jinja2 模板。我有如下所示的 YAML 文件:
metadata:
name: {{ metadata_name }}-prod
labels:
app: {{ app_name }}
env: {{ load_zone }}
在我的剧本中,我将文件读入变量manifest:
name: load file into variable
include_vars:
file: "/etc/configs/mydata"
name: manifest
现在我需要一种用实际值替换 manifest 变量中的 Jinja2 模板的方法。例如,假设metadata_name 的值是“my_app”,app_name 是“我的应用程序”,load_zone 是“us_east”,那么
而不是 manifest 值,即:
metadata:
name: {{ metadata_name }}-prod
labels:
app: {{ app_name }}
env: {{ load_zone }}
我想得到这个值:
metadata:
name: my_app-prod
labels:
app: My Application
env: us_east
任何人都可以提供有关 Ansible 模块或功能...或技巧的建议吗?
【问题讨论】:
-
这 3 个项目是 static 还是在剧本运行时计算出来的?也就是说:
load_zone是否会随着时间而变化,或者主机以已知的load_zone开始,而您只需将该信息提供给您的剧本? -
我不确定我是否理解您的问题。我已经编辑了这个问题,以提供更好的例子来说明我想要实现的目标。假设模板中的变量总是有值是安全的。
-
好的,那么也许我不理解您的问题:
metadata:业务是您正在阅读的文件、您尝试创建的文件还是 @ 987654334@ 在你的剧本中代表dict? -
为了缩小问题范围,我有一个事实是字典(从文件映射)。一些字典的值是 jinja2 模板。我正在寻找一种方法来评估这些模板,以便字典的值将被评估 jinja2 表达式而不是模板。