ansible template
ansible template
template介绍
Jinja是基于Python的模板引擎。template类是Jinja的另一个重要组件,可以看作一个编译过的模块文件,用来生产目标文本,传递Python的变量给模板去替换模板中的标记。
他与ansible的copy模块功能相似,都是拷贝文件到目标机器,唯一区别是
- copy:不支持变量
- template:支持变量,可以把配置文件根据变量渲染后再发送到目标机器
实例
实例1
cat temnginx.yaml
---
- hosts: test
remote_user: root
vars:
nginx_vhosts:
- listen: 80
tasks:
- name: config file
template: src=./template/nginx.conf.j2 dest=/data/nginx.conf
cat template/nginx.conf.j2
{% for vhost in nginx_vhosts %}
server {
listen {{ vhost.listen }}
}
{% endfor %}
生成的结果
cat nginx.conf
server {
listen 80
}
实例2
cat temnginx2.yaml
---
- hosts: test
remote_user: root
vars:
nginx_vhosts:
- 81
- 82
- 83
tasks:
- name: template config
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
cat nginx.conf.j2
{% for vhost in nginx_vhosts %}
server {
listen {{ vhost.listen }}
}
{% endfor %}
生成的结果
server {
listen 81
}
server {
listen 82
}
server {
listen 83
}
实例3
cat temnginx3.yaml
---
- hosts: test
remote_user: root
vars:
nginx_vhosts:
- listen: 8080
server_name: "web1.baidu.com"
root: /var/www/nginx/web1/
- listen: 8081
server_name: "web1.baidu.com"
root: "/var/www/nginx/web2/"
tasks:
- name: template config
template: src=./template/nginx.conf2.j2 dest=/data/nginx2.conf
cat nginx.conf2.j2
{% for vhost in nginx_vhosts %}
server{
listen {{ vhost.listen }}
server_name {{ vhost.server_name }}
root {{ vhost.root }}
}
{% endfor %}
实例4
在模板文件中还可以使用if条件判断,决定是否生成相关的配置信息
cat templnginx4.yaml
- hosts: test
remote_user: root
vars:
nginx_vhosts:
- web1:
listen: 8080
root: "/var/www/nginx/web1/"
- web2:
listen: 8080
server_name: "web2.baidu.com"
root: "/var/www/nginx/web2/"
- web3:
listen: 8080
server_name: "web3.baidu.com"
root: "/var/www/nginx/web3/"
tasks:
- name: template config to
template: src=./template/nginx.conf3.j2 dest=/data/nginx3.conf
cat template/nginx.conf3.j2
{% for vhost in nginx_vhosts %}
server {
listen {{ vhost.listen }}
{% if vhost.server_name is defined %}
server_name {{ vhost.server_name }}
{% endif %}
root {{ vhost.root }}
}
{% endfor %}
输出结果:
cat nginx3.conf
server {
listen 8080
root /var/www/nginx/web1/
}
server {
listen 8080
server_name web2.baidu.com
root /var/www/nginx/web2/
}
server {
listen 8080
server_name web3.baidu.com
root /var/www/nginx/web3/
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!