HEX
Server: LiteSpeed
System: Linux s787.bom1.mysecurecloudhost.com 4.18.0-477.13.1.lve.el8.x86_64 #1 SMP Thu Jun 1 16:40:47 EDT 2023 x86_64
User: mobilech (5348)
PHP: 8.1.34
Disabled: NONE
Upload Files
File: //opt/saltstack/salt/lib/python3.10/site-packages/salt/beacons/__pycache__/__init__.cpython-310.pyc
o

;j Q�@sPdZddlZddlZddlZddlZddlZddlZe�e	�Z
Gdd�d�ZdS)zF
This package contains the loader modules for the salt streams system
�Nc@s�eZdZdZd0dd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
d1dd�Zd1dd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�ZdS)2�BeaconzI
    This class is used to evaluate and execute on the beacon system
    NcCs4ddl}||_||_|j�||�|_|pt�|_dS)Nr)Zsalt.loader�opts�	functions�loader�beacons�dict�interval_map)�selfrrr�salt�r�I/opt/saltstack/salt/lib/python3.10/site-packages/salt/beacons/__init__.py�__init__s
zBeacon.__init__cCs�|jd�|�}|durdSd}t|t�r i}tt|j|��nt|t�r'|}|dur-dS|}|�|d�r9|d}|�d�}||jvrwz!t	�
|�}t|t�rU|�d|i�t�
d|�|j||�WdStyvtj
d|dd	�YdSwdS)
z�
        Close a single beacon module if it has a close function.
        This releases resources like inotify file descriptors.
        rN�
beacon_module�.close�_beacon_namezClosing beacon %szFailed to close beacon %sT)�exc_info)r�get�
isinstance�list�map�updater�_determine_beacon_configr�copy�deepcopy�append�log�debug�	Exception)r	�name�
beacon_config�current_beacon_config�beacon_name�	close_str�configrrr�
_close_beacons4





��zBeacon._close_beaconcCs*|��}|D]}|dkr
q|�|�qdS)aY
        Close all beacon modules that have a close function.
        This ensures resources like inotify file descriptors are properly
        released when beacons are refreshed or the Beacon instance is replaced.

        See: https://github.com/saltstack/salt/issues/66449
        See: https://github.com/saltstack/salt/issues/58907
        �enabledN)�_get_beaconsr$)r	r�modrrr�
