
    Vh9                        d dl mZ d dl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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 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"  e"       Z# G d d      Z$y)    )annotationsN)	constants)context)TaskQueueManagerAnsibleEndPlay)to_text)boolean)become_loaderconnection_loadershell_loader)Playbook)Templar)
pct_to_int)AnsibleCollectionConfig)_get_collection_name_from_path_get_collection_playbook_path)makedirs_safe)set_default_transport)Displayc                  (    e Zd ZdZd Zd Zd Zd Zy)PlaybookExecutorzw
    This is the primary class for executing playbooks, and thus the
    basis for bin/ansible-playbook operation.
    c           	        || _         || _        || _        || _        || _        t               | _        t        j                  j                  d      s]t        j                  j                  d      s>t        j                  j                  d      st        j                  j                  d      rd | _
        t                y t        |||| j                  t        j                  j                  d            | _
        t                y )N	listhosts	listtaskslisttagssyntaxforks)	inventoryvariable_managerloader	passwordsr   )
_playbooks
_inventory_variable_manager_loaderr!   dict_unreachable_hostsr   CLIARGSget_tqmr   r   )self	playbooksr   r   r    r!   s         R/home/dcms/DCMS/lib/python3.12/site-packages/ansible/executor/playbook_executor.py__init__zPlaybookExecutor.__init__0   s    ##!1""&&??{+w/B/B;/O##J/7??3F3Fx3PDI  	 )#!1..oo))'2DI 	    c                N   d}g }i }	 t        t        j                  d             t        t        j                  d             t        t	        j                  d             | j
                  D ]  }t        |      }||d   }|d   }n|}t        |      }|r0t        j                  dj                  |             |t        _        ndt        _        t        j                  || j                  | j                         }| j"                  
d	|i}g |d
<   n6| j"                  j%                          | j"                  j'                  d|       d}	|j)                         }
t        j+                  dt-        |
      t/        |      fz         |
D ]  }|j0                  &| j                   j3                  |j0                         n%| j                   j3                  |j4                         | j6                  j9                          | j                  j;                  |      }t=        | j                   |      }t?        |d|jA                  |jB                               |jB                  rG|jB                  D ]7  }|d   }|jE                  d|      }|jE                  dd      }tG        |jE                  dd            }tG        |jE                  dd            }|jE                  dd      }|jE                  dd      }|jE                  dd      }tG        |jE                  dd            }|| j                  jH                  vs| j"                  rP| j"                  j'                  d|||||||||
       t        jK                  |||||||||	      |jL                  |<   )||jL                  |<   : | j                  j;                  |      }t=        | j                   |      }|jO                  |       tP        jR                  d   r{| j"                  |d
   jU                  |       n| j"                  jV                  jY                  | jV                         t-        | j"                  jZ                        }t-        | j"                  jV                        }d}| j]                  |      }t-        |      dk(  r7| j"                  j'                  d|       | j"                  j'                  d       |D ]?  }| j6                  j_                  |       	 | j"                  ja                  |      }|| j"                  jf                  z  dk7  r| j"                  jh                  }d}t-        | j"                  jZ                        t-        | j"                  jV                        z   ||z   z
  }t-        |      |k(  rd} n||t-        | j"                  jZ                        |z
  z  }|t-        | j"                  jV                        |z
  z  }| jV                  jY                  | j"                  jV                         B |r n|	dz   }	 |r|jU                  |       | j"                  tj        jl                  rgto        | j"                  jZ                  jq                               }|jY                  | j"                  jV                  jq                                ts        |      }t-        |      dkD  rtj        jt                  rtj        jt                  } nA|r=tv        jx                  j{                  tv        jx                  j}                  |            } nd} tv        jx                  j                  tv        jx                  j                  |            \  }!}"tv        jx                  j                  | d|!z        }#| j                  |#|      rt        j                  d |#z         | j"                  j'                  d!| j"                  j                         |dk7  s n |rO|| j"                  | j"                  j                          | j                   r| j                   j                          S S 	 | j"                  | j"                  j                          | j                   r| j                   j                          	 tP        jR                  d   rt        j                  d"       |S tP        jR                  d#   r?| j"                  j                  s)t        j                  d$tP        jR                  d#   z         |S # tb        $ r}|jd                  }Y d}~ d}~ww xY w# | j"                  | j"                  j                          | j                   r| j                   j                          w w xY w)%z
        Run the given playbook, based on the settings in the play which
        may limit the runs to serialized groups, etc.
        r   T)
class_onlyN      z&running playbook inside collection {0})r   r    playbookplaysv2_playbook_on_startz%d plays in %s)play)r    	variablesvars_promptnamepromptdefaultprivateconfirmFencrypt	salt_sizesaltunsafev2_playbook_on_vars_promptr   v2_playbook_on_play_startv2_playbook_on_no_hosts_matchedz~/z%s.retryz	to retry, use: --limit @%s
v2_playbook_on_statszNo issues encounteredstart_at_taskzSNo matching task "%s" found. Note: --start-at-task can only follow static includes.)Hlistr   allr   r
   r"   r   r   displayvformatr   default_collectionr   loadr$   r%   r*   load_callbackssend_callback	get_playsvvlenr   _included_pathset_basedir_basedirr#   remove_restrictionget_varsr   setattrtemplater9   r)   r	   
