
    Vh3                    n   d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Zd dlmZ d dlmZ d dlmZ d dlmZ d dlmZmZmZmZ d dlmZ d d	lmZmZ d d
lmZ d dl m!Z! d dl"m#Z#m$Z$m%Z% d dl&m'Z' d dl(m)Z) d dl*m+Z+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6 d dl7m8Z9 d dl:m;Z; d dl<m=Z= d dl>m?Z? d dl@mAZA d dlBmCZC d dlDmEZE d dlFmZG d dlHmIZImJZJ  e=       ZKdgZL eMd      ZN G d d       ZO eO       ZPd! ZQd" ZRd# ZSd$ ZT G d% d      ZU G d& d'eV      ZW G d( d)ej                        ZYy)*    )annotationsN)deque)UndefinedError)	constants)context)AnsibleErrorAnsibleFileNotFoundAnsibleUndefinedVariableAnsibleParserError)action_write_locks)IteratingStatesPlayIterator)WorkerProcess)
TaskResult)CallbackSendDisplaySend
PromptSend)string_types)to_text)
ConnectionConnectionError)Conditional)Handler)load_list_of_blocks)Task)TaskIncludeloader)Templar)Display)add_internal_fqcns)wrap_var)Sentinel)combine_vars)strip_internal_keysmodule_response_deepcopyStrategyBase)discovered_interpreter_c                      e Zd Zy)StrategySentinelN)__name__
__module____qualname__     Q/home/dcms/DCMS/lib/python3.12/site-packages/ansible/plugins/strategy/__init__.pyr*   r*   H   s    r/   r*   c                    d }|j                   ra|j                  |      5  t        |j                        }|j                   |_        |j                  ||j                        | d<   d d d        |j                  rk|j                  |      5  |t        |j                        }|j                  |_        |j                  ||j                        }|x| d<   | d<   d d d        y y # 1 sw Y   xY w# 1 sw Y   y xY w)N)available_variablesr   changedfailed_when_resultfailed)changed_whenset_temporary_contextr   _loaderwhenevaluate_conditionalr2   failed_when)resulttasktemplar	task_varscondr4   s         r0   post_process_whensrA   O   s    D**y*I 	`goo6D))DI $ 9 9'7C^C^ _F9	`
 **y*I 	Q|"'//:((DI!%!:!:7GD_D_!`>PPF'(6(+;	Q 	Q 	` 	`	Q 	Qs   AC(AC4(C14C=c                    i }|j                   s|j                  rU| j                  dd      }| j                  d      }|| v r| |   ||<   |r|| v r| |   ||<   d| v r| d   |d<   d| v r| d   |d<   |S )Nansible_loop_varitemansible_index_var_ansible_item_labelansible_loop)loop	loop_withget)r<   r=   	item_varsloop_var	index_vars        r0   _get_item_varsrN   `   s    IyyDNN::0&9JJ23	v"("2Ihf,#))#4Ii  F*/56K/LI+,V#(.~(>In%r/   c                   	 	 | j                   j                         }t        |t              ry t        |t              r8t        t        |j                        } ||j                  i |j                   nt        |t              rt|j                  D ]%  }t        |t              s| j                  |        n  | j                  j                  |j                  g|j                  i |j                   nt        |t              rB| j                  |       | j                   5  | j"                  j%                  |       d d d        nt        |t&              r	 t        j)                  |j*                  |j,                  |j.                  |j0                  |j2                        }| j8                  |j:                     j<                  j?                  |       n$t        jA                  dtC        |      d|        # 1 sw Y   xY w# t4        $ r}|}Y d }~ud }~wt6        $ r0}	 t5        |       |# t4        $ r}|}Y d }~nd }~ww xY wY d }~d }~ww xY w# tD        tF        f$ r Y y tH        jJ                  $ r Y w xY w)N)privatesecondscomplete_inputinterrupt_inputzReceived an invalid object (z) in the result queue: )&_final_qrJ   
isinstancer*   r   getattrdisplaymethodargskwargsr   r   normalize_task_result_tqmsend_callbackmethod_name_results_lock_resultsappendr   prompt_untilpromptrP   rQ   rR   rS   r   BaseException_workers	worker_idworker_queueputwarningtypeIOErrorEOFErrorqueueEmpty)strategyr<   dmethodargvaluees         r0   results_thread_mainrt   p   s   
(	&&**,F&"23FK0!'6==966FL1!;; C!#z2 66s; ,++F,>,>^^PVP]P]^FJ/..v6++ 5%%,,V45 5FJ/"#00 & &'-'<'<(.(>(> 1 E !!&"2"23@@DDUK]abh]ikq rsK  5 5 $ E$ ""*aS29' " !"" " 	{{ 		s   *I A7I &BI 'HI AH )AI HI 	IHI I+H88	IIIIII II J.JJc                D     t        j                         d fd	       }|S )zVClosure to wrap ``StrategyBase._process_pending_results`` and invoke the task debuggerc           	     p   d}|j                   j                         } | |||      }g }|D ]  }|j                  }	|j                  }
| j                  j                  |
j                  |	j                  fd       }|d   }|d   }	 ||
j                     }|j                  | j                        rNt               }t        |	|
||||      }|j                          |j                  t        j                   k(  r| j"                  j%                          |	j&                  r|j(                  j*                  t-        d      v ro|j/                         r_|j1                         D ]L  \  }}||
j                  k(  r|j3                  ||       |j(                  j4                  j7                  |       N |j3                  |
j                  |       |D ]G  \  }} t9        ||             s| j"                  j:                  j=                  ||
j                         I | j"                  j:                  j=                  d|
j                         | j?                  |
|	||       |jA                   tC              | ||             S|j                  t        jD                  k(  r|jG                  |       |j                  t        jH                  k(  rtK        jL                  d       |j                  | j                        rN|jG                  |        |S # t        $ r |j                  |
      }Y w xY w)	N))	is_failedfailures)is_unreachabledark)
