filter的格式:   value..| filter()  在python中就是类的实例化 filter(self,*args,**kwargs) self就是filter中管道符前的value。

本文基于ansible 2.4.2.0版本

core.py中核心过滤器

        # jinja2 overrides
        'groupby': do_groupby, # base 64
'b64decode': b64decode,
'b64encode': b64encode, # uuid
'to_uuid': to_uuid, # json
'to_json': to_json,
'to_nice_json': to_nice_json,
'from_json': json.loads, # yaml
'to_yaml': to_yaml,
'to_nice_yaml': to_nice_yaml,
'from_yaml': from_yaml, # date
'to_datetime': to_datetime, # path
'basename': partial(unicode_wrap, os.path.basename),
'dirname': partial(unicode_wrap, os.path.dirname),
'expanduser': partial(unicode_wrap, os.path.expanduser),
'realpath': partial(unicode_wrap, os.path.realpath),
'relpath': partial(unicode_wrap, os.path.relpath),
'splitext': partial(unicode_wrap, os.path.splitext),
'win_basename': partial(unicode_wrap, ntpath.basename),
'win_dirname': partial(unicode_wrap, ntpath.dirname),
'win_splitdrive': partial(unicode_wrap, ntpath.splitdrive), # value as boolean
'bool': to_bool, # date formating
'strftime': strftime, # quote string for shell usage
'quote': quote, # hash filters
# md5 hex digest of string
'md5': md5s,
# sha1 hex digeset of string
'sha1': checksum_s,
# checksum of string as used by ansible for checksumming files
'checksum': checksum_s,
# generic hashing
'password_hash': get_encrypted_password,
'hash': get_hash, # file glob
'fileglob': fileglob, # regex
'regex_replace': regex_replace,
'regex_escape': regex_escape,
'regex_search': regex_search,
'regex_findall': regex_findall, # ? : ;
'ternary': ternary, # list
# random stuff
'random': rand,
'shuffle': randomize_list,
# undefined
'mandatory': mandatory, # merge dicts
'combine': combine, # comment-style decoration
'comment': comment, # array and dict lookups
'extract': extract, # debug
'type_debug': lambda o: o.__class__.__name__,

ipaddr.py中的ip地址相关过滤器

     # IP addresses and networks
'ipaddr': ipaddr,
'ipwrap': ipwrap,
'ip4_hex': ip4_hex,
'ipv4': ipv4,
'ipv6': ipv6,
'ipsubnet': ipsubnet,
'next_nth_usable': next_nth_usable,
'network_in_network': network_in_network,
'network_in_usable': network_in_usable,
'nthhost': nthhost,
'previous_nth_usable': previous_nth_usable,
'slaac': slaac, # MAC / HW addresses
'hwaddr': hwaddr,
'macaddr': macaddr

json_query.py中json过滤器

'json_query': json_query

mathstuff.py中的数学运算相关的过滤器

         # general math
'min': min,
'max': max, # exponents and logarithms
'log': logarithm,
'pow': power,
'root': inversepower, # set theory
'unique': unique,
'intersect': intersect,
'difference': difference,
'symmetric_difference': symmetric_difference,
'union': union, # combinatorial
'permutations': itertools.permutations,
'combinations': itertools.combinations, # computer theory
'human_readable': human_readable,
'human_to_bytes': human_to_bytes, # zip
'zip': zip,
'zip_longest': zip_longest,

network.py中网络相关的filter

        'parse_cli': parse_cli,
'parse_cli_textfsm': parse_cli_textfsm

urlsplit.py中的url的filter

    'urlsplit': split_url

jinjia2 的过滤器 ,路径/usr/lib/python2.7/site-packages/jinja2/filters.py

    'attr':                 do_attr,
'replace': do_replace,
'upper': do_upper,
'lower': do_lower,
'escape': escape,
'e': escape,
'forceescape': do_forceescape,
'capitalize': do_capitalize,
'title': do_title,
'default': do_default,
'd': do_default,
'join': do_join,
'count': len,
'dictsort': do_dictsort,
'sort': do_sort,
'length': len,
'reverse': do_reverse,
'center': do_center,
'indent': do_indent,
'title': do_title,
'capitalize': do_capitalize,
'first': do_first,
'last': do_last,
'map': do_map,
'random': do_random,
'reject': do_reject,
'rejectattr': do_rejectattr,
'filesizeformat': do_filesizeformat,
'pprint': do_pprint,
'truncate': do_truncate,
'wordwrap': do_wordwrap,
'wordcount': do_wordcount,
'int': do_int,
'float': do_float,
'string': soft_unicode,
'list': do_list,
'urlize': do_urlize,
'format': do_format,
'trim': do_trim,
'striptags': do_striptags,
'select': do_select,
'selectattr': do_selectattr,
'slice': do_slice,
'batch': do_batch,
'sum': do_sum,
'abs': abs,
'round': do_round,
'groupby': do_groupby,
'safe': do_mark_safe,
'xmlattr': do_xmlattr,
'urlencode': do_urlencode

