随着ansilbe playbook 用的越来越多,我们也开始接触许多高级filter
例如selectattr
举个例子:
1 2 3 4 5 6 7 8 9 |
--- users: - name: john email: john@example.com - name: jane email: jane@example.com - name: fred email: fred@example.com password: 123!abc |
如果我们执行如下的task
1 2 |
- set_fact: emails: "{{ users | selectattr('password', 'undefined') | map(attribute='email') | list }}" |
首先,我们定义的users会被传递给selectattr
然后会看下我们所有的user重,没有定义password的用户(这里第三个就不满足条件)
然后我们通过map方法将符合调价的用户的email返回给我们
第二个例子:(常用的undefined,equalto,match,search)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
- hosts: localhost connection: local gather_facts: no vars: network: addresses: private_ext: - type: fixed addr: 172.16.2.100 private_man: - type: fixed addr: 172.16.1.100 - type: floating addr: 10.90.80.10 |
然后我们执行如下task
1 2 3 |
- debug: msg={{ network.addresses.private_man | selectattr("type", "equalto", "floating") | map(attribute='addr') | list }} - debug: msg={{ network.addresses.private_man | selectattr("type", "match", "^floating$") | map(attribute='addr') | list }} - debug: msg={{ network.addresses.private_man | selectattr("type", "search", "^floating$") | map(attribute='addr') | list }} |
输出结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
TASK [debug] ******************************************************************* ok: [localhost] => { "msg": [ "10.90.80.10" ] } TASK [debug] ******************************************************************* ok: [localhost] => { "msg": [ "10.90.80.10" ] } TASK [debug] ******************************************************************* ok: [localhost] => { "msg": [ "10.90.80.10" ] } |
本文参考文章:http://www.oznetnerd.com/jinja2-selectattr-filter/
Latest posts by Zhiming Zhang (see all)
- aws eks node 自动化扩展工具 Karpenter - 8月 10, 2022
- ReplicationController and ReplicaSet in Kubernetes - 12月 20, 2021
- public key fingerprint - 5月 27, 2021