模板化 (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'] }}
另请参阅
- Ansible 剧本
剧本介绍
- 剧本技巧
剧本的技巧和窍门
- Jinja2 文档
Jinja2 文档,包括模板的语法和语义
- 沟通
有问题吗?需要帮助吗?想分享你的想法吗?请访问 Ansible 沟通指南