close_beacons?s	�zBeacon.close_beaconscCsbg}t�|�}d|vr|dsdS|D�]�}|dkrqd}t||t�r1i}tt|j||��nt||t�r<||}d|vr`|dsKt�d|�qt||t�rX||d=n|�	||d�t�d|�d}|�
|d�rs|d}n|}|�d�}||jvr�|j|||�\}	}
|	s�t�d||
�qnt�
d|�t||t�s�t�d	�q||�d
|i�|�d�}||jv�r�|�
|d�}|�
|d
�}
|
r�|�||d
�}|�||
�s�t�d|�q|�
|d��r1t�d|�|�||d�}d}tjj�|j�}|D]
}t�d|d��rd}q�|�r1|�d�}||jv�r*t�d|�|j|||�nt�d|�q||j|jd<d}z|j|||�}Wn%t��d�}t�d||�d�|jd|�}|�||i|d��Y|�s�|D]-}d�|jd|�}d|v�r�||�d�7}d|v�r�|jd|d<|�|||d���qq|�r�|�|�qt�
d |�q|S)!a 
        Process the configured beacons

        The config must be a list and looks like this in yaml

        .. code_block:: yaml
            beacons:
              inotify:
                - files:
                    - /etc/fstab: {}
                    - /var/cache/foo: {}
        r%NzBeacon %s disabledzBeacon processing: %sr�	.validatez0Beacon %s configuration invalid, not running.
%szCNo validate function found for %s, running basic beacon validation.z(Configuration for beacon must be a list.r�.beaconZrun_once�intervalz)Skipping beacon %s. Interval not reached.Zdisable_during_state_runz<Evaluting if beacon %s should be skipped due to a state run.Fzstate.*ZfunTrz)Closing beacon %s. State run in progress.z*Skipping beacon %s. State run in progress.Z
__grains__�zUnable to start %s beacon, %szsalt/beacon/{}/{}/�id)�tag�error�datar!r.)r.r0r!zUnable to process beacon %s)rrrrrrrr�trace�_remove_list_itemrrr/�warningr�_trim_config�_process_intervalr
�utils�minionZrunningr�re�match�info�__globals__�sysr�format�pop�disable_beacon)r	r#Zgrains�ret�b_configr'r r!�validate_str�valid�vcommentZfun_strZrunoncer+Z
is_runningZrunning_jobsZjobr"r/�rawr.r0rrr�processNs�




���

������
��


�
�zBeacon.processcCsBt||t�r|�|||�|St||t�r||�|�|S)zM
        Take a beacon configuration and strip out the interval bits
        )rrr2rr>)r	rAr'�keyrrrr4�s�zBeacon._trim_configcCsd}t|t�r
|�|d�}|S)zJ
        Process a beacon configuration to determine its interval
        F)rrr)r	r rGr+rrrr�s
zBeacon._determine_beacon_configcCs�t�d||�|jd}||jvr9t�d�|j|}t�d|�|||kr.d|j|<dS|j|d7<dSt�d|�d|j|<dS)	zk
        Process beacons with intervals
        Return True if a beacon should be run on this loop
        z(Processing interval %s for beacon mod %s�
loop_intervalzProcessing interval in mapzInterval counter: %sr,Tz"Interval process inserting mod: %sF)rr1rr)r	r'r+rHZcounterrrrr5�s




�
zBeacon._process_intervalcs&�fdd�t|�D�}|sdS|dS)zn
        Return the index of a labeled config item in the beacon config, -1 if the index is not found
        csg|]
\}}�|vr|�qSrr)�.0�index�item��labelrr�
<listcomp>sz%Beacon._get_index.<locals>.<listcomp>���r)�	enumerate)r	rrMZindexesrrLr�
_get_indexszBeacon._get_indexcCs|�||�}||=dS)z:
        Remove an item from a beacon config list
        N)rQ)r	rrMrJrrrr2s
zBeacon._remove_list_itemcCs~t|jd|t�r||jd|d<dS|�|jd|d�}|dkr1||jd||d<dS|jd|�d|i�dS)z@
        Update whether an individual beacon is enabled
        rr%rN)rrrrQr)r	rZ
enabled_valueZ
enabled_indexrrr�_update_enabledszBeacon._update_enabledTcCsli}|r|j�di��di�}t|t�std��|�|�|r4|j�di�}t|t�s/td��|�|�|S)z3
        Return the beacons data structure
        ZpillarrzBeacons must be of type dict.)rrrr�
ValueErrorr)r	�include_opts�include_pillarrZpillar_beaconsZopts_beaconsrrrr&(s



zBeacon._get_beaconscCs\|j||d�}tjjjd|jd��}|jd|d�dd�Wd�dS1s'wYdS)	a
        List the beacon items

        include_pillar: Whether to include beacons that are
                        configured in pillar, default is True.

        include_opts:   Whether to include beacons that are
                        configured in opts, default is True.
        )rUrTr7�rT��completerz)/salt/minion/minion_beacons_list_complete�r.N)r&r
r6�event�	get_eventr�
fire_event)r	rUrTr�evtrrr�list_beacons9s
��
��zBeacon.list_beaconscCs^dd�|jD�}tjjjd|jd��}|jd|d�dd�Wd	�dS1s(wYdS)
z,
        List the available beacons
        cSs&g|]}d|vrd�|�dd���qS)r*z{}�)r=�replace)rIZ_beaconrrrrNTs
�z1Beacon.list_available_beacons.<locals>.<listcomp>r7rVTrWz3/salt/minion/minion_beacons_list_available_completerYN)rr
r6rZr[rr\)r	Z_beaconsr]rrr�list_available_beaconsPs��
��zBeacon.list_available_beaconscs�t�fdd�|D��}|�d�}||jvr&d|vr|d=|j||�\}}nd�|�}d}tjjjd|jd��}|jd||d	�d
d�Wd�dS1sNwYdS)
z3
        Return available beacon functions
        c3s�|]	}|�d��VqdS)rN)r)rIrK�rrr�	<genexpr>gs�z)Beacon.validate_beacon.<locals>.<genexpr>r)r%zABeacon {} does not have a validate function, skipping validation.Tr7rV)rXrDrCz./salt/minion/minion_beacon_validation_completerYN)	�nextrr=r
r6rZr[rr\)r	r�beacon_datar!rBrCrDr]rrbr�validate_beaconcs&

�
�
��zBeacon.validate_beaconcCs�i}|||<||jdd�vrd�|�}d}n||jdvr#d|��}nd|��}d}|jd�|�tjjjd|jd	��}|j|||jdd
�dd�Wd
�dS1sVwYdS)z#
        Add a beacon item
        F�rTzACannot update beacon item {}, because it is configured in pillar.r�#Updating settings for beacon item: zAdded new beacon item: Tr7rV�rX�commentrz'/salt/minion/minion_beacon_add_completerYN)	r&r=rrr
r6rZr[r\�r	rrer0rjrXr]rrr�
add_beacon�s0�
��
�
�
zBeacon.add_beaconcCs�i}|||<||jdd�vrd|�d�}d}nd|��}d}|jd�|�tjjjd|jd	��}|j|||jdd
�dd�Wd
�dS1sJwYdS)z&
        Modify a beacon item
        FrgzCannot modify beacon item �, it is configured in pillar.rhTrr7rVriz*/salt/minion/minion_beacon_modify_completerYN)r&rrr
r6rZr[r\rkrrr�
modify_beacon�s(
��
�	�	zBeacon.modify_beaconcCs�||jdd�vrd|�d�}d}n ||jdvr)|�|�|jd|=d|��}nd|�d�}d	}tjjjd
|jd��}|j|||jdd�d
d�Wd�d	S1sUwYd	S)z&
        Delete a beacon item
        FrgzCannot delete beacon item rmrzDeleting beacon item: zBeacon item z not found.Tr7rVriz*/salt/minion/minion_beacon_delete_completerYN)r&rr$r
r6rZr[r\�r	rrjrXr]rrr�
delete_beacon�s*
��
�
�
zBeacon.delete_beaconcCsbd|jdd<tjjjd|jd��}|jd|jdd�dd�Wd	�dS1s*wYdS)
� 
        Enable beacons
        Trr%r7rVrWz,/salt/minion/minion_beacons_enabled_completerYN�rr
r6rZr[r\�r	r]rrr�enable_beacons���
��zBeacon.enable_beaconscCsbd|jdd<tjjjd|jd��}|jd|jdd�dd	�Wd
�dS1s*wYdS)rqFrr%r7rVTrWz-/salt/minion/minion_beacons_disabled_completerYNrrrsrrr�disable_beacons�ruzBeacon.disable_beaconscCs�||jdd�vrd|�d�}d}n
|�|d�d|��}d}tjjjd|jd��}|j|||jd	d
�dd�Wd
�dS1sBwYdS)z!
        Enable a beacon
        FrgzCannot enable beacon item rmTzEnabling beacon item r7rVrriz+/salt/minion/minion_beacon_enabled_completerYN)r&rRr
r6rZr[rr\rorrr�
enable_beacon�s$
��
�
�
zBeacon.enable_beaconcCs�||jdd�vrd�|�}d}n
|�|d�d|��}d}tjjjd|jd��}|j|||jdd	�d
d�Wd�dS1sAwYdS)
z"
        Disable a beacon
        Frgz:Cannot disable beacon item {}, it is configured in pillar.zDisabling beacon item Tr7rVrriz,/salt/minion/minion_beacon_disabled_completerYN)	r&r=rRr
r6rZr[rr\rorrrr?s*��
��
�
�
zBeacon.disable_beaconcCs`i|jd<tjjjd|jd��}|jdd|jdd�dd�Wd	�dS1s)wYdS)
z/
        Reset the beacons to defaults
        rr7rVTzBeacons have been resetriz)/salt/minion/minion_beacon_reset_completerYNrrrsrrr�reset7s
��
�	�	zBeacon.reset)N)TT)�__name__�
__module__�__qualname__�__doc__r
r$r(rFr4rr5rQr2rRr&r^rarfrlrnrprtrvrwr?rxrrrrrs2
"


# r)r|r�loggingr8r<Zsalt.utils.eventr
Zsalt.utils.minion�	getLoggerryrrrrrr�<module>s