Ansible Post 任务执行条件

Ansible Post 任务执行条件

我想知道在什么情况下 Ansiblepost_task会被执行?如果前置任务或角色失败,后置任务会被执行吗?

例如,我想在服务器停止时清理服务器。在下面的脚本中,server_dir如果服务器没有正确停止,会被删除吗?

---

- hosts: webservers

  pre_tasks:
    - shell: echo 'stopping server...'

  roles:
    - { role: stop_server }

  post_tasks:
    - file: path="{{ server_dir }}" state=absent

答案1

当前面的任务失败(即任务的返回代码不为 0)时,下面的任务post_tasks将不会被执行。这是 Ansible 的默认行为,也是 Ansible 设计的一部分:

Ansible 实际上被设计成一个“快速失败”且有序的系统 [...]

Ansible 测试策略

fail-fast意味着一旦一个任务失败,Ansible 将停止整个播放的执行(只要您没有ignore_errors: True为该任务设置参数。)

文档post_tasks不完整,但如果你自己编写一个小的测试剧本和角色,你会看到 Ansible 的行为符合预期。

这是有道理的,因为您可能想要使用pre_taskspost_tasks从集群中删除和添加节点,并且您不希望在角色未无错误执行时将节点添加到集群中。

相关内容