文章目录
展开- Ansible 配置文件变量 Jinja2
- 1.什么是Jinja2
- jinja2是Python的全功能模板引擎
- 2.Jinja2与Ansible的关系
- Ansible通常会使用jinja2模板来修改被管理主机的配置 文件等...在saltstack中同样会使用到jinja2
- Ansible想要识别配置文件中的变量、判断、循 环,只能使用Jinja2语法
- 3.Ansible如何使用Jinja2
- 将原本推送配置文件的[copy]模块换成[template]模块即可
- [template]模块就是一个能识别Jinja2语法模块
- 注意事项
- 4.Jinja2语法
- 注释和调用变量
- 判断
- 拓展:shell:判断
- 拓展: python:判断
- 循环
- 拓展:shell:循环
- 5.Jinja2实战keepalived
- 6.Jinja2实战循环负载均衡配置文件
Ansible 配置文件变量 Jinja2
1.什么是Jinja2
jinja2是Python的全功能模板引擎
2.Jinja2与Ansible的关系
Ansible通常会使用jinja2模板来修改被管理主机的配置 文件等...在saltstack中同样会使用到jinja2
Ansible想要识别配置文件中的变量、判断、循 环,只能使用Jinja2语法
3.Ansible如何使用Jinja2
将原本推送配置文件的[copy]模块换成[template]模块即可
[template]模块就是一个能识别Jinja2语法模块
注意事项
2.Jinja2与Ansible的关系
Ansible通常会使用jinja2模板来修改被管理主机的配置 文件等...在saltstack中同样会使用到jinja2
Ansible想要识别配置文件中的变量、判断、循 环,只能使用Jinja2语法
3.Ansible如何使用Jinja2
将原本推送配置文件的[copy]模块换成[template]模块即可
[template]模块就是一个能识别Jinja2语法模块
注意事项
Ansible想要识别配置文件中的变量、判断、循 环,只能使用Jinja2语法
3.Ansible如何使用Jinja2
将原本推送配置文件的[copy]模块换成[template]模块即可
[template]模块就是一个能识别Jinja2语法模块
注意事项
将原本推送配置文件的[copy]模块换成[template]模块即可
[template]模块就是一个能识别Jinja2语法模块
注意事项
注意事项
Ansible允许jinja2模板中使用条件判断和循环,但是不允许在playbook中使用。
注意:不是每个管理员都需要这个特性,但是有些时候jinja2模块能大大提高效率。
#ansible playbook模板:
判断:when
循环:with_items
#Jinja2模板:
判断:if
循环:for while
4.Jinja2语法
注释和调用变量
# 注释
{# 注释内容 #}
# 调用变量
{{ 调用变量 }}
判断
{# Jinja2:判断 #}
{% if ansible_hostname == 'web01' %}
echo 1
{% endif %}
{% if ansible_hostname == 'web01' %}
echo 1
{% else %}
echo 2
{% endif %}
{% if ansible_hostname == 'web01' %}-
echo 1
{% else if ansible_hostname == 'web02'%}
echo 2
{% else %}
echo 3
{% endif %}
拓展:shell:判断
if [ ansible_hostname == 'web01' ];then
echo 1
echo 2
echo 3
fi
if [];then
echo 1
else
echo 2
fi
if [];then
elif [];then
else
fi
拓展: python:判断
if ansible_hostname == 'web01':
print 1
print 2
if xxx:
else
if xxx:
elif
循环
{# 循环 #}
{% for n in range(1,11) %}
循环体
{% endfor %}
拓展:shell:循环
for xxx in xxx;do
循环体
done
for ip in 5 6 7 8;do
echo 172.16.1.$ip
done
for num in `seq 10`;do
echo $num
done
5.Jinja2实战keepalived
## if判断
global_defs {
router_id {{ ansible_hostname }}
}
vrrp_instance VI_1 {
{% if ansible_hostname == 'web01' %}
state MASTER
priority 150
{% else %}
state BACKUP
priority 100
{% endif %}
interface eth0
virtual_router_id 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
}
- hosts: all
tasks:
- name: 推送keepalived master配置文件
template:
src:/opt/ansible/keepalived/keepalived.conf
dest: /usr/keepalived.conf
# 直接调用变量(使用变量进行计算,然后使用int转成整型)
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
skip_name_resolve
symbolic-links=0
innodb_buffer_pool_size={{
(ansible_memtotal_mb * 0.8)|int }}
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
!includedir /etc/my.cnf.d
# 直接调用变量(字符串切片)
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
skip_name_resolve
symbolic-links=0
server_id={{ ansible_hostname[-1] }}
innodb_buffer_pool_size={{
(ansible_memtotal_mb * 0.8)|int }}
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
!includedir /etc/my.cnf.d
6.Jinja2实战循环负载均衡配置文件
upstream {{ lb_name }} {
{% for num in range(7,10) %}
server 10.0.0.{{ num }}
{% endfor %}
}
server{
listen 80;
server_name {{ wordpress_domain }};
location / {
proxy_pass http://{{ lb_name }}
}
}
- hosts: all
tasks:
- name: 推送keepalived master配置文件
template:
src:/opt/ansible/nginx_php/lb.conf
dest: /opt/lb.conf
# 注释
{# 注释内容 #}
# 调用变量
{{ 调用变量 }}
判断
{# Jinja2:判断 #}
{% if ansible_hostname == 'web01' %}
echo 1
{% endif %}
{% if ansible_hostname == 'web01' %}
echo 1
{% else %}
echo 2
{% endif %}
{% if ansible_hostname == 'web01' %}-
echo 1
{% else if ansible_hostname == 'web02'%}
echo 2
{% else %}
echo 3
{% endif %}
拓展:shell:判断
if [ ansible_hostname == 'web01' ];then
echo 1
echo 2
echo 3
fi
if [];then
echo 1
else
echo 2
fi
if [];then
elif [];then
else
fi
拓展: python:判断
if ansible_hostname == 'web01':
print 1
print 2
if xxx:
else
if xxx:
elif
循环
{# 循环 #}
{% for n in range(1,11) %}
循环体
{% endfor %}
拓展:shell:循环
for xxx in xxx;do
循环体
done
for ip in 5 6 7 8;do
echo 172.16.1.$ip
done
for num in `seq 10`;do
echo $num
done
5.Jinja2实战keepalived
## if判断
global_defs {
router_id {{ ansible_hostname }}
}
vrrp_instance VI_1 {
{% if ansible_hostname == 'web01' %}
state MASTER
priority 150
{% else %}
state BACKUP
priority 100
{% endif %}
interface eth0
virtual_router_id 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
}
- hosts: all
tasks:
- name: 推送keepalived master配置文件
template:
src:/opt/ansible/keepalived/keepalived.conf
dest: /usr/keepalived.conf
# 直接调用变量(使用变量进行计算,然后使用int转成整型)
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
skip_name_resolve
symbolic-links=0
innodb_buffer_pool_size={{
(ansible_memtotal_mb * 0.8)|int }}
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
!includedir /etc/my.cnf.d
# 直接调用变量(字符串切片)
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
skip_name_resolve
symbolic-links=0
server_id={{ ansible_hostname[-1] }}
innodb_buffer_pool_size={{
(ansible_memtotal_mb * 0.8)|int }}
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
!includedir /etc/my.cnf.d
6.Jinja2实战循环负载均衡配置文件
upstream {{ lb_name }} {
{% for num in range(7,10) %}
server 10.0.0.{{ num }}
{% endfor %}
}
server{
listen 80;
server_name {{ wordpress_domain }};
location / {
proxy_pass http://{{ lb_name }}
}
}
- hosts: all
tasks:
- name: 推送keepalived master配置文件
template:
src:/opt/ansible/nginx_php/lb.conf
dest: /opt/lb.conf
{# Jinja2:判断 #}
{% if ansible_hostname == 'web01' %}
echo 1
{% endif %}
{% if ansible_hostname == 'web01' %}
echo 1
{% else %}
echo 2
{% endif %}
{% if ansible_hostname == 'web01' %}-
echo 1
{% else if ansible_hostname == 'web02'%}
echo 2
{% else %}
echo 3
{% endif %}
if [ ansible_hostname == 'web01' ];then
echo 1
echo 2
echo 3
fi
if [];then
echo 1
else
echo 2
fi
if [];then
elif [];then
else
fi
拓展: python:判断
if ansible_hostname == 'web01':
print 1
print 2
if xxx:
else
if xxx:
elif
循环
{# 循环 #}
{% for n in range(1,11) %}
循环体
{% endfor %}
拓展:shell:循环
for xxx in xxx;do
循环体
done
for ip in 5 6 7 8;do
echo 172.16.1.$ip
done
for num in `seq 10`;do
echo $num
done
5.Jinja2实战keepalived
## if判断
global_defs {
router_id {{ ansible_hostname }}
}
vrrp_instance VI_1 {
{% if ansible_hostname == 'web01' %}
state MASTER
priority 150
{% else %}
state BACKUP
priority 100
{% endif %}
interface eth0
virtual_router_id 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
}
- hosts: all
tasks:
- name: 推送keepalived master配置文件
template:
src:/opt/ansible/keepalived/keepalived.conf
dest: /usr/keepalived.conf
# 直接调用变量(使用变量进行计算,然后使用int转成整型)
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
skip_name_resolve
symbolic-links=0
innodb_buffer_pool_size={{
(ansible_memtotal_mb * 0.8)|int }}
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
!includedir /etc/my.cnf.d
# 直接调用变量(字符串切片)
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
skip_name_resolve
symbolic-links=0
server_id={{ ansible_hostname[-1] }}
innodb_buffer_pool_size={{
(ansible_memtotal_mb * 0.8)|int }}
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
!includedir /etc/my.cnf.d
6.Jinja2实战循环负载均衡配置文件
upstream {{ lb_name }} {
{% for num in range(7,10) %}
server 10.0.0.{{ num }}
{% endfor %}
}
server{
listen 80;
server_name {{ wordpress_domain }};
location / {
proxy_pass http://{{ lb_name }}
}
}
- hosts: all
tasks:
- name: 推送keepalived master配置文件
template:
src:/opt/ansible/nginx_php/lb.conf
dest: /opt/lb.conf
if ansible_hostname == 'web01':
print 1
print 2
if xxx:
else
if xxx:
elif
{# 循环 #}
{% for n in range(1,11) %}
循环体
{% endfor %}
拓展:shell:循环
for xxx in xxx;do
循环体
done
for ip in 5 6 7 8;do
echo 172.16.1.$ip
done
for num in `seq 10`;do
echo $num
done
5.Jinja2实战keepalived
## if判断
global_defs {
router_id {{ ansible_hostname }}
}
vrrp_instance VI_1 {
{% if ansible_hostname == 'web01' %}
state MASTER
priority 150
{% else %}
state BACKUP
priority 100
{% endif %}
interface eth0
virtual_router_id 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
}
- hosts: all
tasks:
- name: 推送keepalived master配置文件
template:
src:/opt/ansible/keepalived/keepalived.conf
dest: /usr/keepalived.conf
# 直接调用变量(使用变量进行计算,然后使用int转成整型)
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
skip_name_resolve
symbolic-links=0
innodb_buffer_pool_size={{
(ansible_memtotal_mb * 0.8)|int }}
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
!includedir /etc/my.cnf.d
# 直接调用变量(字符串切片)
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
skip_name_resolve
symbolic-links=0
server_id={{ ansible_hostname[-1] }}
innodb_buffer_pool_size={{
(ansible_memtotal_mb * 0.8)|int }}
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
!includedir /etc/my.cnf.d
6.Jinja2实战循环负载均衡配置文件
upstream {{ lb_name }} {
{% for num in range(7,10) %}
server 10.0.0.{{ num }}
{% endfor %}
}
server{
listen 80;
server_name {{ wordpress_domain }};
location / {
proxy_pass http://{{ lb_name }}
}
}
- hosts: all
tasks:
- name: 推送keepalived master配置文件
template:
src:/opt/ansible/nginx_php/lb.conf
dest: /opt/lb.conf
for xxx in xxx;do
循环体
done
for ip in 5 6 7 8;do
echo 172.16.1.$ip
done
for num in `seq 10`;do
echo $num
done
## if判断
global_defs {
router_id {{ ansible_hostname }}
}
vrrp_instance VI_1 {
{% if ansible_hostname == 'web01' %}
state MASTER
priority 150
{% else %}
state BACKUP
priority 100
{% endif %}
interface eth0
virtual_router_id 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
}
- hosts: all
tasks:
- name: 推送keepalived master配置文件
template:
src:/opt/ansible/keepalived/keepalived.conf
dest: /usr/keepalived.conf
# 直接调用变量(使用变量进行计算,然后使用int转成整型)
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
skip_name_resolve
symbolic-links=0
innodb_buffer_pool_size={{
(ansible_memtotal_mb * 0.8)|int }}
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
!includedir /etc/my.cnf.d
# 直接调用变量(字符串切片)
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
skip_name_resolve
symbolic-links=0
server_id={{ ansible_hostname[-1] }}
innodb_buffer_pool_size={{
(ansible_memtotal_mb * 0.8)|int }}
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
!includedir /etc/my.cnf.d
6.Jinja2实战循环负载均衡配置文件
upstream {{ lb_name }} {
{% for num in range(7,10) %}
server 10.0.0.{{ num }}
{% endfor %}
}
server{
listen 80;
server_name {{ wordpress_domain }};
location / {
proxy_pass http://{{ lb_name }}
}
}
- hosts: all
tasks:
- name: 推送keepalived master配置文件
template:
src:/opt/ansible/nginx_php/lb.conf
dest: /opt/lb.conf
upstream {{ lb_name }} {
{% for num in range(7,10) %}
server 10.0.0.{{ num }}
{% endfor %}
}
server{
listen 80;
server_name {{ wordpress_domain }};
location / {
proxy_pass http://{{ lb_name }}
}
}
- hosts: all
tasks:
- name: 推送keepalived master配置文件
template:
src:/opt/ansible/nginx_php/lb.conf
dest: /opt/lb.conf
Comments | NOTHING