HEX
Server: Apache
System: Linux server2.voipitup.com.au 4.18.0-553.104.1.lve.el8.x86_64 #1 SMP Tue Feb 10 20:07:30 UTC 2026 x86_64
User: posscale (1027)
PHP: 8.2.29
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //opt/saltstack/salt/lib/python3.10/site-packages/salt/utils/__pycache__/reactor.cpython-310.pyc
o

�N�g=Q�@s�dZddlZddlZddlZddlZddlZddlZddlZddl	Zddl
ZddlZddlZddl
ZddlZddlZddlZddlZddlZe�e�Zegd��ZGdd�dejjjejj�ZGdd�d�ZdS)z0
Functions which implement running reactor jobs
�N)�__id__�__sls__�name�order�fun�key�statecspeZdZdZddiZ�fdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Z�ZS)�Reactorz�
    Read in the reactor configuration variable and compare it to events
    processed on the master.
    The reactor has the capability to execute pre-programmed executions
    as reactions to events
    �cmd�localcsPt�jdi|��|��}d|d<tj�|�|_tjj�|||jj�d|_	dS)NrZfile_clientT�)
�super�__init__�copy�salt�minionZMasterMinionr�CompilerZrend�	is_leader)�self�opts�kwargsZlocal_minion_opts��	__class__r�F/opt/saltstack/salt/lib/python3.10/site-packages/salt/utils/reactor.pyr+s
zReactor.__init__c		Cs�i}|�d�r|jjd|�pd}t�|�}|st�d||�|D]+}z|j|||d�}|D]}|||d<q.|�|�Wq!tyLt�	d|�Yq!w|S)zp
        Execute the render system against a single reaction file and return
        the data structure
        zsalt://z
cp.cache_file�z<Can not render SLS %s for tag %s. File missing or not found.)�tag�datarzFailed to render "%s": )
�
startswithr�	functions�glob�log�errorZrender_template�update�	Exception�	exception)	rZglob_refrrZreactZglobbed_ref�fn_�resrrrr�render_reaction3s(

��zReactor.render_reactioncCs.t�d|�g}t|jdt�rWz#tjj�|jd��}tjj	�
|�}Wd�n1s-wYWn(tyEt�d|jd�Ynt
yVt�d|jd�Ynw|jd}|D]6}t|t�sfq^t|�dkrmq^tt|����}||}t�||�r�t|t�r�|�|�q^t|t�r�|�|�q^|S)zd
        Take in the tag from an event and return a list of the reactors to
        process
        zGathering reactors for tag %s�reactorN� Failed to read reactor map: "%s"�)Failed to parse YAML in reactor map: "%s"�)r �debug�
isinstancer�strr�utils�files�fopen�yaml�	safe_load�OSErrorr!r#�dict�len�next�iter�keys�fnmatch�append�list�extend)rr�reactors�fp_�	react_mapZroptr�valrrr�
list_reactorsQs<��
��




�zReactor.list_reactorscCs�t|jjdt�r^t�d|jd�z&tjj�	|jd��}tjj
�|�}Wd�W|S1s1wYW|StyKt�
d|jd�Y|Sty]t�
d|jd�Y|Swt�d�|jjd}|S)z/
        Return a list of the reactors
        r(zReading reactors from yaml %sNr)r*zNot reading reactors from yaml)r-rrr.r r,rr/r0r1r2r3r4r!r#)rr?r@rrr�list_allrs*����
��
zReactor.list_allcCsX|��}|D]}tt|����}||krddd�Sq|jjd�||i�ddd�S)z
        Add a reactor
        FzReactor already exists.��statusZcommentr(TzReactor added.)rCr7r8r9rrr;)rrZreactionr>r(�_tagrrr�add_reactor�s�
zReactor.add_reactorcCsT|��}|D]}tt|����}||kr$|jjd�|�ddd�Sqddd�S)z"
        Delete a reactor
        r(TzReactor deleted.rDFzReactor does not exists.)rCr7r8r9rr�remove)rrr>r(rFrrr�delete_reactor�s�
zReactor.delete_reactorcCs>t|�D]\}}|j�||d�}|dur|||d<qdS)z�
        Preserve backward compatibility by rewriting the 'state' key in the low
        chunks if it is using a legacy type.
        rN)�	enumerate�aliases�get)r�chunks�idx�_Z	new_staterrr�resolve_aliases�s��zReactor.resolve_aliasesc	
