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

Ansible无需register任务用set_fact带条件判断列表是否含指定值

Ansible 单任务判断列表包含指定元素的实现方法

你可以直接通过Jinja2过滤器实现需求,无需循环、无需多任务,代码更简洁高效:

- set_fact:
    containB: "{{ val_list | map(attribute='val') | select('equalto', 'B') | list | length > 0 }}"

过滤器逻辑说明:

  • map(attribute='val'):提取val_list所有元素的val字段,生成字符串列表["D", "A", "B", "C"]
  • select('equalto', 'B'):过滤出列表中等于B的元素
  • 转为列表后判断长度是否大于0,结果直接为布尔值,匹配到B时返回true,否则返回false

如果你需要用循环实现的场景,也可以用以下写法,避免非匹配元素覆盖变量值:

- set_fact:
    containB: "{{ containB | default(false) or (item.val == 'B') }}"
  loop: "{{ val_list }}"

你原尝试写法的问题说明:

  1. Jinja2三元表达式X if Y else Z必须补全else分支,你写的语法缺少该部分
  2. 过滤器优先级错误:item.val=='B' | default(false)会先对字符串'B'调用default,而非作用在整个判断表达式上
  3. with_items后缺少冒号,Ansible 2.5及以上版本更推荐使用loop替代with_items

内容的提问来源于stack exchange,提问作者Kucharsky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 22:00:05