如何在Ansible中通过循环索引结合when测试变量值
Ansible过滤字段并输出指定内容的正确实现
原代码的问题点
msg里的fieldIndo是拼写错误,应为fieldInfo- 尝试用
map(attribute='field3')| idx获取字段的方式错误,直接通过索引引用即可 when条件的写法复杂且错误,无需使用lookup('vars'),直接判断字段值就行
方案1:修正原有循环逻辑
如果你想保留原来的循环思路,修正后的代码如下:
- name: 加载参数文件 ansible.builtin.include_vars: file: /etc/ansible/parms.yaml - name: 条件测试(修正版) ansible.builtin.debug: msg: "{{ fieldInfo[idx].field3 }}" loop: "{{ fieldInfo | map(attribute='field1') | list }}" loop_control: index_var: idx when: fieldInfo[idx].field2 == 'y'
方案2:更简洁的筛选循环(推荐)
直接先筛选出field2值为y的条目,再循环输出对应的field3,逻辑更直观:
- name: 加载参数文件 ansible.builtin.include_vars: file: /etc/ansible/parms.yaml - name: 筛选并输出目标field3内容 ansible.builtin.debug: msg: "{{ item.field3 }}" loop: "{{ fieldInfo | selectattr('field2', 'equalto', 'y') | list }}"
注意事项
你给出的期望输出里包含"msg": "333",但原parms.yaml中第一个条目的field2值是n,不符合y的条件,所以实际运行后只会输出第三个条目的bbbbb。
内容的提问来源于stack exchange,提问作者Jack4Mustangs
相关产品推荐
相关产品推荐

