Ansible 指定要在playbook中使用的特定回调
我已经为中国的不同行动创建了不同的剧本 我还为不同类型的剧本创建了不同的回调脚本(并用Ansible打包并安装) 剧本将从许多不同的脚本/cron作业中调用 现在,是否可以指定要为特定剧本调用的特定Ansible 指定要在playbook中使用的特定回调,ansible,ansible-playbook,Ansible,Ansible Playbook,我已经为中国的不同行动创建了不同的剧本 我还为不同类型的剧本创建了不同的回调脚本(并用Ansible打包并安装) 剧本将从许多不同的脚本/cron作业中调用 现在,是否可以指定要为特定剧本调用的特定回调脚本?(可能使用命令行参数?) 现在发生的是,每个剧本都会调用所有回调脚本 SHOULD_TRIGGER = false class CallbackModule(object): def playbook_on_play_start(self, name): if n
回调脚本
?(可能使用命令行参数?)
现在发生的是,每个剧本都会调用所有回调脚本
SHOULD_TRIGGER = false
class CallbackModule(object):
def playbook_on_play_start(self, name):
if name == "My Cool Play":
SHOULD_TRIGGER = true
def playbook_on_stats(self, stats):
if SHOULD_TRIGGER == true:
do something cool
我无法将回调脚本相对于playbook的位置/文件夹放置,因为它已经打包在ansible包中。而且,所有的剧本也在同一个位置
如果需要的话,我可以修改一点ansible源代码来适应它。如果使用回调脚本,您可以在这些插件中决定任何playbook是否应该触发某些操作
在playbook\u on\u play\u start
方法中,您可以使用该播放的名称来决定是否应处理进一步的通知
playbook\u on\u stats
然后在playbook的末尾调用
SHOULD_TRIGGER = false
class CallbackModule(object):
def playbook_on_play_start(self, name):
if name == "My Cool Play":
SHOULD_TRIGGER = true
def playbook_on_stats(self, stats):
if SHOULD_TRIGGER == true:
do something cool
请注意,playbook\u on\u play\u start
是为您的playbook中的每个play调用的,因此它可能会被调用多次。在查看Ansible的代码后,我能够用以下方法解决它
在每个callback\u插件中
,您可以指定self.disabled=True
,并且根本不会调用回调
此外,在调用playbook时,还可以选择将额外参数解析为key=value
对。它将作为extra\u vars
字段作为playbook对象的一部分
所以我在我的回调插件中做了类似的事情
def playbook_on_start(self):
callback_plugins = self.playbook.extra_vars.get('callback_plugin', '') // self.playbook is populated in your callback plugin by Ansible.
if callback_plugins not in ['email_reporter', 'all']:
self.disabled = True
在给剧本打电话的时候,我可以这样做
ansible-playbook -e callback_plugin=email_reporter //Note -e is the argument prefix key for extra vars.
谢谢你的回答。。但我需要根据剧本指定回调。不是根据每个剧本。。。同一个剧本可以从2个不同的剧本中调用,回调应该为1调用,而不是为其他剧本调用…只是想确保您理解剧本是什么,因为剧本不能“被调用”。剧本是剧本中的一个条目,每个条目都包含主机、任务/角色和VAR键。大多数剧本只包含一个剧本,但你可以有多个剧本。上述解决方案唯一不起作用的情况是,当你在多个剧本中有同名剧本时。没错。。。我在每个剧本中有多个剧本。。。此外,我还在我的剧本中使用include
语句。这意味着同一个剧本将被包括在许多剧本中。。。所以使用这种方法可能会给我带来问题。。。