extra_varsdo_var_promptvarspost_validater   r(   appendr'   update_failed_hosts_get_serialized_batchesrestrict_to_hostsrunr   resultRUN_FAILED_BREAK_PLAYRUN_FAILED_HOSTSCRETRY_FILES_ENABLEDsetkeyssortedRETRY_FILES_SAVE_PATHospathdirnameabspathsplitextbasenamejoin_generate_retry_inventory_statscleanupcleanup_all_tmp_files_start_at_doneerror)$r+   re   	entrylistentryr4   resourceplaybook_pathplaybook_collectionpbir5   r7   all_varstemplarvarvnamer;   r<   r=   r>   r?   r@   rA   rB   previously_failedpreviously_unreachable
break_playbatchesbatchefailed_hosts_countretriesbasedir
retry_nameextfilenames$                                       r-   rd   zPlaybookExecutor.runL   s    	i	5"&&$78!!T23""d34 OO Z 9B'$,QKM*21+'$,M*H*R'&IIFMMNabcAT+>AE+>]]=4CYCYbfbnbno 99$'7E%'E'N II,,.II++,BBG

,E
GM<R/SST! ]D**6001D1DE00= OO668  $55>>D>IH%T\\XNGD-1A1A$BRBR1ST ''#'#3#3 ?C$'KE%(WWXu%=F&)ggi&>G&-cggi.F&GG&-cggi.G&HG&)ggi&>G(+T(BI#&7764#8D%,SWWXu-E%FF$D,B,B,M,MM#'99$(II$;$;<XZ_ahjpry  |C  EN  PT<CV%M7>7L7LUT[]celnu  xA  CG  IP  RX  8YDIIe$47>DIIe$4#?(  $55>>D>IH%T\\XNG&&w/x0 yy(g--d3 		44;;D<S<ST,/		0G0G,H)14TYY5Q5Q1R.%*
"&">">t"Dw<1, II334OQUV II334UV%, YE OO==eD&)-D)A  &		(G(GG1L)-)C)C-1
 25TYY5L5L1MPSTXT]T]TpTpPq1q!25K!K2M.  #5z-??-1
 % .TYY5L5L1MPa1aa-2c$)):V:V6WZp6pp2 !33::499;W;WX;Y> &!AA{]~ $$U+ 99(,,"%dii&=&=&B&B&D"Etyy'C'C'H'H'JK"(/w<!+ 66*+*A*A!.*,''//"''//-:X*Y*.020@0@AQAQR_A`0a-Z')ww||GZ*=T'UH#==hP '0PS[0[ \II++,BDIIDTDTU Q;uZx   yy$		!!#||224   yy$		!!#||224??8$OO34M???+DII4L4LMMJ///23 ] $2 &)* %&| yy$		!!#||224 sE   L:e Ge d1/K e e 1	e	:e	e e	e Af$c                6   | j                   j                  |j                  |j                        }t	        |      }|j
                  }t	        |      dk(  rdg}d}g }t	        |      dkD  rt        ||   |      }|dk  r|j                  |       	 |S g }t        |      D ]1  }	t	        |      dkD  s|j                  |j                  d             3 |j                  |       |dz  }|t	        |      dz
  kD  rt	        |      dz
  }t	        |      dkD  r|S )zz
        Returns a list of hosts, subdivided into batches based on
        the serial size specified in the play.
        )orderr   r2   )
r#   	get_hostshostsr   rS   serialr   r_   rangepop)
r+   r7   	all_hostsall_hosts_lenserial_batch_listcur_itemserialized_batchesr   
play_hostsxs
             r-   rb   z(PlaybookExecutor._get_serialized_batches  s,    OO--djj

-K	I !KK !Q&!#)nq  1( ;]KF
 {")))4  "!  
v <A9~)")))--*:;< #))*5
 MH#/014401A5/ )nq 2 "!r/   c           	     D   	 t        t        j                  j                  |             t	        |d      5 }|D ]  }|j                  d|z          	 ddd       y# 1 sw Y   yxY w# t        $ r.}t        j                  d|dt        |             Y d}~yd}~ww xY w)z
        Called when a playbook run fails. It generates an inventory which allows
        re-running on ONLY the failed hosts.  This may duplicate some variable
        information in group_vars/host_vars but that is ok, and expected.
        wz%s
NzCould not create retry file 'z'.
	FT)
r   rn   ro   rp   openwrite	ExceptionrJ   warningr   )r+   
retry_pathreplay_hostsfdr   r   s         r-   ru   z*PlaybookExecutor._generate_retry_inventory;  s    	"''//*56j#& )"% )AHHVaZ()) ) 	  	OOU\]^U_`a	s4   4A( AA( A%!A( %A( (	B1$BBN)__name__
__module____qualname____doc__r.   rd   rb   ru    r/   r-   r   r   )   s    
 8B,"\r/   r   )%
__future__r   rn   ansibler   rh   r   #ansible.executor.task_queue_managerr   r   +ansible.module_utils.common.text.convertersr   )ansible.module_utils.parsing.convert_boolr	   ansible.plugins.loaderr
   r   r   ansible.playbookr   ansible.templater   ansible.utils.helpersr   ansible.utils.collection_loaderr   2ansible.utils.collection_loader._collection_finderr   r   ansible.utils.pathr   ansible.utils.ssh_functionsr   ansible.utils.displayr   rJ   r   r   r/   r-   <module>r      sO   $ # 	 "  P ? = Q Q % $ , C | , = ) )a ar/   