is_changedr3   )
is_skippedskipped)one_pass
max_passesr?   play_context)globally_enabled)linearokc   )'host_statescopy_task_host_queued_task_cachepopname_uuidKeyErrorget_host_stateneeds_debuggerdebugger_active
NextActionDebuggercmdloopr<   REDOr\   clear_failed_hostsrun_once_playro   r!   rw   itemsset_state_for_host_removed_hostsremoverV   _stats	decrement_queue_taskextenddebug_closureCONTINUEra   EXITsysexit)selfiteratorr~   r   status_to_stats_mapprev_host_statesresults_processed_resultsr<   r=   host_queued_task_argsr?   r   prev_host_statenext_actiondbg	host_namestaterX   whatfuncs                        r0   innerzdebug_closure.<locals>.inner   s   
 $//446tXZP ,	2F<<D<<D $ 7 7 ; ;TYY

<SUY Z)+6I,^<L@"2499"= ''9M9M'N(ltT9lFKX%%8II002}})@)@DVWbDc)chnhxhxhz0@0F0F0H L,Iu(DII5 ($77	5I$NN99@@K	L
 //		?K(; H276624 II,,66tTYYGH II$$..tTYY? $$T4LI&--.AmD.A$RZ.[\ '':+>+>>&--f5 '':??:HHRL= ''9M9M'N@ #))&1Y,	2\ "!K  @"*"9"9$"?@s   LL54L5FN)	functoolswraps)r   r   s   ` r0   r   r      s&    __T<" <"z Lr/   c                      e Zd ZdZdZd ZddZd ZddZd Z	d Z
d	 Zd
 Zd Zd Zd Zd ZddZedd       Zd Zd ZddZd dZd Zd Zd Zd Zd Zy)!r'   z
    This is the base class for strategy plugins, which contains some common
    code useful to all strategies like running handlers, cleanup actions, etc.
    Tc                V   || _         |j                         | _        |j                  | _        |j	                         | _        |j                         | _        |j                  | _        t        j                  j                  dd      | _        t        j                  j                  dd      | _        i | _        t        | _        d| _        d| _        t'               | _        t+               | _        t/        j0                  t/        j2                               | _        t'               | _        t/        j8                  t:        | f      | _        d| j<                  _        | j<                  jA                          t'               | _!        g | _"        g | _#        tH        jJ                  | _&        y )NstepFdiffr   )targetrY   T)'r\   get_inventory
