Jinja2模板概述
例子一
循环语句
[root@m01 ~]# cat upstream.conf
upstream web {
{% for i in range(1,11) %}
server 172.16.1.{{ i }}
{% endfor %}
}
server {
listen 80;
server_name wp.gong.com;
location / {
proxy_pass http://web;
include proxy_params;
}
}
[root@m01 ~]# cat send_conf.yml
- hosts: web01
tasks:
- name: send jianja mode
template:
src: /root/upstream.conf
dest: /root/upstream.conf
# 推送生成的效果
[root@web01 ~]# cat upstream.conf
upstream web {
server 172.16.1.1
server 172.16.1.2
server 172.16.1.3
server 172.16.1.4
server 172.16.1.5
server 172.16.1.6
server 172.16.1.7
server 172.16.1.8
server 172.16.1.9
server 172.16.1.10
}
server {
listen 80;
server_name wp.gong.com;
location / {
proxy_pass http://web;
include proxy_params;
}
}
jinjia2语法
变量
## 调用变量
{{ VAR }} # 会把里面的变量名转换为变量值
## 模版文件
在一个文件中有{{ vars }}去调用变量的,使用template复制,会把变量转换为值。
模版文件中可以调用自己设置的变量。str_www: www
{{ str_www }}
调用facts变量
{{ ansible_fqdn }} # 获取主机名
{{ ansible_memtotal_mb }} # 获取主机物理内存大小
## 逻辑判断语法
- 注释
{# 中间的是注释 #}
在推送的时候,注释不会推送到目标主机
- 循环
{% for var in data %}
{{ var }} # 表示调用变量名,data可以是一个可迭代对象
{% endfor %}
- 判断的语法
{% if ansible_fqdn == "db01" %}
mem=16G
{% elif ansible_fqdn == "db02" %}
mem=8G
{% else %}
mem=4G
{% endif %}
案例一
推送motd
[root@m01 ~]# cat motd.j2
本机内存:{{ ansible_memtotal_mb }}
剩余内存:{{ ansible_memfree_mb }}
ip add : {{ ansible_eth0.ipv4.address }}
[root@m01 ~]# cat send_motd.yml
- hosts: web01
tasks:
- name: send jianja mode
template:
src: /root/motd.j2
dest: /root/motd
[root@web01 ~]# cat motd
本机内存:456
剩余内存:9
ip add : 10.0.0.7
fqdn和hostname的区别: 比如主机名是www.baidu.com;使用ansible_hostname得到的变量值是www;ansible_fqdn 取到的值是www.baidu.com
案例二
通过判断来配置不同的域名的nignx配置文件
[root@m01 ~]# cat upstream.j2
upstream web {
{% for i in range(1,10) %}
server 172.16.1.{{ i }}
{% endfor %}
}
server {
listen 80;
{% if ansible_fqdn == "web01" %}
server_name {{ domain_1 }}
{% elif ansible_fqdn == "web02" %}
server_name {{ domain_2 }}
{% elif ansible_fqdn == "web03" %}
server_name {{ domain_3 }}
{% endif %}
location / {
proxy_pass http://web;
include proxy_params;
}
}
[root@m01 ~]# cat send_up_j2.yml
- hosts: web_group
vars:
- domain_1: www.baidu.com
- domain_2: www.google.com
- domain_3: gong.cc.con
tasks:
- name: send up_j2 mode
template:
src: /root/upstream.j2
dest: /root/upstream_j2.conf
[root@web01 ~]# cat upstream_j2.conf
upstream web {
server 172.16.1.1
server 172.16.1.2
server 172.16.1.3
server 172.16.1.4
server 172.16.1.5
server 172.16.1.6
server 172.16.1.7
server 172.16.1.8
server 172.16.1.9
}
server {
listen 80;
server_name www.baidu.com
location / {
proxy_pass http://web;
include proxy_params;
}
}
[root@web02 ~]# cat upstream_j2.conf
upstream web {
server 172.16.1.1
server 172.16.1.2
server 172.16.1.3
server 172.16.1.4
server 172.16.1.5
server 172.16.1.6
server 172.16.1.7
server 172.16.1.8
server 172.16.1.9
}
server {
listen 80;
server_name www.google.com
location / {
proxy_pass http://web;
include proxy_params;
}
}
案例三
管理keepalived的配置文件
判断语法
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf
global_defs {
router_id lb01
}
vrrp_script check_web {
script "/root/check_web.sh"
interval 5
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
}
track_script {
check_web
}
}
[root@lb02 ~]# cat /etc/keepalived/keepalived.conf
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
}
}
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf
global_defs {
router_id lb01
}
vrrp_script check_web {
script "/root/check_web.sh"
interval 5
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
}
track_script {
check_web
}
}
{# 把keepalived配置文件改成模板文件 #}
global_defs {
router_id {{ ansible_fqdn }}
}
vrrp_instance VI_1 {
{% if ansible_fqdn == 'lb01' %}
state MASTER
priority 150
{% elif ansible_fqdn == '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
}
}
案例四
根据实际物理内存的大小来分配给mysql所占内存的百分比
[root@m01 ~]# vi mysql_mem.j2
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
innodb_buffer_pool_size = {{ (ansible_memtotal_mb * 0.8) | int }}
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
!includedir /etc/my.cnf.d
Jinja2模板概述的更多相关文章
- ansible jinja2模板概述
目录 ansible jinja2模板概述 ansible jinja2模板使用 基本语法 jinja2模板逻辑判断 ansible jinja2管理nginx ansible jinja2管理kee ...
- Ansible Jinja2 模板使用
Ansible Jinja2 模板使用.语法与使用案例 主机规划 添加用户账号 说明: 1. 运维人员使用的登录账号: 2. 所有的业务都放在 /app/ 下「yun用户的家目录」,避免业务数据乱放: ...
- Django---Http协议简述和原理,HTTP请求码,HTTP请求格式和响应格式(重点),Django的安装与使用,Django项目的创建和运行(cmd和pycharm两种模式),Django的基础文件配置,Web框架的本质,服务器程序和应用程序(wsgiref服务端模块,jinja2模板渲染模块)的使用
Django---Http协议简述和原理,HTTP请求码,HTTP请求格式和响应格式(重点),Django的安装与使用,Django项目的创建和运行(cmd和pycharm两种模式),Django的基 ...
- 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 ...
- 02 flask 请求钩子、异常捕获、上下文、Flask-Script 扩展、jinja2 模板引擎、csrf防范
一 请求勾子 在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如: 在请求开始时,建立数据库连接: 在请求开始时,根据需求进行权限校验: 在请求结束时,指定数据的交互格式: 为了让每个 ...
- SaltStack 使用 Jinja2 模板
Jinja2 是基于 python 的一个模板引擎,如下,使用 Jinja2 实现根据不同的操作系统分发不同的文件: [root@localhost ~]$ cat /srv/salt/test.sl ...
随机推荐
- [Fundamental of Power Electronics]-PART I-2.稳态变换器原理分析-2.4 Cuk变换器实例
2.4 Cuk 变换器 作为第二个示例,考虑图2.20(a)的变换器.该变换器执行类似于降压-升压变换器的直流转换功能:它可以增加或减小直流电压的幅值,并且可以反转极性.使用晶体管和二极管的实际实现如 ...
- 美团点评技术专家 帮你快速上手跨平台开发框架Flutter
Flutter并没有开创新的概念,它背后的框架原理和底层设计思想,与原生Android/iOS开发并没有本质区别,甚至从React.Native中吸收了不少优秀的设计理念. Flutter是Googl ...
- 无线网络的应用之aircrack-ng
在kalilinux的aircracke-ng中.在这儿描述自己所遇到的问题并给予写blog 在使用之前,需要确定是否有对应的支持无线网卡监听的网卡,在虚拟机中需要先将网卡的驱动重定向到虚拟机内 在终 ...
- 给出N个字符串恰好由三位字母(大小写)组成,再给出M个查询字符串,问每个查询字符串在N个字符中出现的次数。
1 #include<cstdio> 2 const int maxn = 100; 3 char S[maxn][5], temp[5]; 4 int hashTable[52 * 52 ...
- JVM经典垃圾收集器
这个关系不是一成不变的,由于维护和兼容性测试的成本,在JDK 8时将Serial+CMS. ParNew+Serial Old这两个组合声明为废弃(JEP 173),并在JDK 9中完全取消了这些 ...
- Spring Boot demo系列(四):Spring Web+Validation
2021.2.24 更新 1 概述 本文主要讲述了如何使用Hibernate Validator以及@Valid/@Validate注解. 2 校验 对于一个普通的Spring Boot应用,经常可以 ...
- 实时计算框架:Spark集群搭建与入门案例
一.Spark概述 1.Spark简介 Spark是专为大规模数据处理而设计的,基于内存快速通用,可扩展的集群计算引擎,实现了高效的DAG执行引擎,可以通过基于内存来高效处理数据流,运算速度相比于Ma ...
- Socket简介 与 UDP
1. Socket 简介 2. UDP 1. Socket 简介 网络编程,是指让在不同的电脑上的软件能够进行数据传递,即进程之间的通信. 本地的进程间通信(IPC) 例如有:队列.同步(互斥锁.条件 ...
- PHP版DES算法加密数据
php7之后的版本 php的mcrypt 扩展已经过时了大约10年,并且用起来很复杂.因此它被废弃并且被 OpenSSL 所取代. 从PHP 7.2起它将被从核心代码中移除并且移到PECL中.PHP手 ...
- UVA11384正整数序列(把123..变成0的最小步数)
题意: 给定一个正整数n,你的任务是最少的操作次数把序列1 2 3 4 5...n中所有的数字都变成0,每次操作可以从序列中选择一个活多个整数,同时减去一个相同的正整数,比如 1 2 3可以 ...