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 |
Limitations | Does not (currently) support |
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 | |
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 options with values |
cmd_flags | Server/Peer options without values |
server_peer | Server/Peer key names |
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 | match all flags using Build.flag_line |
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 servers/peers and their flags/options |
log_list | log has a specific options list |
bcast | broadcast has specific syntax |
fdrift | fallbackdrift 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 |
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" | "allow" | "bindaddress" | "bindcmdaddress" | "cmdallow" | "cmddeny" | "combinelimit" | "commandkey" | "cmdport" | "corrtimeratio" | "deny" | "driftfile" | "dumpdir" | "keyfile" | "leapsectz" | "linux_hz" | "linux_freq_scale" | "logbanner" | "logchange" | "logdir" | "maxclockerror" | "maxsamples" | "maxupdateskew" | "minsamples" | "clientloglimit" | "pidfile" | "port" | "reselectdist" | "rtcdevice" | "rtcfile" | "sched_priority" | "stratumweight" | "user"
Options with single values
Each of these gets their own parsing block
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.integer
let decimal = Rx.decimal
let ip = Rx.ip
let number = integer | decimal
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 options with values
let cmd_options = "key" | /maxdelay((dev)?ratio)?/ | /(min|max)poll/ | "polltarget" | "port" | "presend"
Server/Peer options without values
let cmd_flags = "auto_offline"|"iburst"|"noselect"|"offline"|"prefer"
Server/Peer key names
let server_peer = "server"|"peer"
Options without values
let flags = "dumponexit" | "generatecommandkey" | "lock_all" | "noclientlog" | "rtconutc" | "rtcsync"
log has a specific options list
let log_flags = /measurements|statistics|tracking|rtc|refclocks|tempcomp/
Options with single values
let simple_keys = "acquisitionport" | "allow" | "bindaddress" | "bindcmdaddress" | "cmdallow" | "cmddeny" | "combinelimit" | "commandkey" | "cmdport" | "corrtimeratio" | "deny" | "driftfile" | "dumpdir" | "keyfile" | "leapsectz" | "linux_hz" | "linux_freq_scale" | "logbanner" | "logchange" | "logdir" | "maxclockerror" | "maxsamples" | "maxupdateskew" | "minsamples" | "clientloglimit" | "pidfile" | "port" | "reselectdist" | "rtcdevice" | "rtcfile" | "sched_priority" | "stratumweight" | "user"
let host_flags = [ space . key cmd_flags ]
let host_options = [ space . key cmd_options . space . store integer ]
let log_flag_list = [ space . key log_flags ]
let store_address = [ label "address" . store address_re ]
match all flags using Build.flag_line
let all_flags = Build.flag_line flags
options with only one arg can be directly mapped to key = value
let kv = Build.key_value_line_comment simple_keys space (store no_space) comment
Find all ntp servers/peers and their flags/options
let host_list = [ Util.indent . key server_peer . space . store address_re . ( host_flags | host_options )* . 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 ]
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 "stratum" . space . store integer ] . 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 ]
All supported chrony settings
let settings = host_list | log_list | bcast | fdrift | istepslew | local | email | makestep | maxchange | kv | all_flags
The crony lens
let lns = ( empty | comment | settings )*