如何在Ansible的with_items循环中判断任务执行结果是否失败
解决Ansible with_items循环中基于所有子项结果设置failed_when的问题
当你用with_items循环执行多个命令后,原来的result结构会变成包含results列表的对象,每个列表元素对应一个命令的执行结果。要实现只要有任何一个子命令满足“返回码不为0/1”或“输出包含'err'”就标记整个任务失败,可以借助Jinja2的any()过滤器来遍历所有子项结果进行判断。
直接上可行的代码:
- shell: "{{ item }}" register: result failed_when: > result.results | any( item => item.rc not in [0, 1] or 'err' in item.stdout_lines ) with_items: - ls - df
逻辑解释:
result.results:这是循环执行后存储所有子命令结果的列表,每个元素的结构和单命令执行时的result完全一致(包含rc、stdout_lines等字段)。any()过滤器:只要列表中有任意一个元素满足后面的判断条件,整个表达式就会返回True,触发failed_when。- 判断条件:对每个子项结果,检查两个条件的逻辑或——返回码不在
[0,1]范围内,或者输出行里包含err字符串。
这样就能实现你要的需求:只要有一个子命令不符合预期,整个任务就会标记为失败。
内容的提问来源于stack exchange,提问作者sorin
相关产品推荐
相关产品推荐

