让我们设想一个具有以下角色的剧本:base,monitoring,nginx和另一个只有base和nginx的剧本。
现在我希望监控角色只有在playbook包含nginx角色时才能运行任务,因为为了监控nginx,我必须将一些不同的配置传递给监控服务。
如何执行依赖于另一个角色存在的任务?
答案 0 :(得分:2)
虽然我在评论中的解决方法可能对你有用,但我觉得它仍然不是最好的方法。它不是模块化的。例如,在您更改监控系统的情况下,您需要进入每个角色并检查它是否具有监控组件并更新...不是最佳方式。
或许更好的方法是仍然包含单独的监控角色,但使用 playbook conditionals 执行特定任务。例如, nginx 监视任务仅执行when
此服务器是 [webservers] 组的一部分。或者,当某个变量设置为特定值或满足某些其他适当的条件时。
答案 1 :(得分:0)
可以使用nginx角色的set_fact设置事实(set_fact:nginx = True),然后在监视角色中对其进行检查,并在事实被定义为true时执行任务(当:(定义了(ansible_facts ['nginx']]))和(ansible_facts ['nginx'] == True)。