在 Ansible 中,如何根据对象的属性是否包含值来过滤对象?
例如:我想通过过滤contains的对象来返回private_man具有属性的对象。name="a2"private_manaddr"1.2.3.4"
这是 Ansible 代码:
- hosts: localhost
connection: local
gather_facts: no
vars:
network:
addresses:
private_ext:
- name: a1
addr:
- 1.2.3.4
private_man:
- name: a2
addr:
- 10.10.20.30
- 1.2.3.4
- name: a3
addr:
- 10.90.80.10
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法:
- debug:
msg: "{{ item.name }}"
with_items: "{{ network.addresses.private_man | selectattr('addr', 'in', '1.2.3.4') | list }}"
Run Code Online (Sandbox Code Playgroud)
我预计会显示此内容,a2因为 a2 对象的 addr 元素包含1.2.3.4
然而,当我运行这个时,它完全失败了,可能是因为selectaddr('addr', 'in', '1.2.3.4')无效。
这行得通吗?
- debug:
msg: "{{ item.name }}"
with_items: "{{network.addresses.private_man}}"
when: '"1.2.3.4" in item.addr'
Run Code Online (Sandbox Code Playgroud)
您只能在以下位置使用 Jinja2 测试selectattr:
http://jinja.pocoo.org/docs/2.9/templates/#builtin-tests
http://docs.ansible.com/ansible/latest/playbooks_tests.html
对于你的例子:
- debug:
msg: "{{ item.name }}"
with_items: "{{ network.addresses.private_man | selectattr('addr','issuperset',['1.2.3.4']) | list }}"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11855 次 |
| 最近记录: |