name : cc_rsyslog.cpython-39.pyc
a

'�Dg/.�	@s�UdZddlZddlZddlZddlZddlZddlmZmZm	Z	ddl
mZddlm
Z
ddlmZddlmZmZddlmZdd	lmZd
egedgd�Zeed
<dddiiddgdd�Zddgd�ddgd�ddgd�d�Ze�e�Ze�d�Ze�d�Z ed�dd�Z!d3dd�Z"d4d d!�Z#e$ee$d"�d#d$�Z%d%d&�Z&d5d'd(�Z'Gd)d*�d*�Z(d6d+d,�Z)edd-�d.d/�Z*e+e
ee,dd0�d1d2�Z-dS)7z-Rsyslog: Configure system logging via rsyslog�N)�	lifecycle�subp�util)�Cloud)�Config)�
MetaSchema)�ALL_DISTROS�Distro)�loggers)�PER_INSTANCEZ
cc_rsyslog�rsyslog)�idZdistrosZ	frequencyZactivate_by_schema_keys�metaz/etc/rsyslog.dz20-cloud-config.conf�autoZrsyslogdF)�
config_dir�config_filename�service_reload_command�remotes�configs�	check_exe�packages�install_rsyslogz/usr/local/etc/rsyslog.d)rrzsysutils/rsyslogz/usr/pkg/etc/rsyslog.d)ZfreebsdZopenbsdZnetbsdz[ ]*[#]+[ ]*z_^(?P<proto>[@]{0,2})(([\[](?P<bracket_addr>[^\]]*)[\]])|(?P<addr>[^:]*))([:](?P<port>[0-9]+))?$)�distrocCs4t}t�t�}|j|vr0tj|||jgdd�}|S)z�Construct a distro-specific rsyslog config dictionary by merging
       distro specific changes into base config.

    @param distro: String providing the distro class name.
    @returns: Dict of distro configurations for ntp clients.
    T)�reverse)�DISTRO_OVERRIDES�copy�RSYSLOG_CONFIGZosfamilyrZ
mergemanydict�name)rZdcfg�cfg�r�?/usr/lib/python3.9/site-packages/cloudinit/config/cc_rsyslog.py�distro_default_rsyslog_configFs


r!cCs(t�|�rdS|durdg}||�dS)aiInstall rsyslog package if not already installed.

    @param install_func: function.  This parameter is invoked with the contents
    of the packages parameter.
    @param packages: list.  This parameter defaults to ['rsyslog'].
    @param check_exe: string.  The name of a binary that indicates the package
    the specified package is already installed.
    Nr)r�which)Zinstall_funcrrrrr rTs
	
rcCs.|dkr |�dd�}|�d|�Stj|dd�S)Nr�rsyslog_svcnamerz
try-reloadT)Zcapture)�
get_option�manage_servicer)r�command�servicerrr �
reload_syslogesr()rr�returnc
Cs"|�di�}t|�}t|�d�t�rhtjddd�d|�d�i}d|vrT|d|d<d|vrh|d|d	<dgtfd	|d	tfd|dtfd
|d
tfd|dttffd|dtfd
|d
tfd|dtff}|D]L\}}}||vr�|||<q�t|||�s�t	d|�d|�dt
||�����q�|S)z�Return an updated config.

    Support converting the old top level format into new format.
    Raise a `ValueError` if some top level entry has an incorrect type.
    rz)The rsyslog key with value of type 'list'z22.2)Z
deprecatedZdeprecated_versionrZrsyslog_filenamerZrsyslog_dirrrrrrrzInvalid type for key `z`. Expected type(s): z. Current type: )�getr!�
isinstance�listrZ	deprecate�str�dict�bool�
ValueError�type)rr�mycfgZ
distro_configZfillup�key�defaultZvtypesrrr �load_configlsD���

��r5c
	Cs�g}t|�D]�\}}t|t�rNd|vr8t�d|d�q|d}|�d|�}n|}|}|��}|stt�d|d�qtj�	||�}d}||vr�d}|�
|�z*d}	|�d	�s�d	}	tj
|||	|d
�Wqty�t�td|�Yq0q|S)N�contentz%No 'content' entry in config entry %s��filenamezEntry %s has an empty filename�ab�wb��
)�omodezFailed to write to %s)�	enumerater+r.�LOG�warningr*�strip�os�path�join�append�endswithrZ
write_file�	ExceptionZlogexc)
r�	def_fname�cfg_dir�filesZcur_posZentr6r8r=Zendlrrr �apply_rsyslog_changes�s:
�

