%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /lib/python3.9/site-packages/ansible/executor/__pycache__/
Upload File :
Create Path :
Current File : //lib/python3.9/site-packages/ansible/executor/__pycache__/task_queue_manager.cpython-39.pyc

a

�)g�G�@s�ddlmZmZmZeZddlZddlZddlZddl	Z	ddl
Z
ddlZddl
mZddl
mZddlmZddlmZddlmZddlmZdd	lmZdd
lmZmZddlmZddl m!Z!dd
l"m#Z#m$Z$m%Z%ddl&m'Z'ddl(m)Z)ddl*m+Z+ddl,m-Z-ddl.m/Z/ddl0m1Z1ddl2mZ3dgZ4e/�Z5Gdd�d�Z6Gdd�d�Z7Gdd�dej8j9�Z:Gdd�de;�Z<Gdd�d�Z=dS)�)�absolute_import�division�print_functionN)�	constants)�context)�AnsibleError)�PlayIterator)�AggregateStats)�
TaskResult)�string_types)�to_text�	to_native)�PlayContext)�Task)�callback_loader�strategy_loader�
module_loader)�CallbackBase)�Templar)�HostVars)�warn_if_reserved)�Display)�lock_decorator�TaskQueueManagerc@seZdZdd�ZdS)�CallbackSendcOs||_||_||_dS�N)�method_name�args�kwargs��selfrrr�r!�G/usr/lib/python3.9/site-packages/ansible/executor/task_queue_manager.py�__init__7szCallbackSend.__init__N��__name__�
__module__�__qualname__r#r!r!r!r"r6src@seZdZdd�ZdS)�DisplaySendcOs||_||_dSr)rr�r rrr!r!r"r#>szDisplaySend.__init__Nr$r!r!r!r"r(=sr(cs4eZdZ�fdd�Zdd�Zdd�Zdd�Z�ZS)	�
FinalQueuecs"t|d<tt|�j|i|��dS)N�ctx)�multiprocessing_context�superr*r#r)��	__class__r!r"r#DszFinalQueue.__init__cOs$|jt|g|�Ri|��dd�dS�NF��block)�putrrr!r!r"�
send_callbackHs�zFinalQueue.send_callbackcOs8t|dt�r|d}nt|i|��}|j|dd�dS)NrFr1)�
isinstancer
r3)r rr�trr!r!r"�send_task_resultNs
�zFinalQueue.send_task_resultcOs|jt|i|��dd�dSr0)r3r(r)r!r!r"�send_displayXs�zFinalQueue.send_display)r%r&r'r#r4r7r8�
__classcell__r!r!r.r"r*Cs
r*c@seZdZdd�ZdS)�AnsibleEndPlaycCs
||_dSr)�result)r r;r!r!r"r#`szAnsibleEndPlay.__init__Nr$r!r!r!r"r:_sr:c@s�eZdZdZdZdZdZdZdZdZ	d)dd�Z
d
d�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zed%d&�d'd(��ZdS)*rao
    This class handles the multiprocessing requirements of Ansible by
    creating a pool of worker forks, a result handler fork, and a
    manager object with shared datastructures/queues for coordinating
    work between all processes.

    The queue manager is responsible for loading the play strategy plugin,
    which dispatches the Play's tasks to hosts.
    r�����NTFc	
