当前位置:网站首页>自动化运维工具Ansible(6)Jinja2模板
自动化运维工具Ansible(6)Jinja2模板
2022-08-04 05:26:00 【AHui_CSDN】
Ansible Jinja2模板概述
什么是jinja2模板
jinja2是Python的全功能模板引擎
Jinja2与Ansible啥关系
Ansible通常会使用jinja2模板来修改被管理主机的配置文件等…在saltstack中同样会使用到jinja2
如果在100台主机上安装nginx,每台nginx的端口都不一样,如何解决?
Ansible如何使用Jinja2
使用Ansible的jinja2模板也就是使用template模块,该模块和copy模块一样,都是讲文件复制到远端主机上去,但是区别在于,template模块可以获取到文件中的变量,而copy则是原封不动的把文件内容复制过去。之前我们在推送rsync的backup脚本时,想把脚本中的变量名改成主机名,如果使用copy模块则推送过去的就是{ { ansible_fqdn }},不变,如果使用template,则会变成对应的主机名。
Ansible使用Jinja2注意事项
Ansible允许jinja2模板中使用条件判断和循环,但是不允许在playbook中使用。
注意:不是每个管理员都需要这个特性,但是有些时候jinja2模块能大大提高效率。
Ansible Jinja2模板使用
Jinja模板基本语法
{
{ EXPR }}输出变量值,会输出自定义的变量值或facts
1)playbook文件使用template模块
2)模板文件里面变量使用{
{名称}},比如{
{PORT}}或使用facts
Jinja2模板逻辑判断
#循环表达式
{% for i in EXPR %}
{% endfor %}
#条件判断
{% if EXPR %}
{% elif EXPR %}
{% else %}
{% endif %}
#注释
{# COMMENT #}
Jinja2示例
1.编辑playbook
[[email protected] ~]# vim jinja2.yml
- hosts: web_group
tasks:
- name: Copy Template File
template:
src: ./motd.j2
dest: /etc/motd
2.准备motd.j2文件
[[email protected] ~]# vim motd.j2
Welcome to {
{
ansible_fqdn }}
This system total mem is : {
{
ansible_memtotal_mb }} MB
This system free mem is: {
{
ansible_memfree_mb }} MB
3.执行playbook
[[email protected] ~]# ansible-playbook jinja2.yml
PLAY [web_group] *****************************************************************************************************************************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************************************************************************************************************************
ok: [web02]
ok: [web01]
TASK [Copy Template File] ********************************************************************************************************************************************************************************************************************
changed: [web01]
changed: [web02]
PLAY RECAP ***********************************************************************************************************************************************************************************************************************************
web01 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
web02 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
查看结果
[[email protected] ~]# ansible web_group -a 'cat /etc/motd'
web01 | CHANGED | rc=0 >>
Welcome to web01
This system total mem is : 1982 MB
This system free mem is: 1106 MB
web02 | CHANGED | rc=0 >>
Welcome to web02
This system total mem is : 1982 MB
This system free mem is: 1096 MB
该示例展示了如何利用jinja2模板使用facts变量,达到我们想要的目的,实现自动化的需求。
Ansible Jinja2管理nginx
Ansible使用jinja2的for循环表达式渲染出nginx负载均衡的配置文件
使用playbook推送文件
1.编辑playbook
[[email protected] ~]# vim lb.yml
- hosts: lb_group
vars:
http_port: 80
server_name: www.ahui.com
tasks:
- name: copy
template:
src: ./www.ahui.com.conf.j2
dest: /etc/nginx/conf.d/www.ahui.com.conf
notify: reload nginx
handlers:
- name: reload nginx
systemd:
name: nginx
state: reloaded
2.准备配置文件
[[email protected] ~]# vim www.ahui.com.conf.j2
upstream {
{
server_name }} {
{
% for n in range(21) %}
server 172.16.1.{
{
n }}:{
{
up_port }};
{
% endfor %}
}
server {
listen 80;
server_name {
{
server_name }};
location / {
root /code;
index index.html;
proxy_pass http://{
{
server_name }};
proxy_set_header Host $http_host;
}
}
Ansible Jinja2管理keepalived
ansible使用jinja2模板的if判断表达式渲染出keepalived高可用配置文件,并推送到lb主机上。
推送keepalived配置文件
[[email protected] ~]# vim keepalived.yml
- hosts: lb_group
tasks:
- name: copy file
template:
src: ./keepalived.j2
dest: /etc/keepalived/keepalived.conf
notify: restart keepalived
handlers:
- name: restart keepalived
systemd:
name: keepalived
state: restarted
keepalived原配
keepalived master 配置文件
global_defs {
router_id lb01
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 50
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
}
keepalived backup配置文件
global_defs {
router_id lb02
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 50
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
}
准备keepalived配置文件
[[email protected] ~]# vim keepalived.j2
global_defs {
router_id {
{
ansible_fqdn }}
}
vrrp_instance VI_1 {
{
% if ansible_fqdn == "lb01" %}
state MASTER
priority 150
{
% else %}
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
}
}
边栏推荐
- MySql data recovery method personal summary
- 7.16 Day22---MYSQL(Dao模式封装JDBC)
- TensorRTx-YOLOv5工程解读(二)
- 记录获取参赛选手信息过程
- php实现telnet访问端口
- Summary of MySQL database interview questions (2022 latest version)
- Code Refactoring: For Unit Testing
- 【Matlab仿真】:一带电量为q的电荷以速度v运动,求运动电荷产生磁感应强度
- DP4398:国产兼容替代CS4398立体声24位/192kHz音频解码芯片
- 7.13 Day20----MYSQL
猜你喜欢

Can 't connect to MySQL server on' localhost3306 '(10061) simple solutions

MySQL数据库(基础)

解决JDBC在web工程中无法获取配置文件

7.13 Day20----MYSQL

Can‘t connect to MySQL server on ‘localhost3306‘ (10061) 简洁明了的解决方法

(Kettle) pdi-ce-8.2 连接MySQL8.x数据库时驱动问题之终极探讨及解决方法分析

个人练习三剑客基础之模仿CSDN首页

C1认证之web基础知识及习题——我的学习笔记

The cost of automated testing is high and the effect is poor, so what is the significance of automated testing?

FFmpeg源码分析:avformat_open_input
随机推荐
强制结束进程
LCP 17. Quick Calculation Robot
【Matlab仿真】:一带电量为q的电荷以速度v运动,求运动电荷产生磁感应强度
如何低成本修bug?测试左移给你答案
MySQL log articles, binlog log of MySQL log, detailed explanation of binlog log
实际开发中,如何实现复选框的全选和不选
进入古诗文网站个人中心,绕过登录
代码重构:面向单元测试
ES6 Const Let Var的区别
7.15 Day21---MySQL----Index
关于let var 和const的区别以及使用
即时通讯网 即时通讯音视频开发
自己学习爬虫写的基础小函数
The cost of automated testing is high and the effect is poor, so what is the significance of automated testing?
8. Custom mapping resultMap
通过&修改数组中的值
8、自定义映射resultMap
C语言 -- 操作符详解
php实现telnet访问端口
MySQL database (basic)