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 %}
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
2.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
#为不同的主机设定相同的变量, 只不过值不一样.
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
}
}
Ansible Jinja2 模板的更多相关文章
- ansible jinja2模板概述
目录 ansible jinja2模板概述 ansible jinja2模板使用 基本语法 jinja2模板逻辑判断 ansible jinja2管理nginx ansible jinja2管理kee ...
- Ansible Jinja2 模板使用
Ansible Jinja2 模板使用.语法与使用案例 主机规划 添加用户账号 说明: 1. 运维人员使用的登录账号: 2. 所有的业务都放在 /app/ 下「yun用户的家目录」,避免业务数据乱放: ...
- 5.Ansible Jinja2 模板
1.jinja2渲染NginxProxy配置文件 jinja2 房屋建筑设计固定的 jinja2模板与Ansible关系 Ansible如何使用jinja2模板 template模块 拷贝文件? te ...
- 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 ...
随机推荐
- XHR 对象实例所有的配置、属性、方法、回调和不可变值
当我们声明了一个XMLHttpRequest对象的实例的时候,使用for-in来循环遍历一下这个实例(本文使用的是chrome45版本浏览器),我们会发现在这个实例上绑定了一些内容,我把这些内容进行了 ...
- 控件类——Button、UIControlState状态、title及其属性
封装: 封装按钮:1.有提示文字 —>UILable 2.并且可以点击 —> UIControl UIButton:是一个按钮(系统已经把UIControl封装好了). 里面可以放文字. ...
- Java数据结构(一):栈
导言:栈和我们的现实当中的箱子是一样的,保持一个先进后出,后进先出的原则.比如我们往一个箱子堆积衣服,一件一件地放进去之后,过一段时间再回来拿.那么最先放进去的衣服肯定最后拿出来,最后放进去的衣服就会 ...
- ucoreOS_lab5 实验报告
所有的实验报告将会在 Github 同步更新,更多内容请移步至Github:https://github.com/AngelKitty/review_the_national_post-graduat ...
- DevOps 工程师成长日记系列五:部署
原文地址:https://medium.com/@devfire/how-to-become-a-devops-engineer-in-six-months-or-less-part-5-deploy ...
- [b0007] windows 下 eclipse 开发 hdfs程序样例
目的: 学习使用hdfs 的java命令操作 相关: 进化: [b0010] windows 下 eclipse 开发 hdfs程序样例 (二) [b0011] windows 下 eclipse 开 ...
- 将Docker容器转移至另一服务器
1 把当前的容器提交为一个镜像: docker commit 容器名 镜像名 2 将镜像存为tar文件 docker save 镜像名 >备份文件.tar 3将 备份文件.tar 复制到目的主机 ...
- Host '10.133.3.34' is not allowed to connect to this MySQL server mysql 本地拒接连接
mysql 本地拒接连接 解决方案是,把mysql库中的user表的host 改成% 运行所电脑连接 也可以把第一行复制一遍 把localhost改成你要连接电脑的ip(推荐这改,这样安全一点) 改 ...
- 【声明式事务】Spring声明式事务实现(三)
以MyBatis为例. 一.基于注解的声明式事务配置 1. 添加tx名字空间 xmlns:tx="http://www.springframework.org/schema/tx" ...
- luoguP3292 [SCOI2016]幸运数字(倍增做法)
题意 线性基套上树上倍增即可,注意边界. code: #include<bits/stdc++.h> using namespace std; typedef long long ll; ...