_inventoryre   get_variable_manager_variable_manager
get_loaderr8   rT   r   CLIARGSrJ   _step_diffr   rW   _display_pending_results_cur_workerdict_blocked_hostsr   r`   	threading	ConditionLockr_   _worker_queuesThreadrt   _results_threaddaemonstart_active_connections_hosts_cache_hosts_cache_allCENABLE_TASK_DEBUGGERr   )r   tqms     r0   __init__zStrategyBase.__init__   sD   	++-!$!9!9!;~~'__((7
__((7

 #%   !" #f&001AB"f  )//7JRVQXY&*#""$ $(6 
  " 55r/   c                   |s"t        | j                  | j                  f      ry|j                  s't	        d      j                  |j                        rd}n|j                  xs d}| j                  j                  |d      D cg c]  }|j                   c}| _        | j                  j                  |j                  |j                        D cg c]  }|j                   c}| _        yc c}w c c}w )zResponsible for setting _hosts_cache and _hosts_cache_all

        See comment in ``__init__`` for the purpose of these caches
        NallT)patternignore_restrictions)order)r   r   r   	finalizedr   is_templatehostsr   	get_hostsr   r   )r   playrefresh_patternhs        r0   _set_hosts_cachezStrategyBase._set_hosts_cache  s    
 3 1 143H3HIJ~~'$-";";DJJ"GHzz*UH151J1JS[qu1J1v wA w-1__-F-FtzzY]YcYc-F-deQVVe !xes   C1C6c                H   | j                   j                         D ]  }	 t        |      }|j                            | j                  j                  t               | j                  j                          y # t        $ r"}t
        j                  d|z         Y d }~d }~ww xY w)N4got an error while closing persistent connection: %s)r   valuesr   resetr   rW   debugrT   rh   	_sentinelr   join)r   sockconnrs   s       r0   cleanupzStrategyBase.cleanup+  s    ,,335 	ZDZ!$'

	Z 	)$!!#	 # ZTWXXYYZs   A66	B!?BB!c                   | j                   D ]D  }|| j                  j                  vs	 |j                  | j                  j
                  |          F t        |t              s|| j                  j                  k7  r|S t        | j                  j                  j                               dkD  r| j                  j                  S t        |j                               dkD  r| j                  j                  S | j                  j                  S # t        $ r. |j                  | j                  j                  |             Y 6w xY w)Nr   )r   r\   _unreachable_hostsget_next_task_for_hostr   r   r   get_hostrU   boolRUN_OKlenkeysRUN_UNREACHABLE_HOSTSget_failed_hostsRUN_FAILED_HOSTS)r   r   r   r<   r   s        r0   runzStrategyBase.run7  s    %% 	TD499777T33DOO4I4I$4OP	T &$'Fdii6F6F,FM--2245999222**,-199---99###   T33DOO4L4LT4RSTs   (D3EEc                    | j                  |d       t        | j                  j                        j	                  | j                  j
                        }| j                  D cg c]	  }||vs| c}S c c}w NF)r   )r   setr\   _failed_hostsunionr   r   )r   r   ignorer   s       r0   get_hosts_remainingz StrategyBase.get_hosts_remainingN  s_    dE2TYY,,-33DII4P4PQ!%!2!2Id&6HIIIs   $	A5.A5c                    | j                  |d       | j                  D cg c]  }|| j                  j                  v s| c}S c c}w r   )r   r   r\   r   )r   r   r   s      r0   r   zStrategyBase.get_failed_hostsS  s@    dE2!%!2!2Vddii>U>U6UVVVs   A Ac                T    | j                  |      |d<   | j                  |      |d<   y)z
        Base class method to add extra variables/information to the list of task
        vars sent through the executor engine regarding the task queue manager state.
        ansible_current_hostsansible_failed_hostsN)r  r   )r   varsr   s      r0   add_tqm_variableszStrategyBase.add_tqm_variablesW  s0    
 )-(@(@(F$%'+'<'<T'B#$r/   c                0   t         j                  d|j                  d|j                         |j                  t        j                  vrQt         j                  d|j                  z         t        j                         t        j                  |j                  <   t        | j                  |      }	 t        |j                  |j                              }	 t        | j                         }|dkD  rn| j"                  rb|j$                  r't         j                  d	|j'                         z         n/||k  r*t         j                  d
|j'                         |fz         |}d}	| j(                  }
	 | j(                  |k\  rd| _        | j                   | j(                     }||j+                         s||||d| j,                  |j                  |j.                  f<   t1        | j2                  ||||| j                  | j4                  t6        | j(                  	      }|| j                   | j(                  <   | j8                  j;                  d||       |j=                          t         j                  d| j(                  dz   t        | j                         fz         d}	| xj(                  dz  c_        | j(                  |k\  rd| _        |	rn&| j(                  |
k(  rt?        j@                  d       | xjB                  dz  c_!        t         j                  d|j                  d|j                         y# t        $ r}t        d|j                  |      d}~ww xY w# tD        tF        tH        f$ r"}t         j                  d|z         Y d}~yd}~ww xY w)z5 handles queueing the task up to be sent to a worker zentering _queue_task() for /zCreating lock for %sr   	variablesz3Failed to convert the throttle value to an integer.)objorig_excNr   z6Ignoring 'throttle' as 'run_once' is also set for '%s'ztask: %s, throttle: %dFT)r   r=   r?   r   v2_runner_on_startz"worker is %d (out of %d available)   g-C6?zgot an error while queuing: %szexiting _queue_task() for )%rW   r   r   actionr   multiprocessing_contextr   r   r8   inttemplatethrottle	Exceptionr   _dsr   re   ALLOW_BASE_THROTTLINGr   get_namer   is_aliver   r   r   rT   r   plugin_loaderr\   r]   r   timesleepr   rl   rk   AssertionError)r   r   r=   r?   r   r>   r  rs   rewind_pointqueuedstarting_worker
worker_prcs               r0   r   zStrategyBase._queue_task_  s
    	DIIt{{ST ;;0CCCMM04;;>?AXA]A]A_11$++> C	p7++DMM:;H
6	 t}}-L!| : :==MM"Z]a]j]j]l"lm</&>$--/S[A\&\]'/F"..O##|3'(D$!]]4+;+;<
%Z-@-@-B $ $%.(4	HD++TYY

,CD "/y$lDLLZ^ZpZpr  BF  BR  BR"J 7ADMM$"2"23II++,@$M$$&MM"F$JZJZ]^J^`cdhdqdq`rIs"st!F  A% ##|3'(D$%%8JJv&? B !!Q&!
 	499dkkRSw  	pTZ^ZbZbmnoo	pn '>2 	MM:Q>?	s1   5$L6 H,M 6	M?MMN3NNc                    |j                   r4| j                  D cg c]  }|| j                  j                  vs| }}|S |j                  g}|S c c}w N)r   r   r\   r   r   )r   r   	task_hostr=   r   	host_lists         r0   get_task_hostszStrategyBase.get_task_hosts  sU    ==*.*;*;h$t499KgKg?ghIh  #(I is
   AAc                h    |j                  di       j                  dd       }|xs |j                  gS )N_ansible_delegated_varsansible_delegated_host)rJ   delegate_to)r   r<   r=   r   s       r0   get_delegated_hostsz StrategyBase.get_delegated_hosts  s6    JJ8"=AABZ\`a	-T--..r/   c                ~   |j                   y|d   }t               j                  }|D ]'  }t        D ]  }|j	                  |      s ||        ) re|j
                  dt        fdt        |      D              i}| j                  ||      }| j                  j                  }	|D ]  }
 |	|
|        yy)zSets host facts for ``delegate_to`` hosts for facts that should
        always be delegated

        This operation mutates ``result`` to remove the always delegated facts

        See ``ALWAYS_DELEGATE_FACT_PREFIXES``
        Nansible_factsc              3  <   K   | ]  }|v s| |      f  y wr%  r.   ).0k_popalways_keyss     r0   	<genexpr>z;StrategyBase._set_always_delegated_facts.<locals>.<genexpr>  s!     %\q1P[K[q$q'l%\s   	)r,  r   addALWAYS_DELEGATE_FACT_PREFIXES
startswithr   r   listr-  r   set_host_facts)r   r<   r=   facts_addfact_key
always_keyalways_factsr'  _set_host_factstarget_hostr3  r4  s              @@r0   _set_always_delegated_factsz(StrategyBase._set_always_delegated_facts  s     #'e 	#H; #
&&z2N#	# 99D%\DK%\!\L 00>I"44CCO( ;\:; r/   c                :   t        |j                  t              r3| j                  j	                  t        |j                              |_        t        |j                  t              r{|j                  j                  |j                  f}	 | j                  |   d   }|j                  dd      }|j                  |_
        |j                  |j                         ||_        |S # t        $ r, |j                  j                  d      dk7  r t               }Y Xw xY w)aL  Normalize a TaskResult to reference actual Host and Task objects
        when only given the ``Host.name``, or the ``Task._uuid``

        Only the ``Host.name`` and ``Task._uuid`` are commonly sent back from
        the ``TaskExecutor`` or ``WorkerProcess`` due to performance concerns

        Mutates the original object
        r=   T)exclude_parentexclude_tasksr  async_status)rU   r   r   r   r   r   r   r   r   r   _parentr   _task_fieldsrJ   r   
from_attrs)r   task_resultqueue_cache_entry
found_taskoriginal_tasks        r0   r[   z"StrategyBase.normalize_task_result  s     k''6 $ 8 8ARAR9S TKk''6!,!2!2!7!79J9J K;!445FGO
 !+tSW X(2(:(:%$$[%=%=> -K  ' ++//9^K $'s   C% %2DDc           
   #    K   t        d       }t        |j                  j                        D cg c]  }|j                  D ]  }|  }}}|D ]  }|j
                  s|j                  s|j                  |j
                        rc| j                  j                  |j                  || j                  | j                        |_        	 |j                  |j
                        |_        d|_        ||j
                  |j)                  d      |j)                  d      hv s|  n t+               }	|D ]K  }||j                   v s|j
                  r|j
                  |	v r-|	j-                  |j
                         | M y c c}}w # t        t        f$ rE}|j                   s.t"        j%                  d|j
                  dt'        |             Y d }~d }~ww xY ww)N)r   r=   _hosts
_hosts_allz	Handler 'z' is unusable because it has no listen topics and the name could not be templated (host-specific variables are not supported in handler names). The error: TF)include_role_fqcn)r   reversedr   handlersblockr   cached_namer   r   get_varsr   r   r2   r  r   r
   listenrW   ri   r   r  r   r6  )
r   notificationr   r>   br   rS  handlerrs   seens
             r0   search_handlers_by_notificationz,StrategyBase.search_handlers_by_notification  s    $-'(?(?@R!!''RQARARR %	G<<&&&&w||4262H2H2Q2Q%^^$#00#'#8#8	 3R 3G/!'.'7'7'E '+#   5 9  4 8  
 K%	N u 	Gw~~-<<GLLD$8&	U S +,DE !
  '~~#OO U\T`T`bijkbl!n
 !!sH   .G!F
A>G!	 F
)8G!"$G!AG!
G:GG!GG!Nc           	     n   g }d}	 	 | j                   j                          | j                  j                         }	 | j                   j                          |j                  }|j                  }d}	|j                         rd}	|j                  }
|
s |j                  |j                        }t        j                  d|j                  z         |j                  ri| j                  j!                  |j"                  j$                        D ]6  }|j                  | j&                  j(                  vs&|j+                  |       8 n|j+                  |       |j-                  |d      \  }}|j                  |      rB|r@|j.                  t0        j2                  k(  r#d| j&                  j4                  |j                  <   |j7                  |      r| j&                  j8                  j;                  d|j                         |j"                  j<                  j?                  |j                         | j@                  jC                  |j                  tE        tG        |jI                               |jJ                               n| j&                  j8                  j;                  d|j                         n| j&                  j8                  j;                  d	|j                         | j&                  j8                  j;                  d
|j                         d|jJ                  v r?|jJ                  d   r0| j&                  j8                  j;                  d|j                         | j&                  jM                  d||
       n|jO                         r|jP                  }|sd| j&                  j(                  |j                  <   |j"                  j<                  jS                  |j                         | j&                  j8                  j;                  d|j                         n`| j&                  j8                  j;                  d	|j                         | j&                  j8                  j;                  d
