我正在寻找一种方法来填充作为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模块或功能...或技巧吗?
答案 0 :(得分:0)
似乎使用Jinja2过滤器对变量(事实)进行任何评估都可以做到。例如,给定问题字典,将其存储在变量manifest
中,并将其他变量作为字典值中的模板,则以下表达式会将变量的值替换为字典值:
- hosts: localhost
tasks:
- name: evaluate dictionary
set_fact:
manifest: "{{ manifest }}"
请注意,如果未定义模板中使用的变量,则将undefined
字符串替换为值。