6

让我们想象一个具有以下角色的 playbook:base、monitoring、nginx 和另一个只有 base 和 nginx 的 playbook。

现在我只想在 playbook 包含 nginx 角色的情况下以监控角色运行任务,因为为了监控 nginx,我必须将一些不同的配置传递给监控服务。

如何执行依赖于另一个角色存在的任务?

4

2 回答 2

2

虽然我在评论中的解决方法可能对你有用,但我觉得这仍然不是最好的方法。它不是模块化的。例如,在您更改监控系统的情况下,您需要进入每个角色并检查它是否具有监控组件并更新......这不是最佳方式。

也许更好的方法是仍然包含一个单独的监控角色,但使用剧本条件执行特定任务。例如,nginx监控任务将只执行when此服务器是您的[webservers]组的一部分。或者当某个变量设置为特定值或满足其他一些适当的条件时。

于 2014-01-20T01:41:16.963 回答
0

可以在 nginx 角色 (set_fact: nginx=True) 中使用 set_fact 设置事实,然后在监控角色中检查它并在事实被定义且为真时执行任务(当:(ansible_facts['nginx'] 被定义时)和(ansible_facts ['nginx'] == 真))。

于 2019-12-10T14:42:37.230 回答