Commit dcb8caf9 by James Cammarata

Remember if we already skipped tasks via --start-at-task

Fixes #12482
parent 57adf112
...@@ -109,7 +109,7 @@ class PlayIterator: ...@@ -109,7 +109,7 @@ class PlayIterator:
FAILED_RESCUE = 4 FAILED_RESCUE = 4
FAILED_ALWAYS = 8 FAILED_ALWAYS = 8
def __init__(self, inventory, play, play_context, variable_manager, all_vars): def __init__(self, inventory, play, play_context, variable_manager, all_vars, start_at_done=False):
self._play = play self._play = play
self._blocks = [] self._blocks = []
...@@ -127,12 +127,16 @@ class PlayIterator: ...@@ -127,12 +127,16 @@ class PlayIterator:
host._gathered_facts = True host._gathered_facts = True
# if we're looking to start at a specific task, iterate through # if we're looking to start at a specific task, iterate through
# the tasks for this host until we find the specified task # the tasks for this host until we find the specified task
if play_context.start_at_task is not None: if play_context.start_at_task is not None and not start_at_done:
while True: while True:
(s, task) = self.get_next_task_for_host(host, peek=True) (s, task) = self.get_next_task_for_host(host, peek=True)
if s.run_state == self.ITERATING_COMPLETE: if s.run_state == self.ITERATING_COMPLETE:
break break
if task.name == play_context.start_at_task or fnmatch.fnmatch(task.name, play_context.start_at_task): if task.name == play_context.start_at_task or fnmatch.fnmatch(task.name, play_context.start_at_task):
# we have our match, so clear the start_at_task field on the
# play context to flag that we've started at a task (and future
# plays won't try to advance)
play_context.start_at_task = None
break break
else: else:
self.get_next_task_for_host(host) self.get_next_task_for_host(host)
......
...@@ -62,6 +62,7 @@ class TaskQueueManager: ...@@ -62,6 +62,7 @@ class TaskQueueManager:
self._callbacks_loaded = False self._callbacks_loaded = False
self._callback_plugins = [] self._callback_plugins = []
self._start_at_done = False
# make sure the module path (if specified) is parsed and # make sure the module path (if specified) is parsed and
# added to the module_loader object # added to the module_loader object
...@@ -203,8 +204,15 @@ class TaskQueueManager: ...@@ -203,8 +204,15 @@ class TaskQueueManager:
play_context=play_context, play_context=play_context,
variable_manager=self._variable_manager, variable_manager=self._variable_manager,
all_vars=all_vars, all_vars=all_vars,
start_at_done = self._start_at_done,
) )
# 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 self._options.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 run the play using the strategy
return strategy.run(iterator, play_context) return strategy.run(iterator, play_context)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment