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. nginx.conf配置详解

    ######Nginx配置文件nginx.conf中文详解##### #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_ ...

  2. mybatis 中的 update 返回值你真的明白吗

    记录源地址:https://www.jianshu.com/p/80270b93082a

  3. mongoDB 文档操作_查

    基本查询命令 find 查找复合条件的所有文档 命令 db.collection.find(query,field) 参数 query 查找条件 格式: {ssss:"xxx"}是 ...

  4. docker_weave

    安装 curl -L git.io/weave -o /usr/local/bin/weave chmod a+x /usr/local/bin/weave 启动 weave weave launch ...

  5. RazorEngine

    目标 使用razorengine编译cshtml页面生静态html 制作一个vs2017的插件,实现右击cshtml文件时,编译该文件. 环境 razorengine4.5 / netframewor ...

  6. LoadRunner【第三篇】录制脚本实践:订票网站

    启动服务 安装好loadrunner,我们就可以实践了. loadrunner自带订票网站,可以方便我们练习, 先把下面两个发送到桌面快捷方式 首先,启动服务,点击下面图标(如果服务无法启动,检查端口 ...

  7. RabbitMQ队列的使用

    为什么要用RabbitMQ 以常见的订单系统为例,用户点击[下单]按钮之后的业务逻辑可能包括:扣减库存.生成相应单据.发红包.发短信通知.在业务发展初期这些逻辑可能放在一起同步执行,随着业务的发展订单 ...

  8. latex 一些使用

    texlive安装 https://blog.csdn.net/qq_38386316/article/details/80272396 管理员权限打开.bat 语言的安装可以减少 texwork 一 ...

  9. SQL中GROUP BY用法示例(转)

    工作中又用到了写SQL 好多年不用了 再拿过来温习下: 不觉豁然开朗 概述 GROUP BY我们可以先从字面上来理解,GROUP表示分组,BY后面写字段名,就表示根据哪个字段进行分组,如果有用Exce ...

  10. django系列 2 :启动应用,目录结构解读

    来源:https://docs.djangoproject.com/en/2.1/intro/tutorial01/ 该教程是创建一个用于投票的网页. 1.使用命令创建site 进入要创建site的目 ...