指定要在playbook

时间:2015-09-09 04:13:38

标签: ansible ansible-playbook

我为中的不同操作创建了不同的 playbooks

我还为不同类型的Playbooks创建了不同的 Callback Scripts (并将它们与Ansible打包并安装)。

将从许多不同的脚本/ cron作业中调用剧本。

现在,是否可以为特定的剧本指定特定的callback script? (可能使用命令行参数?)

现在正在发生的事情是,为每个剧本调用所有的Callback脚本。

我无法将callback script相对于playbook的位置/文件夹,因为它已经打包在ansible包中。此外,所有剧本也在同一个地方。

如果需要,我可以修改一些ansible源代码以适应它。

2 个答案:

答案 0 :(得分:4)

在完成Ansible的代码之后,我能够用以下内容解决它......

在每个callback_plugin中,您可以指定self.disabled = True,并且根本不会调用回调...

另外,调用一本剧本,可以选择将额外参数解析为key=value对。它将作为extra_vars字段的playbook对象的一部分。

所以我在callback_plugin中做了类似的事。

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.

答案 1 :(得分:1)

如果使用回调脚本,则表示callback plugins,您可以在这些插件中决定是否应该触发某些操作。

playbook_on_play_start方法中,您拥有播放的名称,您可以使用该名称来决定是否应该处理其他通知。

然后在剧本结尾处调用

playbook_on_stats

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_on_play_start,因此可能会多次调用它。