Parses the chrony config file
Author: Pat Riehecky riehecky@fnal.gov
| 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 )*