Adding back --start-at-task feature

Also implemented framework for --step, though it's not used yet
This commit is contained in:
James Cammarata 2015-07-14 15:02:20 -04:00
parent f6c64a8c00
commit 8d887d8dd3
3 changed files with 21 additions and 4 deletions

View file

@ -60,12 +60,12 @@ class PlaybookCLI(CLI):
# ansible playbook specific opts
parser.add_option('--list-tasks', dest='listtasks', action='store_true',
help="list all tasks that would be executed")
parser.add_option('--step', dest='step', action='store_true',
help="one-step-at-a-time: confirm each task before running")
parser.add_option('--start-at-task', dest='start_at',
help="start the playbook at the task matching this name")
parser.add_option('--list-tags', dest='listtags', action='store_true',
help="list all available tags")
parser.add_option('--step', dest='step', action='store_true',
help="one-step-at-a-time: confirm each task before running")
parser.add_option('--start-at-task', dest='start_at_task',
help="start the playbook at the task matching this name")
self.options, self.args = parser.parse_args()

View file

@ -177,6 +177,8 @@ class ConnectionInformation:
self.no_log = False
self.check_mode = False
self.force_handlers = False
self.start_at_task = None
self.step = False
#TODO: just pull options setup to above?
# set options before play to allow play to override them
@ -241,6 +243,10 @@ class ConnectionInformation:
self.check_mode = boolean(options.check)
if hasattr(options, 'force_handlers') and options.force_handlers:
self.force_handlers = boolean(options.force_handlers)
if hasattr(options, 'step') and options.step:
self.step = boolean(options.step)
if hasattr(options, 'start_at_task') and options.start_at_task:
self.start_at_task = options.start_at_task
# get the tag info from options, converting a comma-separated list
# of values into a proper list if need be. We check to see if the

View file

@ -99,6 +99,17 @@ class PlayIterator:
self._host_states = {}
for host in inventory.get_hosts(self._play.hosts):
self._host_states[host.name] = HostState(blocks=self._blocks)
# if we're looking to start at a specific task, iterate through
# the tasks for this host until we find the specified task
if connection_info.start_at_task is not None:
while True:
(s, task) = self.get_next_task_for_host(host, peek=True)
if s.run_state == self.ITERATING_COMPLETE:
break
if task.get_name() != connection_info.start_at_task:
self.get_next_task_for_host(host)
else:
break
# Extend the play handlers list to include the handlers defined in roles
self._play.handlers.extend(play.compile_roles_handlers())