Ansible(Jinjia2 & Roles)

一、jinjia2 的使用

jinjia2 主要使用在一些需要配置的文件中

1.循环
我们在配置负载均衡的虚拟主机时,在资源池中可以使用 jinjia2 循环

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


[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.判断
我们在配置 keepalived 高可用时,可以使用 jinjia2 判断

方法
(1)常规写法,使用when进行判断,需要准备两个文件,进行拷贝

(2)inventory 方式实现

#在主机清单中定义变量
[root@manager ansible_roles]# vim 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
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
    }
}

(3)jinjia2 的方式

[root@manager ansible_roles]# cat keepalived-template.conf.j2
global_defs {
    router_id {{ ansible_hostname }}
}
#在配置文件中定义,if 条件判断
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
    }
}

3.变量
我们在用的变量就是 jinjia2

二、Roles 目录编排

|——ansible.cfg
|——hosts
|——site.yml      #ansible统一入口,调用总配置
|——group_vars
├── nginx      #角色的软件目录
    ├── files      #存放文件(copy、unarchive模块用的)
    ├── handlers    #触发任务,需要有main.yml文件
    ├── tasks      #具体任务,需要有,main.yml文件
    └── templates      #存放模板文件(template模块用的,有变量)
    └── vars        #定义变量
    └── meta      #依赖关系

site.yml文件中写法

[root@manager ansible_roles_prod]# cat site.yml 
- hosts: all
  roles:
    - role: base
  tags: base_init

# 指定标签执行
[root@manager ansible_roles_prod]# ansiable-playbook site.yml -t base_init

你可能感兴趣的:(Ansible(Jinjia2 & Roles))