Deployment

如何在ansible中進行正確的錯誤處理?

  • June 2, 2017

據我所知,ansible 只在任務級別進行錯誤處理,這對於我希望它能夠做的事情來說確實是不夠的。

具體來說,我的案例是一個普通的部署,所以我需要做的是:

  • 停止伺服器

  • 備份必要的資源

  • 嘗試部署(其中涉及大量必須按順序執行的任務)

    • 如果失敗,則回滾到以前的版本(這又是一堆具有嚴格順序的任務)
  • 啟動伺服器

一切都很好,花花公子,除了我希望能起作用的錯誤處理方法……

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

……沒有。

現在,我可以理解為什麼它不會了——包含任務只會測試它是否可以包含該文件,而不是它包含的文件是否可以執行完成。我已經同意了。

不幸的是,這讓我陷入了困境。每個操作的自動錯誤檢查,結合高級操作庫,是我使用 ansible 的全部原因。但是,在沒有成熟的恢復機制的情況下,收到失敗通知就不再有用了。

有人有(理智的)解決方法嗎?我可以為每個任務添加一個處理程序include並嘗試使其以這種方式工作,但是……真的嗎?那不可能是解決方案——或者,更確切地說,我不能繼續對人類抱有信心允許它成為解決方案。

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

塊將異常處理的概念引入劇本,並模仿 Python(和許多其他語言)的 try/except/finally 結構。這簡化了劇本和任務的開發,其中任務失敗可以比以前更簡單地在單個劇本中擷取和處理。

引用自:https://serverfault.com/questions/748844