6、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 %}
{% endif %}
#注释
{# 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]
********************************************************************************************
****