
    Vh~                        d dl mZ d dlZd dlmZm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 d d	lmZ  e       Zg d
Z G d de      Z G d de      Z G d d      Z G d d      Zy)    )annotationsN)IntEnumIntFlag)	constants)AnsibleAssertionError)boolean)Block)Task)Display)PlayIteratorIteratingStatesFailedStatesc                  $    e Zd ZdZdZdZdZdZdZy)r   r                  N)	__name__
__module____qualname__SETUPTASKSRESCUEALWAYSHANDLERSCOMPLETE     N/home/dcms/DCMS/lib/python3.12/site-packages/ansible/executor/play_iterator.pyr   r   &   s     EEFFHHr   r   c                  $    e Zd ZdZdZdZdZdZdZy)r   r   r   r   r         N)	r   r   r   NONEr   r   r   r   r   r   r   r    r   r   /   s     DEEFFHr   r   c                  0    e Zd Zd Zd Zd Zd Zd Zd Zy)	HostStatec                >   |d d  | _         g | _        g | _        d| _        d| _        d| _        d| _        d| _        t        j                  | _
        t        j                  | _        d | _        d| _        d| _        d | _        d | _        d | _        d| _        d| _        y )Nr   TF)_blockshandlershandler_notifications	cur_blockcur_regular_taskcur_rescue_taskcur_always_taskcur_handlers_taskr   r   	run_stater   r$   
fail_statepre_flushing_run_stateupdate_handlerspending_setuptasks_child_staterescue_child_statealways_child_state
did_rescuedid_start_at_task)selfblockss     r    __init__zHostState.__init__9   s    ay%'" !  !"(..&++&*##"!%"&"&!&r   c                     d| j                   z  S )NzHostState(%r))r(   r:   s    r    __repr__zHostState.__repr__O   s    --r   c                V   d| j                   | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  fz  S )Na  HOST STATE: block=%d, task=%d, rescue=%d, always=%d, handlers=%d, run_state=%s, fail_state=%s, pre_flushing_run_state=%s, update_handlers=%s, pending_setup=%s, tasks child state? (%s), rescue child state? (%s), always child state? (%s), did rescue? %s, did start at task? %s)r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r>   s    r    __str__zHostState.__str__R   s    8 NN))((((**NNOO//((&&**++++OO**; 	r   c                j    t        |t              sydD ]  }t        | |      t        ||      k7  s y y)NF)r(   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   T)
isinstancer&   getattr)r:   otherattrs      r    __eq__zHostState.__eq__h   sA    %+V 	D tT"geT&::	 r   c                4    | j                   | j                     S N)r(   r+   r>   s    r    get_current_blockzHostState.get_current_blocku   s    ||DNN++r   c                   t        | j                        }| j                  d d  |_        | j                  d d  |_        | j                  |_        | j
                  |_        | j                  |_        | j                  |_        | j                  |_        | j                  |_	        | j                  |_
        | j                  |_        | j                  |_        | j                  |_        | j                  |_        | j                  |_        | j                   | j                   j#                         |_        | j$                  | j$                  j#                         |_        | j&                  | j&                  j#                         |_        |S rI   )r&   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r8   r9   r5   copyr6   r7   )r:   	new_states     r    rL   zHostState.copyx   sC   dll+	!]]1-	*.*D*DQ*G	'"nn	%)%:%:	"$($8$8	!$($8$8	!&*&<&<	#"nn	#	+/+F+F	($($8$8	!"&"4"4	#	&*&<&<	#!!-*.*@*@*E*E*GI'"".+/+B+B+G+G+II("".+/+B+B+G+G+II(r   N)	r   r   r   r<   r?   rA   rG   rJ   rL   r   r   r    r&   r&   8   s     ',.,,r   r&   c                      e 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dZd Zd Zd Zd Zed        ZddZddZddZddZddZddZd dZy)!r   c                   || _         g | _        || _        t        | j                         }d|_        t        |      }d|_        d|_        d|_        i |_	        | j                   j                  sdg|_
        dD ]+  }	t        | j                   |	d       }