Cs�t�d|�i}g}z-|D]}|�|�|||��q
|r6|�|�}|r.t�d|||�gWS|�|�|��}WntyN}zt�	d�WYd}~nd}~ww|�
|�|S)zN
        Render a list of reactor files and returns a reaction struct
        zCompiling reactions for tag %sz_Unable to render reactions for event %s due to errors (%s) in one or more of the sls files (%s)z/Exception encountered while compiling reactionsN)r r,r"r'Zverify_highr!Zorder_chunksZcompile_high_datar#r$rP)	rrrr>�highrMr%�errors�excrrr�	reactions�s0
����
zReactor.reactionscCs|D]}|j�|�qdS)z,
        Execute the reaction state
        N)�wrap�run)rrM�chunkrrr�call_reactions�s�zReactor.call_reactionsc
Csd|jdrtjj��st�d|jd�t�|jd�tjj	j
|jd|jd|jdd���}t|j�|_|j
dd�D]�}|d�d	�|jjkrIq;d
|dvrgtjj�d|j�}|d�d
�|krgt�d�q;|d�d�rw|�d|jid�|d�d�r�|d�d�|jdkr�|dd|_|�d|jid�|d�d�r�|d}|�|d|d�}|�|��|d�d�q;|d�d�r�|d}|�|d�}|�|��|d�d�q;|d�d�r�|�d|��id�q;|js�q;|�|d�}|s�q;|�|d|d|�}|�rz|�|�Wq;t�yt�d�Yq;wq;Wd�dS1�s+wYdS) z,
        Enter into the server loop
        Zreactor_nicenesszReactor setting niceness to %iZ__roleZsock_dirT)r�listen)�fullr�userzsalt/reactors/manager�rootrzKreceived salt/reactors/manage event without matching master_key. discardingzsalt/reactors/manage/is_leader�resultz!salt/reactors/manage/leader/valuezsalt/reactors/manage/set_leader�id�valuezsalt/reactors/manage/add�eventr>)r>r]z!salt/reactors/manage/add-completezsalt/reactors/manage/deletez$salt/reactors/manage/delete-completezsalt/reactors/manage/listz!salt/reactors/manage/list-resultszExit ignored by reactorN)rrr/�platformZ
is_windowsr �info�os�nicer`Z	get_event�	ReactWraprUZiter_eventsrL�
event_userZmasterZget_master_keyr!�endswithZ
fire_eventrrGrCrIrBrTrX�
SystemExit�warning)rr`rZ
master_key�_datar&r>rMrrrrV�s���
�
���
����$�zReactor.run)�__name__�
__module__�__qualname__�__doc__rKrr'rBrCrGrIrPrTrXrV�
__classcell__rrrrr	s�!


r	c@sneZdZdZdZdZejjej	j
ejjejj
d�Zdd�Zdd�Zd	d
�Zdd�Z	d
d�Zdd�Zdd�ZdS)rez?
    Wrapper that executes low data for the Reactor System
    Nr	)r�runner�wheel�callercCsH||_tjdurtjj�|d�t_tjjj|jd|jdd�|_	dS)NZreactor_refresh_intervalZreactor_worker_threadsZreactor_worker_hwm)Z
queue_size)
rre�client_cacherr/�cacheZ	CacheDict�processZ
ThreadPool�pool)rrrrrr+s
��zReactWrap.__init__cCsr|d}||jvr7t�d|�|dvr(|j||j�|j|<t|j|j�dS|j||jd�|j|<dSdS)zR
        Populate the client cache with an instance of the specified type
        rz%Reactor is populating %s client cache�rprqZ	conf_fileN)rsr r,�reaction_classrr6r)r�lowZ
