#!/usr/bin/python -tt # Author: Toshio Kuratomi # Copyright: December, 2015 # License: LGPLv3+ import sys from ansible import plugins from ansible.plugins.callback import CallbackBase from ansible.plugins.callback import default from ansible.cli.adhoc import AdHocCLI class ResultAccumulator(CallbackBase): def __init__(self, *args, **kwargs): super(ResultAccumulator, self).__init__(*args, **kwargs) self.host_status = {} def v2_runner_on_unreachable(self, result): self.host_status[result._host.get_name()] = 'unreachable' def v2_runner_on_ok(self, result, *args, **kwargs): if result._result.get('stdout', '').strip() == 'none': self.host_status[result._host.get_name()] = 'not building' else: self.host_status[result._host.get_name()] = 'building' def v2_runner_on_failed(self, result, *args, **kwargs): self.host_status[result._host.get_name()] = 'failed' if __name__ == '__main__': pattern = 'builders' if len(sys.argv) > 1: pattern = ';'.join(sys.argv[1:]) args = [sys.argv[0], pattern, '-f', '30', '-T', '20', '-u', 'root'] args.extend(['-m', 'shell', '-a', 'ps -opid\\\\= --ppid $(pidof -s -x kojid) || echo -n none || ps -u mock -u mockbuilder -opid\\\\=']) cb = ResultAccumulator() cli = AdHocCLI(args, callback=cb) cli.parse() cli.run() for host in sorted(cb.host_status): if cb.host_status[host] == 'unreachable': print('%s down' % host) if cb.host_status[host] == 'not building': print('%s no' % host) if cb.host_status[host] == 'building': print('%s yes' % host) if cb.host_status[host] == 'failed': print('%s: command failed on host' % host)