57. jinja模板的应用

一,jinja2

1.概述

Jinja2 是一个现代的,设计者友好的,模板语言。 它速度快,被广泛使用,并且提供了可选的沙箱模板执行环境保证安全。

当利用jinja2进行渲染的时候,它会把这些特殊的占位符进行填充/替换,jinja2支持python中所有的Python数据类型比如列表、字段、对象等。

2.Ansible 如何使用 jinja2 模板

Ansible 使用 jinja2 模板,也就是 template 模板。该模块和 copy 模块一样,都是将文件复制到目标机器,但是区别在于 template 模块可以获取要复制文件中的变量的值,而 copy 则是原封不动的把文件内容复制过去。

比如:针对不同的主机定义不同的变量,template 会在将文件分发前读取变量到 jinja2 模板,之后再然后分发到不同的被管理主机上。

3.jinja2渲染NginxProxy配置文件用到的语法三种语法

控制结构 {% %}
变量取值 {{ }}
注释 {# #}。


二,演示

1 变量中的循环语句案例:nginx proxy
2 变量中的判断语法案例:keeplive不同主机的配置
3 nventory方式实现案例:keeplive不同主机的配置
*4. jinja变量方式实现案例:keeplive不同主机的配置

1. 变量中的循环语句

给10台主机装上Nginx服务,但是要求每台主机的端口都不一样,如何解决?

( jianja配置文件模板,根据不同主机生成不同文件配置nginx proxy)

主机清单:

[root@manager ansible_roles]# cat proxy_blog.oldxu.com.conf.j2

upstream {{ blog_site }} {
 {% for host in groups['webservers'] %}
	server {{ host  }};
{% endfor %}

server {
	listen 80;
	server_name {{ blog_site }};

	location / {
		proxy_pass http://{{ blog_site }};
		include proxy_params;
	}
}

playbook — 将nginx.conf文件批量拷到对端
[root@manager ansible_roles]# cat nginx_proxy.yml

- hosts: webservers
  vars:
    - blog_site: blog.oldxu.com
  tasks:
    - name: Configure Nginx Proxy Vurtual File
      template:
        src: ./proxy_blog.oldxu.com.conf.j2
        dest: /tmp/proxy_blog.oldxu.com.conf

2. 使用判断语法推送不同文件

常规写法:首先需要写好两个不同配置的文件,再判断不同主机推送不同配置(太笨重)
[root@manager ansible_roles]# cat keepalived.yml #keepalive的安装,配置,启动

- hosts: lbservers
  tasks:
    - name: Install Keepalived Server
      yum:
        name: keepalived
        state: present

    - name: Configure Keepalived Server
      copy:
        src: ./keepalived-master.conf.j2
        dest: /etc/keepalived/keepalived.conf
      when: ( ansible_hostname == "lb01" )
      notify: Restart Keepalived Server

    - name: Configure Keepalived Server
      copy:
        src: ./keepalived-backup.conf.j2
        dest: /etc/keepalived/keepalived.conf
      when: ( ansible_hostname == "lb02" )
      notify: Restart Keepalived Server


    - name: Started Keepalived Server
      systemd:
        name: keepalived
        state: started
        enabled: yes

  handlers:
    - name: Restart Keepalived Server
      systemd:
        name: keepalived
        state: restarted

3. 使用inventory 方式来生成不同配置文件

主机清单      #预先定义好变量

hosts:
[lbservers]
172.16.1.5 state=MASTER priority=150
172.16.1.6 state=BACKUP priority=120

[root@manager ansible_roles]# cat keepalived-template.conf.j2 #keepalvie配置文件

global_defs {
    router_id {{ ansible_hostname }}
}

vrrp_instance VI_1 {
    state {{ state }}
    priority {{ priority }}

    interface eth0
    virtual_router_id 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
}
    virtual_ipaddress {
        10.0.0.3
    }
}

[root@manager ansible_roles]# cat keepalived.yml  #keepalive的安装,配置,启动

- hosts: lbservers
  tasks:
    - name: Install Keepalived Server
      yum:
        name: keepalived
        state: present

    - name: Configure Keepalived Server
      template:
        src: keepalived-template.conf.j2
        dest: /etc/keepalived/keepalived.conf
      notify: Restart Keepalived Server

    - name: Started Keepalived Server
      systemd:
        name: keepalived
        state: started
        enabled: yes

  handlers:
    - name: Restart Keepalived Server
      systemd:
        name: keepalived
        state: restarted

——————————————————————————————————————

*4. 使用 jinja方式来生成不同文件(if,变量)

主机清单
[root@manager ansible_roles]# cat hosts

[lbservers]
172.16.1.5
172.16.1.6

[root@manager ansible_roles]# cat keepalived-template.conf.j2 #keepalive配置的 jinja2文件

global_defs {
    router_id {{ ansible_hostname }}
}

vrrp_instance VI_1 {
{% if ansible_hostname == "lb01" %}
    state MASTER
    priority 200
{% elif ansible_hostname == "lb02" %}
    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
    }
}

[root@manager ansible_roles]# cat keepalived.yml #keepalive的安装,配置,启动

- hosts: lbservers
  tasks:
    - name: Install Keepalived Server
      yum:
        name: keepalived
        state: present

    - name: Configure Keepalived Server
      template:
        src: keepalived-template.conf.j2
        dest: /etc/keepalived/keepalived.conf
      notify: Restart Keepalived Server

    - name: Started Keepalived Server
      systemd:
        name: keepalived
        state: started
        enabled: yes

  handlers:
    - name: Restart Keepalived Server
      systemd:
        name: keepalived
        state: restarted

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值