如何在 ansible 中正确处理错误?

如何在 ansible 中正确处理错误?

据我所知,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 结构。这简化了剧本和任务的开发,其中可以比以前更简单地在单个剧本中捕获和处理任务失败。

相关内容