模板引擎 (Jinja2)
Ansible使用Jinja2模板引擎来启用动态表达式以及对变量和事实的访问。可以使用模板模块进行模板化。例如,可以为配置文件创建一个模板,然后将该配置文件部署到多个环境,并为每个环境提供正确的数据(IP地址、主机名、版本)。也可以直接在剧本中使用模板化,通过模板化任务名称等等。可以使用Jinja2中包含的所有标准过滤器和测试。Ansible包含额外的专用过滤器用于选择和转换数据,用于评估模板表达式的测试,以及查找插件用于检索来自外部源(例如文件、API和数据库)的数据以用于模板化。
所有模板化操作都在Ansible控制节点上执行,在任务发送到目标机器并执行**之前**。这种方法最大限度地减少了对目标的软件包需求(只有控制节点需要jinja2)。它还限制了Ansible传递到目标机器的数据量。Ansible在控制节点上解析模板,并且只将每个任务所需的信息传递到目标机器,而不是将控制节点上的所有数据都传递过去并在目标机器上进行解析。
注意
模板模块使用的文件和数据必须使用utf-8编码。
Jinja2示例
在这个例子中,我们想将服务器主机名写入其/tmp/hostname。
我们的目录如下所示
├── hostname.yml
├── templates
└── test.j2
我们的hostname.yml
---
- name: Write hostname
hosts: all
tasks:
- name: write hostname using jinja2
ansible.builtin.template:
src: templates/test.j2
dest: /tmp/hostname
我们的test.j2
My name is {{ ansible_facts['hostname'] }}