From 85e0de5bb2f9b758c150699eaaa3f091cfbf321a Mon Sep 17 00:00:00 2001 From: Michael DeHaan Date: Tue, 6 Mar 2012 19:24:36 -0500 Subject: [PATCH] Move print statements out of playbook.py and back into CLI so we can simplify playbook operations independent of output, and can also see all the output nicely grouped together if we want to reformat it or make summaries of statistics. --- bin/ansible-playbook | 29 +++++++++++++++++++++++++++++ hacking/env-setup | 3 ++- lib/ansible/playbook.py | 23 ++++++++++------------- 3 files changed, 41 insertions(+), 14 deletions(-) diff --git a/bin/ansible-playbook b/bin/ansible-playbook index 05d555b4dd9..08d56117f6c 100755 --- a/bin/ansible-playbook +++ b/bin/ansible-playbook @@ -21,11 +21,39 @@ import sys import ansible.playbook import ansible.constants as C +from ansible.utils import * import getpass from optparse import OptionParser ####################################################### +class PlaybookCallbacks(object): + + def __init__(self): + pass + + def set_playbook(self, playbook): + self.playbook = playbook + + def on_start(self): + print "\n" + + def on_task_start(self, name, is_conditional): + print task_start_msg(name, is_conditional) + + def on_unreachable(self, host, msg): + print "unreachable: [%s] => %s" % (host, msg) + + def on_failed(self, host, results): + print "failed: [%s] => %s\n" % (host, smjson(results)) + + def on_ok(self, host): + print "ok: [%s]\n" % (host) + + def on_play_start(self, pattern): + print "PLAY [%s] ****************************\n" % pattern + + def main(args): ''' run ansible-playbook operations ''' @@ -60,6 +88,7 @@ def main(args): forks=options.forks, verbose=True, remote_pass=sshpass, + callbacks=PlaybookCallbacks() ) pb.run() diff --git a/hacking/env-setup b/hacking/env-setup index ca049f0775c..812f269e1ca 100755 --- a/hacking/env-setup +++ b/hacking/env-setup @@ -1,5 +1,5 @@ # -*- mode: shell-script -*- -PREFIX_PYTHONPATH="`pwd`/lib/ansible:`pwd`/lib" +PREFIX_PYTHONPATH="`pwd`/lib" PREFIX_PATH="`pwd`/bin" PREFIX_MANPATH="`pwd`/docs/man" PREFIX_ANS_LIBRARY="`pwd`/library" @@ -9,6 +9,7 @@ export PYTHONPATH=$PREFIX_PYTHONPATH:$PYTHONPATH echo "Prefixing PATH with $PREFIX_PATH" export PATH=$PREFIX_PATH:$PATH +echo $PATH echo "Prefixing MANPATH with $PREFIX_MANPATH" export MANPATH=$PREFIX_MANPATH:$MANPATH diff --git a/lib/ansible/playbook.py b/lib/ansible/playbook.py index 390b75b2910..a1ca5a641b6 100755 --- a/lib/ansible/playbook.py +++ b/lib/ansible/playbook.py @@ -50,7 +50,8 @@ class PlayBook(object): timeout =C.DEFAULT_TIMEOUT, remote_user =C.DEFAULT_REMOTE_USER, remote_pass =C.DEFAULT_REMOTE_PASS, - verbose=False): + verbose=False, + callbacks=None): # TODO, once ansible-playbook is it's own script this will # have much LESS parameters to the constructor and will @@ -64,6 +65,8 @@ class PlayBook(object): self.remote_user = remote_user self.remote_pass = remote_pass self.verbose = verbose + self.callbacks = callbacks + self.callbacks.set_playbook(self) # store the list of changes/invocations/failure counts # as a dictionary of integers keyed off the hostname @@ -131,10 +134,9 @@ class PlayBook(object): ''' run all patterns in the playbook ''' # loop through all patterns and run them + self.callbacks.on_start() for pattern in self.playbook: self._run_pattern(pattern) - if self.verbose: - print "\n" # summarize the results results = {} @@ -200,8 +202,7 @@ class PlayBook(object): # as the result of a change handler on a subset # of all of the hosts - if self.verbose: - print task_start_msg(name, conditional) + self.callbacks.on_task_start(name, conditional) # load up an appropriate ansible runner to # run the task in parallel @@ -222,8 +223,7 @@ class PlayBook(object): for host, msg in dark.items(): self.processed[host] = 1 - if self.verbose: - print "unreachable: [%s] => %s" % (host, msg) + self.callbacks.on_unreachable(host, msg) if not host in self.dark: self.dark[host] = 1 else: @@ -233,15 +233,13 @@ class PlayBook(object): self.processed[host] = 1 if is_failed(results): - if self.verbose: - print "failed: [%s] => %s\n" % (host, smjson(results)) + self.callbacks.on_failed(host, results) if not host in self.failures: self.failures[host] = 1 else: self.failures[host] = self.failures[host] + 1 else: - if self.verbose: - print "ok: [%s]\n" % host + self.callbacks.on_ok(host) if not host in self.invocations: self.invocations[host] = 1 else: @@ -297,8 +295,7 @@ class PlayBook(object): self.host_list, groups = ansible.runner.Runner.parse_hosts(self.host_list) - if self.verbose: - print "PLAY [%s] ****************************\n" % pattern + self.callbacks.on_play_start(pattern) # first run the setup task on every node, which gets the variables # written to the JSON file and will also bubble facts back up via