一、jinj2概述

    1.jinja2模板与Ansible有什么关系
        Ansible通常会使用Jlinja2模板来修改被管理主机的配置文件。例如给10台远程主机都装上httpd服务,但是要求每个服务器的端口不一样,如何解决?

    2.Ansible如何使用inja2模板

      使用ansible的jinja2模板,也就是template模块。该模块和copy模块一样,都是将文件复制到远端主机上去,但是区别在于template模块可以获取要复制的文件中变量的值,而copy则是原封不动的把文件内容复制过去。比如:针对不同的主机定义不同的变量,template会在将配置文件分发出去前读取变量到jinja2模板,然后分发到不同的被管理主机上。
    Ansible使用inja注意事项
    Ansible允许jinja2模板中使用条件判断和循环,但是jinja判断循环语法不允许在playbook中使用。注意:不是每个管理员都需要这个特性,但是有些时慎inja2模板能大大提高效率。

  二、基本使用

   1.循环与判断

          {% if EXPR %}...{% elif EXPR %}...{% endif%} 作为条件判断

        --------------------------------------判断语句
          {% if ansible_fqdn == "web01" %}
            echo "123"
          {% elif ansible_fqdn == "web02" %}
            echo "456"
          {% else %}
            echo "789"
          {% endif %}

        --------------------------------------循环语句
          {% for i in EXPR %}...{% endfor%} 作为循环表达式
          {% for i in range(1,10) %}
            server 172.16.1.{{i}};
          {% endfor %}

        {# COMMENT #} 表示注释

   2.jinja2 渲染 nginx_proxy配置文件   keepalived配置文件

      -------------------nginx_proxy配置文件

        [root@m01 project1]# cat kod_proxy.conf.j2
          upstream {{ server_name }} {
            {% for i in range(1,10) %}
              server 172.16.1.{{i}}:{{http_port}} weight=2;
            {% endfor %}
              }

          server {
            listen {{ http_port }};
            server_name {{ server_name }};
            location / {
              proxy_pass http://{{ server_name }};
              include proxy_params;
              }
            }

      -------------------keepalived配置文件

        [root@m01 project1]# cat keepalived.conf.j2
          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
          }
        }

      ------------------------------判断变量是否有值
        - hosts: webservers
        gather_facts: no
        vars:
          PORT: 13306
        tasks:
          - name: Copy MySQL Configure
          template: src=./my.cnf.j2 dest=/tmp/my.cnf
    ---------------------------------------------
      [root@m01 project1]# cat my.cnf.j2
        {% if PORT %}
          bind-address=0.0.0.0:{{ PORT }}
        {% else %}
          bind-address=0.0.0.0:3306
        {% endif %}

 三、role的基本使用

    1.Ansible Roles目录结构       

       2.Ansible Roles依赖关系    

        

        3.roles的基本操作
        Roles基于一个已知的文件结构 tasks handlers templates .....

        Roles小技巧:
          1.创建roles目录结构,手动或使用ansible-galaxy init test roles
          2.编写roles的功能,也就是tasks。
          3.最后playbook引用roles编写好的tasks。

          [root@m01 project2]# mkdir memcached/{tasks,handlers,templates,vars,files} -pv

          [root@m01 project2]# mkdir {nginx,php-fpm}/{tasks,handlers,templates} -p

        galaxy(默认下载目录,相当与github)
          /root/.ansible/roles

        

