123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- # This program is free software: you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation, either version 3 of the License, or
- # (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
- """
- This file is a stdout callback plugin for the OpenShift Quick
- Installer. The purpose of this callback plugin is to reduce the amount
- of produced output for customers and enable simpler progress checking.
- What's different:
- * Playbook progress is expressed as: Play <current_play>/<total_plays> (Play Name)
- Ex: Play 3/30 (Initialize Megafrobber)
- * The Tasks and Handlers in each play (and included roles) are printed
- as a series of .'s following the play progress line.
- """
- from __future__ import (absolute_import, print_function)
- import imp
- import os
- import sys
- ANSIBLE_PATH = imp.find_module('ansible')[1]
- DEFAULT_PATH = os.path.join(ANSIBLE_PATH, 'plugins/callback/default.py')
- DEFAULT_MODULE = imp.load_source(
- 'ansible.plugins.callback.default',
- DEFAULT_PATH
- )
- try:
- from ansible.plugins.callback import CallbackBase
- BASECLASS = CallbackBase
- except ImportError: # < ansible 2.1
- BASECLASS = DEFAULT_MODULE.CallbackModule
- from ansible import constants as C
- reload(sys)
- sys.setdefaultencoding('utf-8')
- class CallbackModule(DEFAULT_MODULE.CallbackModule):
- """
- Ansible callback plugin
- """
- CALLBACK_VERSION = 2.2
- CALLBACK_TYPE = 'stdout'
- CALLBACK_NAME = 'openshift_quick_installer'
- CALLBACK_NEEDS_WHITELIST = False
- plays_count = 0
- plays_total_ran = 0
- def banner(self, msg, color=None):
- '''
- Prints a header-looking line with stars taking up to 80 columns
- of width (3 columns, minimum)
- '''
- msg = msg.strip()
- star_len = (79 - len(msg))
- if star_len < 0:
- star_len = 3
- stars = "*" * star_len
- self._display.display("\n%s %s" % (msg, stars), color=color, log_only=True)
- def v2_playbook_on_start(self, playbook):
- """This is basically the start of it all"""
- self.plays_count = len(playbook.get_plays())
- self.plays_total_ran = 0
- def v2_playbook_on_play_start(self, play):
- """Each play calls this once before running any tasks
- We could print the number of tasks here as well by using
- `play.get_tasks()` but that is not accurate when a play includes a
- role. Only the tasks directly assigned to a play are directly exposed
- in the `play` object.
- """
- self.plays_total_ran += 1
- print("")
- print("Play %s/%s (%s)" % (self.plays_total_ran, self.plays_count, play.get_name()))
- name = play.get_name().strip()
- if not name:
- msg = "PLAY"
- else:
- msg = "PLAY [%s]" % name
- self.banner(msg)
- # pylint: disable=unused-argument,no-self-use
- def v2_playbook_on_task_start(self, task, is_conditional):
- """This prints out the task header. For example:
- TASK [openshift_facts : Ensure PyYaml is installed] ***...
- Rather than print out all that for every task, we print a dot
- character to indicate a task has been started.
- """
- sys.stdout.write('.')
- # pylint: disable=unused-argument,no-self-use
- def v2_playbook_on_handler_task_start(self, task):
- """Print out task header for handlers
- Rather than print out a header for every handler, we print a dot
- character to indicate a handler task has been started.
- """
- sys.stdout.write('.')
- # pylint: disable=unused-argument,no-self-use
- def v2_playbook_on_cleanup_task_start(self, task):
- """Print out a task header for cleanup tasks
- Rather than print out a header for every handler, we print a dot
- character to indicate a handler task has been started.
- """
- sys.stdout.write('.')
- def v2_playbook_on_include(self, included_file):
- """Print out paths to statically included files"""
- pass
- def v2_runner_on_ok(self, result):
- """This prints out task results in a fancy format"""
- pass
- def v2_runner_item_on_ok(self, result):
- """Print out task results for you're iterating"""
- pass
- def v2_runner_item_on_skipped(self, result):
- """Print out task results when an item is skipped"""
- pass
- def v2_runner_on_skipped(self, result):
- """Print out task results when a task (or something else?) is skipped"""
- pass
- def v2_playbook_on_notify(self, res, handler):
- """What happens when a task result is 'changed' and the task has a
- 'notify' list attached.
- """
- pass
|