模板引擎 (Jinja2)

Ansible使用Jinja2模板引擎来实现动态表达式以及对变量事实的访问。您可以使用template模块进行模板化。例如,您可以为配置文件创建一个模板,然后将该配置文件部署到多个环境,并为每个环境提供正确的数据(IP地址、主机名、版本)。您还可以在playbook中直接使用模板化,例如对任务名称进行模板化等等。您可以使用Jinja2中包含的所有标准过滤器和测试。Ansible包含其他专门用于选择和转换数据的过滤器、用于评估模板表达式的测试以及查找插件,用于从外部来源(如文件、API和数据库)检索数据并在模板中使用。

所有模板化操作都在Ansible控制节点上执行,任务发送到目标机器并执行**之前**完成。这种方法最大限度地减少了对目标机器的软件包要求(jinja2仅在控制节点上需要)。它还限制了Ansible传递到目标机器的数据量。Ansible在控制节点上解析模板,并且只将每个任务所需的信息传递到目标机器,而不是将控制节点上的所有数据都传递过去并在目标机器上进行解析。

注意

template模块使用的文件和数据必须使用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'] }}

另请参阅

Ansible playbook

Playbook入门

Playbook技巧

Playbook技巧和窍门

Jinja2文档

Jinja2文档,包括模板的语法和语义

联系方式

有问题?需要帮助?想分享你的想法?请访问Ansible联系指南