@ -854,7 +854,7 @@ class StrategyBase:
return ret
return ret
def _execute_meta ( self , task , play_context , iterator , target_host = None ) :
def _execute_meta ( self , task , play_context , iterator , target_host ) :
# meta tasks store their args in the _raw_params field of args,
# meta tasks store their args in the _raw_params field of args,
# since they do not use k=v pairs, so get that
# since they do not use k=v pairs, so get that
@ -865,52 +865,52 @@ class StrategyBase:
# on a meta task that doesn't support them
# on a meta task that doesn't support them
def _evaluate_conditional ( h ) :
def _evaluate_conditional ( h ) :
all_vars = self . _variable_manager . get_vars ( loader = self . _loader , play = iterator . _play , host = h ost , task = task )
all_vars = self . _variable_manager . get_vars ( loader = self . _loader , play = iterator . _play , host = h , task = task )
templar = Templar ( loader = self . _loader , variables = all_vars )
templar = Templar ( loader = self . _loader , variables = all_vars )
return task . evaluate_conditional ( templar , all_vars )
return task . evaluate_conditional ( templar , all_vars )
if target_host :
skipped = False
host_list = [ target_host ]
msg = ' '
else :
if meta_action == ' noop ' :
host_list = [ host for host in self . _inventory . get_hosts ( iterator . _play . hosts ) if host . name not in self . _tqm . _unreachable_hosts ]
# FIXME: issue a callback for the noop here?
msg = " noop "
results = [ ]
elif meta_action == ' flush_handlers ' :
for host in host_list :
self . run_handlers ( iterator , play_context )
result = None
msg = " ran handlers "
if meta_action == ' noop ' :
elif meta_action == ' refresh_inventory ' :
# FIXME: issue a callback for the noop here?
self . _inventory . refresh_inventory ( )
result = TaskResult ( host , task , dict ( changed = False , msg = " noop " ) )
msg = " inventory successfully refreshed "
elif meta_action == ' flush_handlers ' :
elif meta_action == ' clear_facts ' :
self . run_handlers ( iterator , play_context )
if _evaluate_conditional ( target_host ) :
elif meta_action == ' refresh_inventory ' :
for host in self . _inventory . get_hosts ( iterator . _play . hosts ) :
self . _inventory . refresh_inventory ( )
self . _variable_manager . clear_facts ( host )
result = TaskResult ( host , task , dict ( changed = False , msg = " inventory successfully refreshed " ) )
msg = " facts cleared "
elif meta_action == ' clear_facts ' :
else :
if _evaluate_conditional ( host ) :
skipped = True
self . _variable_manager . clear_facts ( target_host )
elif meta_action == ' clear_host_errors ' :
result = TaskResult ( host , task , dict ( changed = True , msg = " inventory successfully refreshed " ) )
if _evaluate_conditional ( target_host ) :
else :
for host in self . _inventory . get_hosts ( iterator . _play . hosts ) :
result = TaskResult ( host , task , dict ( changed = False , skipped = True ) )
elif meta_action == ' clear_host_errors ' :
if _evaluate_conditional ( host ) :
self . _tqm . _failed_hosts . pop ( host . name , False )
self . _tqm . _failed_hosts . pop ( host . name , False )
self . _tqm . _unreachable_hosts . pop ( host . name , False )
self . _tqm . _unreachable_hosts . pop ( host . name , False )
iterator . _host_states [ host . name ] . fail_state = iterator . FAILED_NONE
iterator . _host_states [ host . name ] . fail_state = iterator . FAILED_NONE
result = TaskResult ( host , task , dict ( changed = True , msg = " successfully cleared host errors " ) )
msg = " cleared host errors "
else :
result = TaskResult ( host , task , dict ( changed = False , skipped = True ) )
elif meta_action == ' end_play ' :
if _evaluate_conditional ( host ) :
iterator . _host_states [ host . name ] . run_state = iterator . ITERATING_COMPLETE
result = TaskResult ( host , task , dict ( changed = True , msg = " ending play " ) )
else :
result = TaskResult ( host , task , dict ( changed = False , skipped = True ) )
#elif meta_action == 'reset_connection':
# connection_info.connection.close()
else :
else :
raise AnsibleError ( " invalid meta action requested: %s " % meta_action , obj = task . _ds )
skipped = True
elif meta_action == ' end_play ' :
if _evaluate_conditional ( target_host ) :
for host in self . _inventory . get_hosts ( iterator . _play . hosts ) :
if not host . name in self . _tqm . _unreachable_hosts :
iterator . _host_states [ host . name ] . run_state = iterator . ITERATING_COMPLETE
msg = " ending play "
#elif meta_action == 'reset_connection':
# connection_info.connection.close()
else :
raise AnsibleError ( " invalid meta action requested: %s " % meta_action , obj = task . _ds )
if result is not None :
result = { ' msg ' : msg }
results . append ( result )
if skipped :
result [ ' skipped ' ] = True
else :
result [ ' changed ' ] = False
return results
return [ TaskResult ( target_host , task , result ) ]