指定要在playbook中使用的特定回调

Cod*_*der 8 ansible ansible-playbook

我为不同操作创建了不同的剧本.

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

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

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

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

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

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

小智 6

如果您只是通过脚本运行剧本,您可以执行以下操作

ANSIBLE_STDOUT_CALLBACK="json" ansible-playbook -i hosts play.yml

您在运行 ansible-playbook 命令之前将回调设置为环境变量。


Cod*_*der 5

看完Ansible的代码后,我可以使用以下代码解决它...

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

此外,它调用的剧本,有一个选项,以解析额外的参数作为key=value对。它将作为playbook对象的一部分extra_vars

所以我在电脑上做了这样的事情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
Run Code Online (Sandbox Code Playgroud)

在调用剧本的同时,我可以做类似的事情,

ansible-playbook -e callback_plugin=email_reporter //Note -e is the argument prefix key for extra vars.
Run Code Online (Sandbox Code Playgroud)