• ansible使用jinja2模板


    jinja2基本语法

    1. 控制结构 {% %}

                jinja2中的for循环用于迭代Python的数据类型,包括列表,元组和字典

             2.变量取值 {{ }}

                jinja2模板中使用 {{ }} 语法表示一个变量,它是一种特殊的占位符。当利用jinja2进行渲染的时候,它会把这些特殊的占位符进行填充/替换,jinja2支持python中所有的Python数据类型比如列表、字段、对象等。

                所有对变量的操作都必须在{{}}代码块中,{% %}只能使用一些控制语句

            3.注释 {# #}

            4.过滤器

                safe: 渲染时值不转义

               capitialize: 把值的首字母转换成大写,其他子母转换为小写

               lower: 把值转换成小写形式

               upper: 把值转换成大写形式

               title: 把值中每个单词的首字母都转换成大写

               trim: 把值的首尾空格去掉

               striptags: 渲染之前把值中所有的HTML标签都删掉

               join: 拼接多个值为字符串

               replace: 替换字符串的值

               round: 默认对数字进行四舍五入,也可以用参数进行控制

               int: 把值转换成整型

              只需要在变量后面使用管道(|)分割,多个过滤器可以链式调用,前一个过滤器的输出会作为后一个过滤器的输入

    模板实例

    cluster.name: es-cluster
    node.name: node-{{ ansible_default_ipv4['address'].split('.')| last }}
    cluster.initial_master_nodes: node-{{ ansible_default_ipv4['address'].split('.')| last }}
    path.data: {{ es_path_data }}
    path.logs: {{ es_path_logs }}
    network.host: 0.0.0.0
    {% set hosts = [] %} #定义一个Python列表变量
    {% for host in groups['elastic-master'] %} #使用循环控制语句遍历列表 
      {{ hosts.append(host) }}  #对Python列表变量进行操作
    {% endfor %}
    discovery.seed_hosts: {{ hosts }} #输出变量的值
    xpack.security.enabled: true
    xpack.security.http.ssl.enabled: true
    正确模板

         

    cluster.name: es-cluster
    node.name: node-{{ ansible_default_ipv4['address'].split('.')| last }}
    cluster.initial_master_nodes: node-{{ ansible_default_ipv4['address'].split('.')| last }}
    path.data: {{ es_path_data }}
    path.logs: {{ es_path_logs }}
    network.host: 0.0.0.0
    
    {% set seed_hosts = [] %}
    {% for host in groups['elastic'] %}
        {% seed_hosts.append("{{ host }}") %} 
        
    {% endfor %}
    
    discovery.seed_hosts: {{ seed_hosts }}
     
    xpack.security.enabled: true
    xpack.security.http.ssl.enabled: true
    错误模板

       

    cluster.name: es-cluster
    node.name: node-{{ ansible_default_ipv4['address'].split('.')| last }}
    cluster.initial_master_nodes: node-{{ ansible_default_ipv4['address'].split('.')| last }}
    path.data: {{ es_path_data }}
    path.logs: {{ es_path_logs }}
    network.host: 0.0.0.0
    {% set hosts = [] %}
    {% for host in groups['elastic'] %}
      {%  if hosts.append("{{ host }}") %} 
      {% endif %}
    {% endfor %}
    discovery.seed_hosts: {{ hosts }}
    xpack.security.enabled: true
    xpack.security.http.ssl.enabled: true
    错误模板2

       

    jinjia2字符串处理

        使用和python的strip一样,{{ string | trim }} == string.strip()
        python使用函数调用符号.号来进行调用string.strip
        jinjia2使用 | 符号进行调用 {{ string | trim }}

       把一个列表变量拼接成字符串       join函数遍历数组返回一个新的字符串

       zookeeper.connect={{ groups['zookeeper'] |  join(':2181,')  }}:2181 拼接结果:zookeeper.connect=192.168.30.174:2181,192.168.30.175:2181,192.168.30.176:2181

        

     ansible变量声明注意事项

         ansible在vars中声明的变量名称中不能带有横线-号,只能带有下划线_
         flink-history-dir 是错误的,ansible在读取的时候会报错
         flink_history_dir 这样声明变量才可以

         

         

        变量声明不能带.号

         

      变量声明其他规则

              ansible的模板变量渲染后带u(unicode).用template模块渲染,渲染后成了unicode的字符串。这样对应的前端服务无法解析该配置

              - name: Copy setuptools-24.0.2.tar.gz to {{ groups["all"] | to_json }}     ['192.168.1.1','192.168.1.2']

              - name: Copy setuptools-24.0.2.tar.gz to {{ groups["all"]  }}                   [u'192.168.1.1',u'192.168.1.2']

      变量解析带to_json和不带to_json的区别

          

          

        jinjia2遍历数组并操作数组元素

          string方法返回一个新的数组

           

         {% set hosts = [] %}
         {% for host in groups["all"] %}
         {{ hosts.append(host|string+":9100") }}
         {% endfor %}
        - targets: {{ hosts | to_json }}
        labels:
          group: 'client-node-exporter'

    jinjia2过滤模板

         

  • 相关阅读:
    10月9日学习日志
    10月2日学习日志
    11月3日学习日志
    10月5日学习日志
    10月6日学习日志
    10月7日学习日志
    11月4日学习日志
    AccessDatabaseEngine.exe 32位64安装失败问题
    国产各安卓系统接收消息在杀进程后
    SAP容差组
  • 原文地址:https://www.cnblogs.com/yxh168/p/14822773.html
Copyright © 2020-2023  润新知