2016-07-29 48 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

如果要替換Ansible標準輸出,應該爲您的回調設置stdout_callback參數。

更新: stdout_callback參數僅影響ansible-playbook CLI輸出,正如在註釋中正確指出的那樣。

我已經調查the code了一下,ansible CLI只支持minimaloneline(如果-o選項設置)標準輸出回調。
更改輸出行爲的最簡單方法是將./callback_plugins/minimal.py放置在您的playbook文件夾中,並根據需要對其進行修改。
或者您可以修補adhoc.py以能夠接受其他stdout插件。

+1

似乎隻影響ansible-playbook而不是ansible。 –

+1

@NaftuliTzviKay你是對的,我沒有意識到這一點。我已經更新了關於可能的臨時解決方案的答案。 –

+0

不適用於stdout_callback的'ansible'中的錯誤在更新的版本中被修復並且被反向移植,例如, 2.3.3 https://github.com/ansible/ansible/issues/16194#issuecomment-311340681 – geekQ