Ansible的jinja2模板使用

Ansible Jinja2 模板


1.jinja2渲染NginxProxy配置文件

  • jinja2
    • 房屋建筑设计固定的?
  • jinja2模板与Ansible关系
  • Ansible如何使用jinja2模板
    • template模块 拷贝文件?
    • template copy 区别?
      • template会解析配置文件中的变量
      • copy 不会解析任何的变量,只会拷贝文件

Ansible允许jinja2模板中使用判断 循环,但是jinja判断循环语法不允许在playbook中使用。

注意: 不是每个管理员都需要这个特性,但是有些时候jinja2模板能大大提高效率。

1.jinja模板基本语法
1)要想在配置文件中使用jinj2,playbook中的tasks 必须使用template模块

2)模板配置文件里面使用变量,比如 {{ PORT }} 或使用 {{ facts 变量 }}

2.jinja模板逻辑关系
{% 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 %}

案例1 nginx proxy配置文件

[root@manage jinja2]# tree
.
├── file
│   └── proxy_kod.com.conf.j2
├── group_vars
│   └── all
└── proxy_nginx.yml

[root@manage jinja2]# cat proxy_nginx.yml 
- hosts: lbservers
  
  tasks:
    - name: Installed Nginx Server#安装nginx(没有nginxyum源自己找一个)
      yum:
        name: nginx
        state: present

    - name: Configure Nginx Server#配置nginx
      template:
        src: ./file/proxy_kod.com.conf.j2
        dest: /etc/nginx/conf.d/proxy_kod.cwq.com.conf
      notify: Restart Nginx Server


    - name: Systemd Nginx Server#启动nginx
      systemd:
        name: nginx
        state: started
        enabled: yes

  handlers:
    - name: Restart Nginx Server#配置文件改变自动重启
      systemd:
        name: nginx
        state: restarted
        
#nginx proxy配置文件渲染       
[root@manage file]# cat proxy_kod.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;
   }    
}

        
# nginx组变量   
[root@manage jinja2]# cat group_vars/all 
###kod
kod_http_port: 80
kod_server_name: kod.cwq.com


[root@manager jinja2]# cat ../hosts
[lbservers]
172.16.1.7
172.16.1.8

案例2 Keepalived配置文件 master slave

#准备多个配置文件   master   backup
#1.准备一份keepalived配置文件
[root@manage jinja2]# tree
.
├── file
│   ├── keepalived-backup.conf.j2
│   ├── keepalived-master.conf.j2
├── j_keeplive.yml
#准备keepalived文件
[root@manage jinja2]# cat file/keepalived-master.conf.j2 
global_defs {
       router_id lb01
}

vrrp_instance VI_1 {
    state  MASTER
    priority 150

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

[root@manage jinja2]# cat file/keepalived-backup.conf.j2 
global_defs {
      router_id lb02
}

vrrp_instance VI_1 {
    state  BACKUP
    priority 150

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

#准备keepalived的playbook文件
[root@manage jinja2]# cat j_keeplive.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: Restarted Keepalived Server

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

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

  handlers:
    - name: Restarted Keepalived Server
      systemd:
        name: keepalived
        state: present
[root@manage jinja2]# ansible-playbook j_keeplive.yml  -i ../hosts

​ 2.设定host_vars变量 5和6设定相同的变量,不同的值(重要)

#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


#为不同的主机设定相同的变量,  只不过值不一样.
[root@manage jinja2]# ansible-playbook -i ../hosts j_keeplive.yml 

3.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 }}
}
#此处写了一个jinja的判断语句
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
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值