通用Ansible的回调运行?

时间:2016-07-29 20:57:49

标签: ansible

我已经定义了一个类似的回调:

import org.apache.tools.ant.filters.ReplaceTokens

copy {
    from 'src/com/comcast/telescope/Telescope.java'
    into 'dist/com/comcast/telescope'
    filter(ReplaceTokens, beginToken:'Tel-', endToken:'-Tel', tokens: [IntVer: interfaceVersion])
 }

在我的Ansible配置中,我定义了路径:

#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-

import sys
import pprint

from ansible.plugins.callback import CallbackBase


class JSONPrettyPrintCallback(CallbackBase):

    printer = pprint.PrettyPrinter(indent=4, stream=sys.stdout)

    def log(self, host, category, data):
        # one json blob to rule them all
        self.printer.pprint({'host': host, 'category': category, 'data': data})

但是,当我运行我的模块时,我仍然会看到默认的Ansible输出:

[defaults]
callback_plugins = callback_plugins/

我这样运行:

10.0.0.1 | SUCCESS => {
    ...
}

我需要做些什么才能正确格式化输出?

2 个答案:

答案 0 :(得分:5)

如果要替换Ansible标准输出,则应将stdout_callback参数设置为回调。

更新: stdout_callback参数将仅影响ansible-playbook CLI输出,正如评论中正确指出的那样。

我已经调查了the codeansible CLI仅支持minimaloneline(如果设置了-o选项)stdout回调。
更改输出行为的最简单方法是将./callback_plugins/minimal.py放入playbook文件夹并根据需要进行修改。
或者您可以修补adhoc.py以便能够接受其他标准插件。

答案 1 :(得分:4)

有一个错误报告https://github.com/ansible/ansible/issues/16194Ansible CLI已在https://github.com/ansible/ansible/pull/26098中修复,以尊重自定义stdout_callback

要使自定义回调正常工作,您需要指定stdout_callbackANSIBLE_STDOUT_CALLBACK env)和bin_ansible_callbacks = YesANSIBLE_LOAD_CALLBACK_PLUGINS env)。

应该将更改反向移植到Ansible 2.2和2.3