Ansible之Jinja2模板

本篇文章以偏向于举例说明。

一、jinja2的基本概述


jinja2是Python的全功能模板引擎


二、jinja2模板与ansible的关系


Ansible通常会使用jinja2模板来修改被管理主机的配置文件。


三、Ansible使用jinja2模板


  • 使用template模块来拷贝文件

template与copy的关系
区别:
template会解析配置文件中的变量,先渲染,后拷贝
copy 不会解析任何的变量,只会拷贝文件
关系:
Ansible允许jinja2模板中使用判断 循环,但是jinja判断循环语法不允许在playbook中使用。


四、jinja2 模板


基本语法
1)要想在配置文件中使用jinj2,playbook中的tasks 必须使用template模块
2)模板配置文件里面使用变量,比如 {{ PORT }} 或使用 {{ facts 变量 }}
逻辑关系
{% for i in EXPR %}...{% endfor%} 作为循环表达式
{% if EXPR %}...{% elif EXPR %}...{% endif%} 作为条件判断
{# COMMENT #} 表示注释

 

{% for i in range(1,10)%}
        server 172.16.1.{{i}};
{% endfor %}
#判断
{% if ansible_fqdn == "web01" %}
        echo 123
{% elif ansible_fqdn == "web02" %}
        echo 456
{% else %}
        echo 789
{% endif %}

nginx-proxy配置文件

 

[root@manager jinja2]# cat j_nginx.yml 
- hosts: lbservers
  tasks:
        #安装nginx
    - name: Installed nginx Server
      yum: 
        name: nginx
        state: present
        #配置nginx vhosts
    - name: Configure nginx Server
      template:
        src: ./file/proxy_kod.oldxu.com.conf.j2
        dest: /etc/nginx/conf.d/proxy_kod.oldxu.com.conf
      notify: Restart Nginx Server
        #启动Nginx
    - name: Systemd Nginx Server
      systemd:
        name: nginx
        state: started
        enabled: yes
  handlers:
    - name: Restart Nginx Server
      systemd: 
        name: nginx
        state: restarted        
# nginx组变量   
[root@manager jinja2]# cat group_vars/all 
kod_http_port: 80
kod_server_name: kod.oldxu.com
kod_web_site: /code/kod
#nginx proxy配置文件渲染
[root@manager jinja2]# cat file/proxy_kod.oldxu.com.conf.j2 
upstream {{ kod_server_name }} {
    {% for host in groups['webservers'] %}
    server {{host}}:{{kod_http_port}};
    {% endfor %}
}

server {
    listen {{ kod_http_port }};
    server_name  {{ kod_server_name }};

    location / {
        proxy_pass http://{{ kod_server_name }};
        proxy_set_header Host $http_hosts;
    }
}
[root@manager jinja2]# cat ../hosts
[webservers]
172.16.1.7
172.16.1.8

keepalived配置文件

[root@manager jinja2]# cat j_keepalived.yml 
- hosts: lbservers
  tasks:
    - name: Installed Keepalived Server
      yum:
        name: keepalived
        state: present
    - name: Configure Keepalived Master
      copy:
        src: ./file/keepalived-master.conf.j2
        dest: /etc/keepalived/keepalived.conf
      when: ( ansible_hostname == "lb01" )
      notify: Restart Keepalived Server
    - name: Configure Keepalived Backup
      copy:
        src: ./file/keepalived-backup.conf.j2
        dest: /etc/keepalived/keepalived.conf
      when: ( ansible_hostname == "lb02" )
      notify: Restart Keepalived Server
    - name: Systemd Keepalived Server
      systemd:
        name: keepalived
        state: started
        enabled: yes
  handlers:
    - name: Restart Keepalived Server
      systemd:
        name: keepalived
        state: restarted

设定host_vars变量

#1.准备一份keepalived配置文件
#2.需要在keepalived配置文件中使用变量方式  ---> jinja

[root@manager jinja2]# cat ./file/keepalived-vars.conf.j2 
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 jinja2]# cat host_vars/172.16.1.5
state: MASTER
priority: 200

[root@manager jinja2]# cat host_vars/172.16.1.6
state: BACKUP
priority: 99

[root@manager jinja2]# cat var_keepalived.yml 
- hosts: lbservers
  tasks:
    - name: Installed Keepalived Server
      yum:
        name: keepalived
        state: present
    - name: Configure Keepalived Master
      template:
        src: ./file/keepalived-vars.conf.j2
        dest: /etc/keepalived/keepalived.conf
      notify: Restart Keepalived Server
    - name: Systemd Keepalived Server
      systemd:
        name: keepalived
        state: started
        enabled: yes
  handlers:
    - name: Restart Keepalived Server
      systemd:
        name: keepalived
        state: restarted

jinja2判断方式

[root@manager jinja2]# cat jinja_keepalived.yml 
- hosts: lbservers
  tasks:
    - name: Installed Keepalived Server
      yum:
        name: keepalived
        state: present
    - name: Configure Keepalived Master
      template:
        src: ./file/keepalived.conf.j2
        dest: /etc/keepalived/keepalived.conf
      notify: Restart Keepalived Server
    - name: Systemd Keepalived Server
      systemd:
        name: keepalived
        state: started
        enabled: yes
  handlers:
    - name: Restart Keepalived Server
      systemd:
        name: keepalived
        state: restarted

[root@manager jinja2]# cat file/keepalived.conf.j2 
global_defs {     
    router_id {{ ansible_hostname }}
}
vrrp_instance VI_1 {
{% if ansible_hostname == "lb01" %}
    state  MASTER
    priority 150
{% 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
    }
}


 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值