diff options
| author | Tim Bielawa <tbielawa@redhat.com> | 2016-09-29 07:32:56 -0700 | 
|---|---|---|
| committer | Tim Bielawa <tbielawa@redhat.com> | 2016-09-29 07:43:54 -0700 | 
| commit | ba823255fcde17124b6dcc447bb00bc241346312 (patch) | |
| tree | f37bc298467beadf3e1d4a722702a346f14de75c | |
| parent | be3a68ae520d518daef2e35553c28cd150d3c344 (diff) | |
| download | openshift-ba823255fcde17124b6dcc447bb00bc241346312.tar.gz openshift-ba823255fcde17124b6dcc447bb00bc241346312.tar.bz2 openshift-ba823255fcde17124b6dcc447bb00bc241346312.tar.xz openshift-ba823255fcde17124b6dcc447bb00bc241346312.zip | |
Fix conflicts in spec file
| -rw-r--r-- | callback_plugins/openshift_quick_installer.py | 115 | ||||
| -rw-r--r-- | openshift-ansible.spec | 25 | ||||
| -rw-r--r-- | utils/Makefile | 4 | ||||
| -rw-r--r-- | utils/etc/ansible-quiet.cfg | 33 | ||||
| -rw-r--r-- | utils/etc/ansible.cfg | 4 | ||||
| -rw-r--r-- | utils/setup.py | 2 | ||||
| -rw-r--r-- | utils/src/MANIFEST.in | 1 | ||||
| -rw-r--r-- | utils/src/ooinstall/cli_installer.py | 3 | ||||
| -rw-r--r-- | utils/src/ooinstall/oo_config.py | 6 | ||||
| -rw-r--r-- | utils/src/ooinstall/openshift_ansible.py | 16 | ||||
| -rw-r--r-- | utils/src/ooinstall/utils.py | 10 | 
11 files changed, 214 insertions, 5 deletions
| diff --git a/callback_plugins/openshift_quick_installer.py b/callback_plugins/openshift_quick_installer.py new file mode 100644 index 000000000..abb22d2fa --- /dev/null +++ b/callback_plugins/openshift_quick_installer.py @@ -0,0 +1,115 @@ +# 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 + + +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 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())) + +    # 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('.') + +    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): +        """Printer 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('.') diff --git a/openshift-ansible.spec b/openshift-ansible.spec index 5e297cb2a..d31447d7a 100644 --- a/openshift-ansible.spec +++ b/openshift-ansible.spec @@ -70,6 +70,9 @@ cp -rp filter_plugins %{buildroot}%{_datadir}/ansible_plugins/  # openshift-ansible-lookup-plugins install  cp -rp lookup_plugins %{buildroot}%{_datadir}/ansible_plugins/ +# openshift-ansible-callback-plugins install +cp -rp callback_plugins %{buildroot}%{_datadir}/ansible_plugins/ +  # create symlinks from /usr/share/ansible/plugins/lookup ->  # /usr/share/ansible_plugins/lookup_plugins  pushd %{buildroot}%{_datadir} @@ -77,6 +80,7 @@ mkdir -p ansible/plugins  pushd ansible/plugins  ln -s ../../ansible_plugins/lookup_plugins lookup  ln -s ../../ansible_plugins/filter_plugins filter +ln -s ../../ansible_plugins/callback_plugins callback  popd  popd @@ -89,6 +93,7 @@ mkdir -p %{buildroot}%{_datadir}/atomic-openshift-utils/  cp etc/ansible.cfg %{buildroot}%{_datadir}/atomic-openshift-utils/ansible.cfg  mkdir -p %{buildroot}%{_mandir}/man1/  cp -v docs/man/man1/atomic-openshift-installer.1 %{buildroot}%{_mandir}/man1/ +cp etc/ansible-quiet.cfg %{buildroot}%{_datadir}/atomic-openshift-utils/ansible-quiet.cfg  popd  # Base openshift-ansible files @@ -122,6 +127,7 @@ Requires:      %{name} = %{version}  Requires:      %{name}-roles = %{version}  Requires:      %{name}-lookup-plugins = %{version}  Requires:      %{name}-filter-plugins = %{version} +Requires:      %{name}-callback-plugins = %{version}  BuildArch:     noarch  %description playbooks @@ -158,6 +164,7 @@ Summary:       Openshift and Atomic Enterprise Ansible roles  Requires:      %{name} = %{version}  Requires:      %{name}-lookup-plugins = %{version}  Requires:      %{name}-filter-plugins = %{version} +Requires:      %{name}-callback-plugins = %{version}  BuildArch:     noarch  %description roles @@ -199,6 +206,22 @@ BuildArch:     noarch  %{_datadir}/ansible_plugins/lookup_plugins  %{_datadir}/ansible/plugins/lookup + +# ---------------------------------------------------------------------------------- +# openshift-ansible-callback-plugins subpackage +# ---------------------------------------------------------------------------------- +%package callback-plugins +Summary:       Openshift and Atomic Enterprise Ansible callback plugins +Requires:      %{name} = %{version} +BuildArch:     noarch + +%description callback-plugins +%{summary}. + +%files callback-plugins +%{_datadir}/ansible_plugins/callback_plugins +%{_datadir}/ansible/plugins/callback +  # ----------------------------------------------------------------------------------  # atomic-openshift-utils subpackage  # ---------------------------------------------------------------------------------- @@ -222,6 +245,8 @@ Atomic OpenShift Utilities includes  %{_bindir}/atomic-openshift-installer  %{_datadir}/atomic-openshift-utils/ansible.cfg  %{_mandir}/man1/* +%{_datadir}/atomic-openshift-utils/ansible-quiet.cfg +  %changelog  * Mon Sep 26 2016 Scott Dodson <sdodson@redhat.com> 3.4.2-1 diff --git a/utils/Makefile b/utils/Makefile index 078d6f184..59aff92fd 100644 --- a/utils/Makefile +++ b/utils/Makefile @@ -80,7 +80,7 @@ ci-pylint:  	@echo "#############################################"  	@echo "# Running PyLint Tests in virtualenv"  	@echo "#############################################" -	. $(NAME)env/bin/activate && python -m pylint --rcfile ../git/.pylintrc src/ooinstall/cli_installer.py src/ooinstall/oo_config.py src/ooinstall/openshift_ansible.py src/ooinstall/variants.py +	. $(NAME)env/bin/activate && python -m pylint --rcfile ../git/.pylintrc src/ooinstall/cli_installer.py src/ooinstall/oo_config.py src/ooinstall/openshift_ansible.py src/ooinstall/variants.py ../callback_plugins/openshift_quick_installer.py  ci-list-deps:  	@echo "#############################################" @@ -93,12 +93,14 @@ ci-pyflakes:  	@echo "# Running Pyflakes Compliance Tests in virtualenv"  	@echo "#################################################"  	. $(NAME)env/bin/activate && pyflakes src/ooinstall/*.py +	. $(NAME)env/bin/activate && pyflakes ../callback_plugins/openshift_quick_installer.py  ci-pep8:  	@echo "#############################################"  	@echo "# Running PEP8 Compliance Tests in virtualenv"  	@echo "#############################################"  	. $(NAME)env/bin/activate && pep8 --ignore=E501,E121,E124 src/$(SHORTNAME)/ +	. $(NAME)env/bin/activate && pep8 --ignore=E501,E121,E124 ../callback_plugins/openshift_quick_installer.py  ci: clean virtualenv ci-list-deps ci-pep8 ci-pylint ci-pyflakes ci-unittests  	: diff --git a/utils/etc/ansible-quiet.cfg b/utils/etc/ansible-quiet.cfg new file mode 100644 index 000000000..0eb0efa49 --- /dev/null +++ b/utils/etc/ansible-quiet.cfg @@ -0,0 +1,33 @@ +# config file for ansible -- http://ansible.com/ +# ============================================== + +# This config file provides examples for running +# the OpenShift playbooks with the provided +# inventory scripts. Only global defaults are +# left uncommented + +[defaults] +# Add the roles directory to the roles path +roles_path = roles/ + +# Set the log_path +log_path = /tmp/ansible.log + +forks = 10 +host_key_checking = False +nocows = 1 + +retry_files_enabled = False + +deprecation_warnings=False + +# Need to handle: +# inventory - derive from OO_ANSIBLE_DIRECTORY env var +# callback_plugins - derive from pkg_resource.resource_filename +# private_key_file - prompt if missing +# remote_tmp - set if provided by user (cli) +# ssh_args - set if provided by user (cli) +# control_path + +stdout_callback = openshift_quick_installer +callback_plugins = /usr/share/ansible_plugins/callback_plugins diff --git a/utils/etc/ansible.cfg b/utils/etc/ansible.cfg index a53ab6cb1..3425e7e62 100644 --- a/utils/etc/ansible.cfg +++ b/utils/etc/ansible.cfg @@ -19,10 +19,12 @@ nocows = 1  retry_files_enabled = False +deprecation_warnings = False +  # Need to handle:  # inventory - derive from OO_ANSIBLE_DIRECTORY env var  # callback_plugins - derive from pkg_resource.resource_filename  # private_key_file - prompt if missing  # remote_tmp - set if provided by user (cli)  # ssh_args - set if provided by user (cli) -# control_path
\ No newline at end of file +# control_path diff --git a/utils/setup.py b/utils/setup.py index eac1b4b2e..563897bb1 100644 --- a/utils/setup.py +++ b/utils/setup.py @@ -62,7 +62,7 @@ setup(      # installed, specify them here.  If using Python 2.6 or less, then these      # have to be included in MANIFEST.in as well.      package_data={ -        'ooinstall': ['ansible.cfg', 'ansible_plugins/*'], +        'ooinstall': ['ansible.cfg', 'ansible-quiet.cfg', 'ansible_plugins/*'],      },      # Although 'package_data' is the preferred approach, in some case you may diff --git a/utils/src/MANIFEST.in b/utils/src/MANIFEST.in index d4153e738..216f57e9c 100644 --- a/utils/src/MANIFEST.in +++ b/utils/src/MANIFEST.in @@ -7,3 +7,4 @@ include DESCRIPTION.rst  # it's already declared in setup.py  include ooinstall/*  include ansible.cfg +include ansible-quiet.cfg diff --git a/utils/src/ooinstall/cli_installer.py b/utils/src/ooinstall/cli_installer.py index 85b4d29cb..81dda2ea4 100644 --- a/utils/src/ooinstall/cli_installer.py +++ b/utils/src/ooinstall/cli_installer.py @@ -25,6 +25,7 @@ installer_file_handler.setLevel(logging.DEBUG)  installer_log.addHandler(installer_file_handler)  DEFAULT_ANSIBLE_CONFIG = '/usr/share/atomic-openshift-utils/ansible.cfg' +QUIET_ANSIBLE_CONFIG = '/usr/share/atomic-openshift-utils/ansible-quiet.cfg'  DEFAULT_PLAYBOOK_DIR = '/usr/share/ansible/openshift-ansible/'  UPGRADE_MAPPINGS = { @@ -883,6 +884,8 @@ def cli(ctx, unattended, configuration, ansible_playbook_directory, ansible_conf          # If we're installed by RPM this file should exist and we can use it as our default:          oo_cfg.settings['ansible_config'] = DEFAULT_ANSIBLE_CONFIG +    oo_cfg.settings['ansible_quiet_config'] = QUIET_ANSIBLE_CONFIG +      oo_cfg.settings['ansible_log_path'] = ctx.obj['ansible_log_path']      ctx.obj['oo_cfg'] = oo_cfg diff --git a/utils/src/ooinstall/oo_config.py b/utils/src/ooinstall/oo_config.py index 393b36f6f..ce0ae8deb 100644 --- a/utils/src/ooinstall/oo_config.py +++ b/utils/src/ooinstall/oo_config.py @@ -308,6 +308,12 @@ class OOConfig(object):          if 'ansible_plugins_directory' not in self.settings:              self.settings['ansible_plugins_directory'] = \                  resource_filename(__name__, 'ansible_plugins') +            installer_log.debug("We think the ansible plugins directory should be: %s (it is not already set)", +                                self.settings['ansible_plugins_directory']) +        else: +            installer_log.debug("The ansible plugins directory is already set: %s", +                                self.settings['ansible_plugins_directory']) +          if 'version' not in self.settings:              self.settings['version'] = 'v2' diff --git a/utils/src/ooinstall/openshift_ansible.py b/utils/src/ooinstall/openshift_ansible.py index 75d26c10a..79c60af82 100644 --- a/utils/src/ooinstall/openshift_ansible.py +++ b/utils/src/ooinstall/openshift_ansible.py @@ -7,6 +7,7 @@ import os  import logging  import yaml  from ooinstall.variants import find_variant +from ooinstall.utils import debug_env  installer_log = logging.getLogger('installer') @@ -225,6 +226,9 @@ def load_system_facts(inventory_file, os_facts_path, env_vars, verbose=False):      Retrieves system facts from the remote systems.      """      installer_log.debug("Inside load_system_facts") +    installer_log.debug("load_system_facts will run with Ansible/Openshift environment variables:") +    debug_env(env_vars) +      FNULL = open(os.devnull, 'w')      args = ['ansible-playbook', '-v'] if verbose \          else ['ansible-playbook'] @@ -232,6 +236,8 @@ def load_system_facts(inventory_file, os_facts_path, env_vars, verbose=False):          '--inventory-file={}'.format(inventory_file),          os_facts_path])      installer_log.debug("Going to subprocess out to ansible now with these args: %s", ' '.join(args)) +    installer_log.debug("Subprocess will run with Ansible/Openshift environment variables:") +    debug_env(env_vars)      status = subprocess.call(args, env=env_vars, stdout=FNULL)      if status != 0:          installer_log.debug("Exit status from subprocess was not 0") @@ -280,17 +286,23 @@ def run_main_playbook(inventory_file, hosts, hosts_to_run_on, verbose=False):      facts_env = os.environ.copy()      if 'ansible_log_path' in CFG.settings:          facts_env['ANSIBLE_LOG_PATH'] = CFG.settings['ansible_log_path'] -    if 'ansible_config' in CFG.settings: -        facts_env['ANSIBLE_CONFIG'] = CFG.settings['ansible_config'] +    if 'ansible_quiet_config' in CFG.settings: +        facts_env['ANSIBLE_CONFIG'] = CFG.settings['ansible_quiet_config'] +    # facts_env["ANSIBLE_CALLBACK_PLUGINS"] = CFG.settings['ansible_plugins_directory'] +      return run_ansible(main_playbook_path, inventory_file, facts_env, verbose)  def run_ansible(playbook, inventory, env_vars, verbose=False): +    installer_log.debug("run_ansible will run with Ansible/Openshift environment variables:") +    debug_env(env_vars) +      args = ['ansible-playbook', '-v'] if verbose \          else ['ansible-playbook']      args.extend([          '--inventory-file={}'.format(inventory),          playbook]) +    installer_log.debug("Going to subprocess out to ansible now with these args: %s", ' '.join(args))      return subprocess.call(args, env=env_vars) diff --git a/utils/src/ooinstall/utils.py b/utils/src/ooinstall/utils.py new file mode 100644 index 000000000..eb27a57e4 --- /dev/null +++ b/utils/src/ooinstall/utils.py @@ -0,0 +1,10 @@ +import logging + +installer_log = logging.getLogger('installer') + + +def debug_env(env): +    for k in sorted(env.keys()): +        if k.startswith("OPENSHIFT") or k.startswith("ANSIBLE") or k.startswith("OO"): +            installer_log.debug("{key}: {value}".format( +                key=k, value=env[k])) | 
