HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux ip-10-0-8-47 6.8.0-1021-aws #23~22.04.1-Ubuntu SMP Tue Dec 10 16:31:58 UTC 2024 aarch64
User: ubuntu (1000)
PHP: 8.1.2-1ubuntu2.22
Disabled: NONE
Upload Files
File: //lib/python3/dist-packages/cloudinit/config/__pycache__/cc_rsyslog.cpython-310.pyc
o

�Ad'�@s�UdZddlZddlZddlmZddlmZddlmZddlm	Z	m
Z
ddlmZddl
mZdd	lmZmZdd
lmZddlmZdZd
ddeegeed�ed�gdgd�Zeed<ee�ZdZdZdZiZeed<dZdZdZ dZ!dZ"dZ#dZ$e�%e&�Z'e�(d �Z)e�(d!�Z*efd"d#�Z+d$ed%efd&d'�Z,d(d)�Z-d6d*d+�Z.Gd,d-�d-�Z/d7d.d/�Z0d0e1d$ed1ed2ed3e2d%dfd4d5�Z3dS)8z-Rsyslog: Configure system logging via rsyslog�N)�Logger)�dedent)�log)�subp�util)�Cloud)�Config)�
MetaSchema�get_meta_doc)�ALL_DISTROS)�PER_INSTANCEz�This module configures remote system logging using rsyslog.

Configuration for remote servers can be specified in ``configs``, but for
convenience it can be specified as key value pairs in ``remotes``.
�
cc_rsyslog�Rsyslogz$Configure system logging via rsyslogz�            rsyslog:
                remotes:
                    maas: 192.168.1.1
                    juju: 10.0.4.1
                service_reload_command: auto
            a7            rsyslog:
                config_dir: /opt/etc/rsyslog.d
                config_filename: 99-late-cloud-config.conf
                configs:
                    - "*.* @@192.158.1.1"
                    - content: "*.*   @@192.0.2.1:10514"
                      filename: 01-example.conf
                    - content: |
                        *.*   @@syslogd.example.com
                remotes:
                    maas: 192.168.1.1
                    juju: 10.0.4.1
                service_reload_command: [your, syslog, restart, command]
            �rsyslog)�id�name�title�description�distros�	frequency�examples�activate_by_schema_keys�metaz20-cloud-config.confz/etc/rsyslog.d�auto�DEF_REMOTES�configs�config_filename�
config_dir�service_reload_command�rsyslog_filename�rsyslog_dir�remotesz[ ]*[#]+[ ]*z_^(?P<proto>[@]{0,2})(([\[](?P<bracket_addr>[^\]]*)[\]])|(?P<addr>[^:]*))([:](?P<port>[0-9]+))?$cCs.|tkr|�dd�}|�d|�Stj|dd�S)N�rsyslog_svcnamerz
try-reloadT)�capture)�
DEF_RELOAD�
get_option�manage_servicer)�distro�command�service�r*�=/usr/lib/python3/dist-packages/cloudinit/config/cc_rsyslog.py�
reload_syslog^sr,�cfg�returnc
Cs�|�di�}t|�d�t�r.t�d�t|�d�i}t|vr$|t|t<t|vr.|t|t	<tgtft	t
tftttft
tttfftttff}|D]&\}}}||vrV|||<qHt|||�sntd|�d|�dt||�����qH|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.
    rzDEPRECATION: This rsyslog list format is deprecated and will be removed in a future version of cloud-init. Use documented keys.zInvalid type for key `z`. Expected type(s): z. Current type: )�get�
isinstance�list�LOG�warning�KEYNAME_CONFIGS�KEYNAME_LEGACY_FILENAME�KEYNAME_FILENAME�KEYNAME_LEGACY_DIR�KEYNAME_DIR�DEF_DIR�str�DEF_FILENAME�KEYNAME_RELOADr$�KEYNAME_REMOTESr�dict�
ValueError�type)r-�mycfg�fillup�key�default�vtypesr*r*r+�load_configes6��

���rFc
	Cs�g}t|�D]m\}}t|t�r'd|vrt�d|d�q|d}|�d|�}n|}|}|��}|s:t�d|d�qtj�	||�}d}||vrNd}|�
