模板化 (Jinja2)

Ansible 使用 Jinja2 模板引擎来实现动态表达式,并访问 变量事实。您可以使用 template 模块 对模板进行模板化。例如,您可以为配置文件创建一个模板,然后将该配置文件部署到多个环境,并为每个环境提供正确的数据(IP 地址、主机名、版本)。您也可以直接在剧本中进行模板化,对任务名称等进行模板化。您可以使用 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 剧本

剧本简介

剧本技巧

剧本技巧和窍门

Jinja2 文档

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

用户邮件列表

有问题吗?欢迎到 Google 群组!

实时聊天

如何加入 Ansible 聊天频道