据我所知,ansible 只进行错误处理在任务层面,这对于我想要它能做的事情来说确实不够。
具体来说,我的用例是普通部署,所以我需要做的是:
- 停止服务器
- 备份必要资源
- 尝试部署(涉及大量必须按顺序进行的任务)
- 如果失败,则回滚到上一个版本(同样,这是一系列严格按顺序执行的任务)
- 启动服务器
一切都很好,除了我希望能够起作用的错误处理方法......
- include: deploy.yml
ignore_errors: yes
register: deploy
- include: rollback.yml
when: deploy | failed
...沒有。
现在,我可以理解为什么它不会 - 包含任务只会测试它是否可以包含文件,而不是它所包含的文件是否可以运行完成。我已经接受了这一点。
不幸的是,这让我陷入了困境。每个操作的自动错误检查,加上高级操作库,是我使用 ansible 的全部原因。但是,由于缺乏成熟的恢复机制,收到故障通知就不再有用了。
有人有(合理的)解决方法吗?我可以为每个任务添加一个处理程序include
,并尝试让其以这种方式工作,但是……真的吗?那不可能是解决方案 - 或者说,我无法继续相信人类和允许其成为解决方案。
答案1
http://www.ansible.com/blog/ansible-2.0-launch
Blocks 将异常处理的概念引入到剧本中,并模仿 Python(和许多其他语言)的 try/except/finally 结构。这简化了剧本和任务的开发,其中可以比以前更简单地在单个剧本中捕获和处理任务失败。