Ansible如何为循环添加筛选条件 仅获取count=1对应的subclientName
解决方案
方案1:使用loop+when条件过滤(逻辑直观,适合新手)
直接遍历所有results条目,通过when条件筛选count为1的条目后再输出对应subclientName:
- debug: msg: "{{ item.item.subclientName }}" loop: "{{ countbackupsetName.results }}" # 如果你的count返回值是字符串类型(如之前输出里的带引号"1"),请改成 when: item.count == "1" when: item.count == 1
方案2:使用Jinja过滤器提前筛选(效率更高,减少无效遍历)
通过selectattr过滤器直接筛选出符合条件的条目,再循环:
- debug: msg: "{{ item.item.subclientName }}" loop: "{{ countbackupsetName.results | selectattr('count', 'equalto', 1) | list }}" # 同样如果count是字符串,把equalto的参数改为"1"即可
方案3:一次性获取所有符合条件的名称列表
如果你不需要逐个输出,想直接拿到所有符合条件的subclientName组成的列表,可以用以下写法:
- name: 获取所有count=1的subclientName列表 debug: msg: "{{ countbackupsetName.results | selectattr('count', 'equalto', 1) | map(attribute='item.subclientName') | list }}"
原Jinja代码报错原因
你第一层循环拿到的p已经是countbackupsetName.results中的单个元素对象,不是数组索引,所以不能用countbackupsetName.results[p]的写法,直接访问p.count、p.item即可获取对应属性。
内容的提问来源于stack exchange,提问作者dmitry tailakov
相关产品推荐
相关产品推荐

