ansible的Filter

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

本文基於ansible 2.4.2.0版本node

 core.py中核心過濾器python

        # 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地址相關過濾器shell

     # 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

 

'json_query': json_query

mathstuff.py中的數學運算相關的過濾器api

         # 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的filterdom

    'urlsplit': split_url

 

jinjia2 的過濾器 ,路徑/usr/lib/python2.7/site-packages/jinja2/filters.pypython2.7

    '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。ide

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值
相關文章
相關標籤/搜索