一、jinja2概述
jinja2是Python的全功能模板引擎,就是一个配置文件的模板,支持变量
Ansible通常会使用jinja2模板来修改被管理主机的配置文件等...在saltstack中同样会使用到jinja2
如果在100 台主机上安装nginx,每台nginx的端口都不一样,如何解决?
使用Ansible的jinja2模板也就是使用template模块,该模块和copy模块一样,都是将文件复制到远端主机上去,但是区别在于,template模块可以获取到文件中的变量,而copy则是原封不动的把文件内容复制过去。之前我们在推送rsync的backup脚本时,想把脚本中的变量名改成主机名,如果使用copy模块则推送过去的就是{{ ansible_fqdn }},不变,如果使用template,则会变成对应的主机名
Ansible允许jinja2模板中使用条件判断和循环,但是不允许在playbook中使用。
ps: 不是每个管理员都需要这个特性,但是有些时候jinja2模块能大大提高效率。
二、jinja2使用方式
{{ EXPR }} 输出变量值,会输出自定义的变量值或facts
1. playbook文件使用template 模块
2. 模板文件里面变量使用{{名称}},比如{{PORT}}或使用facts
三、jinja2模板逻辑判断
1.循环
[root@m01 ~]
for i in `seq 10`
do
echo $i
done
{% for i in range (10 ) %}
echo $i
{% endfor %}
2.判断
[root@m01 ~]
age=$1
if [ $age -lt 18 ];then
echo "小姐姐"
else
echo "大妈"
fi
{% if EXPR %}
{% elif EXPR %}
{% else %}
{% endif %}
{
四、jinja2模板测试
1.登录文件测试
[root@m01 ~]
欢迎来到 {{ ansible_fqdn }}
该服务器总内存: {{ ansible_memtotal_mb }} MB
该服务器剩余内存: {{ ansible_memfree_mb }} MB
[root@m01 ~]
- hosts: all
tasks:
- name: Config motd
template:
src: /root/m otd.j2
dest: /etc/m otd
[root@m01 ~]
[root@backup ~]
欢迎来到 backup
该服务器总内存: 972 MB
该服务器剩余内存: 582 MB
[root@db01 ~]
欢迎来到 db01
该服务器总内存: 972 MB
该服务器剩余内存: 582 MB
2.使用jinja2模板管理mysql
#配置模板
[root@m01 ~ ]# vim /etc/my.j2
[mysqld ]
datadir=/var /lib/mysql
socket=/var /lib/mysql/mysql.sock
symbolic-links=0
{% if ansible_memtotal_mb == 972 %}
innodb_log_buffer_poll_size= 800 M
{% elif ansible_memtotal_mb == 1980 %}
innodb_log_buffer_poll_size= 1600 M
{% endif %}
... ...
#配置剧本
[root@m01 ~ ]# vim mysql.yml
- hosts: db_group
tasks:
- name: Config mysql
template:
src: /etc/my.cnf
dest: /etc/
#执行
[root@m01 ~ ]# ansible-playbook mysql.yml
#查看
[root@db01 ~ ]# vim /etc/my.cnf
[mysqld ]
innodb_log_buffer_poll_size= 800 M
[root@db03 ~ ]# vim /etc/my.cnf
[mysqld ]
innodb_log_buffer_poll_size= 1600 M
五、jinja2模板配置负载均衡
1.正经的配置
[root@m01 ~]
upstream web {
server 172.16 .1.7 ;
server 172.16 .1.8 ;
}
server {
listen 80 ;
server_name linux.wp.com;
location / {
proxy_pass http:// web;
include proxy_params;
}
}
2.不正经的配置
[root@ m01 ~ ]# vim conf/ proxy.j2
upstream {{ server_name }} {
{% for i in range(7 ,9 ) % }
server {{ ip }}.{{ i }};
{% endfor % }
}
server {
listen {{ port }};
server_name {{ server_name }};
location / {
proxy_pass http:
include proxy_params;
}
}
3.配置额外变量
[root@m01 ~]
ip: 172.16.1
web: web
port: 80
server_name: linux.wp.com
4.配置剧本推送
[root@m01 ~ ]
- hosts: lb01
vars_files: upstream_vars.yml
tasks:
- name: Config SLB
template:
src: /root/conf/proxy.j2
dest: /etc/nginx/conf.d/proxy.conf
- name: Restart SLB Nginx
systemd:
name: nginx
state: restarted
六、jinja2模板配置keepalived
1.配置keepalived配置文件(正经配置)
#keepalived master 配置文件
global_defs {
router_id lb01
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 50
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0 .0 .3
}
}
#keepalived backup配置文件
global_defs {
router_id lb02
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 50
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0 .0 .3
}
}
2.配置keepalived配置文件(不正经配置)
[root@ m01 ~ ]# vim conf/ keepalived.j2
global_defs {
router_id {{ ansible_fqdn }}
}
vrrp_instance VI_1 {
{% if ansible_fqdn == "lb01" % }
state MASTER
priority 100
{% else % }
state BACKUP
priority 90
{% endif % }
interface eth0
virtual_router_id 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
{{ vip }}
}
}
3.配置变量
[root@m01 ~]
ip: 172.16.1
web: web
port: 80
server_name: linux.wp.com
vip: 10.0.0.3
4.配置主机清单
#配置主机清单
[root@m01 ~ ]# vim /etc/ansible/hosts
[slb ]
lb01 ansible_ssh_pass='1'
lb02 ansible_ssh_pass='1'
#配置hosts
[root@m01 ~ ]# vim /etc/hosts
....
172.16 .1 .5 lb02
5.编写keepalived剧本
[root@m01 ~ ]
- hosts: slb
vars_files: upstream_vars.yml
tasks:
- name: Install keepalived
yum:
name: keepalived
state: present
- name: Config keepalive
template:
src: /root/conf/keepalived.j2
dest: /etc/keepalived/keepalived.conf
- name: Start keepalived
systemd:
name: keepalived
state: restarted
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步