܍~c' UdZddlZddlZddlmZddlmZddlmZddlm Z m Z ddl m Z ddl mZdd lmZmZdd lmZdd lmZd Zd ddeegeededgdgdZeed<eeZdZdZdZiZeed<dZdZdZ dZ!dZ"dZ#dZ$ej%e&Z'ej(d Z)ej(d!Z*efd"Z+d#ed$efd%Z,d&Z-d0d'Z.Gd(d)Z/d1d*Z0d+e1d#ed,e d-ed.e2d$df d/Z3dS)2z-Rsyslog: Configure system logging via rsyslogN)Logger)dedent)log)subputil)Cloud)Config) MetaSchema get_meta_doc) ALL_DISTROS) PER_INSTANCEzThis 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_rsyslogRsyslogz$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)idnametitle descriptiondistros frequencyexamplesactivate_by_schema_keysmetaz20-cloud-config.confz/etc/rsyslog.dauto DEF_REMOTESconfigsconfig_filename config_dirservice_reload_commandrsyslog_filename rsyslog_dirremotesz [ ]*[#]+[ ]*z_^(?P[@]{0,2})(([\[](?P[^\]]*)[\]])|(?P[^:]*))([:](?P[0-9]+))?$c|tkr,|dd}|d|Stj|dS)Nrsyslog_svcnamerz try-reloadT)capture) DEF_RELOAD get_optionmanage_servicer)distrocommandservices =/usr/lib/python3/dist-packages/cloudinit/config/cc_rsyslog.py reload_syslogr-^sN*##$5yAA$$\7;;; 9Wd + + ++cfgreturnc |di}t|dtrrtdt |di}t |vr|t |t<t|vr|t|t<t gtftttftttfttttfftt t"ff}|D]Q\}}}||vr|||<t|||s+t%d|d|dt'||R|S)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. 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 isinstancelistLOGwarningKEYNAME_CONFIGSKEYNAME_LEGACY_FILENAMEKEYNAME_FILENAMEKEYNAME_LEGACY_DIR KEYNAME_DIRDEF_DIRstr DEF_FILENAMEKEYNAME_RELOADr&KEYNAME_REMOTESrdict ValueErrortype)r/mycfgfillupkeydefaultvtypess r, load_configrIesw GGIr " "E#'')$$d++ 9  N   !#'')"4"45 "c ) )&)*A&BE" #  $ $!$%7!8E+  "d# gs# <- c4[1 +t, F!'Wf e   E#JJE#J// 444644!%eCj!1!144   Lr.cg}t|D]3\}}t|trBd|vrtd|dz>|d}|d|}n|}|}|}|std|dztj ||}d}||vrd}| | d} | d sd } tj ||| z|  #t$rtjtd |Y1wxYw|S) Ncontentz%No 'content' entry in config entry %sfilenamezEntry %s has an empty filenameabwb )omodezFailed to write to %s) enumerater3rAr5r6r2stripospathjoinappendendswithr write_file Exceptionlogexc) r def_fnamecfg_dirfilescur_posentrKrMrRendls r,apply_rsyslog_changesrcs E!'** @ @  c4 !## ;Wq[)nGwwz955HHG H>>##  KK8'A+ F F F 7<<22 5 E LL " " " @D##D))  OHgnE B B B B B @ @ @ K4h ? ? ? ? ? @ Ls&3D%EEc> t|\}}|}n#t$r|d}}YnwxYw|}d}t |dkr|}n+t |dkr|\}}ntd|zt |}|std|z|d}|dp|d}|d} |d r'| d std |z|r|s|}t||||| } | | S) NrLzline had multiple spaces: %szInvalid host specification '%s'protoaddr bracket_addrport[]z"host spec had invalid brackets: %srmatchrfrgri) COMMENT_REsplitrTrBlen HOST_PORT_RErmgroup startswithrYSyslogRemotesLinevalidate) linerdatacommenttoksrm host_portrfrgrits r,parse_remotes_liner|s%"((.. g--// %%%tg% ::<<    D E 4yyA~~ Tayy7$>???   i ( (D H:YFGGG JJw  E ::f   ;N!;!;D ::f  D sFDMM#$6$6F=DEEEt e$T   AJJLLL Hs14AAc*eZdZ ddZdZdZdZdS)rtNc|sd}||_||_|sd}|dkrd}n|dkrd}||_||_|rt ||_dSd|_dS)Nz*.*udp@@@tcp)rrmrfrgintri)selfrrmrfrgris r,__init__zSyslogRemotesLine.__init__s| E   E C<<EE d]]E   D DIIIDIIIr.c|jr@ t|jn*#t$r}td|jz|d}~wwxYw|jstddS)Nzport '%s' is not an integerzaddress is required)rirrBrg)res r,ruzSyslogRemotesLine.validates 9  DI    1DI=  y 4233 3 4 4s AAAc Xd|jd|jd|jd|jd|jd S)Nz[name=z match=z proto=z address=z port=rkrl)rs r,__repr__zSyslogRemotesLine.__repr__s; III JJJ JJJ III III   r.c|jdz}|jdkr|dz }n|jdkr|dz }d|jvr|d|jzdzz }n ||jz }|jr |d |jzz }|jr |d |jzz }|S) N rrrr:rjrkz:%sz # %s)rmrfrgrir)rbufs r,__str__zSyslogRemotesLine.__str__sj3 :   3JCC Z5 4KC $)   3?S( (CC 49 C 9 % 549$ $C 9 ' 7TY& &C r.)NNNNN)__name__ __module__ __qualname__rrurrr.r,rtrtsXAE* 4 4 4   r.rtc |sdSg}||||D]n\}}|s |tt||;#t$r'}t d|||Yd}~gd}~wwxYw|||d|dzS)N)rz!failed loading remote %s: %s [%s]rQ)rXitemsr=r|rBr5r6rW)r"headerfooterlinesrrvrs r,remotes_to_rsyslog_cfgrs t E  VmmooLL d   L LL/4@@@AA B B B B L L L KK;T4 K K K K K K K K L  V 99U  d ""s1A-- B7BBrcloudrargscd|vr|d|dSt|}|t}|tr0|t |tdd|ds|ddSt |t|t|t}|s|d dS t|j |t }n4#tj $r"} d }|d | Yd} ~ nd} ~ wwxYw|r-||d ||dSdS)Nrz;Skipping module named %s, no 'rsyslog' key in configurationz# begin remotesz # end remotes)rrrz.Empty config rsyslog['configs'], nothing to do)rr]r^z0restart of syslog not necessary, no changes made)r*FzFailed to reload syslogz%s configured %s files)debugrIr7r@rXrrcr9r;r-r)r?rProcessExecutionErrorr6 cycle_logging) rr/rrrrDrchanges restartedrs r,handler,s I4       EO$G _  "o&(&         BCCC#o&()k"G  DEEE2!%,n8MNNN  %222  -q111111112;  *D'::::: ;;s"!DD5D00D5)N)NN)4__doc__rUreloggingrtextwrapr cloudinitrrrcloudinit.cloudrcloudinit.configr cloudinit.config.schemar r cloudinit.distrosr cloudinit.settingsr MODULE_DESCRIPTIONr__annotations__r>r<r&rrAr7r9r;r?r8r:r@ getLoggerrr5compilernrqr-rIrcr|rtrr=r4rrr.r,rs433 $$$$$$ !!!!!!######<<<<<<<<))))))++++++   3%}       8!*{G$$j$$$L ,t  %    T$ ),"g!! RZ ( ( rz #-,,,,$T$d$$$$N&&&R# # # # L<<<<<<<<~####$/; /;/;#(/;/5/;=A/; /;/;/;/;/;/;r.