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 模板的更多相关文章

  1. ansible jinja2模板概述

    目录 ansible jinja2模板概述 ansible jinja2模板使用 基本语法 jinja2模板逻辑判断 ansible jinja2管理nginx ansible jinja2管理kee ...

  2. Ansible Jinja2 模板使用

    Ansible Jinja2 模板使用.语法与使用案例 主机规划 添加用户账号 说明: 1. 运维人员使用的登录账号: 2. 所有的业务都放在 /app/ 下「yun用户的家目录」,避免业务数据乱放: ...

  3. Ansible Jinja2 模板

    1.jinja2渲染NginxProxy配置文件 jinja2 房屋建筑设计固定的? jinja2模板与Ansible关系 Ansible如何使用jinja2模板 template模块 拷贝文件? t ...

  4. Ansible --05 ansible jinja2

    ansible jinja2 什么是jinjia2模板 jinjia2是Python的全功能模块引擎 Jinjia2与Ansible的关系 Ansible通常会使用jinjia2模板来修改被管理主机的 ...

  5. Ansible_使用jinja2模板部署自定义文件

    一.jinja2简介 1.jinja2模板 1️⃣:Ansible将jinja2模板系统用于模板文件,Ansible还使用jinja2语法来引用playbook中的变量 2️⃣:变量和逻辑表达式置于标 ...

  6. Flask 框架下 Jinja2 模板引擎高层 API 类——Environment

    Environment 类版本: 本文所描述的 Environment 类对应于 Jinja2-2.7 版本.   Environment 类功能: Environment 是 Jinja2 中的一个 ...

  7. Python框架学习之Flask中的Jinja2模板

    前面也提到过在Flask中最核心的两个组件是Werkzeug和Jinja2模板.其中Werkzeug在前一节已经详细说明了.现在这一节主要是来谈谈Jinja2模板. 一.为什么需要引入模板: 在进行软 ...

  8. python操作三大主流数据库(5)python操作mysql⑤使用Jinja2模板提取优化页面展示

    python操作mysql⑤使用Jinja2模板提取优化页面展示 在templates目录下的index.html.cat.html等页面有一些共同的元素,代码比较冗余可以使用模板提取公共代码,在各网 ...

  9. Flask框架(2)-JinJa2模板

    为了把业务逻辑和表现逻辑分开,Flask把表现逻辑移到JinJa2模板,模板是一个包含响应文本的文件.它用占位变量表示动态部分,其具体要从请求上下文才知道. 把真实值替换掉占位变量成为渲染,JinJa ...

随机推荐

  1. 转:logback的使用和logback.xml详解

    一.logback的介绍 Logback是由log4j创始人设计的另一个开源日志组件,官方网站: http://logback.qos.ch.它当前分为下面下个模块: logback-core:其它两 ...

  2. Docker数据挂载

    Docker数据管理 在容器中管理数据主要有两种方式: 数据卷(Volumes) 挂载主机目录(Bind mounts) 数据卷 数据卷是一个可供一个或多个容器使用的特殊目录,它绕过UFS,可以提供很 ...

  3. 前后台分离的 NET Core 通用权限管理系统

    前言 从事软件开发这个行业现在已经有十几年了,项目无论大小权限认证.授权模块总是或多或少有功能需求的,这一块费时费力但是又存在于后台,使用最多的可能是运维人员所以处于出力不讨好的尴尬地位,每次有新的项 ...

  4. CF832D Misha, Grisha and Underground

    有一棵n个节点的树,一共q 次询问 每次询问给定3个点,求两条起点终点在这三个点上且不完全重合的路径的最多公共节点数 简单LCA求距离,令a为汇合点,那么答案就是(dis(a,b) + dis(a,c ...

  5. 【原创】(十三)Linux内存管理之vma/malloc/mmap

    背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...

  6. POJ-1743 Musical Theme(最长不可重叠子串,后缀数组+二分)

    A musical melody is represented as a sequence of N (1<=N<=20000)notes that are integers in the ...

  7. String and Arrays

    Description 有一个N*N的字符矩阵,从上到下依次记为第1行,第2行,--,第N行,从左至右依次记为第1列,第2列,--,第N列.    对于这个矩阵会进行一系列操作,但这些操作只有两类:  ...

  8. ARTS-S golang函数作为参数传递

    函数作为参数传递在单元测试的时候非常有用,看下面的例子. package main import "fmt" func output(f func(string, string, ...

  9. 【Web技术】281- 滴滴开源小程序框架 Mpx2.0

    滴滴Mpx框架负责人@hiyuki,滴滴出行网约车webapp乘客团队的负责人,也是滴滴开源的小程序框架Mpx的负责人和核心作者 Mpx是一款致力于提高小程序开发体验和效率的增强型小程序框架,目前在滴 ...

  10. 【Maven】聚合

    [Maven]聚合 转载: 使用聚合一次能为多个 maven 项目执行命令,而不用到每一个项目下去执行命令. 聚合 pom 的特殊之处 1.packaging 配置 pom <packaging ...