|�zd}	|�d	�sXd	}	tj
|||	|d
�Wqtyst�td|�Yqw|S)N�contentz%No 'content' entry in config entry %s��filenamezEntry %s has an empty filename�ab�wb��
)�omodezFailed to write to %s)�	enumerater0r>r2r3r/�strip�os�path�join�append�endswithr�
write_file�	Exception�logexc)
r�	def_fname�cfg_dir�files�cur_pos�entrGrIrN�endlr*r*r+�apply_rsyslog_changes�s<
�

�r_cCsz
t�|�\}}|��}Wnty|d}}Ynw|����}d}t|�dkr-|}nt|�dkr8|\}}ntd|��t�|�}|sKtd|��|�d�}|�d�pY|�d�}|�d�}	|�d	�ro|�	d
�sotd|��|ru|su|}t
|||||	d�}
|
��|
S)
NrH�zline had multiple spaces: %szInvalid host specification '%s'�proto�addr�bracket_addr�port�[�]z"host spec had invalid brackets: %s�r�matchrarbrd)�
COMMENT_RE�splitrPr?�len�HOST_PORT_RErh�group�
startswithrU�SyslogRemotesLine�validate)�liner�data�comment�toksrh�	host_portrarbrd�tr*r*r+�parse_remotes_line�s8�




�rwc@s0eZdZ	d
dd�Zdd�Zdd�Zdd	�ZdS)roNcCs^|sd}||_||_|sd}|dkrd}n|dkrd}||_||_|r*t|�|_dSd|_dS)Nz*.*�udp�@�@@�tcp)rrhrarb�intrd)�selfrrhrarbrdr*r*r+�__init__�s
zSyslogRemotesLine.__init__c
CsP|jrzt|j�Wnty}ztd|j�|�d}~ww|js&td��dS)Nzport '%s' is not an integerzaddress is required)rdr|r?rb)r}�er*r*r+rp�s�����zSyslogRemotesLine.validatecCsd|j|j|j|j|jfS)Nz.[name=%s match=%s proto=%s address=%s port=%s]rg)r}r*r*r+�__repr__�s�zSyslogRemotesLine.__repr__cCs�|jd}|jdkr|d7}n	|jdkr|d7}d|jvr'|d|jd7}n||j7}|jr6|d	|j7}|jr@|d
|j7}|S)N� rxryr{rz�:rerfz:%sz # %s)rhrarbrdr)r}�bufr*r*r+�__str__s





zSyslogRemotesLine.__str__)NNNNN)�__name__�
__module__�__qualname__r~rpr�r�r*r*r*r+ro�s
�	rocCs�|sdSg}|dur|�|�|��D].\}}|sqz
|�tt||d���WqtyA}zt�d|||�WYd}~qd}~ww|durK|�|�d�|�dS)N)rz!failed loading remote %s: %s [%s]rM)rT�itemsr:rwr?r2r3rS)r!�header�footer�linesrrqrr*r*r+�remotes_to_rsyslog_cfgs"
��
r�r�cloudr�argsc

Cs�d|vr|�d|�dSt|�}|t}|tr$|�t|tddd��|ds/|�d�dSt|t|t|td�}|sE|�d	�dSzt	|j
|td
�}Wntj
yk}	zd}|�d|	�WYd}	~	nd}	~	ww|r{|��|�d
||�dSdS)Nrz;Skipping module named %s, no 'rsyslog' key in configurationz# begin remotesz
# end remotes)r�r�rz.Empty config rsyslog['configs'], nothing to do)rrYrZz0restart of syslog not necessary, no changes made)r(FzFailed to reload syslogz%s configured %s files)�debugrFr4r=rTr�r_r6r8r,r'r<r�ProcessExecutionErrorr3�
cycle_logging)
rr-r�rr�rAr�changes�	restartedrr*r*r+�handle,sJ���
�
���r�)N)NN)4�__doc__rQ�re�loggingr�textwrapr�	cloudinitrrr�cloudinit.cloudr�cloudinit.configr�cloudinit.config.schemar	r
�cloudinit.distrosr�cloudinit.settingsr�MODULE_DESCRIPTIONr�__annotations__r;r9r$rr>r4r6r8r<r5r7r=�	getLoggerr�r2�compilerirlr,rFr_rwror�r:r1r�r*r*r*r+�<module>s��	���&

�'
)&
?������