mirror of
https://github.com/ansible-collections/community.general.git
synced 2026-05-07 05:42:50 +00:00
Save the command line arguments into a global context
* Once cli args are parsed, they're constant. So, save the parsed args
into the global context for everyone else to use them from now on.
* Port cli scripts to use the CLIARGS in the context
* Refactor call to parse cli args into the run() method
* Fix unittests for changes to the internals of CLI arg parsing
* Port callback plugins to use context.CLIARGS
* Got rid of the private self._options attribute
* Use context.CLIARGS in the individual callback plugins instead.
* Also output positional arguments in default and unixy plugins
* Code has been simplified since we're now dealing with a dict rather
than Optparse.Value
This commit is contained in:
@@ -22,6 +22,7 @@ __metaclass__ = type
|
||||
import os
|
||||
|
||||
from ansible import constants as C
|
||||
from ansible import context
|
||||
from ansible.executor.task_queue_manager import TaskQueueManager
|
||||
from ansible.module_utils._text import to_native, to_text
|
||||
from ansible.playbook import Playbook
|
||||
@@ -42,19 +43,20 @@ class PlaybookExecutor:
|
||||
basis for bin/ansible-playbook operation.
|
||||
'''
|
||||
|
||||
def __init__(self, playbooks, inventory, variable_manager, loader, options, passwords):
|
||||
def __init__(self, playbooks, inventory, variable_manager, loader, passwords):
|
||||
self._playbooks = playbooks
|
||||
self._inventory = inventory
|
||||
self._variable_manager = variable_manager
|
||||
self._loader = loader
|
||||
self._options = options
|
||||
self.passwords = passwords
|
||||
self._unreachable_hosts = dict()
|
||||
|
||||
if options.listhosts or options.listtasks or options.listtags or options.syntax:
|
||||
if context.CLIARGS.get('listhosts') or context.CLIARGS.get('listtasks') or \
|
||||
context.CLIARGS.get('listtags') or context.CLIARGS.get('syntax'):
|
||||
self._tqm = None
|
||||
else:
|
||||
self._tqm = TaskQueueManager(inventory=inventory, variable_manager=variable_manager, loader=loader, options=options, passwords=self.passwords)
|
||||
self._tqm = TaskQueueManager(inventory=inventory, variable_manager=variable_manager,
|
||||
loader=loader, passwords=self.passwords)
|
||||
|
||||
# Note: We run this here to cache whether the default ansible ssh
|
||||
# executable supports control persist. Sometime in the future we may
|
||||
@@ -127,7 +129,7 @@ class PlaybookExecutor:
|
||||
templar = Templar(loader=self._loader, variables=all_vars)
|
||||
play.post_validate(templar)
|
||||
|
||||
if self._options.syntax:
|
||||
if context.CLIARGS['syntax']:
|
||||
continue
|
||||
|
||||
if self._tqm is None:
|
||||
@@ -218,15 +220,15 @@ class PlaybookExecutor:
|
||||
if self._loader:
|
||||
self._loader.cleanup_all_tmp_files()
|
||||
|
||||
if self._options.syntax:
|
||||
if context.CLIARGS['syntax']:
|
||||
display.display("No issues encountered")
|
||||
return result
|
||||
|
||||
if self._options.start_at_task and not self._tqm._start_at_done:
|
||||
if context.CLIARGS['start_at_task'] and not self._tqm._start_at_done:
|
||||
display.error(
|
||||
"No matching task \"%s\" found. "
|
||||
"Note: --start-at-task can only follow static includes."
|
||||
% self._options.start_at_task
|
||||
"No matching task \"%s\" found."
|
||||
" Note: --start-at-task can only follow static includes."
|
||||
% context.CLIARGS['start_at_task']
|
||||
)
|
||||
|
||||
return result
|
||||
|
||||
@@ -24,6 +24,7 @@ import os
|
||||
import tempfile
|
||||
|
||||
from ansible import constants as C
|
||||
from ansible import context
|
||||
from ansible.errors import AnsibleError
|
||||
from ansible.executor.play_iterator import PlayIterator
|
||||
from ansible.executor.stats import AggregateStats
|
||||
@@ -65,25 +66,25 @@ class TaskQueueManager:
|
||||
RUN_FAILED_BREAK_PLAY = 8
|
||||
RUN_UNKNOWN_ERROR = 255
|
||||
|
||||
def __init__(self, inventory, variable_manager, loader, options, passwords, stdout_callback=None, run_additional_callbacks=True, run_tree=False):
|
||||
def __init__(self, inventory, variable_manager, loader, passwords, stdout_callback=None, run_additional_callbacks=True, run_tree=False, forks=None):
|
||||
|
||||
self._inventory = inventory
|
||||
self._variable_manager = variable_manager
|
||||
self._loader = loader
|
||||
self._options = options
|
||||
self._stats = AggregateStats()
|
||||
self.passwords = passwords
|
||||
self._stdout_callback = stdout_callback
|
||||
self._run_additional_callbacks = run_additional_callbacks
|
||||
self._run_tree = run_tree
|
||||
self._forks = forks or 5
|
||||
|
||||
self._callbacks_loaded = False
|
||||
self._callback_plugins = []
|
||||
self._start_at_done = False
|
||||
|
||||
# make sure any module paths (if specified) are added to the module_loader
|
||||
if options.module_path:
|
||||
for path in options.module_path:
|
||||
if context.CLIARGS.get('module_path', False):
|
||||
for path in context.CLIARGS['module_path']:
|
||||
if path:
|
||||
module_loader.add_directory(path)
|
||||
|
||||
@@ -214,7 +215,7 @@ class TaskQueueManager:
|
||||
loader=self._loader,
|
||||
)
|
||||
|
||||
play_context = PlayContext(new_play, self._options, self.passwords, self._connection_lockfile.fileno())
|
||||
play_context = PlayContext(new_play, self.passwords, self._connection_lockfile.fileno())
|
||||
if (self._stdout_callback and
|
||||
hasattr(self._stdout_callback, 'set_play_context')):
|
||||
self._stdout_callback.set_play_context(play_context)
|
||||
@@ -239,7 +240,7 @@ class TaskQueueManager:
|
||||
)
|
||||
|
||||
# adjust to # of workers to configured forks or size of batch, whatever is lower
|
||||
self._initialize_processes(min(self._options.forks, iterator.batch_size))
|
||||
self._initialize_processes(min(self._forks, iterator.batch_size))
|
||||
|
||||
# load the specified strategy (or the default linear one)
|
||||
strategy = strategy_loader.get(new_play.strategy, self)
|
||||
@@ -259,7 +260,7 @@ class TaskQueueManager:
|
||||
# during initialization, the PlayContext will clear the start_at_task
|
||||
# field to signal that a matching task was found, so check that here
|
||||
# and remember it so we don't try to skip tasks on future plays
|
||||
if getattr(self._options, 'start_at_task', None) is not None and play_context.start_at_task is None:
|
||||
if context.CLIARGS.get('start_at_task') is not None and play_context.start_at_task is None:
|
||||
self._start_at_done = True
|
||||
|
||||
# and run the play using the strategy and cleanup on way out
|
||||
|
||||
Reference in New Issue
Block a user