Parses the chrony config file
Author: Pat Riehecky rieh@fnal .gov ecky
Chrony | Parses the chrony config file |
Reference | This lens tries to keep as close as possible to chrony config syntax |
License | This file is licenced under the LGPL v2+, like the rest of Augeas. |
Lens Usage | To be documented |
Configuration files | This lens applies to /etc/chrony.conf |
Import provided expressions | |
empty | |
eol | |
space | |
email_addr | |
word | |
integer | |
decimal | |
ip | |
path | |
Create required expressions | |
number | |
address_re | |
comment | from 4.2.1 of the upstream doc Chrony comments start with: ! |
no_space | No spaces or comment characters |
cmd_options | Server/Peer/Pool options with values |
cmd_flags | Server/Peer/Pool options without values |
ntp_source | Server/Peer/Pool key names |
allowdeny_types | Key names for access configuration |
hwtimestamp_options | HW timestamping options with values |
hwtimestamp_flags | HW timestamping options without values |
local_options | local options with values |
local_flags | local options without values |
ratelimit_options | Rate limiting options with values |
refclock_options | refclock options with values |
refclock_flags | refclock options without values |
flags | Options without values |
log_flags | log has a specific options list |
simple_keys | Options with single values |
Make some sub-lenses for use in later lenses | |
host_flags | |
host_options | |
log_flag_list | |
store_address | |
Lenses for parsing out sections | |
all_flags | options without any arguments |
kv | options with only one arg can be directly mapped to key = value |
Options with multiple values | Each of these gets their own parsing block |
host_list | Find all NTP sources and their flags/options |
allowdeny | allow/deny/cmdallow/cmddeny has a specific syntax |
log_list | log has a specific options list |
bcast | broadcast has specific syntax |
fdrift | fallbackdrift has specific syntax |
hwtimestamp | hwtimestamp has specific syntax |
istepslew | initstepslew has specific syntax |
local | local has specific syntax |
mailonchange has specific syntax | |
makestep | makestep has specific syntax |
maxchange | maxchange has specific syntax |
ratelimit | ratelimit/cmdratelimit has specific syntax |
refclock | refclock has specific syntax |
smoothtime | smoothtime has specific syntax |
tempcomp | tempcomp has specific syntax |
Final lense summary | |
settings | All supported chrony settings |
lns | The crony lens |
filter | The files parsed by default |
This lens tries to keep as close as possible to chrony config syntax
See http://chrony.tuxfamily.org
This lens applies to /etc/chrony.conf
See filter.
let simple_keys = "acquisitionport" | "bindacqaddress" | "bindaddress" | "bindcmdaddress" | "clientloglimit" | "combinelimit" | "commandkey" | "cmdport" | "corrtimeratio" | "driftfile" | "dumpdir" | "hwclockfile" | "include" | "keyfile" | "leapsecmode" | "leapsectz" | "linux_freq_scale" | "linux_hz" | "logbanner" | "logchange" | "logdir" | "maxclockerror" | "maxdistance" | "maxdrift" | "maxjitter" | "maxsamples" | "maxslewrate" | "maxupdateskew" | "minsamples" | "minsources" | "ntpsigndsocket" | "pidfile" | "port" | "reselectdist" | "rtcautotrim" | "rtcdevice" | "rtcfile" | "sched_priority" | "stratumweight" | "user"
Options with single values
Each of these gets their own parsing block
let tempcomp = [ Util.indent . key "tempcomp" . space . [ label "sensorfile" . store path ] . space . [ label "interval" . store number ] . space . ( [ label "t0" . store number ] . space . [ label "k0" . store number ] . space . [ label "k1" . store number ] . space . [ label "k2" . store number ] | [ label "pointfile" . store path ] ) . eol ]
tempcomp has specific syntax
let empty = Util.empty
let eol = Util.eol
let space = Sep.space
let email_addr = Rx.email_addr
let word = Rx.word
let integer = Rx.relinteger
let decimal = Rx.reldecimal
let ip = Rx.ip
let path = Rx.fspath
let number = integer | decimal | decimal . /[eE]/ . integer
let address_re = Rx.ip | Rx.hostname
from 4.2.1 of the upstream doc Chrony comments start with: !
let comment = Util.comment_generic /[ \t]*[!;#%][ \t]*/ "# "
No spaces or comment characters
let no_space = /[^ \t\r\n!;#%]+/
Server/Peer/Pool options with values
let cmd_options = "asymmetry" | "key" | /maxdelay((dev)?ratio)?/ | /(min|max)poll/ | /(min|max)samples/ | "maxsources" | "mindelay" | "offset" | "polltarget" | "port" | "presend" | "version"
Server/Peer/Pool options without values
let cmd_flags = "auto_offline"|"iburst"|"noselect"|"offline"|"prefer" |"require"|"trust"|"xleave"|"burst"
Server/Peer/Pool key names
let ntp_source = "server"|"peer"|"pool"
Key names for access configuration
let allowdeny_types = "allow"|"deny"|"cmdallow"|"cmddeny"
HW timestamping options with values
let hwtimestamp_options = "minpoll"|"precision"|"rxcomp"|"txcomp" |"rxfilter"
HW timestamping options without values
let hwtimestamp_flags = "nocrossts"
local options with values
let local_options = "stratum"|"distance"
local options without values
let local_flags = "orphan"
Rate limiting options with values
let ratelimit_options = "interval"|"burst"|"leak"
refclock options with values
let refclock_options = "refid"|"lock"|"poll"|"dpoll"|"
refclock options without values
let refclock_flags = "noselect"|"pps"|"prefer"|"require"|"tai"|"trust"
Options without values
let flags = "dumponexit" | "generatecommandkey" | "lock_all" | "manual" | "noclientlog" | "rtconutc" | "rtcsync"
log has a specific options list
let log_flags = "measurements"|"rawmeasurements"|"refclocks"|"rtc" |"statistics"|"tempcomp"|"tracking"
Options with single values
let simple_keys = "acquisitionport" | "bindacqaddress" | "bindaddress" | "bindcmdaddress" | "clientloglimit" | "combinelimit" | "commandkey" | "cmdport" | "corrtimeratio" | "driftfile" | "dumpdir" | "hwclockfile" | "include" | "keyfile" | "leapsecmode" | "leapsectz" | "linux_freq_scale" | "linux_hz" | "logbanner" | "logchange" | "logdir" | "maxclockerror" | "maxdistance" | "maxdrift" | "maxjitter" | "maxsamples" | "maxslewrate" | "maxupdateskew" | "minsamples" | "minsources" | "ntpsigndsocket" | "pidfile" | "port" | "reselectdist" | "rtcautotrim" | "rtcdevice" | "rtcfile" | "sched_priority" | "stratumweight" | "user"
let host_flags = [ space . key cmd_flags ]
let host_options = [ space . key cmd_options . space . store number ]
let log_flag_list = [ space . key log_flags ]
let store_address = [ label "address" . store address_re ]
options without any arguments
let all_flags = [ Util.indent . key flags . eol ]
options with only one arg can be directly mapped to key = value
let kv = [ Util.indent . key simple_keys . space . (store no_space) . eol ]
Find all NTP sources and their flags/options
let host_list = [ Util.indent . key ntp_source . space . store address_re . ( host_flags | host_options )* . eol ]
allow/deny/cmdallow/cmddeny has a specific syntax
let allowdeny = [ Util.indent . key allowdeny_types . [ space . key "all" ]? . ( space . store ( no_space - "all" ) )? . eol ]
log has a specific options list
let log_list = [ Util.indent . key "log" . log_flag_list+ . eol ]
broadcast has specific syntax
let bcast = [ Util.indent . key "broadcast" . space . [ label "interval" . store integer ] . space . store_address . ( space . [ label "port" . store integer ] )? . eol ]
fallbackdrift has specific syntax
let fdrift = [ Util.indent . key "fallbackdrift" . space . [ label "min" . store integer ] . space . [ label "max" . store integer ] . eol ]
hwtimestamp has specific syntax
let hwtimestamp = [ Util.indent . key "hwtimestamp" . space . [ label "interface" . store no_space ] . ( space . ( [ key hwtimestamp_flags ] | [ key hwtimestamp_options . space . store no_space ] ) )* . eol ]
initstepslew has specific syntax
let istepslew = [ Util.indent . key "initstepslew" . space . [ label "threshold" . store number ] . ( space . store_address )+ . eol ]
local has specific syntax
let local = [ Util.indent . key "local" . ( space . ( [ key local_flags ] | [ key local_options . space . store no_space ] ) )* . eol ]
mailonchange has specific syntax
let email = [ Util.indent . key "mailonchange" . space . [ label "emailaddress" . store email_addr ] . space . [ label "threshold" . store number ] . eol ]
makestep has specific syntax
let makestep = [ Util.indent . key "makestep" . space . [ label "threshold" . store number ] . space . [ label "limit" . store integer ] . eol ]
maxchange has specific syntax
let maxchange = [ Util.indent . key "maxchange" . space . [ label "threshold" . store number ] . space . [ label "delay" . store integer ] . space . [ label "limit" . store integer ] . eol ]
ratelimit/cmdratelimit has specific syntax
let ratelimit = [ Util.indent . key /(cmd)?ratelimit/ . [ space . key ratelimit_options . space . store no_space ]* . eol ]
refclock has specific syntax
let refclock = [ Util.indent . key "refclock" . space . [ label "driver" . store word ] . space . [ label "parameter" . store no_space ] . ( space . ( [ key refclock_flags ] | [ key refclock_options . space . store no_space ] ) )* . eol ]
smoothtime has specific syntax
let smoothtime = [ Util.indent . key "smoothtime" . space . [ label "maxfreq" . store number ] . space . [ label "maxwander" . store number ] . ( space . [ key "leaponly" ] )? . eol ]
tempcomp has specific syntax
let tempcomp = [ Util.indent . key "tempcomp" . space . [ label "sensorfile" . store path ] . space . [ label "interval" . store number ] . space . ( [ label "t0" . store number ] . space . [ label "k0" . store number ] . space . [ label "k1" . store number ] . space . [ label "k2" . store number ] | [ label "pointfile" . store path ] ) . eol ]
All supported chrony settings
let settings = host_list | allowdeny | log_list | bcast | fdrift | istepslew | local | email | makestep | maxchange | refclock | smoothtime | hwtimestamp | ratelimit | tempcomp | kv | all_flags
The crony lens
let lns = ( empty | comment | settings )*