ternary(value,true_val,false_val):  传入三个值,如果value是true,则return true_val,否则return false_val。

def ternary(value, true_val, false_val):
''' value ? true_val : false_val '''
if bool(value):
return true_val
else:
return false_val
playbook示例
---
- name: ternary
hosts: localhost
tasks:
- name: set value
set_fact:
a: true
b: "if a true"
c: "if a false"
- name: debug
debug:
var: a|ternary(b,c)
... ################
脚本的执行
[root@node-1 filters_test]# ansible-playbook ternary_test.yml PLAY [ternary] ********************************************************************************* TASK [set value] *******************************************************************************
ok: [localhost] TASK [debug] ***********************************************************************************
ok: [localhost] => {
"a|ternary(b,c)": "if a true"
} PLAY RECAP *************************************************************************************
localhost : ok=2 changed=0 unreachable=0 failed

strftime的当前时间的用法

def strftime(string_format, second=None):
''' return a date string using string. See https://docs.python.org/2/library/time.html#time.strftime for format '''
if second is not None:
try:
second = int(second)
except:
raise errors.AnsibleFilterError('Invalid value for epoch value (%s)' % second)
return time.strftime(string_format, time.localtime(second))
如果要用指定时间则strftime(second)
示例:
- name: get time
set_fact:
curtime: "{{ '%Y-%m-%d %H:%M:%S'|strftime }}"

select、map和type_debug的用法

select('funtion_name', 'regexp') function可以是filter,map,reduce等
value|type_debug 类似type(value)获取值的数据类型 ---
- hosts: localhost
gather_facts: true
tasks:
- debug: msg="{{ ansible_interfaces|select('match','^eth|wlan[0-9]+')|list }}" # match、search、map获取的都是迭代器,需要list一下变成列表
- debug: msg="{{ ansible_interfaces|select('search','eth|wlan[0-9]+')|list }}"
- debug: msg="{{ ansible_interfaces|map('upper')|list }}" # map('func','args','arg2') map(attribute='key')      
- debug: msg="{{ ansible_interfaces + [\"VETH-1\",\"VETH-2\"] }}"  #列表的扩展方法之一 字符串也可以这么扩展
- debug: msg="{{ ansible_interfaces|type_debug }}" ##################################################################
PLAY [localhost] *******************************************************************************
TASK [Gathering Facts] *************************************************************************
ok: [localhost]
TASK [debug] ***********************************************************************************
ok: [localhost] => {}
MSG:
[u'eth1', u'eth0'] TASK [debug] ***********************************************************************************
ok: [localhost] => {}
MSG:
[u'eth1', u'eth0', u'br-eth1', u'br-eth0'] TASK [debug] ***********************************************************************************
ok: [localhost] => {}
MSG:
[u'BR-VXLAN', u'OVS-SYSTEM', u'BR-STORAGEPUB', u'BR-EX-HAPR', u'BR-MGMT-HAPR', u'ETH1', u'ETH0', u'BR-ETH1', u'LO', u'IFB0', u'VXLAN_SYS_4789', u'BR-ROLLER', u'BR-PRV', u'BR-TUN', u'BR-INT', u'BR-BM', u'TAP0', u'BR-IPMI', u'HAPR-HOST', u'BR-ETH0', u'BR-STORAGE', u'BR-MGMT', u'BR-EX'] TASK [debug] ***********************************************************************************
ok: [localhost] => {}
MSG:
[u'br-vxlan', u'ovs-system', u'br-storagepub', u'br-ex-hapr', u'br-mgmt-hapr', u'eth1', u'eth0', u'br-eth1', u'lo', u'ifb0', u'vxlan_sys_4789', u'br-roller', u'br-prv', u'br-tun', u'br-int', u'br-bm', u'tap0', u'br-ipmi', u'hapr-host', u'br-eth0', u'br-storage', u'br-mgmt', u'br-ex', u'VETH-1', u'VETH-2'] TASK [debug] ***********************************************************************************
ok: [localhost] => {}
MSG:
list PLAY RECAP *************************************************************************************
localhost : ok=6 changed=0 unreachable=0 failed=0

first和last: 获取列表的第一个元素和最后一个元素

sort 可以对可迭代对象进行排序,类似列表
sort(value, reverse=False, case_sensitive=False, attribute=None) - name: find
find:
paths: /etc/nova
patterns: 'nova.conf.*'
register: find_out
- debug: var=(find_out.files|sort(attribute='mtime')|last).path 此示例 根据查找/etc/nova/中 nova.conf.*的文件,然后根据mtime进行排序,最后抓出last元素的path值

