第四章(jianja2模板用法)
第一节:jinja2介绍
Jinja2是基于python的模板引擎,功能比较类似于PHP的smarty,J2ee的Freemarker和velocity。它能完全支持unicode,并具有集成的沙箱执行环境,应用广泛。jinja2使用BSD授权
第二节:jianja2判断语句
{% if EXPR %}...{% elif EXPR %}...{% endif%} 作为条件判断
1.EXAMPLE:
{% if ansible_fqdn == "web01" %}
echo "123"
{% elif ansible_fqdn == "web02" %}
echo "456"
{% else %}
echo "789"
{% endif %}
2.jianja2渲染keepalived配置文件
【第四章(jianja2模板用法)】
[root@m01 /roles]# cat keepalived/templates/keepalived.conf.j2
global_defs {
router_id {{ ansible_hostname }}
}
?
vrrp_script check_web {
script "/server/scripts/check_web.sh"
interval 5
weight 50
}
?
{% if ansible_hostname == "lb03" %}
vrrp_script check_vip {
script "/server/scripts/check_vip.sh"
interval 5
weight 50
}
{% endif %}
?
vrrp_instance VI_1 {
state {{ state }}
interface eth0
virtual_router_id 50
priority {{ priority }}
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
track_script {
check_web
{% if ansible_hostname == "lb03" %}
check_vip
{% endif %}
}
}
第三节:jianja2循环语句 1.EXAMPLE
{% for i in EXPR %}...{% endfor%} 作为循环表达式
{% for i in range(1,10) %}
server 172.16.1.{{i}};
{% endfor %}
{# COMMENT #} 表示注释
2.jinja2 渲染 nginx_proxy配置文件
[root@m01 project1]# cat kod_proxy.conf.j2
upstream web_pools {
{% for i in range(1,10) %}
server 172.16.1.{{i}}:{{http_port}} weight=2;
{% endfor %}
}
?
server {
listen 80;
server_name web_pools;
location / {
proxy_pass http://{{ server_name }};
include proxy_params;
}
}
第四节:jinja循环高级用法 1.循环inventory主机清单(hosts文件)中的webserver组,将提取到的IP赋值给i变量.
upstream web_pools {
{% for i in groups['webserver'] %}
server {{i}}:80;
{% endfor %}
2.官方举例
{% for host in groups['app_servers'] %}
something that applies to all app servers. {% endfor %}
https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html
3.Inventory中的host_vars根据不同主机设定不同的变量。
[root@m01 project1]# cat host_vars/172.16.1.5
state: MASTER
prioroty: 150
[root@m01 project1]# cat host_vars/172.16.1.6
state: BACKUP
prioroty: 100
4.判断变量是否有值
- hosts: webservers
gather_facts: no
vars:
PORT: 13306
tasks:
- name: Copy MySQL Configure
template:
src: my.cnf.j2
dest: /tmp/my.cnf
?
[root@m01 project1]# cat my.cnf.j2
{% if PORT %}
bind-address=0.0.0.0:{{ PORT }}
{% else %}
bind-address=0.0.0.0:3306
{% endif %}
推荐阅读
- 跌跌撞撞奔向你|跌跌撞撞奔向你 第四章(你补英语,我补物理)
- opencv|opencv C++模板匹配的简单实现
- 《自我的追寻》读书笔记3
- web网页模板|如此优秀的JS轮播图,写完老师都沉默了
- 《将来的你,一定会感谢现在战胜烦恼的自己-------第四章/第十一节/用逆向思维解除烦恼》
- 通过复盘快速成长(附模板)
- 《加速》第四章
- 海棠向晚(第四章)
- 异星传奇·第四章|异星传奇·第四章 士兵戈维
- 沈珍珠的田|沈珍珠的田 第四章