
    x[h-              
          % S r SSKrSSKrSSKrSSKrSSKrSSKJrJrJ	r	  SSK
Jr  SSKJr  SSKJr  SSKJrJr  SSKJr  SS	KJr  S
\/\S/S.r\\S'   SSS0 0 SS/SS.rSS/S.SS/S.SS/S.S.r\R6                  " \5      rS\4S jrS*S jrS+S jr S\!S\S\!4S jr"S  r#S,S! jr$ " S" S#5      r%S-S$ jr&S%\SS4S& jr'S'\(S\S%\S(\)SS4
S) jr*g).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                     [         n[        R                  " [        5      nU R                  U;   a#  [        R
                  " X!U R                     /SS9nU$ )zConstruct 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-   ?   sF     D
))N
#C$  #FKK'8!94HJ    c                 X    [         R                  " U5      (       a  gUc  S/nU " U5        g)aQ  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+     zz);r.   c                     US:X  a$  U R                  SS5      nU R                  SU5      $ [        R                  " USS9$ )Nr   rsyslog_svcnamer   z
try-reloadT)capture)
get_optionmanage_servicer   )r!   commandservices      r,   reload_syslogr9   ^   sA    &##$5yA$$\7;;99Wd++r.   r+   returnc                 \   U R                  S0 5      n[        U5      n[        U R                  S5      [        5      (       aD  [        R
                  " SSS9  SU R                  S5      0nSU ;   a  U S   US'   SU ;   a  U S   US	'   S/ [        4S	US	   [        4SUS   [        4S
US
   [        4SUS   [        [        44SUS   [        4SUS   [        4SUS   [        44nU HC  u  pVnXR;  a  XbU'   M  [        X%   U5      (       a  M&  [        SU SU S[        X%   5       35      e   U$ )zReturn 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}    GGIr"E1&9M#'')$d++B%	
 CGGI./$'*+='>E#$C"%m"4E, 
B	}\2C8	M*;<cB	M),d3$23$K	

 
mK0#6	]:.5	M*;<dCF !'f #JEJ//(-B6( K!!%ej!1 24 	 !' Lr.   c                 n   / n[        U 5       H  u  pE[        U[        5      (       a9  SU;  a  [        R	                  SUS-   5        M;  US   nUR                  SU5      nOUnUnUR                  5       nU(       d  [        R	                  SUS-   5        M  [        R                  R                  X'5      nSnXs;  a  SnUR                  U5         Sn	UR                  S	5      (       d  S	n	[        R                  " XvU	-   US
9  M     U$ ! [         a!    [        R                  " [        SU5         GM%  f = f)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!'*c4  #;Wq[ )nGwwz95HG H>>#KK8'A+F77<<2  ELL"	@D##D))OOHnEB= +D L  	@KK4h??	@s   2D		&D43D4c                     [         R                  " SU 5      u  p#UR                  5       nUR                  5       R                  5       nS n[	        U5      S:X  a  UnO"[	        U5      S:X  a  Uu  pVO[        SU-  5      e[         R
                  " SU5      nU(       d  [        SU-  5      eUR                  S5      nUR                  S5      =(       d    UR                  S	5      nUR                  S
5      n	UR                  S5      (       a$  UR                  S5      (       d  [        SU-  5      eU(       a	  U(       d  Un[        XXxU	S9n
U
R                  5         U
$ ! [         a    U S p2 GNBf = f)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      sM   %$7--/ ::<DE
4yA~		Tay7$>??88	# 		D :YFGGJJwE::f;N!;D::fDsDMM#$6$6=DEEteT	A JJLHI  %tg%s   )E E.-E.c                   2    \ rS rSr SS jrS rS rS rSrg)	r{      Nc                     U(       d  SnXl         X l        U(       d  SnUS:X  a  SnOUS:X  a  SnX0l        X@l        Ub  [	        U5      U l        g S U l        g )Nz*.*udp@@@tcp)r)   ru   rn   ro   intrq   )selfr)   ru   rn   ro   rq   s         r,   __init__SyslogRemotesLine.__init__   sV     E	
EC<Ed]E
	!%!1CI	t	r.   c                     U R                   (       a   [        U R                   5        U R                  (       d  [        S5      eg ! [         a  n[        SU R                   -  5      UeS nAff = f)Nzport '%s' is not an integerzaddress is required)rq   r   rG   ro   )r   es     r,   r|   SyslogRemotesLine.validate   sa    99DII yy233    1DII=s   A 
A-A((A-c                     SU R                   < SU R                  < SU R                  < SU R                  < SU R                  < S3$ )Nz[name=z match=z proto=z	 address=z port=rs   rt   )r   s    r,   __repr__SyslogRemotesLine.__repr__  s/    IIJJJJIIII
 	
r.   c                 n   U R                   S-   nU R                  S:X  a  US-  nOU R                  S:X  a  US-  nSU R                  ;   a  USU R                  -   S-   -  nOXR                  -  nU R                  (       a  US	U R                  -  -  nU R                  (       a  US
U R                  -  -  nU$ )N r   r   r   r   :rr   rs   z:%sz # %s)ru   rn   ro   rq   r)   )r   bufs     r,   __str__SyslogRemotesLine.__str__  s    jj3::3JCZZ5 4KC$))3?S((C99C995499$$C997TYY&&C
r.   )ro   ru   r)   rq   rn   )NNNNN)	__name__
__module____qualname____firstlineno__r   r|   r   r   __static_attributes__ r.   r,   r{   r{      s    AE<$
4
r.   r{   c           
      t   U (       d  g / nUb  UR                  U5        U R                  5        H0  u  pEU(       d  M   UR                  [        [        XTS95      5        M2     Ub  UR                  U5        SR                  U5      S-   $ ! [         a"  n[
        R                  SXEU5         S nAM  S nAff = f)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mmo
	LLL/@AB	 & V99Ud""	  	LKK;TKK	Ls   !B
B7B22B7cloudc                     U R                   R                  SS5        U R                   R                  SS5        U R                   R	                  5         [
        R                  " [        R                  5         U R                   R                  SS5        [        R                  S5        SSS5        g! [        R                   a     gf = f! , (       d  f       g= f)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    ##Iy9 
LL	95	LL			T77	8 	##Iy9		8	
 
9	8 %% 
 
9	8s   B3 82C3C
	C

Cr)   argsc                    SU;  a  [         R                  SU 5        g [        XR                  5      nUS   nUS   (       a  UR	                  [        US   SSS95        UR                  R                  SS5      nUS	   S
L a%  [        UR                  R                  US   US   S9  [        R                  " 5       (       a'  UR                  R                  SU5        [        U5        US   (       d  [         R                  S5        g [        US   US   US   S9nU(       d  [         R                  S5        g  [        UR                  US   S9nU(       aL  [&        R(                  " 5         [&        R*                  " UR,                  5        [         R                  SX5        g g ! [        R                    a+  n	Sn[         R#                  S[%        U	5      5         S n	A	NS n	A	ff = f)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   		I4	
 	\\*EIGY"i (&	
 ll%%&7CG4'LL)):&K(	
 {{}}##Hg6(/		BC#i )*l#G 		DE:!LL%(@"A
	  	eii( 			*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      sE   4    	 	 + + ! # . 1 ! + } ){	j  #-$	 1K
 1'(
 /'(  !& ",,T ,6 ,d ,^&R(V9 9x#$
E 
d 
0=; =;6 =;% =;t =; =;r.   