我想知道在什么情况下 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 实际上被设计成一个“快速失败”且有序的系统 [...]
fail-fast
意味着一旦一个任务失败,Ansible 将停止整个播放的执行(只要您没有ignore_errors: True
为该任务设置参数。)
文档post_tasks
不完整,但如果你自己编写一个小的测试剧本和角色,你会看到 Ansible 的行为符合预期。
这是有道理的,因为您可能想要使用pre_tasks
并post_tasks
从集群中删除和添加节点,并且您不希望在角色未无错误执行时将节点添加到集群中。