Cs�||_||_||_t�|_||_||_||_||_|p8d|_	d|_
g|_d|_t
j�dd�rzt
jdD]}	|	rft�|	�qfd|_t�|_t�|_zt�|_Wn4ty�}
ztdt|
���WYd}
~
n
d}
~
00t��|_t��|_ dS)N�FZmodule_pathzXUnable to use multiprocessing, this is normally caused by lack of access to /dev/shm: %s)!�
_inventory�_variable_manager�_loaderr	Z_stats�	passwords�_stdout_callback�_run_additional_callbacks�	_run_tree�_forks�_callbacks_loaded�_callback_plugins�_start_at_doner�CLIARGS�getrZ
add_directory�_terminated�dict�
_failed_hosts�_unreachable_hostsr*�_final_q�OSErrorrr
�	threading�Lock�_callback_lock�tempfileZ
TemporaryFile�_connection_lockfile)r �	inventory�variable_manager�loaderrEZstdout_callbackZrun_additional_callbacksZrun_treeZforks�path�er!r!r"r#ws2
&
zTaskQueueManager.__init__cCs$g|_t|�D]}|j�d�qdSr)�_workers�range�append)r Znum�ir!r!r"�_initialize_processes�sz&TaskQueueManager._initialize_processesc
CsT|jr
dSd}|jdur tj|_t|jt�r2d}nLt|jt�rv|jtvrXtd|j��q~t�	|j�|_|j�
�d}ntd��ttjdd��}tj
D]8}tj	|dd�}|r�||vr�|�|�q�t�d|�q�|D�]t}t|dd	�}t|d
t|dd��}t|dg�}|�r|d
}	ntj�tj�|j��\}	}
t�d|	�|dk�rn|	|jk�sX|�rht�d|	�q�d}n8|	dk�r�|j�r�n$|jr�|�r�tj
dus�|	tj
v�r�q�zX|�}|�r�||jv�r�|�
�|j�|�nt�d||	f�nt�d|	�Wq�Wq�t�yF}z.t�d|	t|�f�WYd}~q�WYd}~q�d}~00q�d|_dS)z�
        Loads all available callbacks, with the exception of those which
        utilize the CALLBACK_TYPE option. When CALLBACK_TYPE is set to 'stdout',
        only one such callback plugin will be loaded.
        NFTz)Invalid callback for stdout specified: %szMcallback must be an instance of CallbackBase or the name of a callback plugin)Z
class_onlyz-Skipping callback plugin '%s', unable to loadZ
CALLBACK_TYPE�ZCALLBACK_NEEDS_ENABLEDZCALLBACK_NEEDS_WHITELISTZ_redirected_namesrz Attempting to use '%s' callback.�stdoutz=Skipping callback '%s', as we already have a stdout callback.Ztreez/Skipping callback '%s', already loaded as '%s'.zFSkipping callback '%s', as it does not create a valid plugin instance.z1Skipping callback '%s', unable to load due to: %s)rJrF�CZDEFAULT_STDOUT_CALLBACKr5rrrrrNZset_options�list�allZCALLBACKS_ENABLEDra�display�warning�getattr�osr]�splitext�basenameZ_original_pathZvvvvvZvvrHrGrK�	Exceptionr
)
r Zstdout_callback_loadedZ
callback_list�cZplugin�callback_pluginZ
callback_typeZcallback_needs_enabledZcnamesZ
callback_name�_Zcallback_objr^r!r!r"�load_callbacks�sn






��$zTaskQueueManager.load_callbackscCs|js|��|jj|d�}t|j|d�}t||jj�	��|�
�}|�|�|��|j
|_
t|j|j|jd�|_t||j|j���}|jr�t|jd�r�|j�|�|jD]}t|d�r�|�|�q�|�d|�t|j|||j||jd�}|�t|j|j��t �!|j"|�}|du�r,t#d|j"|j$d	��|j%�	�D]}	|j�&|	�}
|�'|
��q6|j(�	�D]}	|j)j*�+|	��q^|�,�t-j.�!d
�du�r�|j/du�r�d|_z |�0||�}W|�1�|�2�n|�1�|�2�0|�3�D]}	d|j%|	<�q�|j4�r�t5|��|S)al
        Iterates over the roles/tasks in a play, using the given (or default)
        strategy for queueing tasks. The default is the linear strategy, which
        operates like classic Ansible by keeping all hosts in lock-step with
        a given task (meaning no hosts move on to the next task until all hosts
        are done with the current task).
        )�play)r\Z	variables)rZr[r\�set_play_contextZv2_playbook_on_play_start)rZrt�play_contextr[�all_varsZ
start_at_doneNz#Invalid play strategy specified: %s)�obj�
start_at_taskT)6rJrsrCZget_varsrrDrZenvironment�globals�keys�copyZ
post_validateZcompile_roles_handlers�handlersrrBZhostvarsrrErY�filenorF�hasattrrurKr4rrLrc�minrIZ
batch_sizerrN�strategyrZ_dsrQZget_hostZmark_host_failedrRZ_playZ_removed_hostsra�clear_failed_hostsrrMry�run�cleanup�_cleanup_processesZget_failed_hostsZend_playr:)r rtrwZtemplarZnew_playrvrq�iteratorr�Z	host_name�hostZplay_returnr!r!r"r�sj	
�
�

