Ë
    x[há-  ã            
       ó”  — U d Z ddlZddlZddlZddlZddlZddlmZmZm	Z	 ddl
mZ ddlmZ ddlmZ ddlmZmZ ddlmZ dd	lmZ d
egedgdœZeed<   dddi i ddgddœZddgdœddgdœddgdœdœZ ej6                  e«      Zdefd„Zd*d„Zd+d„Z de!dede!fd„Z"d „ Z#d,d!„Z$ G d"„ d#«      Z%d-d$„Z&d%eddfd&„Z'd'e(ded%ed(e)ddf
d)„Z*y).z-Rsyslog: Configure system logging via rsyslogé    N)Ú	lifecycleÚsubpÚutil)ÚCloud)ÚConfig)Ú
MetaSchema)ÚALL_DISTROSÚDistro)Úloggers)ÚPER_INSTANCEÚ
cc_rsyslogÚrsyslog)ÚidÚdistrosÚ	frequencyÚactivate_by_schema_keysÚmetaz/etc/rsyslog.dz20-cloud-config.confÚautoÚrsyslogdF)Ú
config_dirÚconfig_filenameÚservice_reload_commandÚremotesÚconfigsÚ	check_exeÚpackagesÚinstall_rsyslogz/usr/local/etc/rsyslog.d)r   r   zsysutils/rsyslogz/usr/pkg/etc/rsyslog.d)ÚfreebsdÚopenbsdÚnetbsdÚdistroc                 ó¬   — t         }t        j                  t        «      }| j                  |v r&t	        j
                  ||| j                     gd¬«      }|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_CONFIGÚosfamilyr   ÚmergemanydictÚname)r!   ÚdcfgÚcfgs      ú=/usr/lib/python3/dist-packages/cloudinit/config/cc_rsyslog.pyÚdistro_default_rsyslog_configr-   ?   sH   € ô €DÜ
�)‰)”NÓ
#€CØ‡�˜$ÑÜ× Ñ  # t¨F¯K©KÑ'8Ð!9À4ÔHˆØ€Jó    c                 óJ   — t        j                  |«      ry|€dg} | |«       y)ai  Install 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)Úinstall_funcr   r   s      r,   r   r   M   s(   € ô ‡z�z�)ÔØØÐØ�;ˆá�Õr.   c                 ó‚   — |dk(  r$| j                  dd«      }| j                  d|«      S t        j                  |d¬«      S )Nr   Úrsyslog_svcnamer   z
try-reloadT)Úcapture)Ú
get_optionÚmanage_servicer   )r!   ÚcommandÚservices      r,   Úreload_syslogr9   ^   sA   € Ø�&ÒØ×#Ñ#Ð$5°yÓAˆØ×$Ñ$ \°7Ó;Ð;Ü�9‰9�W dÔ+Ð+r.   r+   Úreturnc                 óD  — | j                  di «      }t        |«      }t        | j                  d«      t        «      rBt	        j
                  dd¬«       d| j                  d«      i}d| v r| d   |d<   d| v r| d   |d	<   dg t        fd	|d	   t        fd|d   t        fd
|d
   t        fd|d   t        t        ffd|d   t        fd|d   t        fd|d   t        ff}|D ]?  \  }}}||vr|||<   Œt        ||   |«      rŒ!t        d|› d|› dt        ||   «      › �«      ‚ |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'z22.2)Ú
deprecatedÚdeprecated_versionr   Úrsyslog_filenamer   Úrsyslog_dirr   r   r   r   r   r   zInvalid type for key `z`. Expected type(s): z. Current type: )Úgetr-   Ú
isinstanceÚlistr   Ú	deprecateÚstrÚdictÚboolÚ
ValueErrorÚtype)r+   r!   ÚmycfgÚdistro_configÚfillupÚkeyÚdefaultÚvtypess           r,   Úload_configrO   e   s†  € ð �G‰G�I˜rÓ"€EÜ1°&Ó9€Mä�#—'‘'˜)Ó$¤dÔ+Ü×ÑØBØ%õ	
ð ˜CŸG™G IÓ.Ð/ˆØ Ñ$Ø'*Ð+=Ñ'>ˆEÐ#Ñ$Ø˜CÑØ"% mÑ"4ˆE�,Ñð 
�BœÐØ	�} \Ñ2´CÐ8Ø	˜MÐ*;Ñ<¼cÐBØ	�M )Ñ,¬dÐ3à$ØÐ2Ñ3Ü”$ˆKð	
ð
 
