a '¡Dg/.ã @sŠUdZddlZddlZddlZddlZddlZddlmZmZm Z ddl m Z ddl m Z ddlmZddlmZmZddlmZdd lmZd eged gd œZeed <dddiidd gddœZdd gdœ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)e dd-œd.d/„Z*e+e e e,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[@]{0,2})(([\[](?P[^\]]*)[\]])|(?P[^:]*))([:](?P[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 |d ttffd |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_filenamerZ rsyslog_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: ÿ   rKc Cszt |¡\}}| ¡}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 ÿ   rZc Cs¦|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ÚProcessExecutionErrorZ reload_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.settingsr rÚ__annotations__rrZ getLoggerrnr?ÚcompilerTrWr!rr(r.r5rKr`rZrur|r-r,r€rrrr Ú sf     üø þþþ÷  ÿ  /) &?