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