�m KÑ0´#Ð6Ø	�] :Ñ.´Ð5Ø	˜MÐ*;Ñ<¼dÐCð€Fð !'ò ÑˆˆW�fØ�eÑØ ˆE�#ŠJÜ˜E #™J¨Õ/ÜØ(¨¨Ð-BÀ6À(ð K!Ü!% e¨C¡jÓ!1Ð 2ð4óð ð	ð €Lr.   c                 óF  — g }t        | «      D ]å  \  }}t        |t        «      r6d|vrt        j	                  d|dz   «       Œ4|d   }|j                  d|«      }n|}|}|j                  «       }|st        j	                  d|dz   «       Œ|t        j                  j                  ||«      }d}||vrd}|j                  |«       	 d}	|j                  d	«      sd	}	t        j                  |||	z   |¬
«       Œç |S # t        $ r t        j                  t        d|«       Y �Œw xY w)NÚcontentz%No 'content' entry in config entry %sé   ÚfilenamezEntry %s has an empty filenameÚabÚwbÚ ú
)ÚomodezFailed to write to %s)Ú	enumeraterA   rE   ÚLOGÚwarningr@   ÚstripÚosÚpathÚjoinÚappendÚendswithr   Ú
write_fileÚ	ExceptionÚlogexc)
r   Ú	def_fnameÚcfg_dirÚfilesÚcur_posÚentrQ   rS   rX   Úendls
             r,   Úapply_rsyslog_changesrk   ”   s)  € ð €EÜ! 'Ó*ò  @‰ˆ�Ü�cœ4Ô Ø Ñ#Ü—‘Ø;¸WÀq¹[ôð Ø˜)‘nˆGØ—w‘w˜z¨9Ó5‰HàˆGØ ˆHà—>‘>Ó#ˆÙÜ�K‰KÐ8¸'ÀA¹+ÔFØä—7‘7—<‘< ¨Ó2ˆð ˆØ˜5Ñ ØˆEØ�L‰L˜Ô"ð	@ØˆDØ×#Ñ# DÔ)Ø�Ü�O‰O˜H g°¡n¸EÖBð= @ðD €Løô ò 	@Ü�K‰KœÐ4°h×?ð	@ús   Ã0C8Ã8$D ÄD c                 ó¬  — 	 t        j                  d| «      \  }}|j                  «       }|j                  «       j                  «       }d }t	        |«      dk(  r|}n"t	        |«      dk(  r|\  }}nt        d|z  «      ‚t        j
                  d|«      }|st        d|z  «      ‚|j                  d«      }|j                  d«      xs |j                  d	«      }|j                  d
