如何填充Ansible变量中存储的Jinja2模板?

时间:2019-01-08 13:03:21

标签: ansible jinja2

我正在寻找一种方法来填充作为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模块或功能...或技巧吗?

1 个答案:

答案 0 :(得分:0)

似乎使用Jinja2过滤器对变量(事实)进行任何评估都可以做到。例如,给定问题字典,将其存储在变量manifest中,并将其他变量作为字典值中的模板,则以下表达式会将变量的值替换为字典值:

- hosts: localhost
  tasks:
    - name: evaluate dictionary
      set_fact:
        manifest: "{{ manifest }}"

请注意,如果未定义模板中使用的变量,则将undefined字符串替换为值。