ansible笔记第四章(jinj2的使用与role的使用)的更多相关文章

  1. Android群英传笔记——第四章:ListView使用技巧

    Android群英传笔记--第四章:ListView使用技巧 最近也是比较迷茫,但是有一点点还是要坚持的,就是学习了,最近离职了,今天也是继续温习第四章ListView,也拖了其实也挺久的了,list ...

  2. 《Linux内核设计与实现》第八周读书笔记——第四章 进程调度

    <Linux内核设计与实现>第八周读书笔记——第四章 进程调度 第4章 进程调度35 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配 ...

  3. 《Linux内核设计与实现》 第八周读书笔记 第四章 进程调度

    20135307 张嘉琪 第八周读书笔记 第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统.只有 ...

  4. 《Linux内核分析》读书笔记(四章)

    <Linux内核分析>读书笔记(四章) 标签(空格分隔): 20135328陈都 第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行 ...

  5. 4 Visual Effects 视觉效果 读书笔记 第四章

    4   Visual Effects    视觉效果        读书笔记 第四章 Well, circles and ovals are good, but how about drawing r ...

  6. 鸟哥的Linux私房菜笔记第四章

    前言 对着<鸟哥的Linux私房菜-基础版>做了简化笔记.不想让自己知其然而不知其所然.所以写个博客让自己好好巩固一下,当然不可能把书中的内容全部写下来.在这里就简化一点把命令写下来. 让 ...

  7. 《Linux内核设计与实现》读书笔记 第四章 进程调度

    第四章进程调度 进程调度程序可看做在可运行太进程之间分配有限的处理器时间资源的内核子系统.调度程序是多任务操作系统的基础.通过调度程序的合理调度,系统资源才能最大限度地发挥作用,多进程才会有并发执行的 ...

  8. 《利用python进行数据分析》读书笔记--第四章 numpy基础:数组和矢量计算

    http://www.cnblogs.com/batteryhp/p/5000104.html 第四章 Numpy基础:数组和矢量计算 第一部分:numpy的ndarray:一种多维数组对象 实话说, ...

  9. Getting Started With Hazelcast 读书笔记(第四章)

    第四章 分而治之 在指导了如何进行基本使用之后,又再次进入理论模块. Hazelcast的基本策略就是切片分区,默认是271个片.内置一个 partition table记录那个节点是那个分区,并在h ...

  10. [Python学习笔记][第四章Python字符串]

    2016/1/28学习内容 第四章 Python字符串与正则表达式之字符串 编码规则 UTF-8 以1个字节表示英语字符(兼容ASCII),以3个字节表示中文及其他语言,UTF-8对全世界所有国家需要 ...

随机推荐

  1. 新一代自动化利器-DrissionPage

    熟悉的小伙伴知道我的工作有相当一部分是自动化,在探索相关的技术上一直没停下脚步,我痛恨selenium.playwright的非标准内核机制,也曾对clicknium引进了新的问题无语,以及接口爬取数 ...

  2. LG P3768 简单的数学题

    \(\text{Problem}\) 求 \[\left(\sum_{i=1}^n \sum_{j=1}^n i j \gcd(i,j)\right) \bmod p \] \(n \le 10^{1 ...

  3. [COCI2010-2011#6] STEP

    题目大意 维护一个 \(01\) 序列最长的连续相邻两个数不同的子序列的长度 解析 很裸的线段树题... 要维护的信息很多 区间长度 区间最左端点 区间最右端点 区间最长前缀 区间最长后缀 区间最终的 ...

  4. CCRD_TOC_2007_EULAR专辑_2

    中信国健临床通讯 EULAR 2007专辑II 目录 类风湿关节炎 1 Etanercept联合MTX治疗RA导致炎症与骨破坏进展之间的失关联也见于单关节水平:来自TEMPO的研究数据 Landewe ...

  5. Python连接hadoop-hive连接方法

    import impala.dbapi as ipdbconn = ipdb.connect(host='IP', port= 端口, database='数据库名', auth_mechanism= ...

  6. docker下netcore内存dump

    一般开发阶段可以通过visualstudio来检查程序的内存 .cup等的优化问题.vs下调试=>性能探查器,这里面大有千秋. 但是好多内存问题是经过时间积累下来才暴露出来的,在生产环境中不做不 ...

  7. nginx部署+将安装包打包到requirements.txt文件中

      pip freeze > requirements.txt 将在虚拟环境中安装的包记录到requirements.txt里 详解见https://www.jianshu.com/p/dba8 ...

  8. Jmeter 如何把 时间戳 转为 本地时间

    一.引入主题(time) jmeter中,有很多已经封装好的函数,使用这些函数,就能实现某些特定的功能,这对于没有代码基础,或代码基础薄弱的同学来说,是一个非常大的福音. 二.Jmeter把时间戳转为 ...

  9. windows 10 更新代理

    安装 Windows 更新 Windows 更新扫描.下载.安装,每一部分都采用独立的服务. Windows 更新客户端利用 Windows HTTP 服务(WinHTTP)扫描可用更新: Backg ...

  10. mybatis处理多对一的映射关系

    创建数据库t_emp和t_dept 创建对应实体类 package org.example.entity; public class Emp { private Integer empId; priv ...