diff options
author | Brian Coca <brian.coca+git@gmail.com> | 2015-05-28 20:01:39 -0400 |
---|---|---|
committer | Brian Coca <brian.coca+git@gmail.com> | 2015-05-28 20:01:39 -0400 |
commit | e7a096c4c53084572adf3c67ccd245919c47e0a8 (patch) | |
tree | 8a844f0d4ea869a12ad86cbac4f4cf989bb98d25 /lib/ansible/utils/display.py | |
parent | e5190327f2131997cae02e57e0c012e69c1a1828 (diff) | |
download | ansible-e7a096c4c53084572adf3c67ccd245919c47e0a8.tar.gz |
cowsay is back!
Diffstat (limited to 'lib/ansible/utils/display.py')
-rw-r--r-- | lib/ansible/utils/display.py | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/lib/ansible/utils/display.py b/lib/ansible/utils/display.py index d5b6ad71a9..6c5e850a70 100644 --- a/lib/ansible/utils/display.py +++ b/lib/ansible/utils/display.py @@ -20,6 +20,9 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type import textwrap +import os +import random +import subprocess import sys from ansible import constants as C @@ -37,6 +40,31 @@ class Display: self._warns = {} self._errors = {} + self.cowsay = None + self.noncow = os.getenv("ANSIBLE_COW_SELECTION",None) + self.set_cowsay_info() + + def set_cowsay_info(self): + + if not C.ANSIBLE_NOCOWS: + if os.path.exists("/usr/bin/cowsay"): + self.cowsay = "/usr/bin/cowsay" + elif os.path.exists("/usr/games/cowsay"): + self.cowsay = "/usr/games/cowsay" + elif os.path.exists("/usr/local/bin/cowsay"): + # BSD path for cowsay + self.cowsay = "/usr/local/bin/cowsay" + elif os.path.exists("/opt/local/bin/cowsay"): + # MacPorts path for cowsay + self.cowsay = "/opt/local/bin/cowsay" + + if self.cowsay and self.noncow == 'random': + cmd = subprocess.Popen([self.cowsay, "-l"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + (out, err) = cmd.communicate() + cows = out.split() + cows.append(False) + self.noncow = random.choice(cows) + def display(self, msg, color=None, stderr=False, screen_only=False, log_only=False): msg2 = msg if color: @@ -125,6 +153,14 @@ class Display: Prints a header-looking line with stars taking up to 80 columns of width (3 columns, minimum) ''' + if self.cowsay: + try: + self.banner_cowsay(msg) + return + except OSError: + # somebody cleverly deleted cowsay or something during the PB run. heh. + pass + msg = msg.strip() star_len = (80 - len(msg)) if star_len < 0: @@ -132,6 +168,20 @@ class Display: stars = "*" * star_len self.display("\n%s %s" % (msg, stars), color=color) + def banner_cowsay(self, msg, color=None): + if ": [" in msg: + msg = msg.replace("[","") + if msg.endswith("]"): + msg = msg[:-1] + runcmd = [self.cowsay,"-W", "60"] + if self.noncow: + runcmd.append('-f') + runcmd.append(self.noncow) + runcmd.append(msg) + cmd = subprocess.Popen(runcmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + (out, err) = cmd.communicate() + self.display("%s\n" % out, color=color) + def error(self, msg): new_msg = "\n[ERROR]: %s" % msg wrapped = textwrap.wrap(new_msg, 79) |