如果剧本包含角色,则可以运行任务

问题描述 投票:6回答:2

让我们想象一本具有以下角色的剧本:基础,监视,nginx和另一本仅具有base和nginx的剧本。

现在,我希望监视角色仅在剧本包含nginx角色时才运行任务,因为要监视nginx,我必须将一些不同的配置传递给监视服务。

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

ansible ansible-playbook
2个回答
2
投票

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

也许更好的方法是仍然包括一个单独的monitoring角色,但是在那里使用playbook conditionals执行特定任务。例如,nginx监视任务将仅执行when,该服务器是您的[webservers]组的一部分。或者,当某个变量设置为特定值或满足其他一些合适的条件时。


0
投票

[可以通过set_fact设置nginx角色的事实(set_fact:nginx = True),然后在监视角色中对其进行检查,并在事实被定义为true时执行任务(当:(定义了(ansible_facts ['nginx']]))并且(ansible_facts ['nginx'] == True)。

© www.soinside.com 2019 - 2024. All rights reserved.