我已经定义了一个类似的回调:
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 => {
...
}
我需要做些什么才能正确格式化输出?
答案 0 :(得分:5)
如果要替换Ansible标准输出,则应将stdout_callback参数设置为回调。
更新: stdout_callback参数将仅影响ansible-playbook
CLI输出,正如评论中正确指出的那样。
我已经调查了the code,ansible
CLI仅支持minimal
和oneline
(如果设置了-o
选项)stdout回调。
更改输出行为的最简单方法是将./callback_plugins/minimal.py
放入playbook文件夹并根据需要进行修改。
或者您可以修补adhoc.py
以便能够接受其他标准插件。
答案 1 :(得分:4)
有一个错误报告https://github.com/ansible/ansible/issues/16194和Ansible
CLI已在https://github.com/ansible/ansible/pull/26098中修复,以尊重自定义stdout_callback
。
要使自定义回调正常工作,您需要指定stdout_callback
(ANSIBLE_STDOUT_CALLBACK
env)和bin_ansible_callbacks = Yes
(ANSIBLE_LOAD_CALLBACK_PLUGINS
env)。
应该将更改反向移植到Ansible 2.2和2.3