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 %}

nginxproxy配置文件

[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

2.Keepalived配置文件 master slave

​ 1.准备多个配置文件 master backup

[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

​ 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


#为不同的主机设定相同的变量,  只不过值不一样.

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 }}
}

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
    }
}
posted @ 2019-10-14 10:14  爱可耐  阅读(705)  评论(0编辑  收藏  举报