ansible的Filter,ansibleFilter


cat /usr/lib/python2.7/site-packages/jinja2/filters.py  ansible中提供的过滤器

FILTERS = {
    '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
}

自定义过滤器:http://blog.51cto.com/rfyiamcool/1440686

 

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: 获取列表的第一个元素和最后一个元素

出处:https://www.cnblogs.com/wangl-blog/archive/2018/05/07/9002346.html

相关内容

    暂无相关文章