一、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. xampp修改mysql数据库密码(测试成功)

    转载: http://www.360doc.com/content/17/0608/14/8797027_661063783.shtml ------------------------------- ...

  2. 基于Docker部署Dubbo+Nacos服务

    一.说明 本文介绍基于 Docker 部署一套 Dubbo + Nacos 的微服务环境,并解决容器里的 IP 及端口的访问问题. 基于上文<基于jib-maven-plugin快速构建微服务d ...

  3. Vite 项目添加 Sass/Scss 并配置全局样式

    (1)在 Vite 项目里,只需要安装 sass: npm i -D sass (2)Sass 的全局变量,需要在vite.config.ts配置一项: css: { preprocessorOpti ...

  4. Collection集合类(Java)

    Collection集合体系 1,Collection集合分为两大类List集合和Set集合 List系列集合特点: 有序,可重复,有索引 ArrayList:有序,可重复,有索引. LinkedLi ...

  5. C#的闭包捕获变量与英语中Nice to meet you的联系

    看标题有种"意大利面与42号混凝土"放在一起说的感觉,实际上,就是. 闭包捕获变量 我们都知道在C#里,闭包捕获的是变量,而不是变量值本身 每个Task在运行的时候,发现i的值是3 ...

  6. Linux的终端(base),进入base环境

    正常界面,如下 带有(base) 一般是由于安装了conda环境管理软件,它自带一个base环境.第一次安装时出现这种情况可能是由于软件将启动base环境的命令写入-/.bashrc 文件,这就相当于 ...

  7. ABAP PDF 打印

    SPAN { font-family: "Courier New"; font-size: 10pt; color: rgba(0, 0, 0, 1); background: r ...

  8. 查询自增ID断点的地方

    方法一 SELECT id+1 AS ID FROM table WHERE id+1 not in (SELECT id FROM table);

  9. centos 修改ip

    TYPE=EthernetPROXY_METHOD=noneBROWSER_ONLY=noBOOTPROTO=staticDEFROUTE=yesIPV4_FAILURE_FATAL=noIPV6IN ...

  10. RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu!

    错误原因:数据有的在cpu上有的在gpu上debug:断点到出错位置查看类型,或者打印`x.is_cuda`查看修改:将cpu上的数据通过`.to(device)`加载到gpu上