|j                         | j&                  jM                  d|       n|jU                         rN| j&                  j8                  j;                  d|j                         | j&                  jM                  d|       nPd}	|jV                  r|jJ                  jY                  dg       }n|jJ                  g}|D ]&  }d|v r|j[                         r|j                  |j                        }|d   D ]  }t\        }| j_                  ||      D ]  }|j.                  t0        j`                  k(  r0|jc                  |      s2| j&                  jM                  d||       P|je                  |j                  |       t        jg                  d| d        n |t\        u sd| d}th        jj                  rtm        |      t        jo                  |        d|v rw|jY                  dtE                     }| j                  jq                  ||       |jY                  d      rP|d   | jr                  vr?| jr                  jS                  |d          n d|v r| j                  ju                  ||       d|v sd|v r6tw        ||      }| jx                  jY                  |j                  |j                  jz                  f      d   }|rt}        ||      }n|}tG        |      ||j~                  <   t        ||t        | j                        |       |jV                  s|j                  rt        |j                  |j                  ||j                        }| j&                  jM                  d|       |jY                  dd      rd|jJ                  d<   |jY                  dd      rd|jJ                  d<   d|v r_|j                  th        j                  vrB|j                  |j                  r| j                  ||      }n%| j                  ||       | j                  |||      }|j                  th        j                  v r@|d   j                         D ])  \  }}|D ]  }| j@                  j                  |||       ! + n|j                  d!d      }|D ]  }|j                  th        j                  v } | r|r-| j@                  j                  ||d   j                                | sS| j@                  jC                  ||d   j                                 d"|v sbd#|d"   v sk|d"   d#   sud$|d"   vs|d"   d$   r| j                  |||      }nd g}|d"   d#   }!d%|d"   v xr |d"   d%   }"|D ]n  }#|!j                         D ]Y  }$|"r+| j&                  j8                  j                  |$|!|$   |#       0| j&                  j8                  j                  |$|!|$   |#       [ p ) d&|jJ                  v r5| j                  st        |d&d      r| j&                  jM                  d'|       t        |t              s}| j&                  j8                  j;                  d	|j                         d|jJ                  v r?|jJ                  d   r0| j&                  j8                  j;                  d|j                         | j&                  jM                  d(|       |j~                  rg| j                  |||      }t        t        |jJ                              }%d)|%v r|%d)= |D ]*  }| j@                  jC                  ||j~                  |%i       , | xj                  d*z  c_]        |j                  | j                  v r| j                  |j                  = |j                  7|	r5| j                  ||j"                        }&d|&j                  |j                  <   |jS                  |       |s
||d*z   |k\  r	 |S |d*z  }h# t        $ r Y | j                   j                          |S w xY w# | j                   j                          w xY w)+z
        Reads results off the final queue and takes appropriate action
        based on the result (executing callbacks, updating state, etc.).
        r   TFzmarking %s as failedpeekrescued)ansible_failed_taskansible_failed_resultrx   r   ignoredr3   v2_runner_on_failed)ignore_errorsrz   v2_runner_on_unreachabler}   v2_runner_on_skippedr   _ansible_notifyv2_playbook_on_notifyzNotification for handler z has been saved.zThe requested handler 'zS' was not found in either the main handlers list nor in the listening handlers listadd_hostr   	add_groupr?   v2_runner_item_on_okr5   r/  N_ansible_facts_cacheableansible_statsdataper_host	aggregater   v2_on_file_diffv2_runner_on_ok
invocationr  )br_   acquirer`   popleft
IndexErrorreleaser   r   rw   re  get_state_for_hostr   rW   r   r   r   r   r   r   r\   r   mark_host_failedr   	run_stater   COMPLETEr   is_any_block_rescuingr   	incrementr   r   r   set_nonpersistent_factsr   r"   	serialize_resultr]   ry   ignore_unreachablera   r|   rH   rJ   r{   r#   r\  HANDLERSnotify_hostadd_notificationvvr   ERROR_ON_MISSING_HANDLERr   ri   add_dynamic_hostr   add_dynamic_grouprN   r   r   r$   registerrA   r   r8   rI   r   rH  r  _ACTION_DEBUGr,  delegate_factsr-  rB  r(  _ACTION_INCLUDE_VARSr   set_host_variabler   _ACTION_SET_FACTr:  r   r   update_custom_statsset_custom_statsr   rV   rU   r   r%   r&   r   r   _role_get_cached_role_had_task_run)'r   r   r~   r   ret_resultscur_passrJ  original_hostrM  role_ranre  state_when_failedr   r   dummyr  result_itemsresult_item
host_staterX  rZ  msgnew_host_inforK   found_task_varsall_task_varsnew_item_resultr'  var_name	var_valuerA  	cacheableis_set_factro  rq  myhostr2  
clean_copyrole_objs'                                          r0   _process_pending_resultsz%StrategyBase._process_pending_results1  sn    -""**,"mm335 ""**,'--M'--M H$$& - ; ;$(0(C(CMDVDV(W%MM"8=;M;M"MN$--!%!:!:8>>;O;O!P =A vvTYY-I-II ( 9 9! <= !11-@#+#B#B=W[#B#\LE5))-8UuZiZrZrGrFJ		//0B0BC
  556GH		((229m>P>PQ 55<<]=O=OP..FF).. 4<]=T=T=V4W6A6I6I 		((22:}?Q?QRII$$..t]5G5GHII$$..y-:L:LM K$7$77K<O<OPY<Z		((229m>P>PQ		''(={Zg'h++-%2%E%E")GKDII001C1CDNN11889K9KLII$$..v}7I7IJII$$..t]5G5GHII$$..y-:L:LM		''(BKP'')		  **9m6H6HI		''(>L %% $/#6#6#:#:9b#IL$/$7$7#8L#/ kZK(K7K<R<R<T &.%@%@ASAS%T
,78I,J 9L&.G+/+O+OP\^f+g 
*#-#7#7?;S;S#S'.':':='I )-		(?(?@WY`bo(p$,$=$=m>P>PR^$_$+JJ1J<.Xh/i$j$)
*  '(2&=l^ LO %O !$ $%#=#=*6s*;$;$+OOC$8+9. "[0(3
DF(K88T&??95-:T\`\q\q:q 1188{9ST$399-U![0K;4N$2;$N	*.*A*A*E*E}GYGY[f[l[l[r[rFs*t  vA  +B$,8),TM,;M@H@Um&<&<=*;wt||G\^kl(--1H1H.8 + 1 1 + 1 1 + + 8 8	/O !II334JO\*y%@AE 3 3I >*x?@D 3 3H =&+5-:N:NVWVeVe:e(44@]EaEa(,(@(@m(\I !<<[-X(,(;(;HmUb(cI(//13I3II9D_9U9[9[9] o 59 4= !oK$($:$:$L$L[Zbdm$n!oo )48RTY(ZI/8 
E /<.B.BaFXFX.X'2i$($:$:$I$I+WbcrWsWxWxWz${#.$($:$:$R$RS^`kl{`|  aB  aB  aD  %E
E '+5&KP_D`:`ep  rA  fB  CI  fJ%[-II[YhMijtMu(,(;(;HmUb(cI)-I*?;FC$/;3O$O$}T_`oTpq|T}	&/ ZF%)YY[ Z#,$(II$4$4$H$HDQRGU[$\$(II$4$4$E$EaaRX$Y	ZZMkZZ [000zzW]FE%J		//0A;O!-=II$$..t]5G5GH K$7$77K<O<OPY<Z		((229m>P>PQ 		''(9;G %% //-W	01I+J]J]1^_
:-"<0#, vK**BB;Q^QgQgisPtuv !!Q&!!!T%8%88''(:(:; "".8  00O=A&&}'9'9:{+:1x!|
6R  MHG   ""**,| C ""**,s#   4q. .	r7r rr r4c                   g }t         j                  d       | j                  dkD  r| j                  j                  s| j                  j                         rt        d      | j                  |      }|j                  |       | j                  dkD  r#t        j                  t        j                         | j                  dkD  r| j                  j                  st         j                  d       |S )z
        Wait for the shared counter to drop to zero, using a short sleep
        between checks to ensure we don't spin lock
        zwaiting for pending results...r   z"A worker was found in a dead statez/no more pending results, returning what we have)rW   r   r   r\   _terminatedhas_dead_workersr   r  r   r  r  r   DEFAULT_INTERNAL_POLL_INTERVAL)r   r   r  r   s       r0   _wait_on_pending_resultsz%StrategyBase._wait_on_pending_results   s     67##a'		0E0Eyy))+"#GHH33H=Gw'$$q(

1;;< ##a'		0E0E 	GHr/   c                    |j                   j                  d      }|j                   j                  |_        |j                  |j                  z  }||_        |S )zW
        A proven safe and performant way to create a copy of an included file
        T)rD  )r   r   rG  r  _vars)r   included_fileti_copy	temp_varss       r0   _copy_included_filez StrategyBase._copy_included_file7  sP      %%**$*?'--55LL=#6#66	 r/   c           
        |rt         j                  dd       t         j                  d|j                  z         	 | j                  j                  |j                        }|g S t        |t              st        d      | j                  |      }t        ||j                  |j                         |j                  j                  || j                  | j                        }|rA|j                   D ]2  }| j"                  j$                  j'                  d|j(                         4 |r| j"                  j;                  d|       t         j                  d       |S # t*        $ r  t        $ r}	t        |	t,              rd	t/        |	j0                        z  }
