diff options
Diffstat (limited to 'callback_plugins')
| -rw-r--r-- | callback_plugins/aa_version_requirement.py | 60 | ||||
| -rw-r--r-- | callback_plugins/default.py | 5 | ||||
| -rw-r--r-- | callback_plugins/openshift_quick_installer.py | 28 | 
3 files changed, 69 insertions, 24 deletions
| diff --git a/callback_plugins/aa_version_requirement.py b/callback_plugins/aa_version_requirement.py new file mode 100644 index 000000000..1cca19a45 --- /dev/null +++ b/callback_plugins/aa_version_requirement.py @@ -0,0 +1,60 @@ +#!/usr/bin/python + +""" +This callback plugin verifies the required minimum version of Ansible +is installed for proper operation of the OpenShift Ansible Installer. +The plugin is named with leading `aa_` to ensure this plugin is loaded +first (alphanumerically) by Ansible. +""" +import sys +from ansible import __version__ + +if __version__ < '2.0': +    # pylint: disable=import-error,no-name-in-module +    # Disabled because pylint warns when Ansible v2 is installed +    from ansible.callbacks import display as pre2_display +    CallbackBase = object + +    def display(*args, **kwargs): +        """Set up display function for pre Ansible v2""" +        pre2_display(*args, **kwargs) +else: +    from ansible.plugins.callback import CallbackBase +    from ansible.utils.display import Display + +    def display(*args, **kwargs): +        """Set up display function for Ansible v2""" +        display_instance = Display() +        display_instance.display(*args, **kwargs) + + +# Set to minimum required Ansible version +REQUIRED_VERSION = '2.2.0.0' +DESCRIPTION = "Supported versions: %s or newer" % REQUIRED_VERSION + + +def version_requirement(version): +    """Test for minimum required version""" +    return version >= REQUIRED_VERSION + + +class CallbackModule(CallbackBase): +    """ +    Ansible callback plugin +    """ + +    CALLBACK_VERSION = 1.0 +    CALLBACK_NAME = 'version_requirement' + +    def __init__(self): +        """ +        Version verification is performed in __init__ to catch the +        requirement early in the execution of Ansible and fail gracefully +        """ +        super(CallbackModule, self).__init__() + +        if not version_requirement(__version__): +            display( +                'FATAL: Current Ansible version (%s) is not supported. %s' +                % (__version__, DESCRIPTION), color='red') +            sys.exit(1) diff --git a/callback_plugins/default.py b/callback_plugins/default.py index c64145b5c..97ad77724 100644 --- a/callback_plugins/default.py +++ b/callback_plugins/default.py @@ -30,7 +30,7 @@ DEFAULT_MODULE = imp.load_source(  try:      from ansible.plugins.callback import CallbackBase      BASECLASS = CallbackBase -except ImportError: # < ansible 2.1 +except ImportError:  # < ansible 2.1      BASECLASS = DEFAULT_MODULE.CallbackModule @@ -46,6 +46,7 @@ class CallbackModule(DEFAULT_MODULE.CallbackModule):  # pylint: disable=too-few-      CALLBACK_NAME = 'default'      def __init__(self, *args, **kwargs): +        # pylint: disable=non-parent-init-called          BASECLASS.__init__(self, *args, **kwargs)      def _dump_results(self, result): @@ -57,7 +58,7 @@ class CallbackModule(DEFAULT_MODULE.CallbackModule):  # pylint: disable=too-few-              if key in result:                  save[key] = result.pop(key) -        output = BASECLASS._dump_results(self, result) # pylint: disable=protected-access +        output = BASECLASS._dump_results(self, result)  # pylint: disable=protected-access          for key in ['stdout', 'stderr', 'msg']:              if key in save and save[key]: diff --git a/callback_plugins/openshift_quick_installer.py b/callback_plugins/openshift_quick_installer.py index fc9bfb899..b4c7edd38 100644 --- a/callback_plugins/openshift_quick_installer.py +++ b/callback_plugins/openshift_quick_installer.py @@ -36,30 +36,13 @@ What's different:  """  from __future__ import (absolute_import, print_function) -import imp -import os  import sys  from ansible import constants as C +from ansible.plugins.callback import CallbackBase  from ansible.utils.color import colorize, hostcolor -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 - -reload(sys) -sys.setdefaultencoding('utf-8') - - -class CallbackModule(DEFAULT_MODULE.CallbackModule): +class CallbackModule(CallbackBase):      """      Ansible callback plugin @@ -286,8 +269,9 @@ The only thing we change here is adding `log_only=True` to the          self._display.display("", screen_only=True)          # Some plays are conditional and won't run (such as load -        # balancers) if they aren't required. Let the user know about -        # this to avoid potential confusion. +        # balancers) if they aren't required. Sometimes plays are +        # conditionally included later in the run. Let the user know +        # about this to avoid potential confusion.          if self.plays_total_ran != self.plays_count: -            print("Installation Complete: Note: Play count is an estimate and some were skipped because your install does not require them") +            print("Installation Complete: Note: Play count is only an estimate, some plays may have been skipped or dynamically added")              self._display.display("", screen_only=True) | 
