如何防止两个ansible作业针对同一台计算机运行?

时间:2016-04-14 17:51:12

标签: ansible

为了避免意外,我想实施一个防止并发部署到同一目标主机的解决方案。

请记住,我们不希望阻碍从我们自己的计算机而非集中管理服务器部署的能力。

我们只是想确保我们不会同时做同样的事情。

3 个答案:

答案 0 :(得分:4)

您可以检查文件并在执行的主机上删除文件:

 tasks:    
   - stat: path=.ansible_lock_file
     register: lock_file_check

   - fail: msg="ansible is already being run against this host"
     when: lock_file_check.stat.exists

   - file: path=.ansible_lock_file state=touch`

并在剧本结尾删除它

   - file: path=.ansible_lock_file state=touch

答案 1 :(得分:1)

虽然还没有完整的答案,但我的印象是优雅的解决方案是编写一个实现它的回调插件。

但是,我不确定回调API是否允许我注入一些额外的任务来运行,访问ansible变量或在某些条件下中止播放。

https://github.com/ansible/ansible/blob/devel/lib/ansible/plugins/callback/osx_say.py

答案 2 :(得分:0)

虽然锁定文件是一种技术解决方案,但我想提出一个文化解决方案:发出声音的“部署锁定”。

许多开发团队都有一个内部聊天渠道来协调发布;机器人显示任何当前正在发布的版本的状态,开发人员在他们准备部署某些内容时会提及。有时候,这有点形式化,机器人也跟踪谁有锁,甚至维持一个人排队锁定。

您可以与运营团队做同样的事情。它比依靠你编写的代码更容易,更重要的是,它有助于让每个人都在同一个页面上 - 对于更多的聊天系统,它会自动提供更改时间的日志。