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 ...
随机推荐
- JVM前奏篇(大局观)
话不多说直接上干货,先来看oracle官网中是怎么描述JDK的:https://docs.oracle.com/javase/8/docs/index.html 这是官网中JDK.JRE.JVM的一个 ...
- luogu P4302 [SCOI2003]字符串折叠
题目描述 折叠的定义如下: 一个字符串可以看成它自身的折叠.记作S = S X(S)是X(X>1)个S连接在一起的串的折叠.记作X(S) = SSSS-S(X个S). 如果A = A', B = ...
- iOS开发-Apple Pay-苹果支付
转自:http://www.open-open.com/lib/view/open1471952847228.html Apple Pay,是苹果公司在2014年苹果秋季新品发布会上发布的一种基于NF ...
- BOM对象学习
location,history,screen <!DOCTYPE html> <html> <head> <meta charset="utf-8 ...
- tensorflow处理mnist(一)
这个文章是对google官方教程的解释 预备知识 神经网络卷积,神经网络原理 argmaxsum axis tensorflow里面有类似的函数,含义和numpy中的一样. tensorflow最基础 ...
- Golang 在电商即时通讯服务建设中的实践
马蜂窝技术原创文章,更多干货请搜索公众号:mfwtech 即时通讯(IM)功能对于电商平台来说非常重要,特别是旅游电商. 从商品复杂性来看,一个旅游商品可能会包括用户在未来一段时间的衣.食.住.行等 ...
- art-template循环无法显示出数据
art-template循环遍历无法显示数据原因 1.语法问题:循环语句导致的问题 2.插件问题: 用标准语法时循环数据如果引入第一个插件,会导致数据显示不出来只有引入第二个插件才可循环出数据 用原生 ...
- NodeJS4-1静态资源服务器实战_实现访问获取里面的内容
.gitignore 匹配模式前 / 代表项目根目录 匹配模式最后加 / 代表是目录 匹配模式前加 ! 代表取反 * 代表任意一个字符 ? 匹配任意一个字符 ** 匹配多级目录 统一代码风格配置可以用 ...
- javascript基础(001)-js加减乘除注意事项(含类型转换)
一,加减乘除注意事项: 1.任意类型'+'字符串都被强转字符串 2.数字和布尔类型'+'undefined 结果为 NaN (Not a Number) 3.'-','*','/'操作会尝试把数据转为 ...
- 《Java算法》判重算法-整数判重
判重算法-整数判重 /** * 判断大于1,小于63的整数是否出现重复数字. * * 算法逻辑:先获取8 根据移位(1 << arrInt[i]) 得到2进制数100000000 , * ...