i use playbook runner so:
stats = callbacks.aggregatestats() playbook_cb = callbacks.playbookcallbacks(verbose=1) runner_cb = callbacks.playbookrunnercallbacks(stats, verbose=1) pb = ansible.playbook.playbook( ... # basic info ) results = pb.run()
the results variable contains output following:
{"status": 1, "result": {"127.0.0.1": {"unreachable": 0, "skipped": 0, "ok": 3, "changed": 2, "failures": 0}}}
which fine. need task level output dict shown below:
changed: [127.0.0.1] => {"changed": true, "name": "apache2", "state": "started"}
i tried changing verbosity, not wanted.
after digging around managed output log file so:
from ansible import constants c c.default_log_path = 'project.log' reload(callbacks)
but need access in code.
you can't json format wanted, can same information extending callback classes , write own handlers events interested.
also make sure give classes playbook instance this:
pb = ansible.playbook.playbook( ... # basic info callbacks= playbook_cb, runner_callbacks=runner_cb )
links:
edit: in case solution extend aggregatestat class instead. code examples below provided @tom_sawyyer
from ansible.callbacks import aggregatestats class customaggregatestats(aggregatestats): """ holds stats per-host activity during playbook runs. """ def __init__(self): super(customaggregatestats, self).__init__() self.results = {} def compute(self, runner_results, setup=false, poll=false, ignore_errors=false): """ walk through results , increment stats. """ super(customaggregatestats, self).compute(runner_results, setup, poll, ignore_errors) (host, value) in runner_results.get('contacted', {}).iteritems(): if 'invocation' in value: if value['invocation']['module_name'] == 'service': self.results['service_name'] = value['name'] def summarize(self, host): """ return information particular host """ summarized_info = super(customaggregatestats, self).summarize(host) # adding info need summarized_info['result'] = self.results return summarized_info
and finally:
my_stats = customaggregatestats() pb = ansible.playbook.playbook( ... # basic info stats=my_stats, )
giving output:
{"127.0.0.1": {"skipped": 0, "ok": 3, "changed": 2, "result": {"service_name": "apache2"}, "failures": 0, "unreachable": 0}}