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

Par*_*hot 1 deployment ansible

据我所知, ansible 只在 tasks 级别进行错误处理,这对于我希望它能够做的事情来说真的不够。

具体来说,我的用例是一个普通的部署,所以我需要做的是:

  • 停止服务器
  • 备份必要的资源
  • 尝试部署(这涉及必须按顺序发生的大量任务)
    • 如果失败,则回滚到以前的版本(这又是一组严格排序的任务)
  • 启动服务器

除了我希望能奏效的错误处理方法之外,一切都很好。

- include: deploy.yml
  ignore_errors: yes
  register: deploy
- include: rollback.yml
  when: deploy | failed
Run Code Online (Sandbox Code Playgroud)

......没有。

现在,我可以理解为什么它不会 - 包含任务只会测试它是否可以包含文件,而不是它包含的文件是否可以运行完成。我已经接受了这一点。

不幸的是,这让我陷入了困境。每个操作的自动错误检查,结合高级操作库,是我使用 ansible 的全部原因。但是,在没有成熟的恢复机制的情况下,收到故障通知就不再有用了。

任何人都有(理智的)解决方法?我可以include为它下的每个任务添加一个处理程序,并尝试让它以这种方式工作,但是......真的吗?那不可能是解决方案——或者,更确切地说,我不能继续对人性抱有信心让它成为解决方案。

cee*_*yoz 5

http://www.ansible.com/blog/ansible-2.0-launch

块将异常处理的概念引入剧本,并模仿 Python(和许多其他语言)的 try/except/finally 结构建模。这简化了剧本和任务的开发,在单个剧本中可以比以前更简单地捕获和处理任务失败。