如果任务结果失败,changed_when 不起作用

时间:2021-04-29 06:49:46

标签: ansible

为什么我无法使用 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 呢?

注意:上面的例子可能没有逻辑意义,因为它没有做任何有用的事情。但我只是想用它作为我遇到的问题的样本。

1 个答案:

答案 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