You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ansible中通过循环索引结合when测试变量值

Ansible过滤字段并输出指定内容的正确实现

原代码的问题点

  1. msg里的fieldIndo是拼写错误,应为fieldInfo
  2. 尝试用map(attribute='field3')| idx获取字段的方式错误,直接通过索引引用即可
  3. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 08:27:41