From 154754ae50c90ec88865e3e35f026718161dbefd Mon Sep 17 00:00:00 2001 From: Brian Coca Date: Tue, 25 Aug 2015 18:10:03 -0400 Subject: [PATCH] pushed module_loader to task_queue_manager so all cli's can benefit from it also normalized -M option across all cli fixes #12016 --- lib/ansible/cli/__init__.py | 9 +++++---- lib/ansible/cli/adhoc.py | 3 ++- lib/ansible/cli/doc.py | 3 +-- lib/ansible/cli/playbook.py | 1 + lib/ansible/cli/pull.py | 1 + lib/ansible/executor/playbook_executor.py | 7 ------- lib/ansible/executor/task_queue_manager.py | 8 +++++++- 7 files changed, 17 insertions(+), 15 deletions(-) diff --git a/lib/ansible/cli/__init__.py b/lib/ansible/cli/__init__.py index e8811dbe946..9c9fa82458c 100644 --- a/lib/ansible/cli/__init__.py +++ b/lib/ansible/cli/__init__.py @@ -220,7 +220,7 @@ class CLI(object): setattr(parser.values, option.dest, os.path.expanduser(value)) @staticmethod - def base_parser(usage="", output_opts=False, runas_opts=False, meta_opts=False, runtask_opts=False, vault_opts=False, + def base_parser(usage="", output_opts=False, runas_opts=False, meta_opts=False, runtask_opts=False, vault_opts=False, module_opts=False, async_opts=False, connect_opts=False, subset_opts=False, check_opts=False, inventory_opts=False, epilog=None, fork_opts=False): ''' create an options parser for most ansible scripts ''' @@ -241,10 +241,11 @@ class CLI(object): parser.add_option('-l', '--limit', default=C.DEFAULT_SUBSET, dest='subset', help='further limit selected hosts to an additional pattern') - if runtask_opts: - parser.add_option('-M', '--module-path', dest='module_path', - help="specify path(s) to module library (default=%s)" % C.DEFAULT_MODULE_PATH, default=None, + if module_opts: + parser.add_option('-M', '--module-path', dest='module_path', default=None, + help="specify path(s) to module library (default=%s)" % C.DEFAULT_MODULE_PATH, action="callback", callback=CLI.expand_tilde, type=str) + if runtask_opts: parser.add_option('-e', '--extra-vars', dest="extra_vars", action="append", help="set additional variables as key=value or YAML/JSON", default=[]) diff --git a/lib/ansible/cli/adhoc.py b/lib/ansible/cli/adhoc.py index 58180e3ccd5..80318eadf22 100644 --- a/lib/ansible/cli/adhoc.py +++ b/lib/ansible/cli/adhoc.py @@ -46,6 +46,7 @@ class AdHocCLI(CLI): runtask_opts=True, vault_opts=True, fork_opts=True, + module_opts=True, ) # options unique to ansible ad-hoc @@ -87,7 +88,7 @@ class AdHocCLI(CLI): self.options.ask_pass = False sshpass = None - becomepass = None + becomepass = None vault_pass = None self.normalize_become_options() diff --git a/lib/ansible/cli/doc.py b/lib/ansible/cli/doc.py index 4e5941850de..ea77d4e2b9b 100644 --- a/lib/ansible/cli/doc.py +++ b/lib/ansible/cli/doc.py @@ -46,10 +46,9 @@ class DocCLI(CLI): self.parser = CLI.base_parser( usage='usage: %prog [options] [module...]', epilog='Show Ansible module documentation', + module_opts=True, ) - self.parser.add_option("-M", "--module-path", action="store", dest="module_path", default=C.DEFAULT_MODULE_PATH, - help="Ansible modules/ directory") self.parser.add_option("-l", "--list", action="store_true", default=False, dest='list_dir', help='List available modules') self.parser.add_option("-s", "--snippet", action="store_true", default=False, dest='show_snippet', diff --git a/lib/ansible/cli/playbook.py b/lib/ansible/cli/playbook.py index 156477ddb0d..d8e7f6761bc 100644 --- a/lib/ansible/cli/playbook.py +++ b/lib/ansible/cli/playbook.py @@ -48,6 +48,7 @@ class PlaybookCLI(CLI): runtask_opts=True, vault_opts=True, fork_opts=True, + module_opts=True, ) # ansible playbook specific opts diff --git a/lib/ansible/cli/pull.py b/lib/ansible/cli/pull.py index 01e3b90bffe..3b61c473c35 100644 --- a/lib/ansible/cli/pull.py +++ b/lib/ansible/cli/pull.py @@ -53,6 +53,7 @@ class PullCLI(CLI): runtask_opts=True, subset_opts=True, inventory_opts=True, + module_opts=True, ) # options unique to pull diff --git a/lib/ansible/executor/playbook_executor.py b/lib/ansible/executor/playbook_executor.py index 96833d5c173..39b89de10b9 100644 --- a/lib/ansible/executor/playbook_executor.py +++ b/lib/ansible/executor/playbook_executor.py @@ -28,7 +28,6 @@ from ansible import constants as C from ansible.errors import * from ansible.executor.task_queue_manager import TaskQueueManager from ansible.playbook import Playbook -from ansible.plugins import module_loader from ansible.template import Templar from ansible.utils.color import colorize, hostcolor @@ -52,12 +51,6 @@ class PlaybookExecutor: self._options = options self.passwords = passwords - # make sure the module path (if specified) is parsed and - # added to the module_loader object - if options.module_path is not None: - for path in options.module_path.split(os.pathsep): - module_loader.add_directory(path) - if options.listhosts or options.listtasks or options.listtags or options.syntax: self._tqm = None else: diff --git a/lib/ansible/executor/task_queue_manager.py b/lib/ansible/executor/task_queue_manager.py index 25546b21de6..b023200a512 100644 --- a/lib/ansible/executor/task_queue_manager.py +++ b/lib/ansible/executor/task_queue_manager.py @@ -31,7 +31,7 @@ from ansible.executor.process.worker import WorkerProcess from ansible.executor.process.result import ResultProcess from ansible.executor.stats import AggregateStats from ansible.playbook.play_context import PlayContext -from ansible.plugins import callback_loader, strategy_loader +from ansible.plugins import callback_loader, strategy_loader, module_loader from ansible.template import Templar __all__ = ['TaskQueueManager'] @@ -62,6 +62,12 @@ class TaskQueueManager: self._callbacks_loaded = False self._callback_plugins = [] + # make sure the module path (if specified) is parsed and + # added to the module_loader object + if options.module_path is not None: + for path in options.module_path.split(os.pathsep): + module_loader.add_directory(path) + # a special flag to help us exit cleanly self._terminated = False