rKcCszt�|�\}}|��}Wnty6|d}}Yn0|����}d}t|�dkrZ|}n"t|�dkrp|\}}ntd|��t�|�}|s�td|��|�d�}|�d�p�|�d�}|�d�}	|�d	�r�|�	d
�s�td|��|r�|s�|}t
|||||	d�}
|
��|
S)
Nr7�zline had multiple spaces: %szInvalid host specification '%s'�proto�addrZbracket_addr�port�[�]z"host spec had invalid brackets: %s�r�matchrMrNrO)�
COMMENT_RE�splitrAr0�len�HOST_PORT_RErS�group�
startswithrF�SyslogRemotesLine�validate)�liner�dataZcommentZtoksrS�	host_portrMrNrO�trrr �parse_remotes_line�s6




�r`c@s.eZdZd
dd�Zdd�Zdd�Zdd	�ZdS)rZNcCs\|sd}||_||_|sd}|dkr*d}n|dkr6d}||_||_|rRt|�|_nd|_dS)Nz*.*�udp�@�@@�tcp)rrSrMrN�intrO)�selfrrSrMrNrOrrr �__init__�szSyslogRemotesLine.__init__c
Cs\|jrJzt|j�Wn4tyH}ztd|j�|�WYd}~n
d}~00|jsXtd��dS)Nzport '%s' is not an integerzaddress is required)rOrer0rN)rf�errr r[s��zSyslogRemotesLine.validatecCsd|j|j|j|j|jfS)Nz.[name=%s match=%s proto=%s address=%s port=%s]rR)rfrrr �__repr__s�zSyslogRemotesLine.__repr__cCs�|jd}|jdkr|d7}n|jdkr0|d7}d|jvrN|d|jd7}n
||j7}|jrl|d	|j7}|jr�|d
|j7}|S)N� rarbrdrc�:rPrQz:%sz # %s)rSrMrNrOr)rf�bufrrr �__str__s





zSyslogRemotesLine.__str__)NNNNN)�__name__�
__module__�__qualname__rgr[rirmrrrr rZ�s
�
	rZcCs�|sdSg}|dur|�|�|��D]^\}}|s4q&z|�tt||d���Wq&ty�}zt�d|||�WYd}~q&d}~00q&|dur�|�|�d�|�dS)N)rz!failed loading remote %s: %s [%s]r<)rE�itemsr-r`r0r?r@rD)r�header�footer�linesrr\rhrrr �remotes_to_rsyslog_cfg)s
(
ru)�cloudr)cCs�z|j�dd�Wntjy(YdS0|j�dd�|j��t�tj��(|j�dd�t�d�Wd�n1s|0YdS)z�
    This helper function bundles the necessary steps to disable BSD base syslog
    ``rc(8)`` reads its configuration on start, so after disabling syslogd, we
    need to tell rc to reload its config
    ZenabledZsyslogdN�disableZonestopzOsyslogd is running before cloud-init! Please report this as bug to the porters!)	rr%r�ProcessExecutionErrorZreload_init�
contextlib�suppressr?�error)rvrrr � disable_and_stop_bsd_base_syslog;s
�r|)rrrv�argsr)c

Cs`d|vrt�d|�dSt||j�}|d}|drL|�t|dddd��|j�dd�}|d	d
ur�t|jj|d|dd
�t	�
�r�|j�d|�t|�|ds�t�d�dSt
|d|d|dd�}|s�t�d�dSzt|j|dd�}Wn<tj�y2}	z d}t�dt|	��WYd}	~	n
d}	~	00|�r\t��t�|j�t�d||�dS)Nrz;Skipping module named %s, no 'rsyslog' key in configurationrrz# begin remotesz
# end remotes)rrrsr#rTrr)rr�enablez.Empty config rsyslog['configs'], nothing to dorr)rrHrIz0restart of syslog not necessary, no changes mader)r&FzFailed to reload syslog %sz%s configured %s files)r?�debugr5rrErur$rZinstall_packagesrZis_BSDr%r|rKr(rrxr@r-r
Z
reset_loggingZ
setup_loggingr)
rrrvr}r2rr'ZchangesZ	restartedrhrrr �handleSs^����
�

�
&r�)Nr)r)N)NN).�__doc__ryrZloggingrB�reZ	cloudinitrrrZcloudinit.cloudrZcloudinit.configrZcloudinit.config.schemarZcloudinit.distrosrr	Z
cloudinit.logr
Zcloudinit.settingsrr�__annotations__rrZ	getLoggerrnr?�compilerTrWr!rr(r.r5rKr`rZrur|r-r,r�rrrr �<module>sf��
����

�

/)
&?


© 2025 Cubjrnet7