我正在运行 Ansible 2.0,我可以只运行它,但我也可能被我的经验测试欺骗相信一些不正确的东西,而且我找不到任何文档告诉我什么时候应该运行处理程序。
如果处理程序在任务结束时没有运行,这就是我的难题。我有一本包含 5 个角色的剧本,我想在末尾添加一个 6 个角色,该角色需要在开始之前完成第 4 个角色的处理程序。
有没有办法运行 Ansible 以在执行其他操作之前依赖处理程序完成(即角色完全完成),还是我使用处理程序错误?
我正在运行 Ansible 2.0,我可以只运行它,但我也可能被我的经验测试欺骗相信一些不正确的东西,而且我找不到任何文档告诉我什么时候应该运行处理程序。
如果处理程序在任务结束时没有运行,这就是我的难题。我有一本包含 5 个角色的剧本,我想在末尾添加一个 6 个角色,该角色需要在开始之前完成第 4 个角色的处理程序。
有没有办法运行 Ansible 以在执行其他操作之前依赖处理程序完成(即角色完全完成),还是我使用处理程序错误?
处理程序被执行:
meta: flush_handlers
任务时因此,“要在需要具有第 4 个角色的处理程序的末尾添加一个 6 个角色”,您需要:
include_role
或者添加一个元任务并在模块中包含第 6 个角色:对于您的用例,我建议使用第一种方法,因为该
include_role
模块仍然很新鲜,并且在使用它时有一些怪癖(请参阅SO 上的这个问题)。此外,请注意处理程序的名称和监听调用是全局的,因此如果两个不同角色的处理程序具有相同的名称并且两个角色在一次播放中分配,则它们将发生冲突。(参考处理程序:在更改时运行操作)
经验证明(运行此 shell 脚本以确认处理程序在播放结束时执行 - 这里有相互矛盾的评论和答案):
结果:
播放修改为包含
meta: flush_handlers
:结果:
1)做同样事情的处理程序应该命名相同。
restart nginx
总是重新启动 nginx,而handler1
不是handler2
2)处理程序在整个“播放”的末尾运行,播放范围为您的部分。
3)我会使用
register
andwhen
函数来处理应该重新启动的任务,注意这个 var 应该随身携带。代码源
有很多方法可以完成相同的任务。处理程序旨在防止多次重新启动同一进程,例如对具有网站、ssl 证书和其他需要重新启动服务的任务的 nginx 服务器进行多次更改。