2016-07-29 6 views
0

ich einen Rückruf wie so definiert haben:Rückrufe für generische Ansible-Läufe?

#!/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}) 

In meinem ansible Config habe ich den Pfad definiert:

[defaults] 
callback_plugins = callback_plugins/ 

Allerdings, wenn ich mein Modul laufen, ich die Standard-ansible Ausgabe sehen nach wie vor :

10.0.0.1 | SUCCESS => { 
    ... 
} 

ich es so renne:

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

Gibt es etwas, was ich tun muss, um meine Ausgabe richtig zu formatieren?

Antwort

5

Wenn Sie die Ansible-Standardausgabe ersetzen möchten, sollten Sie den Parameter stdout_callback auf Ihren Rückruf setzen.

Update: stdout_callback Parameter wirkt sich nur auf ansible-playbook CLI-Ausgabe, wie in den Kommentaren korrekt angegeben.

ich untersucht habe the code ein wenig unterstützt ansible CLI nur minimal und oneline (wenn -o Option gesetzt ist) stdout Rückrufe.
Die einfachste Möglichkeit, das Ausgabeverhalten zu ändern, ist ./callback_plugins/minimal.py in Ihrem Playbook-Ordner zu platzieren und an Ihre Bedürfnisse anzupassen.
Oder Sie können adhoc.py patchen, um andere stdout Plugins akzeptieren zu können.

+1

zurückportiert werden sollte Scheint nur ansible-Textbuch und nicht ansible zu beeinflussen. –

+1

@NaftuliTzviKay du hast Recht, ich war mir dessen nicht bewusst. Ich habe meine Antwort zu einer möglichen Ad-hoc-Lösung aktualisiert. –

+0

Fehler in 'ansible', der stdout_callback nicht respektiert, wird in neueren Versionen behoben und rückportiert, z. 2.3.3 https://github.com/ansible/ansible/issues/16194#issuecomment-311340681 – geekQ