|
|
|j                  |	<   - |j                  | j                   j                         | j                   j                  | j                   j                  d d  |_        |g|_        |j#                  |      }| j                  j%                  |       |j'                         | _        | j                   j+                         D ]h  }|j#                  |      }|j-                         s%| j                  j%                  |       | j(                  j/                  |j'                                j | j                   j0                  D cg c]  }|j                   D ]  }|  c}}| _        i | _        d}|j5                  | j                   j6                  | j                   j8                  	      }t;        |      | _        |D ]  }| j?                  |j                  tA        | j                  
             |jB                  A|rD	 | jE                  |d      \  }}|jF                  tH        jJ                  k(  rn|j                  |jB                  k(  s|j                  r*tM        jL                  |j                  |jB                        sK|jO                         |jB                  k(  s.tM        jL                  |jO                         |jB                        rd}n| j?                  |j                  |       |s7d| j2                  |j                     _(        tH        jR                  | j2                  |j                     _#         |rd |_!        d| _*        d| _+        y c c}}w )N)playF)blockgather_factszansible.builtin.gather_factszGathering Factsalways)gather_subsetgather_timeout	fact_path)orderr;   T)peekr   ),_playr(   _variable_managerr	   run_oncer
   actionresolved_actionnameargstagsrD   
set_loader_loader_included_conditionalwhenrQ   filter_tagged_tasksappend	get_tasks	all_taskscompile	has_tasksextendr)   _host_states	get_hostshostsrW   len
batch_sizeset_state_for_hostr&   start_at_taskget_next_task_for_hostr0   r   r   fnmatchget_namer9   r   end_playcur_task)r:   	inventoryrP   play_contextvariable_managerall_varsstart_at_donesetup_block
setup_taskoptionvaluerQ   	new_blockbhstart_at_matchedbatchhoststasks                       r    r<   zPlayIterator.__init__   sj   
!1,  %,
*
 &D
"+

 zz'jJO G 	0FDJJ5E */
'	0
 	djj001::++7"jj>>qAJO'L!55h?K( %..0ZZ'') 	=E11(;I""$##I.%%i&9&9&;<		= %)JJ$7$7IqIAII ##DJJ$4$4DJJ<L<L#Me* 	SD##DIIy/MN ))5m $ ; ;Dt ; LIQ{{o&>&>>yyL$>$>>499QXQ`Q`aeajajlx  mG  mG  RH}},*D*DDX\XeXeXgiu  jD  jD  IE+/(++DIIq9  $EID%%dii0B=L=R=RD%%dii0:%	S(  *.L&C Js   )O>c                    |j                   | j                  vr&| j                  |j                   t        g              | j                  |j                      j	                         S )NrX   )r_   rm   rr   r&   rL   r:   r   s     r    get_host_statezPlayIterator.get_host_state   sM     99D---##DIIy/CD  +0022r   c                   t         j                  d|j                  z         | j                  |      }d }|j                  t
        j                  k(  r&t         j                  d|j                  z         |d fS | j                  ||      \  }}|s| j                  |j                  |       t         j                  d|j                  z         t         j                  d|z         t         j                  d|z         ||fS )Nz!getting the next task for host %sz$host %s is done iterating, returningr   z"done getting next task for host %sz ^ task is: %sz ^ state is: %s)	displaydebugr_   r   r0   r   r   _get_next_task_from_staterr   )r:   r   rY   r   r   s        r    rt   z#PlayIterator.get_next_task_for_host   s    9DIIEF%;;/222MM@499LMt922142@	D##DIIq1:TYYFG&-.'!+,4yr   c                ^   d }	 	 |j                   |j                     }|j
                  t        j                  k(  r|j                  sd|_        t        j                  }| j                  j                  d u xs! t        | j                  j                  d      }|dk(  r|sp|dk(  r!t        | j                  j                  d      sJ|dk(  r|r| j                  j                  j                  |j                   i       j                  dd      s| j                   d   }|j#                         rt%        |j&                        dkD  ry|j&                  d   }nhd|_        t        j(                  |_        |j*                  s?|xj                  d	z  c_        d|_        d|_        d|_        d |_        d |_        d |_        n|j
                  t        j(                  k(  r|j                  rd|_        |j2                  r| j9                  |j2                  |
      \  |_        }| j;                  |j2                        rd |_        | j=                  |       ng|(|j2                  j
                  t        j                  k(  r=d |_        | j;                  |      rt        j>                  |_        n|j,                  t%        |j&                        k\  rt        j@                  |_        n|j&                  |j,                     }tC        |tD              r3tG        |g      |_        t        j(                  |j2                  _        d }|xj,                  d	z  c_        n`|j
                  t        j>                  k(  r|j4                  r| j9                  |j4                  |
      \  |_        }| j;                  |j4                        rd |_        | j=                  |       n|(|j4                  j
                  t        j                  k(  rd |_        |jH                  tJ        j>                  z  tJ        j>                  k(  rt        j@                  |_        nd|j.                  t%        |jL                        k\  rKt%        |jL                        dkD  rtJ        jN                  |_$        t        j@                  |_        d|_(        n|jL                  |j.                     }tC        |tD              r3tG        |g      |_        t        j(                  |j4                  _        d }|xj.                  d	z  c_        n|j
                  t        j@                  k(  r|j6                  r| j9                  |j6                  |
      \  |_        }| j;                  |j6                        rd |_        | j=                  |       n |(|j6                  j
                  t        j                  k(  rd |_        |j0                  t%        |jR                        k\  r|jH                  tJ        jN                  k7  rt        j                  |_        nw|xj                  d	z  c_        d|_        d|_        d|_        t        j(                  |_        d |_        d |_        d |_        d|_(        n|jR                  |j0                     }tC        |tD              r3tG        |g      |_        t        j(                  |j6                  _        d }|xj0                  d	z  c_        n|j
                  t        jT                  k(  rj|jV                  r| jX                  d d  |_,        d|_+        	 	 |jX                  |jZ                     }|xjZ                  d	z  c_-        |j]                  |      rn"B|j
                  t        j                  k(  r|d fS |r|j`                  r~|jb                  t        jd                  v rb|jf                  j                  dd       dk(  rC| ji                  |j                         jj                  stm        d | jX                  D              rM	 ||fS S# t        $ r t        j                  |_        |d fcY S w xY w# t        $ r$ d }d|_-        |j^                  |_        d|_+        Y w xY w)NTF)strictimplicitexplicitsmart_ansible_facts_gatheredr   r   r   rX   _raw_paramsflush_handlersc              3  6   K   | ]  }|j                      y wrI   )notified_hosts).0r   s     r    	<genexpr>z9PlayIterator._get_next_task_from_state.<locals>.<genexpr>  s     LA$4$4 4Ls   )7r(   r+   
IndexErrorr   r   r0   r   r4   CDEFAULT_GATHERINGrZ   rR   r   r[   _fact_cachegetr_   rk   rp   rQ   r   r9   r,   r-   r.   r5   r6   r7   r   _check_failed_state_set_failed_stater   r   rC   r	   r&   r1   r   rescuer$   r8   rS   r   r3   r)   r/   is_host_notifiedr2   r   r]   _ACTION_METAr`   get_state_for_hostr*   all)r:   stater   r   rQ   	gatheringimpliedr~   s           r    r   z&PlayIterator._get_next_task_from_state  s!    %eoo6
 /"7"77
 ***.E' !" 3 3I"jj55=oI`I`inAoG!Z/G!Z/GDJJ<S<S\a4b!W,$BXBXBdBdBhBhimirirtvBwB{B{  }V  X]  C^ '+ll1o&002s;;L;L7MPQ7Q#.#4#4Q#7D
 +0E'&5&;&;EO 221,12.01-01-26/370370O$9$99&&*/E'
 **6:6T6TUZUlUlsw6T6x3U,d//0G0GH26/..u5  <5+B+B+L+LP_PhPh+h 7;E3$ //6*9*@*@//3u{{3CC*9*@*@${{5+A+AB &dE26?v6NE3@O@U@UE33= $(D..!3.O$:$:: ++7;7U7UV[VnVnuy7U7z4U-t//0H0HI370..u5<5+C+C+M+MQ`QiQi+i7;E4$'',*=*==ATATT*9*@*@..#ell2CCu||,q0/;/@/@E,*9*@*@+/($||E,A,AB%dE27@7OE4APAVAVE44>#'D--2-O$:$::
 ++7;7U7UV[VnVnuy7U7z4U-t//0H0HI370..u5<5+C+C+M+MQ`QiQi+i7;E4$,,ELL0AA ++|/@/@@.=.F.FEO!OOq0O56E245E145E1.=.C.CEO6:E37;E47;E4/4E,$||E,A,AB%dE27@7OE4APAVAVE44>#'D--2-O$<$<<(( &*]]1%5EN,1E)"$~~e.E.EF //14/006!  O$<$<<t}$  MMq~~5		mT:>NN !33DII>TT
  LdmmLL t}W   %"1":":t}$%B & #23/*/*F*F04-s#   a "a? "a<;a<?*b,+b,c                *   |j                   t        j                  k(  r:|xj                  t        j                  z  c_        t        j
                  |_         |S |j                   t        j                  k(  r|j                  "| j                  |j                        |_        |S |xj                  t        j                  z  c_        |j                  |j                     j                  rt        j                  |_         |S |j                  |j                     j                  rt        j                  |_         |S t        j
                  |_         |S |j                   t        j                  k(  r|j                  "| j                  |j                        |_        |S |xj                  t        j                  z  c_        |j                  |j                     j                  rt        j                  |_         |S t        j
                  |_         |S |j                   t        j                  k(  rf|j                   "| j                  |j                         |_        |S |xj                  t        j                  z  c_        t        j
                  |_         |S rI   )r0   r   r   r1   r   r   r   r5   r   r(   r+   r   r   rS   r   r6   r7   r:   r   s     r    r   zPlayIterator._set_failed_state  s   ??o333 2 22-66EO6 5 __ 5 55&&2*.*@*@AXAX*Y'0 -   L$6$66 ==188&5&<&<EO( ' ]]5??3::&5&<&<EO$ ! '6&>&>EO   __ 6 66''3+/+A+A%BZBZ+[(    L$7$77 ==188&5&<&<EO  '6&>&>EO  __ 6 66''3+/+A+A%BZBZ+[(    L$7$77 "1":":r   c                   | j                  |      }t        j                  d|d|       |j                  t        j
                  k(  r|j                  |_        d|_        | j                  |      }t        j                  d|z         | j                  |j                  |       | j                  j                  j                  |j                         y )Nzmarking host z failed, current state: Tz^ failed state is now: %s)r   r   r   r0   r   r   r2   r3   r   rr   r_   rZ   _removed_hostsrg   r:   r   r   s      r    mark_host_failedzPlayIterator.mark_host_failed  s    %T1MN;;/222 22AK $A""1%1A56		1-

!!((3r   c                \     t         fd j                  j                         D              S )Nc              3  P   K   | ]  \  }}j                  |      s|d f  yw)TN)r   )r   r   r   r:   s      r    r   z0PlayIterator.get_failed_hosts.<locals>.<genexpr>  s(     s]dESWSkSklqSrT4Lss   &	&)dictrm   itemsr>   s   `r    get_failed_hostszPlayIterator.get_failed_hosts  s#    sd6G6G6M6M6Osssr   c                   |y|j                   t        j                  k(  r| j                  |j                        ry|j                   t        j
                  k(  r| j                  |j                        ry|j                  t        j                  k7  r|j                   t        j                  k(  r!|j                  t        j                  z  dk(  ry|j                   t        j
                  k(  r!|j                  t        j
                  z  dk(  ry|j                  xr  |j                  t        j
                  z  dk(   S |j                   t        j                  k(  rn| j                  |j                        rS|j                  |j                     }t        |j                         dkD  r!|j                  t        j                  z  dk(  ryyy)NFTr   )r0   r   r   r   r6   r   r7   r1   r   r$   r8   r   r5   r(   r+   rp   r   )r:   r   r+   s      r    r   z PlayIterator._check_failed_state  sf   =__ 6 664;S;STYTlTl;m__ 6 664;S;STYTlTl;m!2!22/"8"88U=M=MP\PcPc=cgh=hO$:$::u?O?OR^ReRe?eij?j!,,\1A1ALDWDW1W[\1\]]__ 5 55$:R:RSXSjSj:keoo6I9##$q(U-=-=@S@S-SWX-Xr   c                F    | j                  |      }| j                  |      S rI   )r   r   r   s      r    	is_failedzPlayIterator.is_failed  s#    %''**r   c                X    | j                  | j                  |j                               y rI   )_clear_state_errorsr   r_   r   s     r    clear_host_errorszPlayIterator.clear_host_errors"  s      !8!8!CDr   c                   t         j                  |_        |j                  | j	                  |j                         y |j
                  | j	                  |j
                         y |j                  | j	                  |j                         y y rI   )r   r$   r1   r5   r   r6   r7   r   s     r    r   z PlayIterator._clear_state_errors%  su    ',,"".$$U%<%<=%%1$$U%=%=>%%1$$U%=%=> 2r   c                   |j                   t        j                  k(  r'|j                  | j	                  |j                        S |j                   t        j
                  k(  r'|j                  | j	                  |j                        S |j                   t        j                  k(  r'|j                  | j	                  |j                        S |S )z_
        Finds the active state, recursively if necessary when there are child states.
        )	r0   r   r   r5   get_active_stater   r6   r   r7   r   s     r    r   zPlayIterator.get_active_state/  s     ??o3338O8O8[(()@)@AA__ 6 665;S;S;_(()A)ABB__ 6 665;S;S;_(()A)ABBr   c                ^   |j                   t        j                  k(  r|j                         j                  ry|j
                  | j                  |j
                        S |j                  | j                  |j                        S |j                  | j                  |j                        S y)z
        Given the current HostState state, determines if the current block, or any child blocks,
        are in rescue mode.
        TF)	r0   r   r   rJ   r   r5   is_any_block_rescuingr6   r7   r   s     r    r   z"PlayIterator.is_any_block_rescuing;  s    
 ??o3338O8O8Q8X8X"".--e.E.EFF##/--e.F.FGG##/--e.F.FGGr   c                   |j                   t        j                  k7  r|j                  t        j
                  k(  s|s|S |j                  t        j
                  k(  r|j                  r#| j                  |j                  |      |_        |S |j                  |j                     j                         }|j                  d |j                   }|j                  |j                  d  }||z   |z   |_        ||j                  |j                  <   |S |j                  t        j                  k(  r|j                  r#| j                  |j                  |      |_        |S |j                  |j                     j                         }|j                  d |j                    }|j                  |j                   d  }||z   |z   |_        ||j                  |j                  <   |S |j                  t        j"                  k(  r|j$                  r#| j                  |j$                  |      |_        |S |j                  |j                     j                         }|j&                  d |j(                   }|j&                  |j(                  d  }||z   |z   |_        ||j                  |j                  <   |S |j                  t        j*                  k(  rD|D cg c]  }|j                  D ]  }|  c}}|j,                  |j.                  |j.                   |S c c}}w rI   )r1   r   r$   r0   r   r   r5   _insert_tasks_into_stater(   r+   rL   rQ   r,   r   r6   r   r-   r   r7   rS   r.   r   r)   r/   )r:   r   	task_listtarget_blockbeforeafterr   r   s           r    r   z%PlayIterator._insert_tasks_into_stateJ  s    1 11eooI^I^6^gpL??o333&&*.*G*GH_H_aj*k'8 5  %}}U__=BBD%++,CU-C-CD$**5+A+A+BC%+i%7%%?"1=eoo., + __ 6 66''+/+H+HIaIacl+m(& #  %}}U__=BBD%,,-Ce.C.CD$++E,A,A,BC&,y&85&@#1=eoo.  __ 6 66''+/+H+HIaIacl+m(   %}}U__=BBD%,,-Ce.C.CD$++E,A,A,BC&,y&85&@#1=eoo.  __ 8 88ZcNuUVmnmtmtNuhiqNuqNuENN52253J3JK Ovs   L	c                z    | j                  |j                  | j                  | j                  |      |             y rI   )rr   r_   r   r   )r:   r   r   s      r    	add_taskszPlayIterator.add_taskso  s0    		4+H+HI\I\]aIbdm+nor   c                    | j                   S rI   rm   r>   s    r    host_stateszPlayIterator.host_statesr  s       r   c                     | j                   |   S rI   r   )r:   hostnames     r    r   zPlayIterator.get_state_for_hostv  s      **r   c                p    t        |t              st        dt        |      z        || j                  |<   y )Nz-Expected state to be a HostState but was a %s)rC   r&   r   typerm   r:   r   r   s      r    rr   zPlayIterator.set_state_for_hosty  s4    %+'(WZ^_dZe(eff&+(#r   c                z    t        |t              st        dt        |      z        || j                  |   _        y )Nz5Expected run_state to be a IteratingStates but was %s)rC   r   r   r   rm   r0   )r:   r   r0   s      r    set_run_state_for_hostz#PlayIterator.set_run_state_for_host~  s7    )_5'(_cghqcr(stt09(#-r   c                z    t        |t              st        dt        |      z        || j                  |   _        y )Nz3Expected fail_state to be a FailedStates but was %s)rC   r   r   r   rm   r1   )r:   r   r1   s      r    set_fail_state_for_hostz$PlayIterator.set_fail_state_for_host  s7    *l3'(]aefpaq(rss1;(#.r   c                v    | j                   |   }||j                  vr|j                  j                  |       y y rI   )rm   r*   rg   )r:   r   notification
host_states       r    add_notificationzPlayIterator.add_notification  s:    &&x0
z???,,33LA @r   c                T    | j                   |   j                  j                  |       y rI   )rm   r*   remove)r:   r   r   s      r    clear_notificationzPlayIterator.clear_notification  s!    (#99@@Nr   c                H   | j                  | j                  |            }|j                  t        j                  k(  r | j                  |t        j                         | j                  |t        j                         | j                  j                  j                  |       y)z\Used by ``end_host``, ``end_batch`` and ``end_play`` meta tasks to end executing given host.N)r   r   r0   r   r   r   r   r$   r   r   rZ   r   rg   r   s      r    end_hostzPlayIterator.end_host  su    %%d&=&=h&GH??o444 ((<3D3DE##Ho.F.FG

!!((2r   N)F)r   r&   returnNone)r   strr   r&   )r   r   r   r&   r   r   )r   r   r0   r   r   r   )r   r   r1   r   r   r   )r   r   r   r   r   r   )r   r   r   r   )r   r   r   r<   r   rt   r   r   r   r   r   r   r   r   r   r   r   r   propertyr   r   rr   r   r   r   r   r   r   r   r    r   r      s    Tl3(Pd@4t,+E?
#Jp ! !+,
:
<
BO3r   r   )
__future__r   ru   enumr   r   ansibler   r   ansible.errorsr   )ansible.module_utils.parsing.convert_boolr   ansible.playbook.blockr	   ansible.playbook.taskr
   ansible.utils.displayr   r   __all__r   r   r&   r   r   r   r    <module>r      sc   $ #  ! " 0 = ( & ) ) >g 7 V VrN3 N3r   