«      }	|j                  d«      r|j                  d«      st        d|z  «      ‚|r|s|}t        |||||	¬«      }
|
j                  «        |
S # t        $ r | d }}Y �Œ'w xY w)Nz[ ]*[#]+[ ]*rR   é   zline had multiple spaces: %sz_^(?P<proto>[@]{0,2})(([\[](?P<bracket_addr>[^\]]*)[\]])|(?P<addr>[^:]*))([:](?P<port>[0-9]+))?$zInvalid host specification '%s'ÚprotoÚaddrÚbracket_addrÚportú[ú]z"host spec had invalid brackets: %s©r)   Úmatchrn   ro   rq   )ÚreÚsplitr\   rG   Úlenru   ÚgroupÚ
startswithra   ÚSyslogRemotesLineÚvalidate)Úliner)   ÚdataÚcommentÚtoksru   Ú	host_portrn   ro   rq   Úts              r,   Úparse_remotes_linerƒ   ½   sO  € ð%ÜŸ™ °$Ó7‰ˆˆgØ—-‘-“/ˆð �:‰:‹<×ÑÓ€DØ€EÜ
ˆ4ƒy�A‚~Ø‰	Ü	ˆT‹�aŠØÑˆ‰yäÐ7¸$Ñ>Ó?Ð?ä�8‰8ð	#ð 	ó	€Dñ ÜÐ:¸YÑFÓGÐGà�J‰J�wÓ€EØ�:‰:�fÓÒ; §¡¨NÓ!;€DØ�:‰:�fÓ€Dà‡��sÔ D§M¡M°#Ô$6ÜÐ=ÀÑDÓEÐEá‘tØˆäØ˜ e°$¸Tô	€Að ‡J�J„LØ€HøôI ò %Ø˜tˆg‹ð%ús   ‚)E ÅEÅEc                   ó(   — e Zd Z	 dd„Zd„ Zd„ Zd„ Zy)r{   Nc                 óž   — |sd}|| _         || _        |sd}|dk(  rd}n|dk(  rd}|| _        || _        |�t	        |«      | _        y d | _        y )Nz*.*Úudpú@ú@@Útcp)r)   ru   rn   ro   Úintrq   )Úselfr)   ru   rn   ro   rq   s         r,   Ú__init__zSyslogRemotesLine.__init__é   s^   € ñ ØˆEØˆŒ	ØˆŒ
ÙØˆEØ�CŠ<Ø‰EØ�dŠ]ØˆEØˆŒ
àˆŒ	Ø!%Ð!1”C˜“Iˆ�	°tˆ�	r.   c                 óÊ   — | j                   r	 t        | j                   «       | j                  st        d«      ‚y # t        $ r}t        d| j                   z  «      |‚d }~ww xY w)Nzport '%s' is not an integerzaddress is required)rq   rŠ   rG   ro   )r‹   Úes     r,   r|   zSyslogRemotesLine.validateû   sa   € Ø�9Š9ðÜ�D—I‘I”ð �yŠyÜÐ2Ó3Ð3ð øô ò Ü Ø1°D·I±IÑ=óàðûðús   Ž; »	A"ÁAÁA"c                 óŠ   — d| j                   ›d| j                  ›d| j                  ›d| j                  ›d| j                  ›d�S )Nz[name=z match=z proto=z	 address=z port=rs   rt   )r‹   s    r,   Ú__repr__zSyslogRemotesLine.__repr__  s/   � à�I‹IØ�J‹JØ�J‹JØ�I‹IØ�I‹Ið
ð 	
r.   c                 óT  — | j                   dz   }| j                  dk(  r|dz  }n| j                  dk(  r|dz  }d| j                  v r|d| j                  z   dz   z  }n|| j                  z  }| j                  r|d	| j                  z  z  }| j                  r|d
| j                  z  z  }|S )Nú r†   r‡   r‰   rˆ   ú:rr   rs   z:%sz # %s)ru   rn   ro   rq   r)   )r‹   Úbufs     r,   Ú__str__zSyslogRemotesLine.__str__  s¤   € Ø�j‰j˜3ÑˆØ�:‰:˜ÒØ�3‰J‰CØ�Z‰Z˜5Ò Ø�4‰KˆCà�$—)‘)ÑØ�3˜Ÿ™‘? SÑ(Ñ(‰Cà�4—9‘9ÑˆCà�9Š9Ø�5˜4Ÿ9™9Ñ$Ñ$ˆCà�9Š9Ø�7˜TŸY™YÑ&Ñ&ˆCØˆ
r.   )NNNNN)Ú__name__Ú
__module__Ú__qualname__rŒ   r|   r�   r•   © r.   r,   r{   r{   è   s   „ àAEó<ò$
4ò
ór.   r{   c           	      ó^  — | sy g }|�|j                  |«       | j                  «       D ].  \  }}|sŒ		 |j                  t        t        ||¬«      «      «       Œ0 |�|j                  |«       dj                  |«      dz   S # t        $ r"}t
        j                  d|||«       Y d }~Œ~d }~ww xY w)N)r)   z!failed loading remote %s: %s [%s]rW   )r`   ÚitemsrD   rƒ   rG   rZ   r[   r_   )r   ÚheaderÚfooterÚlinesr)   r}   rŽ   s          r,   Úremotes_to_rsyslog_cfgrŸ   $  s±   € ÙØØ€EØÐØ�‰�VÔØ—m‘m“oò L‰
ˆˆdÙØð	LØ�L‰LœÔ/°¸4Ô@ÓAÕBð	Lð ÐØ�‰�VÔØ�9‰9�UÓ˜dÑ"Ð"øô	 ò 	LÜ�K‰KÐ;¸TÀ4È×KÑKûð	Lús   ³%BÂ	B,Â
B'Â'B,Úcloudc                 ó®  — 	 | j                   j                  dd«       | j                   j                  dd«       | j                   j	                  «        t        j                  t        j                  «      5  | j                   j                  dd«       t        j                  d«       ddd«       y# t        j                  $ r Y yw xY w# 1 sw Y   yxY w)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
    ÚenabledÚsyslogdNÚdisableÚonestopzOsyslogd is running before cloud-init! Please report this as bug to the porters!)	r!   r6   r   ÚProcessExecutionErrorÚreload_initÚ
contextlibÚsuppressrZ   Úerror)r    s    r,   Ú disable_and_stop_bsd_base_syslogr«   6  s°   € ðØ�‰×#Ñ# I¨yÔ9ð 
‡L�L×Ñ 	¨9Ô5Ø	‡L�L×ÑÔä	×	Ñ	œT×7Ñ7Ó	8ñ 
ð 	�‰×#Ñ# I¨yÔ9Ü�	‰	ð8ô	
÷
ð 
øô ×%Ñ%ò Ùðú÷

ð 
ús   ‚B2 Á72CÂ2CÃCÃCr)   Úargsc                 ó¬  — d|vrt         j                  d| «       y t        ||j                  «      }|d   }|d   r |j	                  t        |d   dd¬«      «       |j                  j                  dd«      }|d	   d
u r(t        |j                  j                  |d   |d   ¬«       t        j                  «       r'|j                  j                  d|«       t        |«       |d   st         j                  d«       y t        |d   |d   |d   ¬«      }|st         j                  d«       y 	 t        |j                  |d   ¬«      }|rKt'        j(                  «        t'        j*                  |j,                  «       t         j                  d| |«       y y # t        j                   $ r+}	d}t         j#                  dt%        |	«      «       Y d }	~	Œ‡d }	~	ww xY w)Nr   z;Skipping module named %s, no 'rsyslog' key in configurationr   r   z# begin remotesz# end remotes)rœ   r�   r3   r   Tr   r   )r   r   Úenablez.Empty config rsyslog['configs'], nothing to dor   r   )r   re   rf   z0restart of syslog not necessary, no changes mader   )r7   FzFailed to reload syslog %sz%s configured %s files)rZ   ÚdebugrO   r!   r`   rŸ   r5   r   Úinstall_packagesr   Úis_BSDr6   r«   rk   r9   r   r¦   r[   rD   r   Úreset_loggingÚsetup_loggingr+   )
r)   r+   r    r¬   rI   r   r8   ÚchangesÚ	restartedrŽ   s
             r,   Úhandler¶   N  sµ  € Ø˜ÑÜ�	‰	ØIÈ4ô	
