5.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 %}
3.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
4.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
PS:为不同的主机设定相同的变量, 只不过值不一样.
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
}
}
5.Ansible Jinja2 模板的更多相关文章
- ansible jinja2模板概述
目录 ansible jinja2模板概述 ansible jinja2模板使用 基本语法 jinja2模板逻辑判断 ansible jinja2管理nginx ansible jinja2管理kee ...
- Ansible Jinja2 模板使用
Ansible Jinja2 模板使用.语法与使用案例 主机规划 添加用户账号 说明: 1. 运维人员使用的登录账号: 2. 所有的业务都放在 /app/ 下「yun用户的家目录」,避免业务数据乱放: ...
- Ansible Jinja2 模板
1.jinja2渲染NginxProxy配置文件 jinja2 房屋建筑设计固定的? jinja2模板与Ansible关系 Ansible如何使用jinja2模板 template模块 拷贝文件? t ...
- Ansible --05 ansible jinja2
ansible jinja2 什么是jinjia2模板 jinjia2是Python的全功能模块引擎 Jinjia2与Ansible的关系 Ansible通常会使用jinjia2模板来修改被管理主机的 ...
- Ansible_使用jinja2模板部署自定义文件
一.jinja2简介 1.jinja2模板 1️⃣:Ansible将jinja2模板系统用于模板文件,Ansible还使用jinja2语法来引用playbook中的变量 2️⃣:变量和逻辑表达式置于标 ...
- Flask 框架下 Jinja2 模板引擎高层 API 类——Environment
Environment 类版本: 本文所描述的 Environment 类对应于 Jinja2-2.7 版本. Environment 类功能: Environment 是 Jinja2 中的一个 ...
- Python框架学习之Flask中的Jinja2模板
前面也提到过在Flask中最核心的两个组件是Werkzeug和Jinja2模板.其中Werkzeug在前一节已经详细说明了.现在这一节主要是来谈谈Jinja2模板. 一.为什么需要引入模板: 在进行软 ...
- python操作三大主流数据库(5)python操作mysql⑤使用Jinja2模板提取优化页面展示
python操作mysql⑤使用Jinja2模板提取优化页面展示 在templates目录下的index.html.cat.html等页面有一些共同的元素,代码比较冗余可以使用模板提取公共代码,在各网 ...
- Flask框架(2)-JinJa2模板
为了把业务逻辑和表现逻辑分开,Flask把表现逻辑移到JinJa2模板,模板是一个包含响应文本的文件.它用占位变量表示动态部分,其具体要从请求上下文才知道. 把真实值替换掉占位变量成为渲染,JinJa ...
随机推荐
- 你的SpringBoot应用真的部署更新成功了吗
前提 当我们在生产环境部署了SpringBoot应用的时候,虽然可以通过Jenkins的构建状态和Linux的ps命令去感知应用是否在新的一次发布中部署和启动成功,但是这种监控手段是运维层面的.那么, ...
- 大数据之Linux基础
回顾这一个多月以来闭关学大数据的一些相关重要知识,就当复习,顺便以备以后查看 Linux学习第一步自然是安装Linux. 关于Linux 首先介绍下Linux,Linux系统很多程序员开发者其实都耳熟 ...
- Redis 命令执行过程(下)
在上一篇文章中<Redis 命令执行过程(上)>中,我们首先了解 Redis 命令执行的整体流程,然后细致分析了从 Redis 启动到建立 socket 连接,再到读取 socket 数据 ...
- 【解决】http: server gave HTTP response to HTTPS client
[问题]上传镜像到私有仓库时报错 $ docker push xxx.xxx.xxx.xxx:5000/java-8 The push refers to repository [xxx.xxx.xx ...
- hdu-4638
There are n men ,every man has an ID(1..n).their ID is unique. Whose ID is i and i-1 are friends, Wh ...
- Linux搭建Java环境(JDK+Tomcat+MySQL)
目录 一.项目环境: 二.安装JDK1.8 三.安装Tomcat8.5 四.安装MySQL数据库 五.配置JAVA项目 一.项目环境: 开发环境 生产环境 测试环境 硬件环境: web服务器:cpu: ...
- 【Spring Session】和 Redis 结合实现 Session 共享
[Spring Session]和 Redis 结合实现 Session 共享 参考官方文档 HttpSession with Redis Guide https://docs.spring.io/s ...
- 学习了JsonSchema,我自定义了一个校验代码
JsonSchema 使用fastjsonschema来校验数据 # 导入验证器 import json import fastjsonschema # 读取schema with open('../ ...
- mysql慢查询相关
如何查看执行较慢的sql: 1.使用show variables like '%query%'; 查询结果: ft_query_expansion_limit 20have_query_cache Y ...
- python学习-继承
# 继承# 你的是我的,我的还是我的 class Animal: def __init__(self,name,private_v1): self.name = name self._private_ ...