第六章·自动化运维工具-Ansible JinJa2模板
Ansible JinJa2模板概述
什么是jinja2模板
jinja2模板是python的全功能模板引擎
jinja2与ansible是啥关系
Ansible通常会使用jinja2模板来修改被管理主机的配置文件等...在saltstack中同样会使用到jinja2 如果在100台主机上安装nginx,每台nginx的端口都不一样,如何解决?
Ansible如何使用Jinja2
使用Ansible的jinja2模板也就是使用template模块,该模块和copy模块一样,都是讲文件复制到远端主机上去,但是区别在于,template模块可以获取到文件中的变量,而copy则是原封不动的把文件内容复制过去。之前我们在推送rsync的backup脚本时,想把脚本中的变量名改成主机名,如果使用copy模块则推送过去的就是{{ ansible_fqdn }},不变,如果使用template,则会变成对应的主机名。
Ansible使用Jinja2注意事项
Ansible允许jinja2模板中使用条件判断和循环,但是不允许在playbook中使用。 注意:不是每个管理员都需要这个特性,但是有些时候jinja2模块能大大提高效率
Ansible Jinja2模板使用
Jinja模板基本语法
{{ EXPR }}输出变量值,会输出自定义的变量值或facts
1)playbook文件使用template模块
2)模板文件里面变量使用{{名称}},比如{{PORT}}或使用facts
Jinja2模板逻辑判断
#循环表达式
{% for i in EXPR %}
{% endfor %}
#条件判断
{% if EXPR %}
{% elif EXPR %}
{% else %}
{% ednif %}
#注释
{# COMMENT #}
Jinja2实例
1.编辑playbook
[root@m01 ~]# vim jinja2.yml
- hosts: web_group
tasks:
- name: Copy Template File
template:
src: ./motd.j2
dest: /etc/motd
2.准备motd.j2文件
[root@m01 ~]# vim motd.j2
Welcome to {{ ansible_fqdn }}
This system total mem is : {{ ansible_memtotal_mb }} MB
This system free mem is: {{ ansible_memfree_mb }} MB
3.执行playbook
[root@m01 ~]# ansible-playbook jinja2.yml
PLAY [web_group] *****************************************************************************************************************************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************************************************************************************************************************
ok: [web02]
ok: [web01]
TASK [Copy Template File] ********************************************************************************************************************************************************************************************************************
changed: [web01]
changed: [web02]
PLAY RECAP ***********************************************************************************************************************************************************************************************************************************
web01 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
web02 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
#查看结果
[root@m01 ~]# ansible web_group -a 'cat /etc/motd'
web01 | CHANGED | rc=0 >>
Welcome to web01
This system total mem is : 1982 MB
This system free mem is: 1106 MB
web02 | CHANGED | rc=0 >>
Welcome to web02
This system total mem is : 1982 MB
This system free mem is: 1096 MB
Ansible Jinja2实战部署负载均衡
1.编辑playbook
[root@m01 ~]# vim lb.yml
- host: lb_group
vars:
http_port: 80
server_name: blog.lw.com
tasks:
- name: put lb config file
template:
src: ./bog.lw.com.conf.j2
dest: /etc/nginx/conf.d/bolg.lw.com.conf
notify: reload nginx
handlers:
- name: reload nginx
service:
name: nginx
state: reloaded
2.准备配置文件
[root@m01 ~]# vim blog.lw.com.conf.j2
upstream {{ server_name }} {
{% for n in range(7,9) %}
server 172.16.1.{{ n }}:{{ up_port }};
{% endfor %}
}
server {
listen 80;
server_name {{ server_name }};
location / {
root /code;
index index.html;
proxy_pass http://{{ server_name }};
proxy_set_header Host $http_host;
}
}
Ansible Jinja2实战部署keepalived
推送keepalived配置文件
[root@m01 ~]# vim keepalived.yml
- hosts: lb_group
tasks:
- name: put keepalived config file
template:
src: ./keepalived.j2
dest: /etc/keepalived/keepalived.conf
notify: restart keepalived
handlers:
- name: restart keepalived
service:
name: keepalived
state: restarted
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
}
}
准备keepalived配置文件
[root@m01 ~]# vim keepalived.j2
global_defs {
router_id {{ ansible_fqdn }}
}
vrrp_instance VI_1 {
{% if ansible_fqdn == "lb01" %}
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
}
}
Comments | 1 条评论
博主 דירות דיסקרטיות בירושלים – israelnightclub
חושבים להזמין קוקסינליות בבת ים לעיסוי מפנק ולא יודעים
איפה לעשות זאת? שירות עיסוי עד הבית
בבת ים מאפשר לכם לקבל את כל
היתרונות (העצומים) של העיסוי על הגוף והנפש, אבל במסגרת נוחה ורגועה
של הבית. נערת הליווי תגענה עד אליך ולכל
מקום שתבחר בביתך, בבית מלון, בצימר
ועוד. עיסוי עד הבית ניתנים גם לזוגות!
לכל אחד יש את השגרה שלו בחיים והדברים הרגילים – לימודים,
עבודה, קניות בסופר, לנקות את הבית או לצאת לאותם מקומות הבילוי.
חופשה יכולה להיות רעיון מעולה,
אבל אי אפשר לצאת לחופשה כל
שבוע ולכן אנו צריכים משהו זמין ומהיר אשר יאפשר לנו לפרוק את כל אותם הלחצים.
כך למשל לחיצה חזקה על נקודה לא נכונה בגב,
תנועות עיסוי חזקות מדי על גוף עדין יותר
של המטופל או אפילו לחיצות מרובות באותו המקום
לאורך זמן רב מדי עשויים לגרום לנזק למטופל, שלא לדבר על תחושה של אי
נעימות, כזו שבוודאי לא משקפת את מה שהעיסוי צריך
להפיק עבור המטופל.