reaction_typerrr�populate_client_cache7s

�	��zReactWrap.populate_client_cachec
Cs�|�|�z	t||d�}Wntyt�d|d�Ynw�ztjj�||�}|�	dd�}|�	di�}|ddvrH|j
|d<|�d�|d<d|vr�|�d�}d	D]}||vret�d
|d|||�qS|ddkr�t
|t�r�tjj�|�s�||d
<i|d<nd|d
<||d<t
|dt�s�tjj�|d�|d<|ds�t�d|d|d|d�WdSnUi}|ddvr�d
|vs�d|vr�|j|dj�	|d�}	|	dur�t�d|d|d|d�WdStjjj|	|td�}d
|vr�|�	dd�|d
<d|v�r|�	di�|d<||i|��}
|
du�r#t�d|d|d|d�WdSWdSt�y8t�d|d�YdSt�yRtjd|d|d|ddd�YdSw)zH
        Execute a reaction by invoking the proper wrapper func
        rz0ReactWrap is missing a wrapper function for '%s'�argsrrrwZ__user__Z	__state__)�arg�kwargz�Reactor '%s' is ignoring '%s' param %s due to presence of 'args' param. Check the Reactor System documentation for the correct argument format.rrrr|r}z�Reactor '%s' failed to execute %s '%s': Incorrect argument format, check the Reactor System documentation for the correct format.rNz>Reactor '%s' failed to execute %s '%s': function not available)Zexpected_extra_kwsFz�Reactor '%s' failed  to execute %s '%s': TaskPool queue is full!Consider tuning reactor_worker_threads and/or reactor_worker_hwmz(Reactor '%s' attempted to exit. Ignored.z&Reactor '%s' failed to execute %s '%s'T)�exc_info)rz�getattr�AttributeErrorr r!rr/r{Zformat_callrLrf�poprir-r<rZis_dictlistr5Zrepack_dictlistrsr�REACTOR_INTERNAL_KEYWORDSrhr#)rryZl_funZ	wrap_callr{rZreactor_args�itemZ
react_callZ	react_fun�retrrrrVTs�
�

��	��

�����


����z
ReactWrap.runcK�Bd|jvrt�d�ddi}|�|�|jj|jdj||fd�S)zZ
        Wrap RunnerClient for executing :ref:`runner modules <all-salt.runners>`
        rpz8reactor edge case: re-populating client_cache for runnerr�r{�rsr r,rzrvZ
fire_asyncry�rrrryrrrrp��



zReactWrap.runnercKr�)zV
        Wrap Wheel to enable executing :ref:`wheel modules <all-salt.wheel>`
        rqz7reactor edge case: re-populating client_cache for wheelrr�r�r�rrrrq�r�zReactWrap.wheelcKsDd|jvrt�d�ddi}|�|�|jdj||fi|��dS)zZ
        Wrap LocalClient for running :ref:`execution modules <all-salt.modules>`
        rz7reactor edge case: re-populating client_cache for localrN)rsr r,rzZ	cmd_async)rrZtgtrryrrrr�s



zReactWrap.localcKsPd|jvrt�d�ddi}|�|�|jdj|g|d�Ri|d��dS)zY
        Wrap LocalCaller to execute remote exec functions locally on the Minion
        rrz8reactor edge case: re-populating client_cache for callerrr|r}N)rsr r,rzr
r�rrrrr�s



*zReactWrap.caller)rkrlrmrnrsrfr�clientZLocalClientrpZRunnerClientrqZWheelZCallerrxrrzrVrrrrrrrres �{re)rnr:r�loggingrcZsalt.clientrZsalt.defaults.exitcodesZsalt.runnerZ
salt.stateZsalt.utils.argsZsalt.utils.cacheZsalt.utils.dataZsalt.utils.eventZsalt.utils.filesZsalt.utils.masterZsalt.utils.processZsalt.utils.yamlZ
salt.wheel�	getLoggerrkr �	frozensetr�r/ruZSignalHandlingProcessrrr	rerrrr�<module>s2
�}