@ -242,22 +242,6 @@ class TaskQueueManager:
loader = self . _loader ,
loader = self . _loader ,
)
)
# Fork # of forks, # of hosts or serial, whichever is lowest
num_hosts = len ( self . _inventory . get_hosts ( new_play . hosts , ignore_restrictions = True ) )
max_serial = 0
if new_play . serial :
# the play has not been post_validated here, so we may need
# to convert the scalar value to a list at this point
serial_items = new_play . serial
if not isinstance ( serial_items , list ) :
serial_items = [ serial_items ]
max_serial = max ( [ pct_to_int ( x , num_hosts ) for x in serial_items ] )
contenders = [ self . _options . forks , max_serial , num_hosts ]
contenders = [ v for v in contenders if v is not None and v > 0 ]
self . _initialize_processes ( min ( contenders ) )
play_context = PlayContext ( new_play , self . _options , self . passwords , self . _connection_lockfile . fileno ( ) )
play_context = PlayContext ( new_play , self . _options , self . passwords , self . _connection_lockfile . fileno ( ) )
for callback_plugin in self . _callback_plugins :
for callback_plugin in self . _callback_plugins :
if hasattr ( callback_plugin , ' set_play_context ' ) :
if hasattr ( callback_plugin , ' set_play_context ' ) :
@ -268,11 +252,6 @@ class TaskQueueManager:
# initialize the shared dictionary containing the notified handlers
# initialize the shared dictionary containing the notified handlers
self . _initialize_notified_handlers ( new_play )
self . _initialize_notified_handlers ( new_play )
# load the specified strategy (or the default linear one)
strategy = strategy_loader . get ( new_play . strategy , self )
if strategy is None :
raise AnsibleError ( " Invalid play strategy specified: %s " % new_play . strategy , obj = play . _ds )
# build the iterator
# build the iterator
iterator = PlayIterator (
iterator = PlayIterator (
inventory = self . _inventory ,
inventory = self . _inventory ,
@ -283,6 +262,14 @@ class TaskQueueManager:
start_at_done = self . _start_at_done ,
start_at_done = self . _start_at_done ,
)
)
# adjust to # of workers to configured forks or size of batch, whatever is lower
self . _initialize_processes ( min ( self . _options . forks , iterator . batch_size ) )
# load the specified strategy (or the default linear one)
strategy = strategy_loader . get ( new_play . strategy , self )
if strategy is None :
raise AnsibleError ( " Invalid play strategy specified: %s " % new_play . strategy , obj = play . _ds )
# Because the TQM may survive multiple play runs, we start by marking
# Because the TQM may survive multiple play runs, we start by marking
# any hosts as failed in the iterator here which may have been marked
# any hosts as failed in the iterator here which may have been marked
# as failed in previous runs. Then we clear the internal list of failed
# as failed in previous runs. Then we clear the internal list of failed