Jinja2 文档:https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_templating.html
Ansible 的 template
模块用于将 Jinja2 模板文件(.j2
文件)渲染并生成目标文件。它的主要功能是根据变量动态生成配置文件或其他内容,并将其分发到目标主机。template
模块在管理配置文件或生成动态内容时非常有用。
基本语法
- name: Render a template to a file ansible.builtin.template: src: template_file.j2 dest: /path/to/destination/file owner: root group: root mode: '0644'
主要参数
src
: 指定模板文件的路径。通常是相对于roles
或playbook
目录中的路径。dest
: 指定渲染后的文件保存路径。文件会被拷贝到目标主机上的这个路径。owner
: 设置生成文件的所有者。group
: 设置生成文件的所属组。mode
: 设置文件的权限模式(例如0644
)。
典型用法
1. 简单的模板渲染
- name: Render an nginx configuration file ansible.builtin.template: src: templates/nginx.conf.j2 dest: /etc/nginx/nginx.conf owner: root group: root mode: '0644'
这个任务会将 nginx.conf.j2
模板渲染并生成到目标主机的 /etc/nginx/nginx.conf
,文件的所有者和组为 root
,权限为 0644
。
2. 使用变量的模板渲染
假设在模板 nginx.conf.j2
中使用了一些变量,例如:
server { listen {{ nginx_port }}; server_name {{ nginx_server_name }}; location / { proxy_pass http://{{ proxy_backend }}; } }
在 playbook 中,可以定义这些变量,然后使用 template
模块来渲染模板:
- hosts: webservers vars: nginx_port: 80 nginx_server_name: example.com proxy_backend: backend.example.com tasks: - name: Render nginx configuration with variables ansible.builtin.template: src: templates/nginx.conf.j2 dest: /etc/nginx/nginx.conf
在目标主机上,nginx.conf
文件将会被渲染为:
server { listen 80; server_name example.com; location / { proxy_pass http://backend.example.com; } }
3. 使用 validate
参数
validate
参数用于在模板被渲染并写入目标文件前进行验证。常用于确保配置文件在部署前是有效的。例如,在渲染 nginx
配置文件时,可以使用 nginx -t
来验证:
- name: Render and validate nginx configuration ansible.builtin.template: src: templates/nginx.conf.j2 dest: /etc/nginx/nginx.conf validate: '/usr/sbin/nginx -t -c %s'
%s
: 会被替换为生成的文件路径。
如果验证失败,Ansible 会停止执行并报告错误,避免部署错误的配置文件。
template
和 copy
的区别
template
模块: 用于渲染 Jinja2 模板文件,允许在文件中使用变量、逻辑和控制结构。copy
模块: 用于直接复制文件,不进行任何模板渲染。
使用 template
模块的好处
- 动态生成文件: 根据上下文和变量动态生成配置文件或其他内容。
- 逻辑控制: 可以在模板中使用 Jinja2 语法,进行条件判断、循环等复杂操作。
- 配置管理: 更灵活地管理和部署不同环境下的配置文件。
标签:文件,template,渲染,nginx,ansible,conf,模板 From: https://www.cnblogs.com/rtnb/p/18375141