51 lines
1.8 KiB
Python
Executable File
51 lines
1.8 KiB
Python
Executable File
#!/usr/bin/python -tt
|
|
# Author: Toshio Kuratomi <toshio@fedoraproject.org>
|
|
# 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)
|