ansible模板
模板是一个文本文件,可以用于根据每个主机的不同环境而为生成不同的文件
模板文件中支持嵌套jinja2语言的指令,来实现变量,条件判断,循环等功能
需要使用template模块实现文件的复制到远程主机,但和copy模块不同,复制过去的文件每个主机可以会有所不同
jinja2语言
http://jinja.pocoo.org/
范例:根据主机内核的不同设置nginx配置文件工作进程的数量
1、创建模板文件夹,并把模板文件拷贝到此文件夹下
[root@ubuntu2004 ansible]#mkdir templates
[root@ubuntu2004 ansible]#cp files/nginx.conf templates/nginx.conf.j2
[root@ubuntu2004 ansible]#vim templates/nginx.conf.j2
......
worker_processes {{ ansible_processor_vcpus }};
......
2、更改playbook文件
[root@ubuntu2004 ansible]#vim install_nginx_handlers_notify_tags_templates.yaml
- hosts: 10.0.0.18
remote_user: root
tasks:
- name: 安装包
yum:
name: nginx
state: present
- name: 配置文件 #不再使用copy模块,使用template模块
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify: restart nginx
- name: 数据文件
copy:
src: index.html
dest: /usr/share/nginx/html/index.html
- name: 启动服务
service:
name: nginx
state: started
enabled: yes
handlers:
- name: restart nginx
service: name=nginx state=restarted
满足配置文件变动时执行handlers,重启nginx
template中使用流程控制for和if
范例:for循环
[root@ubuntu2004 ansible]#vim for.yaml
- hosts: webservers
tasks:
- name: config file
template:
src: test.conf.j2
dest: /tem/test.conf
[root@ubuntu2004 ansible]#vim templates/test.conf.j2
{% for i in range(1,10) %}
server_name web{{i}};
{% endfor %}
[root@ubuntu2004 ansible]#ansible-playbook for.yaml
生成结果:
server_name web1;
server_name web2;
server_name web3;
server_name web4;
server_name web5;
server_name web6;
server_name web7;
server_name web8;
server_name web9;
范例:if条件判断
#playbook
templnginx6.yml
- hosts: webservers
remote_user: root
vars:
nginx_vhosts:
- web1:
listen: 8080
root: "/var/www/nginx/web1/"
- web2:
listen: 8080
server_name: "web2.wang.org"
root: "/var/www/nginx/web2/"
- web3: listen: 8080
server_name: "web3.wang.org"
root: "/var/www/nginx/web3/"
tasks:
- name: template config to
template: src=nginx.conf5.j2 dest=/data/nginx5.conf
#模板
templates/nginx.conf6.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 %}
#生成的结果
server {
listen 8080
root /var/www/nginx/web1/
}
server {
listen 8080
server_name web2.wang.org
root /var/www/nginx/web2/
} server {
listen 8080
server_name web3.wang.org
root /var/www/nginx/web3/
}
标签:name,--,ansible,server,nginx,Ansible,conf,root,模板
From: https://blog.51cto.com/mfc001/6405639