a ì)g%yã@sÆddlmZmZmZeZddlZddlmZm Z ddl m Z ddl mZddlmZddlmZddlmZdd lmZeƒZgd ¢ZGd d „d eƒZGd d„de ƒZGdd„dƒZGdd„dƒZdS)é)Úabsolute_importÚdivisionÚprint_functionN)ÚIntEnumÚIntFlag)Ú constants)ÚAnsibleAssertionError)Úboolean)ÚBlock)ÚTask)ÚDisplay)Ú PlayIteratorÚIteratingStatesÚ FailedStatesc@s$eZdZdZdZdZdZdZdZdS)rréééééN) Ú__name__Ú __module__Ú __qualname__ÚSETUPÚTASKSÚRESCUEÚALWAYSÚHANDLERSÚCOMPLETE©rrúB/usr/lib/python3.9/site-packages/ansible/executor/play_iterator.pyr(s rc@s$eZdZdZdZdZdZdZdZdS)rrrrrééN) rrrÚNONErrrrrrrrrr1s rc@s<eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)Ú HostStatecCsv|dd…|_g|_d|_d|_d|_d|_d|_tj|_ t j |_ d|_ d|_d|_d|_d|_d|_d|_d|_dS)NrTF)Ú_blocksÚhandlersÚ cur_blockÚcur_regular_taskÚcur_rescue_taskÚcur_always_taskÚcur_handlers_taskrrÚ run_staterr"Ú 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ÚblocksrrrÚ__init__;s"zHostState.__init__cCs d|jS)Nz HostState(%r))r$©r5rrrÚ__repr__OszHostState.__repr__cCsDd|j|j|j|j|j|j|j|j|j|j |j |j |j |j |jfS)NaHOST 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*r+r,r-r.r/r0r1r2r3r4r8rrrÚ__str__Rs$ñýzHostState.__str__cCs6t|tƒsdSdD]}t||ƒt||ƒkrdSqdS)NF)r$r&r'r(r)r*r+r,r-r.r/r0r1r2T)Ú isinstancer#Úgetattr)r5ÚotherÚattrrrrÚ__eq__hs  zHostState.__eq__cCs |j|jS©N)r$r&r8rrrÚget_current_blockuszHostState.get_current_blockcCsÀt|jƒ}|jdd…|_|j|_|j|_|j|_|j|_|j|_|j|_|j |_ |j |_ |j |_ |j |_ |j |_ |j|_|jdur�|j ¡|_|jdur¦|j ¡|_|jdur¼|j ¡|_|Sr@)r#r$r%r&r'r(r)r*r+r,r-r.r/r3r4r0Úcopyr1r2)r5Z new_staterrrrBxs*       zHostState.copyN) rrrr7r9r:r?rArBrrrrr#:s  r#c@sòeZdZd4dd„Zdd„Zdd„Zd5dd „Zd d „Zd d „Zdd„Z dd„Z dd„Z dd„Z dd„Z eddœdd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zed&d'„ƒZeed(œd)d*„Zeedd+œd,d-„Zeedd.œd/d0„Zeedd1œd2d3„ZdS)6r FcCsN||_g|_||_t|jd�}d|_t|d�}d|_d|_d|_i|_ |jj sVdg|_ dD]$} t |j| dƒ} | durZ| |j | <qZ|  |jj ¡|jjdur¬|jjdd…|_|g|_| |¡}|j |¡| ¡|_|j ¡D]2} |  |¡} |  ¡rÞ|j | ¡|j |  ¡¡qÞd d „|jjDƒ|_i|_d} |j|jj|jjd �}t|ƒ|_|D]Ü}| |jt |jd �¡|j!du�rT|�sT|j"|d d�\}}|j#t$j%k�r¤�q |j|j!k�sð|j�rÌt& &|j|j!¡�sð| '¡|j!k�sðt& &| '¡|j!¡�rød } �q | |j|¡�q€| �rTd |j|j_(t$j)|j|j_#�qT| �r>d|_!d|_*d|_+dS)N)ÚplayF©ÚblockÚ gather_factszansible.builtin.gather_factszGathering FactsÚalways)Z gather_subsetZgather_timeoutZ fact_pathcSsg|]}|jD]}|‘qqSrrD©Ú.0ÚbÚhrrrÚ Åóz)PlayIterator.__init__..)Úorder©r6T)Úpeekr),Ú_playr$Ú_variable_managerr Zrun_oncer ÚactionZresolved_actionÚnameÚargsÚtagsr<Ú set_loaderZ_loaderZ_included_conditionalZwhenrEZfilter_tagged_tasksÚappendZ get_tasksZ all_tasksÚcompileÚ has_tasksÚextendr%Ú _host_statesZ get_hostsÚhostsrNÚlenZ batch_sizeÚset_state_for_hostr#Z start_at_taskÚget_next_task_for_hostr+rrÚfnmatchZget_namer4rZend_playZcur_task)r5Z inventoryrCZ play_contextZvariable_managerZall_varsZ start_at_doneÚ setup_blockZ setup_taskÚoptionÚvaluerEZ new_blockZstart_at_matchedZbatchÚhostÚsÚtaskrrrr7’sl          ( ÿÿzPlayIterator.__init__cCs0|j|jvr | |jtgd�¡|j|j ¡S)NrO)rTr\r_r#rB©r5rerrrÚget_host_stateès zPlayIterator.get_host_statecCstjddd�dS)NzlPlayIterator.cache_block_tasks is now noop due to the changes in the way tasks are cached and is deprecated.çHáz®G@©Úversion©ÚdisplayZ deprecated)r5rErrrÚcache_block_tasksñsýzPlayIterator.cache_block_taskscCsšt d|j¡| |¡}d}|jtjkrBt d|j¡|dfS|j||d�\}}|sf| |j|¡t d|j¡t d|¡t d|¡||fS)Nz!getting the next task for host %sz$host %s is done iterating, returning©rez"done getting next task for host %sz ^ task is: %sz ^ state is: %s) rnÚdebugrTrir+rrÚ_get_next_task_from_stater_)r5rerPrfrgrrrr`øs  z#PlayIterator.get_next_task_for_hostcCs:d}z|j|j}Wn"ty6tj|_|dfYS0|jtjk�r6|jsêd|_tj }|j j duprt |j j dd�}|dkr€|s¾|dkr˜t |j j dd�s¾|dkrè|rè|j j |ji¡ dd¡sè|jd}| ¡rèt|jƒdkrè|jd}nHd|_tj|_|j�s(|jd 7_d|_d|_d|_d|_d|_d|_�nò|jtjk�r,|j�rRd|_|j�r´|j|j|d �\|_}| |j¡�r�d|_| |¡n"|du�sª|jjtjk�r(d|_qnt| |¡�rÊtj|_n^|jt|jƒk�rætj |_nB|j|j}t!|t"ƒ�rt#|gd �|_tj|j_d}|jd 7_�nü|jtjk�r:|j�rœ|j|j|d �\|_}| |j¡�rxd|_| |¡n"|du�s’|jjtjk�r6d|_qnš|j$t%j@t%jk�rºtj |_n||jt|j&ƒk�rôt|j&ƒdk�rät%j'|_$tj |_d|_(nB|j&|j}t!|t"ƒ�r(t#|gd �|_tj|j_d}|jd 7_�nî|jtj k�rZ|j�rª|j|j|d �\|_}| |j¡�r†d|_| |¡n"|du�s |jjtjk�rXd|_qn®|jt|j)ƒk�r|j$t%j'k�rÔtj|_n@|jd 7_d|_d|_d|_tj|_d|_d|_d|_d|_(nB|j)|j}t!|t"ƒ�rJt#|gd �|_tj|j_d}|jd 7_nÎ|jtj*k�r|j+�rŒ|j,dd…|_,d|_+d|_-|j$t%j*@t%j*k�r°d|_+tj|_n`z|j,|j-}Wn,t�yìd}|j.|_d|_+Y�q(Yn 0|j-d 7_-| /|¡�r°�q(�q°n|jtjk�r(|dfS|r�q2q||fS) NTF)ÚstrictZimplicitZexplicitZsmartZ_ansible_facts_gatheredrrrprO)0r$r&Ú IndexErrorrrr+rr/ÚCZDEFAULT_GATHERINGrQrFr rRZ _fact_cacheÚgetrTrZr^rErr4r'r(r)r0r1r2rrÚ_check_failed_stateÚ_set_failed_staterrr;r r#r,rÚrescuer"r3rGrr.r%r*r-Zis_host_notified)r5ÚstaterergrEZ gatheringZimpliedrbrrrrr s  ÿÿþþþ                        z&PlayIterator._get_next_task_from_statecCs˜|jtjkr(|jtjO_tj|_�nl|jtjkr˜|jdurN| |j¡|_nH|jtjO_|j |j j rvtj |_n |j |j j rŽtj|_ntj|_nü|jtj krð|jdur¾| |j¡|_n0|jtj O_|j |j j rætj|_ntj|_n¤|jtjk�r4|jdu�r| |j¡|_n|jtjO_tj|_n`|jtjk�r”|jtjO_d|_|j |j j �rrtj |_n"|j |j j �rŒtj|_ntj|_|S)NT)r+rrr,rrrr0rxr$r&ryrrGrr1r2rr.©r5rzrrrrxÐsB               zPlayIterator._set_failed_statecCsV| |¡}t d||f¡| |¡}t d|¡| |j|¡|jj |j¡dS)Nz)marking host %s failed, current state: %sz^ failed state is now: %s) rirnrqrxr_rTrQZ_removed_hostsrX©r5rerfrrrÚmark_host_failedùs   zPlayIterator.mark_host_failedcst‡fdd„ˆj ¡DƒƒS)Nc3s$|]\}}ˆ |¡r|dfVqdS)TN)rw)rIrerzr8rrÚ rMz0PlayIterator.get_failed_hosts..)Údictr\Úitemsr8rr8rÚget_failed_hostsszPlayIterator.get_failed_hostscCs"|dur dS|jtjkr(| |j¡r(dS|jtjkrD| |j¡rDdS|jtjkrf|jt j@t jkrfdS|jt j krÌ|jtjkr’|jt j@dkr’dS|jtjkr²|jt j@dkr²dS|j oÆ|jt j@dk SnR|jtj k�r| |j ¡�r|j|j}t|jƒdk�r|jt j@dk�rdSdSdS)NFTr)r+rrrwr1rr2rr,rr"r3rr0r$r&r^ry)r5rzr&rrrrws(  "z PlayIterator._check_failed_statecCs| |¡}| |¡Sr@)rirwr|rrrÚ is_faileds zPlayIterator.is_failedcCs| | |j¡¡dSr@)Ú_clear_state_errorsÚget_state_for_hostrTrhrrrÚclear_host_errors szPlayIterator.clear_host_errorsN)rzÚreturncCsRtj|_|jdur | |j¡n.|jdur8| |j¡n|jdurN| |j¡dSr@)rr"r,r0rƒr1r2r{rrrrƒ#s   z PlayIterator._clear_state_errorscCsj|jtjkr"|jdur"| |j¡S|jtjkrD|jdurD| |j¡S|jtjkrf|jdurf| |j¡S|S)z_ Finds the active state, recursively if necessary when there are child states. N) r+rrr0Úget_active_staterr1rr2r{rrrr‡-s   zPlayIterator.get_active_statecCs`|jtjkr| ¡jrdS|jdur0| |j¡S|jdurF| |j¡S|jdur\| |j¡SdS)z† Given the current HostState state, determines if the current block, or any child blocks, are in rescue mode. TNF) r+rrrAryr0Úis_any_block_rescuingr1r2r{rrrrˆ9s      z"PlayIterator.is_any_block_rescuingcCstjddd�dS)NzlPlayIterator.get_original_task is now noop due to the changes in the way tasks are cached and is deprecated.rjrk)NNrm)r5rergrrrÚget_original_taskHs ýzPlayIterator.get_original_taskcCs¦|jtjkr|jtjks|s |S|jtjkr’|jrD| |j|¡|_nJ|j|j   ¡}|j d|j …}|j |j d…}||||_ ||j|j <�n|jtj k�r|jr¸| |j|¡|_nJ|j|j   ¡}|jd|j…}|j|jd…}||||_||j|j <nž|jtjk�rx|j�r,| |j|¡|_nJ|j|j   ¡}|jd|j…}|j|jd…}||||_||j|j <n*|jtjk�r¢dd„|Dƒ|j|j|j…<|S)NcSsg|]}|jD]}|‘qqSrrDrHrrrrLqrMz9PlayIterator._insert_tasks_into_state..)r,rr"r+rrr0Ú_insert_tasks_into_stater$r&rBrEr'rr1ryr(rr2rGr)rr%r*)r5rzÚ task_listZ target_blockÚbeforeZafterrrrrŠPs: z%PlayIterator._insert_tasks_into_statecCs | |j| | |¡|¡¡dSr@)r_rTrŠri)r5rer‹rrrÚ add_tasksuszPlayIterator.add_taskscCs|jSr@©r\r8rrrÚ host_statesxszPlayIterator.host_states)Úhostnamer†cCs |j|Sr@rŽ)r5r�rrrr„|szPlayIterator.get_state_for_host)r�rzr†cCs(t|tƒstdt|ƒƒ‚||j|<dS)Nz-Expected state to be a HostState but was a %s)r;r#rÚtyper\)r5r�rzrrrr_s zPlayIterator.set_state_for_host)r�r+r†cCs*t|tƒstdt|ƒƒ‚||j|_dS)Nz5Expected run_state to be a IteratingStates but was %s)r;rrr‘r\r+)r5r�r+rrrÚset_run_state_for_host„s z#PlayIterator.set_run_state_for_host)r�r,r†cCs*t|tƒstdt|ƒƒ‚||j|_dS)Nz3Expected fail_state to be a FailedStates but was %s)r;rrr‘r\r,)r5r�r,rrrÚset_fail_state_for_host‰s z$PlayIterator.set_fail_state_for_host)F)F)rrrr7riror`rrrxr}r�rwr‚r…r#rƒr‡rˆr‰rŠr�Úpropertyr�Ústrr„r_rr’rr“rrrrr �s0 V  E)  % r )Z __future__rrrr‘Z __metaclass__raÚenumrrZansiblerruZansible.errorsrZ)ansible.module_utils.parsing.convert_boolr Zansible.playbook.blockr Zansible.playbook.taskr Zansible.utils.displayr rnÚ__all__rrr#r rrrrÚs        V