zoukankan      html  css  js  c++  java
  • ansible——内置变量和Jinjia2 filter

    1.内置变量

     playbook中有许多内置变量,列举几个常用的。
    (1)groups和group_names
    {{ groups }}会打印inventory下面的所有主机和主机组信息
    {{ groups['nginx'] }}打印nginx主机组的信息
    {{ group_names }}打印当前主机所在的groups名称。

    (2)hostvars
    {{ hostvars[host] }}会返回某个主机的变量,需要传入诸暨信息,返回一个JSON字符串

    (3)inventory_hostname和inventory_hostname_short
    {{ inventory_hostname }}返回inventory里定义的主机名
    {{ inventory_hostname_short }}返回inventory文件中主机名的第一部分

    (4)play_hosts和inventory_dir
    {{ play_hosts }}返回当前playbook运行的主机信息
    {{ inventory_dir }}返回当前playbook使用的Inventory目录

    2.Jinjia2 filter

    jinjia2是一个python的模板引擎,主要是受Django模板系统的启发。
    关于Django模板系统的博客:https://www.cnblogs.com/yangmingxianshen/p/8283885.html

    Ansible默认支持Jinjia2语言内置filter。
    Ansible使用jinjia2模板来启动动态表达式和访问变量。
    Jinjia2所有的内置filter:http://jinja.pocoo.org/docs/2.10/templates/#builtin-filters
    当然Ansible不仅仅只支持Jinjia2的过滤器,还有一些自定义的过滤器。

    Ansible中所有过滤器:https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html
    格式化数据的过滤器
    如果你想某个变量转化为json或者是yaml格式(这样playbook就可以直接使用):
      {{ some_variable | to_json }}
      {{ some_variable | to_yaml }}
    如果你想输出对人类更加友好的方式:
      {{ some_variable | to_nice_json }}
      {{ some_variable | to_nice_yaml }}
    我们还可以设置缩进:
      {{ some_variable | to_nice_json (indent = 2)}}
      {{ some_variable | to_nice_yaml (indent = 8)}}
    to_yaml和to_nice_yaml这两个过滤器使用的是PyYAML这个库,它默认80个字符串长度。
    这可能会导致意外的换行符,如果你想避免这种行为,可以配置width属性:
      {{ some_variable | to_yaml (indent = 8, width=1204)}}
      {{ some_variable | to_nice_yaml (indent = 8, width=1204)}}

    如果要解析多文档yaml字符串,使用from_yaml_all可以返回YAML文件的生成。

    tasks:
      - shell: cat /some/path/to/multidoc-file.yaml
        register: result
      - debug:
          msg: '{{ item }}'
        loop: '{{ result.stdout | from_yaml_all | list }}'

    如果我们没有定义一个变量,但是却调用了,这是就会报错:
    可以使用mandatory进行显示检查:
      {{ variable | mandatory }}
    当然,也可以给它一个默认值:
      {{ some_variable | default(5) }}
    如果在变量计算为false或空字符串使用默认值,则必须将第二个参数设置为true。
      {{ lookup('env', 'MY_USER') | default('admin', true) }}

    列表过滤器
    获取最小值:
      {{ list1 | min }}
    获取最大值:
      {{ [3, 4, 2] | max }}
    获取平均值:
      {{ [3, [4, 2] ] | flatten }}
    还可以指定层级:
      {{ [3, [4, [2]] ] | flatten(levels=1) }}

    集合过滤器
    唯一集:
      {{ list1 | unique }}
    并集:
      {{ list1 | union(list2) }}
    交集:
      {{ list1 | intersect(list2) }}
    差集:
      {{ list1 | difference(list2) }}
    对称差集:
      {{ list1 | symmetric_difference(list2) }}

    切片过滤器
    将字典转化为列表:
      {{ dict | dict2items }}
    还可以传入参数:
      {{ files | dict2items(key_name='file', value_name='path') }}

    压缩过滤器
    组合列表:

    - name: give me list combo of two lists
      debug:
       msg: "{{ [1,2,3,4,5] | zip(['a','b','c','d','e','f']) | list }}"

    用尽所有列表:

    - name: give me longest combo of three lists , fill with X
      debug:
        msg: "{{ [1,2,3] | zip_longest(['a','b','c','d','e','f'], [21, 22, 23], fillvalue='X') | list }}
  • 相关阅读:
    六:页面优化
    五:title,keywords,description标签
    专题之一:开篇有益
    通过JavaScript以及ActiveX控件获得客户端的机器名[Z]
    [1]Web Service简介
    (转载)虚拟环境中的隐蔽信道(续)
    虚拟机VMware如何能将屏幕调大
    VMware下Ubuntu上网设置
    基于CPU负载的隐蔽信道 ——> ——>基于网络负载的隐蔽信道
    Ubuntu 12.04终端Terminal快捷方式调用
  • 原文地址:https://www.cnblogs.com/yangmingxianshen/p/12657258.html
Copyright © 2011-2022 走看看