如何在正确的error handling?

从我所知道的来看,只有在任务级别上才能进行error handling,这对于我所希望能够做到的事情来说是不够的。

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

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

除了我希望的error handling方法之外,所有这一切都很好,很花哨。

- include: deploy.yml ignore_errors: yes register: deploy - include: rollback.yml when: deploy | failed 

……不。

现在,我可以理解为什么包含任务只是testing是否可以包含文件,而不是包含的文件是否可以运行完成。 我已经用这个和平了。

不幸的是,这让我陷入了一片腌制。 每个操作的自动错误检查,结合高级操作库,是我使用完全的理由。 但是,在没有成熟的恢复机制的情况下,失败的通知不再有用。

任何人都有(理智的)解决方法? 我可以添加一个处理程序, include每个单一的任务,并试图使其工作,但…真的吗? 这不可能是解决办法 – 或者说,我不能继续对人类有信心, 允许这是一个解决办法。

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

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