ansible的Filter的更多相关文章

  1. ansible配置文件详解

    # ansible配置文件配置 配置项介绍 , 配置文件ansible.cfg, 运行playbook时,默认时在yaml文件所在路径寻找,然后再去/etc/ansible/下寻找 [defaults ...

  2. 初探ansible

    Ansible 基于ssh的自动化运维工具 ansible 配置文件详解 ansible.cfg 文件 文件默认放置在/etc/ansible下,ansible读取配置文件的顺序是: 当前命令执行目录 ...

  3. 002. Ansible部署及配置介绍

    一 Ansible的安装部署 1.1 PIP方式 安装PIP 略,可参考<001.Pip简介及使用>. 提示:建议将PIP升级到最新:pip install --upgrade pip. ...

  4. Ansible配置文件

    官方配置文件文档 Ansible安装完成之后默认配置文件为:/etc/asnible/ansible.cfg Ansible配置文件内容: cat ansible.cfg # config file ...

  5. ansible Developing Plugins

    Action plugins是模块的前端,可以在调用模块本身之前对控制器执行操作. Cache plugins用于保存“facts”的缓存,以避免代价高昂的fact-gathering操作. Call ...

  6. ansible 2.1.0 api 编程

    pdf文档 https://media.readthedocs.org/pdf/ansible/latest/ansible.pdf api介绍 http://blog.csdn.net/python ...

  7. 《Ansible自动化运维:技术与佳实践》第二章读书笔记

    Ansible 安装与配置 本章主要讲的是 Ansible 安装与基本配置,主要包含以下内容: Ansible 环境准备 安装 Ansible 配置运行环境 Ansible 环境准备 从 GitHub ...

  8. ansible 配置文件设置

    目录 ansible 配置文件设置 一.ansible configuration settings 二.ansible 配置文件查找顺序(从上到下,依次查找) 三.附录ansible配置参数 ans ...

  9. ansible笔记(二)--配置文件详解

    配置文件ansible.cfg约有350行语句,大多数为注释行默认配置项.该文件遵循INI格式,分为如下几类配置.(1)[defaults] [defaults] # inventory = /etc ...

随机推荐

  1. Python——Flask框架

    Flask框架相关知识构架 程序的基本结构 模板 Web表单 数据库 电子邮件 程序的结构 用户认证

  2. ubuntu only enable left click

    xmodmap -e "pointer = 1 0 0 0 0 0 0 0 0 0"

  3. rest framework 序列化

    serializers 序列化组件 可以实现很轻松的互相转换,最常用的组件 ,用量最大的组件 源码位置 rest_framework.serializers 源码中需要用到的    rest_fram ...

  4. H5与APP混合开发相关知识点总结

    整理一: 现在有这么个需求,如下图 app端点击右上角的 加 号 ,弹出模态框 这个项目是基于vue写的,客户端需要调用H5页面里定义的js方法,但是在vue里,所有的方法都是在组件内部声明的,也只能 ...

  5. Souvenir Shop 解题报告

    Souvenir Shop 魔幻题目,这谁搞得到啊... 考场上完全sb了写了个线段树合并,想必我是个复杂度分析都没学过的入门级选手 发现这个网格图dag它的出度最多只有2 如果按照先走朝上的一条边进 ...

  6. 「LibreOJ NOI Round #1」验题

    麻烦的动态DP写了2天 简化题意:给树,求比给定独立集字典序大k的独立集是哪一个 主要思路: k排名都是类似二分的按位确定过程. 字典序比较本质是LCP下一位,故枚举LCP,看多出来了多少个独立集,然 ...

  7. Aerospike-内存和硬盘混合存储的kv数据库

    为什么会有Aerospike? Redis是一个纯内存型数据库,性能上没有多大问题. 但这又带来一个新问题,内存是很贵的,所以全内存的存储成本非常昂贵.为了节省成本,我们需要把一部分不经常用到的数据存 ...

  8. Vue基础之es6

    什么是ECMAScript,以及es6的诞生? 1997年 ECMAScript 1.0 诞生 1999年12月 ECMAScript 3.0诞生,它 是一个巨大的成功,在业界得到了广泛的支持,它奠定 ...

  9. CopyOnWriteArrayList真的完全线程安全吗

    我之前书上看到的说法是:Vector是相对线程安全,CopyOnWriteArrayList是绝对线程安全 这种说法其实有些问题,CopyOnWriteArrayList在某些场景下还是会报错的 Co ...

  10. 共通脚本utils

    /** * 模块名:共通脚本 * 程序名: 通用工具函数 **/ var utils = {}; /** * 格式化字符串 * 用法: .formatString("{0}-{1}" ...