Update reporting on playbook runs.

This commit is contained in:
Michael DeHaan 2012-02-25 15:21:11 -05:00
parent ed97125025
commit a5039eec62
3 changed files with 65 additions and 15 deletions

View file

@ -75,7 +75,7 @@ class Cli(object):
host_list=options.host_list, host_list=options.host_list,
forks=options.forks, forks=options.forks,
pattern=options.pattern, pattern=options.pattern,
verbose=False, verbose=True,
) )
else: else:
return ansible.playbook.PlayBook( return ansible.playbook.PlayBook(
@ -85,7 +85,7 @@ class Cli(object):
remote_pass=sshpass, remote_pass=sshpass,
host_list=options.host_list, host_list=options.host_list,
forks=options.forks, forks=options.forks,
verbose=False, verbose=True
) )
if __name__ == '__main__': if __name__ == '__main__':

View file

@ -14,6 +14,9 @@
notify: notify:
- restart apache - restart apache
- quack like a duck - quack like a duck
- do:
- something that will fail
- command /bin/false
handlers: handlers:
- do: - do:
- restart apache - restart apache

View file

@ -60,6 +60,13 @@ class PlayBook(object):
self.remote_pass = remote_pass self.remote_pass = remote_pass
self.verbose = verbose self.verbose = verbose
# list of changes/invocations/failure counts per host
self.processed = {}
self.dark = {}
self.changed = {}
self.invocations = {}
self.failures = {}
if type(playbook) == str: if type(playbook) == str:
playbook = yaml.load(file(playbook).read()) playbook = yaml.load(file(playbook).read())
self.playbook = playbook self.playbook = playbook
@ -69,11 +76,18 @@ class PlayBook(object):
for pattern in self.playbook: for pattern in self.playbook:
self._run_pattern(pattern) self._run_pattern(pattern)
if self.verbose:
print "\n"
# TODO: return a summary of success & failure counts per node results = {}
# TODO: in bin/ancible, ensure return codes are appropriate for host in self.processed.keys():
results[host] = {
return "complete" 'resources' : self.invocations.get(host, 0),
'changed' : self.changed.get(host, 0),
'dark' : self.dark.get(host, 0),
'failed' : self.failures.get(host, 0)
}
return results
def _get_task_runner(self, def _get_task_runner(self,
pattern=None, pattern=None,
@ -116,10 +130,11 @@ class PlayBook(object):
module_name = tokens[0] module_name = tokens[0]
module_args = tokens[1:] module_args = tokens[1:]
namestr = "%s/%s" % (pattern, comment) if self.verbose:
if conditional: if not conditional:
namestr = "notified/%s" % namestr print "\nTASK [%s]" % (comment)
print "TASK [%s]" % namestr else:
print "\nNOTIFIED [%s]" % (comment)
runner = self._get_task_runner( runner = self._get_task_runner(
pattern=pattern, pattern=pattern,
@ -134,15 +149,43 @@ class PlayBook(object):
ok_hosts = contacted.keys() ok_hosts = contacted.keys()
for host, msg in dark.items(): for host, msg in dark.items():
print "DARK: [%s] => %s" % (host, msg) self.processed[host] = 1
if self.verbose:
print "unreachable: [%s] => %s" % (host, msg)
if not self.dark.has_key(host):
self.dark[host] = 1
else:
self.dark[host] = self.dark[host] + 1
for host, results in contacted.items(): for host, results in contacted.items():
self.processed[host] = 1
failed = False
if module_name == "command": if module_name == "command":
if results.get("rc", 0) != 0: if results.get("rc", 0) != 0:
print "FAIL: [%s/%s] => %s" % (host, comment, results) failed=True
elif results.get("failed", 0) == 1: elif results.get("failed", 0) == 1:
print "FAIL: [%s/%s]" % (host, comment, results) failed=True
if failed:
if self.verbose:
print "failure: [%s] => %s" % (host, results)
if not self.failures.has_key(host):
self.failures[host] = 1
else:
self.failures[host] = self.failures[host] + 1
else:
if self.verbose:
print "ok: [%s]" % host
if not self.invocations.has_key(host):
self.invocations[host] = 1
else:
self.invocations[host] = self.invocations[host] + 1
if results.get('changed', False):
if not self.changed.has_key(host):
self.changed[host] = 1
else:
self.changes[host] = self.changed[host] + 1
# flag which notify handlers need to be run # flag which notify handlers need to be run
subtasks = task.get('notify', []) subtasks = task.get('notify', [])
@ -178,6 +221,11 @@ class PlayBook(object):
tasks = pg['tasks'] tasks = pg['tasks']
handlers = pg['handlers'] handlers = pg['handlers']
self.host_list = pg.get('hosts', '/etc/ansible/hosts')
if self.verbose:
print "PLAY: [%s] from [%s] ********** " % (pattern, self.host_list)
for task in tasks: for task in tasks:
self._run_task(pattern=pattern, task=task, handlers=handlers) self._run_task(pattern=pattern, task=task, handlers=handlers)
for task in handlers: for task in handlers:
@ -190,6 +238,5 @@ class PlayBook(object):
conditional=True conditional=True
) )