�


�
zTaskQueueManager.runcCs<t�d�|��|j��|��tj��tj	��dS)NzRUNNING CLEANUP)
ri�debug�	terminaterS�closer��sysre�flush�stderr�r r!r!r"r�[s


zTaskQueueManager.cleanupc	Cs�t|d�r�ttjddd�D]8}tdd�|jD��s8qV|rJt�tj�qt	�
d�q|jD]0}|r\|��r\z|��Wq\t
y�Yq\0q\dS)Nr_r<���css|]}|o|��VqdSr)�is_alive)�.0�
worker_prcr!r!r"�	<genexpr>h�z6TaskQueueManager._cleanup_processes.<locals>.<genexpr>zFOne or more worker processes are still running and will be terminated.)rr`rfZWORKER_SHUTDOWN_POLL_COUNT�anyr_�time�sleepZWORKER_SHUTDOWN_POLL_DELAYrirjr�r��AttributeError)r Zattempts_remainingr�r!r!r"r�es

z#TaskQueueManager._cleanup_processescCst�|_dSr)rPrQr�r!r!r"r�wsz#TaskQueueManager.clear_failed_hostscCs|jSr)rBr�r!r!r"�
get_inventoryzszTaskQueueManager.get_inventorycCs|jSr)rCr�r!r!r"�get_variable_manager}sz%TaskQueueManager.get_variable_managercCs|jSr)rDr�r!r!r"�
get_loader�szTaskQueueManager.get_loadercCs|jdd�Sr)r_r�r!r!r"�get_workers�szTaskQueueManager.get_workerscCs
d|_dS)NT)rOr�r!r!r"r��szTaskQueueManager.terminatecCs$d}|jD]}t|dd�r
d}q
|S)NFZexitcodeT)r_rk)r Zdefunct�xr!r!r"�has_dead_workers�s

z!TaskQueueManager.has_dead_workersrW)�attrc
Osl|jg|jD�]V}t|dd�r"qt|dd�}g}|dfD]<}t||d�}|durdt||�d�d�}|dur:|�|�q:g}	d}
|D]<}t|t�r�|	�|���n
|	�|�t|t�r�|j	r�d}
q�|
r�|s�q|D]�}z||	i|��Wq�t
�yb}
zbt�dt
|�t
|�t
|
�f�dd	lm}dd
lm}t�dd�||�d
���WYd}
~
q�d}
~
00q�qdS)NZdisabledF�wants_implicit_tasksZ	v2_on_anyZv2_Tz5Failure using method (%s) in callback plugin (%s): %sr)�	format_tb)�exc_infozCallback Exception: 
� r=)rFrKrk�removeprefixrar5r
Z
clean_copyrZimplicitrorirjr�	tracebackr�r�r�Zvvv�join)r rrrrqr��methods�possible�gotit�new_argsZis_implicit_task�arg�methodr^r�r�r!r!r"r4�s:

 zTaskQueueManager.send_callback)NTFN)r%r&r'�__doc__ZRUN_OKZ	RUN_ERRORZRUN_FAILED_HOSTSZRUN_UNREACHABLE_HOSTSZRUN_FAILED_BREAK_PLAYZRUN_UNKNOWN_ERRORr#rcrsr�r�r�r�r�r�r�r�r�r�rr4r!r!r!r"rds,

(]Y
)>Z
__future__rrr�typeZ
__metaclass__rlr�rXrUr�Zmultiprocessing.queuesZmultiprocessingZansiblerrfrZansible.errorsrZansible.executor.play_iteratorrZansible.executor.statsr	Zansible.executor.task_resultr
Zansible.module_utils.sixrZansible.module_utils._textrr
Zansible.playbook.play_contextrZansible.playbook.taskrZansible.plugins.loaderrrrZansible.plugins.callbackrZansible.templaterZansible.vars.hostvarsrZansible.vars.reservedrZansible.utils.displayrZansible.utils.lockrZansible.utils.multiprocessingr,�__all__rirr(ZqueuesZQueuer*ror:rr!r!r!r"�<module>s@

Zerion Mini Shell 1.0