• 欢迎访问显哥博客,本网站纯属学习技术,绝无商业用途,欢迎小伙伴们共同学习!研究技术!QQ:52249909 加我QQ
  • 世界75亿人,这么小的概率,能认识你,是我一生的幸运,不妨加个QQ接触一下:52249909 加我QQ

Ansible自动化企业实战——jinja2模板

Ansible lixian 4年前 (2020-03-30) 1325次浏览 2个评论 扫描二维码
文章目录[隐藏]

一、Ansible jinja2 模板概述

#什么是jinja2模板
jinja2是Python的全功能模板引擎

#Jinja2与Ansible啥关系
Ansible通常会使用jinja2模板来修改被管理主机的配置文件等…在saltstack中同样会使用到jinja2
如果在100台主机上安装服务,每台服务的监听的端口都不一样,如何解决?

#Ansible如何使用Jinja2
使用Ansible的jinja2模板也就是使用template模块,该模块和copy模块一样,都是将文件复制到远端主机上去,但是区别在于,template模块可以获取到文件中的变量,而copy则是原封不动的把文件内容复制过去

#Ansible使用Jinja2注意事项
Ansible允许jinja2模板中使用条件判断和循环,但是不允许在playbook中使用。

二、Ansible jinja2 模板使用

1.变量使用语法

{{ EXPR }}输出变量值,会输出自定义的变量值或facts
1)playbook文件使用template模块
2)模板文件里面变量使用{{名称}},比如{{PORT}}或使用facts内置变量

2.判断循环语法

#循环表达式
{% for i in EXPR %}
echo
{% endfor %}

{% for i in range(1,11) %}
{% endfor %}

#条件判断
{% if EXPR %}
echo
{% elif EXPR %}
echo
{% else %}
echo
{% endif %}

#注释
{# COMMENT #}

#shell中循环
#!/bin/bash
for i in `seq 10`;do
    echo $i
done

#shell中判断
#!/bin/bash
#注释
age=$1
if [ $age -lt 18 ];then
    echo '小姐姐'
else
    echo '大妈'
fi

3.jinja2测试

1)登陆文件测试

#1.配置登录文件j2模板
[root@m01 web]# 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

#2.推送j2模板文件
[root@m01 web]# vim motd.yml 
- hosts: all
  tasks:
    - name: config motd
      template:
        src: ./motd.j2
        dest: /etc/motd

2)数据库配置文件推送

#配置数据库配置文件添加
{% if ansible_memtotal_mb == 972  %}
innodb_log_buffer_pool_size=800M
{% elif ansible_memtotal_mb == 1996 %}
innodb_log_buffer_pool_size=1600M
{% endif %}

#配置推送语法
- hosts: web_group
  tasks:
    - name: config mysql conf
      template:
        src: /root/my.cnf
        dest: /tmp/my.cnf
        
#查看远端配置
	1.如果服务器内存时972,则配置为
	innodb_log_buffer_pool_size=800M
	2.如果服务器内容为1996,则配置为
	innodb_log_buffer_pool_size=1600M

4.使用jinja2模板配置keepalived

1)配置keepalived配置文件

#正经配置文件
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
    }
}

#不正经配置文件
[root@m01 web]# 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
    }
}

2)配置推送

#编写playbook
[root@m01 web]# vim keepalived.yml 
- hosts: lb_group
  tasks:
    - name: Install Keepalived Server
      yum:
        name: keepalived
        state: present

    - name: Config keepaived Conf
      template:
        src: ./keepalived.j2
        dest: /etc/keepalived/keepalived.conf

    - name: Start Keepalived Server
      systemd:
        name: keepalived
        state: started

本站博主 , 版权所有丨如未注明 , 均为原创
转载请注明原文链接:Ansible自动化企业实战——jinja2模板
喜欢 (0)

您必须 登录 才能发表评论!

(2)个小伙伴在吐槽
  1. Your article made me suddenly realize that I am writing a thesis on gate.io. After reading your article, I have a different way of thinking, thank you. However, I still have some doubts, can you help me? Thanks.
  2. Thanks for sharing. I read many of your blog posts, cool, your blog is very good.