为什么我无法使用 changed_when
更改将 failed
返回到 changed
的任务的状态?
例如,我有一个自定义模块,可以让我检查卷是否存在,如果卷不存在,它将失败。
剧本片段:
---
- name: Example ansible playbook
tasks:
- name: Check existence of the volume
custom_name_space_my_volume:
name: ABC #name of the volume
changed_when: true
如果卷 ABC
不存在,则结果为 failed
。但是为什么 change_when: true
没有导致结果返回 changed
呢?
注意:上面的例子可能没有逻辑意义,因为它没有做任何有用的事情。但我只是想用它作为我遇到的问题的样本。
答案 0 :(得分:2)
因为当任务失败时,failed
会覆盖 changed
。
以 shell-module 为例。默认情况下,它会始终显示已更改,因为 ansible 无法确定您的脚本是否执行了任何操作。但它也可能失败,如果脚本退出时出现的错误代码不是 0
。当它这样做时,您希望它显示 failed
而不是 changed
。
为确保您的任务永远不会结束 failed
,您可以添加 failed_when: false
。
---
- name: Example ansible playbook
tasks:
- name: Check existence of the volume
custom_name_space_my_volume:
name: ABC #name of the volume
changed_when: true
failed_when: false
这将使您的任务永远不会显示 failed
,因此最好提供一个合理的表达方式,在它实际失败时将其标记为 failed
。