2016-07-29 14 views
0

私はそうのようなコールバックを定義しています一般的な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/ 

しかし、私はまだデフォルトAnsibleの出力を参照してください:

10.0.0.1 | SUCCESS => { 
    ... 
} 

私はこのようにそれを実行している:

ansible all -u myuser -m script -a 'path/to/script.py' 

出力を正しくフォーマットするために必要なことはありますか?

答えて

5

標準出力を置き換える場合は、コールバックにstdout_callbackパラメータを設定する必要があります。

更新: stdout_callbackパラメータは、ansible-playbookのCLI出力にのみ影響し、コメントに正しく記載されています。

は私がthe codeを少し検討してきた、ansible CLIはminimaloneline-oオプションが設定されている場合)、標準出力コールバックをサポートしています。
出力動作を変更する最も簡単な方法は、./callback_plugins/minimal.pyをプレイブックフォルダに置き、必要に応じて変更することです。
adhoc.pyにパッチを適用して、他のstdoutプラグインを受け入れることができます。

+1

の両方にバックポートされなければならないだけansible-脚本とansibleない影響を及ぼしているようです。 –

+1

@ NaftuliTzviあなたは正しいです、私はこれを知らなかった。私は可能なアドホックな解決策に関する私の答えを更新しました。 –

+0

stdout_callbackを尊重しない 'ansible'のバグは、新しいバージョンで修正され、バックポートされています。 2.3.3 https://github.com/ansible/ansible/issues/16194#issuecomment-311340681 – geekQ

3

https://github.com/ansible/ansible/issues/16194Ansibleと報告されたバグがありました。stdout_callbackを尊重するためにCLIがちょうどhttps://github.com/ansible/ansible/pull/26098に修正されました。

カスタムコールバックを動作させるには、stdout_callbackANSIBLE_STDOUT_CALLBACKenv)とbin_ansible_callbacks = YesANSIBLE_LOAD_CALLBACK_PLUGINSenv)の両方を指定する必要があります。

変更がAnsible 2.2と2.3