nt/        |	      }
|r|j2                  D ]  }d
|j4                  d<    |j                   D ]q  }t7        ||j                  t9        d
|
            }| j"                  j$                  j'                  d|j(                         | j"                  j;                  d|       s t        |
      |	d}	~	ww xY w)a4  
        Loads an included YAML file of tasks, applying the optional set of variables.

        Raises AnsibleError exception in case of a failure during including a file,
        in such case the caller is responsible for marking the host(s) as failed
        using PlayIterator.mark_host_failed().
        a9  Reporting play recap stats and running callbacks functionality for ``include_tasks`` in ``StrategyBase._load_included_file`` is deprecated. See ``https://github.com/ansible/ansible/pull/79260`` for guidance on how to move the reporting into specific strategy plugins to account for ``include_role`` tasks as well.z2.21)versionzloading included file: %sNz0included task files must contain a list of tasks)r   parent_blockroleuse_handlersr   variable_managerr   z8Could not find or access '%s' on the Ansible Controller.Tr5   )r5   reason)r   r=   return_datarx   rd  v2_playbook_on_includezdone processing included file)rW   
deprecatedr   	_filenamer8   load_from_filerU   r9  r   r  r   r   build_parent_blockr   r  r   rO  r\   r   r~  r   r   r	   r   	file_namer`   r  r   r   r]   )r   r  r   
is_handlerhandle_stats_and_callbacksro  r  
block_listr   rs   r  rtrs                r0   _load_included_filez StrategyBase._load_included_fileD  s    &2
    	1M4K4KKL$	.<<..}/F/FGD|	d+"#UVV..}=G,^^$779"((..'||!%!7!7J *)00 @DII$$..tTYY?@& &II##$<mL56) " 	 	.!01SV]^_^i^iVjj )&// /A*.AIIh'/ *00 GD#M4G4GUYaentUuvBII$$..z499EII++,A2FG v&A-	.s   (E &CE I.C"IIc                f   d}d|z  }|r|d|z  z  }|dz  }t         j                  |      }|j                         dv rt         j                  d       d}nF|j                         dv rt         j                  d	       d| _        d}nt         j                  d
       t         j                  |       |S )NFzPerform task: %s zon %s z(N)o/(y)es/(c)ontinue: )yyeszUser ran taskT)ccontinuez$User ran task and canceled step modezUser skipped task)rW   rc   lowerr   r   banner)r   r=   r   retr  resps         r0   
_take_stepzStrategyBase._take_step  s    "T)9t##C))~~c"::<<'MM/*CZZ\..MM@ADJCMM-.s
r/   c                4    t         j                  d|z         y )Nz)%s task does not support when conditional)rW   ri   )r   	task_names     r0   _cond_not_supported_warnz%StrategyBase._cond_not_supported_warn  s    CiOPr/   c                    j                   j                  d      } fd}d}|}d|z  }	t        t              r j                  j                  d       n j                  j                  dd       |dv rj                  r j                  |       |d	k(  rd	}n?|d
k(  r7 ||      rj                  |j                        }
t        |
j                        D ]d  } j                  |      D ]1  }|j                  |      s j                  j                  d||       3 j                  |j                  |       f |
j                  t         j"                  k(  rt%        d      |j                   j                  j&                  vr&|
j                  |
_        t         j"                  |
_        d|j                  z  }nd}|	d|j                  z  z  }	n|dk(  r9 j*                  j-                           j/                  j0                         d}n|dk(  r ||      rc j*                  j3                  j0                  j4                        D ]-  }|j7                         } j8                  j;                  |       / d}nTd}|	d|j                  z  z  }	n>|dk(  r ||      r j*                  j3                  j0                  j4                        D ]s  } j                  j<                  j?                  |j                  d        j                  j&                  j?                  |j                  d       jA                  |       u d}nd}|	d|j                  z  z  }	nr|dk(  r ||      rv j*                  j3                  j0                  j4                        D ]@  }|j                   j                  j&                  vs&jC                  |j                         B d}nd}|	dz  }	n|dk(  r ||      r} j*                  j3                  j0                  j4                        D ]G  }|j                   j                  j&                  vs&jC                  |j                         d_"        I d}n\d}|	dz  }	nS|dk(  rY ||      r,jC                  |j                         d|j                  z  }nd}|	d |j                  z  z  }	d!|j                  z  }n|d"k(  rljF                  r jI                  j0                        }|j                  |jJ                  v rd|jL                  |j                  <   d#|j                  z  }n|d$k(  r ||      r	 jO                  |d%      \  }jP                  tR        jT                  v rj                   j                  d      d"k(  rn5jW                  |j                  |       tX        j[                  d&z         d'j\                  j7                         d(|j                  }nd}|	d)j\                  j7                         d(|j                  z  }	n|d*k(  rs j8                  j_                  j0                  | j`                   jb                  +      }te         jf                  |,      }|ji                  ||-      }|jk                  |.       |jl                  s|jn                  |_6        |jq                  |       | jr                  v r&tu         jr                  |         } jr                  |= n}tv        jx                  j                  |jz                  |t|        j~                        }|j                  ||      }|j                  j                         |/       |j                  |       |r	 |j                          d0}nd2}nt%        d3|z  j                  4      d5|i}|rd|d6<   |	|d7<   nd|d8<   jF                  s|r|	n|}tX        j                  d9|        t        ||      }|r j                  j                  d:|       |gS # t        $ r"}tX        j[                  d1|z         Y d }~d }~ww xY w);N_raw_paramsc                    j                   syj                  j                  j                  | j                  j
                        }t        j                  |      }j                  ||      S )NTr   r   r=   rO  rP  r  )	r9   r   rV  r   r   r   r   r8   r:   )r   all_varsr>   r   r   r=   s      r0   _evaluate_conditionalz9StrategyBase._execute_meta.<locals>._evaluate_conditional  sj    99--66HNNQRY]>B>O>O\`\q\q 7 sHT\\XFG,,Wh??r/   Fz!%s conditional evaluated to False!v2_playbook_on_handler_task_startv2_playbook_on_task_start)is_conditional)nooprefresh_inventoryreset_connectionr  flush_handlersri  z*flush_handlers cannot be used as a handlerz!triggered running handlers for %sTz, not running handlers for %sr  z inventory successfully refreshedclear_factszfacts clearedz*, not clearing facts and fact cache for %sclear_host_errorszcleared host errorsz&, not clearing host error state for %s	end_batchzending batchz, continuing current batchend_playzending playz, continuing playend_hostzending play for %sz, continuing execution for %szDend_host conditional evaluated to false, continuing execution for %srole_completezrole_complete for %send_roler^  z7'%s' skipped because role has been ended via 'end_role'zending role z for zcontinuing role r  r  r  )r=   r  r>   )r>   )	task_keysvar_optionszreset connectionr   zno connection, nothing to resetz!invalid meta action requested: %s)r  r  r}   skip_reasonr3   zMETA: rg  )IrY   rJ   rU   r   r\   r]   r9   r  ry  r   r9  handler_notificationsr\  r  clear_notificationr{  r   r  r   r   pre_flushing_run_stater   r  r   r   r   r   r  r   r  r   r   r  r  r  implicitr  r  
_completedr   r  r   _ACTION_METAr   rW   r   r  rV  r   r   r   r8   set_task_and_variable_overridepost_validateremote_addraddressupdate_varsr   r   r  connection_loader
connectionosdevnull_resolve_option_variablesset_options
dump_attrsset_attributes_from_pluginr   r   r  r  r   )r   r=   r   r   rA  meta_actionr  r}   r  r  r  rX  rZ  r   hostnamer  r   r  r>   r  r  rs   r<   headerress   `` `                     r0   _execute_metazStrategyBase._execute_meta  s    iimmM2	@ 9KGdG$II##$GNII##$?V[#\ KKPTPYPY))+6& C,,$[1%889I9IJ
$()I)I$J PL#'#G#GV^#_ c"..{; !II334KWVab	c
 //0@0@,OP ''?+C+CC&'STT##499+G+GG8B8L8LJ5+:+C+CJ(9K<L<LL>AQAQQQ//OO--/!!(..14CM)$[1 OO55hnn6J6JK AD#}}H**66x@A &KkN^N^^^//$[1 OO55hnn6J6JK 5DII++//		5AII0044TYYF..t45 ,G+JZJZZZK'$[1 OO55hnn6J6JK 5Dyy		(D(DD ))$))45 %;;J&$[1 OO55hnn6J6JK 1Dyy		(D(DD ))$))4 -1)1 $22J&$[1!!+"2"23*[-=-==>AQAQQQ\_j_o_ooO+}}00x~~F##x'='==<@H''(8(890;3C3CCCJ&$[1"*"A"A+TX"A"YKE4{{ann4}9UYh9h//0@0@%HMM"[^b"bc   261D1D1FHXHXYdjj>Q>Q>SU`UeUeff..--66HNNQ\cg>B>O>O\`\q\q 7 sHT\\XFG
 (FFD\dnuFvL &&w&7  +++6+>+>(
 $$X.d666'(@(@(MN
,,[9*<<@@AXAXZfhjhrhrs
(BB8WU&&1BP[&\77
C^$$&,C
 8B[PVZV^V^__ $F9$/F=! %F9}}$+[FJJx()dF3II##$:C@u- ' ^MM"X[\"\]]^s   3a 	a<a77a<c                    |j                   j                         }|j                  |   }	 |j                  |j                         }||   S # t        $ r( t        d|j                   j                          d      w xY w)NzCannot locate z in role cache)r  get_role_path
role_cacheindex
ValueErrorr   r  )r   r=   r   	role_pathr  idxs         r0   r  zStrategyBase._get_cached_roleP  sy    JJ,,.	__Y/
	W""4::.Cc?" 	W

0C0C0E/FnUVV	Ws   A 1A<c                "   g }| j                   D ]D  }|| j                  j                  vs	 |j                  | j                  j
                  |          F |S # t        $ r- |j                  | j                  j                  |             Y ~w xY w)zQ returns list of available hosts for this iterator by filtering out unreachables )r   r\   r   ra   r   r   r   r   )r   r   
hosts_leftr   s       r0   get_hosts_leftzStrategyBase.get_hosts_leftY  s     
%% 	FD499777F%%doo&;&;D&AB	F    F%%doo&>&>t&DEFs   (A3BBc                    |D ]d  }d|j                   v s|j                   d   j                  d      }|s3|j                  | j                  vsL|| j                  |j                  <   f y)z3 updates the current active persistent connections rY   _ansible_socketN)rH  rJ   r   r   )r   r   r  socket_paths       r0   update_active_connectionsz&StrategyBase.update_active_connectionse  sb     	HA'nnV4889JKwwd&>&>><G009	Hr/   )T)r   )rX  strr   r   returnz t.Generator[Handler, None, None]r   )FTr%  )r+   r,   r-   __doc__r  r   r   r   r   r  r   r	  r   r(  r-  rB  r[   r\  r   r  r  r  r  r  r  r  r  r  r  r.   r/   r0   r'   r'      s     !.6`f
$$.J
WCTTl/;8 D1f l l\.;z.QsjW
Hr/   c                  &    e Zd ZdZdZdZdZefdZy)r   z. The next action after an interpreter's exit. r        c                    || _         y r%  )r<   )r   r<   s     r0   r   zNextAction.__init__u  s	    r/   N)r+   r,   r-   r  r   r   r   r   r.   r/   r0   r   r   o  s    8DHD" r/   r   c                      e Zd ZdZd Zd Zej                  j                  Z	d Z
d ZeZd ZeZd ZeZd ZeZd	 Zd
 ZeZd Zd Zy)r   z> c                   t         j                  j                  |        d|d|d| _        d | _        i | _        || j
                  d<   || j
                  d<   || j
                  d<   || j
                  d<   || j
                  d<   || _        y )	N[z] z
 (debug)> r=   r?   r   r   r<   )cmdCmdr   rc   introscoper   )r   r=   r   r?   r   r<   r   s          r0   r   zDebugger.__init__|  s|    -148

