ansible-jinja2-05

🦄1.Ansible jinja2模板概述

1.1 什么是jinja2?

jinja2是python的全功能模板引擎?

1.2 ansible与jinja2的关系

ansible需要使用jiaja2模板来修改,被管理主机的配置文件

1.3 ansible如何使用jinja2模板

ansible使用jinja2模板需要接触template模板来实现。那么template模块是用来做什么的?
templant模块和copy模块完全一样,都是拷贝文件至远程主机。
区别在于template模块会解析要拷贝文件中变量的值,而copy则是原封不动的将文件内容复制过去。

1.4 ansible使用jinja注意事项

ansible允许jinja2模板中使用条件判断和循环,但是jinja判断循环语法不允许在playbook中使用。
注意:不是每个管理员都需要这个特性,但是有些时候jinja2模板能够大大提高效率。

🦄2.Ansible jinja2基本使用

2.1 jinja模板基本语法

1.要想在配置文件中使用jinja2 ,playbook中的tasks必须使用template模块
2. 配置文件里面使用变量,比如{{ port }} 或使用{{ facts变量 }}

2.2 jinja模板逻辑关系

{% for i in EXPR %}…{% endfor %}作为循环表达式
{% if EXPR %}…{% elif EXPR %}…{% endif%}作为条件判断
{# COMMAENT #}表示注释

jinja2的条件判断
{% if ansible_fqdn == "web01" %}
     echo "123"
{% elif ansible_fqdn == "web02" %}  
     echo "4560"
{% endif %}

2.3 jinja模板使用示例,使用fact变量的示例

①使用playbook推送文件

[root@ansible playbook]# cat jinja2.yml
- hosts: webservers
  tasks:
    - name: copy template file /etc/motd
      template:
         src: ./motd.j2
         dest: /etc/motd
 

②准备motd.j2文件

[root@ansible playbook]# cat motd.j2
welcome to {{ ansible_hostname }}
This system tocat memory is: {{ ansible_memtotal_mb }} MB
This system free memory is: {{ ansible_memtotal_mb }} MB

③执行playbook

在这里插入图片描述
在这里插入图片描述

④ 总结

上面的例子展示了如何使用facts变量,当相关的playbook被执行后,ansible_hostname和ansible_memtotal_mb将会被替换成被管理主机上搜集的facts变量的值

jinja循环

🦄3.Ansible jinja2管理Nginx

ansible使用jinja2的for循环表达式渲染出nginx负载均衡的配置文件

3.1 使用playbook推送文件

[root@ansible playbook]# cat proxy.yml
- hosts: webservers
  vars:
    - http_port: 80
    - server_name: www.bgx.com

  tasks:
    - name: copy template nginx configure
      template:
        src: blog.conf.j2
        dest: /etc/nginx/conf.d/blog.bgx.com.conf

3.2 准备blog.conf.j2配置文件

[root@ansible playbook]# cat blog.conf.j2
upstream {{ server_name }} {
#设置变量,并进行循环赋值,渲染配置
   {% for i in range(7,10) %}
      server 172.16.1.{{i}}:{{http_port}};
   {% endfor %}

}
server {
        listen {{ http_port }}
        server_name {{ server_name }};
        location / {
           proxy_pass http://{{ server_name}};
           proxy_set_header Host $http_host;

  }
}

3.3 测试剧本

在这里插入图片描述
被控端渲染出来的结果
在这里插入图片描述

jinja判断

🦄 4.Ansible jinja2 管理keepalived

判断语句:
	keepalived:
		1.通过inventory设定相同变量,不同的值.   ( 1个配置文件 )
		2.通过判断主机名称,根据不同的主机名称下发不同的配置文件     ( 2个配置文件 )
         3.通过jinja的判断来实现.   ( 一个配置文件 )
{% if  EXPR %}...{% elif EXPR %}...{% endif%} 作为条件判断
[root@mananger tasks]# cat keep.conf.j2 
global_defs {     
	router_id {{ ansible_hostname }}
}

vrrp_instance VI_1 {
{% if ansible_hostname == "web01" %}
	priority 150
	state MASTER
{% elif ansible_hostname == "web02" %}
	priority 100
	state BACKUP
{% 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、付费专栏及课程。

余额充值