2017-10-12 89 views
0

在Ansible中,如何通过对象的属性是否包含值来过滤对象?例如:我想通过过滤private_man对象(其中addr包含“1.2.3.4”)来返回具有属性name =“a2”的private_man对象。Ansible按属性过滤包含值

这里的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 

我试过如下:

- debug: 
    msg: "{{ item.name }}" 
    with_items: "{{ network.addresses.private_man | selectattr('addr', 'in', '1.2.3.4'}} | list" 

我想到这显示 “A2”,因为A2对象的地址元素包含1.2.3.4

然而,当我运行它时,它完全失败了,可能是因为selectaddr('addr','in','1.2.3.4')无效。

回答

0

这项工作?

- debug: 
     msg: "{{ item.name }}" 
    with_items: "{{network.addresses.private_man}}" 
    when: '"1.2.3.4" in item.addr'