!

6"+

;!

6%1

>"%

8&r/   c                b    	 t         j                  j                  |        y # t        $ r Y y w xY wr%  )r  r  r   KeyboardInterrupt)r   s    r0   r   zDebugger.cmdloop  s)    	GGOOD!  		s   " 	..c                $    | j                  |      S )Quit)do_quitr   rY   s     r0   do_EOFzDebugger.do_EOF  s    ||D!!r/   c                l    t         j                  d       t        j                  | j                  _        y)r%  zUser interrupted executionT)rW   r   r   r   r<   r'  s     r0   r&  zDebugger.do_quit  s$    45",//r/   c                B    t         j                  | j                  _        y)zContinue to next resultT)r   r   r   r<   r'  s     r0   do_continuezDebugger.do_continue  s    ","5"5r/   c                B    t         j                  | j                  _        y)zKSchedule task for re-execution. The re-execution may not be the next resultT)r   r   r   r<   r'  s     r0   do_redozDebugger.do_redo  s    ",//r/   c                    t        d| j                  d         }| j                  d   }|j                  |j                        }|j	                  |       || j                  d<   y)zLRecreate the task from ``task._ds``, and template with updated ``task_vars``Nr?   )r  r=   )r   r!  	load_datar  r  )r   rY   r>   r=   s       r0   do_update_taskzDebugger.do_update_task  sS    $$**[*ABzz&!~~dhh'7#!