ð 	ä˜˜UŸ\™\Ó*€EØ�IÑ€GàˆYÒØ�‰Ü"Ø�iÑ Ø(Ø&ôô	
ð �l‰l×%Ñ%Ð&7¸ÓC€GàÐÑ 4Ñ'ÜØ�L‰L×)Ñ)Ø˜:Ñ&Ø˜KÑ(õ	
ô ‡{�{„}Ø�‰×#Ñ# H¨gÔ6Ü(¨Ô/à�ÒÜ�	‰	ÐBÔCØä#Ø�iÑ ØÐ)Ñ*Ø�lÑ#ô€Gñ Ü�	‰	ÐDÔEØð:Ü!Ø�L‰L %Ð(@Ñ"Aô
ˆ	ñ ô 	×ÑÔÜ×Ñ˜eŸi™iÔ(ô 	�	‰	Ð*¨D°'Õ:ð øô	 ×%Ñ%ò :Øˆ	Ü�‰Ð0´#°a³&×9Ñ9ûð:ús   Ä-F ÆGÆ(!GÇG)Nr   )r   )N)NN)+Ú__doc__r¨   r%   Úloggingr]   rv   Ú	cloudinitr   r   r   Úcloudinit.cloudr   Úcloudinit.configr   Úcloudinit.config.schemar   Úcloudinit.distrosr	   r
   Úcloudinit.logr   Úcloudinit.settingsr   r   Ú__annotations__r&   r$   Ú	getLoggerr–   rZ   r-   r   r9   rE   rO   rk   rƒ   r{   rŸ   r«   rD   rB   r¶   r™   r.   r,   ú<module>rÂ      sG  ðò 4ã Û Û Û 	Û 	ç +Ñ +Ý !Ý #Ý .ß 1Ý !Ý +ð Øˆ}ØØ )˜{ñ	€€jó ð #Ø-Ø$ØØØØ�Øñ	€ð 1Ø�Kñð
 1Ø'Ð(ñð
 /Ø'Ð(ññÐ ð €g×Ñ˜Ó!€ð¨&ó óó",ð,�Tð , 6ð ,¨dó ,ò^&óR(÷V9ñ 9óx#ð$
¨Eð 
°dó 
ð0=;�ð =;˜6ð =;¨%ð =;°tð =;Àô =;r.   