Ansible filter by属性包含一个值
在Ansible中,如何通过对象的属性是否包含值来过滤对象 例如:我想通过过滤Ansible filter by属性包含一个值,ansible,jinja2,Ansible,Jinja2,在Ansible中,如何通过对象的属性是否包含值来过滤对象 例如:我想通过过滤private\u-man对象,返回具有属性name=“a2”的private\u-man对象,其中addr包含“1.2.3.4” 以下是Ansible代码: - hosts: localhost connection: local gather_facts: no vars: network: addresses: private_ext: - na
private\u-man
对象,返回具有属性name=“a2”
的private\u-man
对象,其中addr
包含“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
我尝试了以下方法:
- debug:
msg: "{{ item.name }}"
with_items: "{{ network.addresses.private_man | selectattr('addr', 'in', '1.2.3.4') | list }}"
我希望它显示为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'
您只能在
selectattr
中使用Jinja2测试:例如:
- debug:
msg: "{{ item.name }}"
with_items: "{{ network.addresses.private_man | selectattr('addr','issuperset',['1.2.3.4']) | list }}"
我只是能够使用下面的方法将结果从
ec2\u asg\u事实
缩小到只有那些在launch\u configuration\u name
中具有给定变量值的结果。search
测试似乎没有很好的文档记录,它可能是一个附加组件?我想如果其他人想做类似的事情,我会和大家分享。下面的appRole.name
可能类似于“雇员”或“数据”
意识到我可以“何时”处理列表中的某个项目是一次令人兴奋的经历。这改变了一切!
- name: Narrow my list
set_fact:
asgList: "{{ autoScalingGroupNames.results | selectattr('launch_configuration_name', 'search', appRole.name) | list }}"