6r/   c           	        	 t        |t               | j                        S # t        $ r_ t	        j
                         d d \  }}t        |t              r|}n|j                  }t        j                  d|dt        |              w xY w)Nr  ***:)evalglobalsr!  r  r   exc_inforU   r  r+   rW   repr)r   rY   tvexc_type_names        r0   evaluatezDebugger.evaluate  sq    		gi44 	<<>"1%DAq!S! ! !

OO-aAB	s
   ! A(B	c                    	 | j                  |      }t        j                  t        j                  |             y# t        $ r Y yw xY w)zPretty PrintN)r;  rW   pprintpformatr  )r   rY   r<   s      r0   	do_pprintzDebugger.do_pprint  s<    	]]4(FOOFNN623 		s   9< 	AAc           	     :   	 t        |dz   dd      }t        |t               | j                         y # t        $ r_ t        j                         d d \  }}t        |t              r|}n|j                  }t        j                  d|dt        |              w xY w)N
z<stdin>singler  r2  r3  )compileexecr5  r!  r  r   r6  rU   r  r+   rW   r7  )r   rY   coder8  r9  r:  s         r0   executezDebugger.execute  s    
	4$;	8<Dwy$**- 	<<>"1%DAq!S! ! !

OO-aAB	s
   /2 A(Bc                F    	 | j                  |       y # t        $ r Y y w xY wr%  )rF  r  )r   lines     r0   defaultzDebugger.default  s%    	LL 		s    	  N)r+   r,   r-   prompt_continuousr   r   r  r  do_helpdo_hr(  r&  do_qr+  do_cr-  do_rr0  do_ur;  r?  do_prF  rI  r.   r/   r0   r   r   y  sq    ' 77??D" D
 D
 D" D
 Dr/   r   )Z
__future__r   r  r   r  r=  rm   r   r   r  typingr8  collectionsr   jinja2.exceptionsr   ansibler   r   r   ansible.errorsr   r	   r
   r   ansible.executorr   ansible.executor.play_iteratorr   r   ansible.executor.process.workerr   ansible.executor.task_resultr   #ansible.executor.task_queue_managerr   r   r   ansible.module_utils.sixr   +ansible.module_utils.common.text.convertersr   ansible.module_utils.connectionr   r   ansible.playbook.conditionalr   ansible.playbook.handlerr   ansible.playbook.helpersr   ansible.playbook.taskr   ansible.playbook.task_includer   ansible.pluginsr   r  ansible.templater   ansible.utils.displayr    ansible.utils.fqcnr!   ansible.utils.unsafe_proxyr"   ansible.utils.sentinelr#   ansible.utils.varsr$   ansible.utils.multiprocessingr  ansible.vars.cleanr%   r&   rW   __all__	frozensetr7  r*   r   rA   rN   rt   r   r'   objectr   r  r   r.   r/   r0   <module>rq     s   $ # 
  	   
     - "  j j / H 9 3 U U 1 ? G 4 , 8 & 5 3 $ ) 1 / + + L L
)
 !* + ! 
	 	 	Q" *Z@FLH LH^ dsww dr/   