Parses /etc/keepalived/keepalived.conf
Author: Raphael Pinson rap@gmai l.com hink
Keepalived | Parses /etc/keepalived/keepalived.conf |
Reference | This lens tries to keep as close as possible to `man 5 keepalived.conf` where possible. |
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/keepalived/keepalived.conf. |
Examples | The Test_Keepalived file contains various examples and tests. |
USEFUL PRIMITIVES | |
Comments and empty lines | |
indent | |
eol | |
opt_eol | |
sep_spc | |
comment | Map comments in “#comment” nodes |
comment_eol | Map comments at eol |
comment_or_eol | A comment_eol or eol |
empty | Map empty lines |
sto_email_addr | |
word | |
word_slash | |
sto_word | |
sto_num | |
sto_to_eol | |
field | |
flag | A single word |
ip_port | An IP <space> port pair |
lens_block | A generic block with a title lens. |
block | A simple block with just a block title |
named_block | A block with a block title and name |
named_block_arg_title | A title lens for named_block_arg |
named_block_arg | A block with a block title, a name and an argument |
GLOBAL CONFIGURATION | |
A simple email address entry | |
global_defs_field | Possible fields in the global_defs block |
global_defs | A global_defs block |
prefixlen | A prefix for IP addresses |
ipaddr | An IP address or range with an optional mask |
ipdev | A device for IP addresses |
static_ipaddress_field | The whole string is fed to ip addr add. |
static_routes_field | src $SRC_IP to $DST_IP dev $SRC_DEVICE |
static_routes | |
global_conf | A global configuration entry |
VRRP CONFIGURATION | |
vrrp_sync_group_field | |
vrrp_sync_group | |
vrrp_instance_field | |
vrrp_instance | |
vrrp_script_field | |
vrrp_script | |
vrrpd_conf | contains subblocks of VRRP synchronization group(s) and VRRP instance(s) |
REAL SERVER CHECKS CONFIGURATION | |
tcp_check_field | |
misc_check_field | |
smtp_host_check_field | |
smtp_check_field | |
http_url_check_field | |
http_check_field | |
real_server_field | |
LVS CONFIGURATION | |
virtual_server_field | |
virtual_server | |
virtual_server_group_field | |
virtual_server_group | |
lvs_conf | contains subblocks of Virtual server group(s) and Virtual server(s) |
lns | The keepalived lens |
filter |
This lens applies to /etc/keepalived/keepalived.conf. See filter.
The Test_Keepalived file contains various examples and tests.
let comment_or_eol = comment_eol | (del /[ \t]*[#!]?\n/ "\n")
A comment_eol or eol
let lens_block (title:lens) (sto:lens) = [ indent . title . Build.block_newlines sto comment . eol ]
A generic block with a title lens. The definition is very similar to Build.block_newlines but uses a different type of comment.
let global_defs_field = let word_re = "smtp_server"|"lvs_id"|"router_id" in let num_re = "smtp_connect_timeout" in block "notification_email" email | field "notification_email_from" sto_email_addr | field word_re sto_word | field num_re sto_num
Possible fields in the global_defs block
let static_ipaddress_field = [ indent . ipaddr . (sep_spc . ipdev)? . comment_or_eol ]
The whole string is fed to ip addr add. You can truncate the string anywhere you like and let ip addr add use defaults for the rest of the string. To be refined with fields according to `ip addr help`.
let vrrp_instance_field = let word_re = "state" | "interface" | "lvs_sync_daemon_interface" in let num_re = "virtual_router_id" | "priority" | "advert_int" | "garp_master_delay" in let to_eol_re = /notify_(master|backup|fault)/ in let flag_re = "smtp_alert" | "nopreempt" | "ha_suspend" | "debug" in field word_re sto_word | field num_re sto_num | field to_eol_re sto_to_eol | flag flag_re | block "authentication" ( field /auth_(type|pass)/ sto_word ) | block "virtual_ipaddress" static_ipaddress_field | block /track_(interface|script)/ ( flag word )
let real_server_field = let num_re = "weight" in let flag_re = "inhibit_on_failure" in let to_eol_re = /notify_(up|down)/ in field num_re sto_num | flag flag_re | field to_eol_re sto_to_eol | block "TCP_CHECK" tcp_check_field | block "MISC_CHECK" misc_check_field | block "SMTP_CHECK" smtp_check_field | block /(HTTP|SSL)_GET/ http_check_field
let virtual_server_field = let num_re = "delay_loop" | "persistence_timeout" | "quorum" | "hysteresis" in let word_re = /lb_(algo|kind)/ | "nat_mask" | "protocol" | "persistence_granularity" | "virtualhost" in let flag_re = "ops" | "ha_suspend" | "alpha" | "omega" in let to_eol_re = /quorum_(up|down)/ in let ip_port_re = "sorry_server" in field num_re sto_num | field word_re sto_word | flag flag_re | field to_eol_re sto_to_eol | field ip_port_re ip_port | named_block_arg "real_server" "ip" "port" real_server_field
let indent = Util.indent
let eol = Util.eol
let opt_eol = del /[ \t]*\n?/ " "
let sep_spc = Sep.space
Map comments in “#comment” nodes
let comment = Util.comment_generic /[ \t]*[#!][ \t]*/ "# "
Map comments at eol
let comment_eol = Util.comment_generic /[ \t]*[#!][ \t]*/ " # "
A comment_eol or eol
let comment_or_eol = comment_eol | (del /[ \t]*[#!]?\n/ "\n")
Map empty lines
let empty = Util.empty
let sto_email_addr = store Rx.email_addr
let word = Rx.word
let word_slash = word | "/"
let sto_word = store word
let sto_num = store Rx.relinteger
let sto_to_eol = store /[^#! \t\n][^#!\n]*[^#! \t\n]|[^#! \t\n]/
let field (kw:regexp) (sto:lens) = indent . Build.key_value_line_comment kw sep_spc sto comment_eol
A single word
let flag (kw:regexp) = [ indent . key kw . comment_or_eol ]
An IP space port pair
let ip_port = [ label "ip" . sto_word ] . sep_spc . [ label "port" . sto_num ]
A generic block with a title lens.
let lens_block (title:lens) (sto:lens) = [ indent . title . Build.block_newlines sto comment . eol ]
A simple block with just a block title
let block (kw:regexp) (sto:lens) = lens_block (key kw) sto
A block with a block title and name
let named_block (kw:string) (sto:lens) = lens_block (key kw . sep_spc . sto_word) sto
A title lens for named_block_arg
let named_block_arg_title (kw:string) (name:string) (arg:string) = key kw . sep_spc . [ label name . sto_word ] . sep_spc . [ label arg . sto_word ]
A block with a block title, a name and an argument
let named_block_arg (kw:string) (name:string) (arg:string) (sto:lens) = lens_block (named_block_arg_title kw name arg) sto
A simple email address entry
let email = [ indent . label "email" . sto_email_addr . comment_or_eol ]
Possible fields in the global_defs block
let global_defs_field = let word_re = "smtp_server"|"lvs_id"|"router_id" in let num_re = "smtp_connect_timeout" in block "notification_email" email | field "notification_email_from" sto_email_addr | field word_re sto_word | field num_re sto_num
A global_defs block
let global_defs = block "global_defs" global_defs_field
A prefix for IP addresses
let prefixlen = [ label "prefixlen" . Util.del_str "/" . sto_num ]
An IP address or range with an optional mask
let ipaddr = label "ipaddr" . store /[0-9.-]+/ . prefixlen?
A device for IP addresses
let ipdev = [ key "dev" . sep_spc . sto_word ]
The whole string is fed to ip addr add.
let static_ipaddress_field = [ indent . ipaddr . (sep_spc . ipdev)? . comment_or_eol ]
src $SRC_IP to $DST_IP dev $SRC_DEVICE
let static_routes_field = [ indent . label "route" . [ key "src" . sto_word ] . sep_spc . [ key "to" . sto_word ] . sep_spc . [ key "dev" . sto_word ] . comment_or_eol ]
let static_routes = block "static_ipaddress" static_ipaddress_field | block "static_routes" static_routes_field
A global configuration entry
let global_conf = global_defs | static_routes
let vrrp_sync_group_field = block "group" [ indent . key word . comment_or_eol ]
let vrrp_sync_group = named_block "vrrp_sync_group" vrrp_sync_group_field
let vrrp_instance_field = let word_re = "state" | "interface" | "lvs_sync_daemon_interface" in let num_re = "virtual_router_id" | "priority" | "advert_int" | "garp_master_delay" in let to_eol_re = /notify_(master|backup|fault)/ in let flag_re = "smtp_alert" | "nopreempt" | "ha_suspend" | "debug" in field word_re sto_word | field num_re sto_num | field to_eol_re sto_to_eol | flag flag_re | block "authentication" ( field /auth_(type|pass)/ sto_word ) | block "virtual_ipaddress" static_ipaddress_field | block /track_(interface|script)/ ( flag word )
let vrrp_instance = named_block "vrrp_instance" vrrp_instance_field
let vrrp_script_field = let num_re = "interval" | "weight" in let to_eol_re = "script" in field to_eol_re sto_to_eol | field num_re sto_num
let vrrp_script = named_block "vrrp_script" vrrp_script_field
contains subblocks of VRRP synchronization group(s) and VRRP instance(s)
let vrrpd_conf = vrrp_sync_group | vrrp_instance | vrrp_script
let tcp_check_field = let word_re = "bindto" in let num_re = /connect_(timeout|port)/ in field word_re sto_word | field num_re sto_num
let misc_check_field = let flag_re = "misc_dynamic" in let num_re = "misc_timeout" in let to_eol_re = "misc_path" in field num_re sto_num | flag flag_re | field to_eol_re sto_to_eol
let smtp_host_check_field = let word_re = "connect_ip" | "bindto" in let num_re = "connect_port" in field word_re sto_word | field num_re sto_num
let smtp_check_field = let word_re = "connect_ip" | "bindto" in let num_re = "connect_timeout" | "retry" | "delay_before_retry" in let to_eol_re = "helo_name" in field word_re sto_word | field num_re sto_num | field to_eol_re sto_to_eol | block "host" smtp_host_check_field
let http_url_check_field = let word_re = "digest" in let num_re = "status_code" in let to_eol_re = "path" in field word_re sto_word | field num_re sto_num | field to_eol_re sto_to_eol
let http_check_field = let num_re = /connect_(timeout|port)/ | "nb_get_retry" | "delay_before_retry" in field num_re sto_num | block "url" http_url_check_field
let real_server_field = let num_re = "weight" in let flag_re = "inhibit_on_failure" in let to_eol_re = /notify_(up|down)/ in field num_re sto_num | flag flag_re | field to_eol_re sto_to_eol | block "TCP_CHECK" tcp_check_field | block "MISC_CHECK" misc_check_field | block "SMTP_CHECK" smtp_check_field | block /(HTTP|SSL)_GET/ http_check_field
let virtual_server_field = let num_re = "delay_loop" | "persistence_timeout" | "quorum" | "hysteresis" in let word_re = /lb_(algo|kind)/ | "nat_mask" | "protocol" | "persistence_granularity" | "virtualhost" in let flag_re = "ops" | "ha_suspend" | "alpha" | "omega" in let to_eol_re = /quorum_(up|down)/ in let ip_port_re = "sorry_server" in field num_re sto_num | field word_re sto_word | flag flag_re | field to_eol_re sto_to_eol | field ip_port_re ip_port | named_block_arg "real_server" "ip" "port" real_server_field
let virtual_server = named_block_arg "virtual_server" "ip" "port" virtual_server_field
let virtual_server_group_field = [ indent . label "vip" . [ ipaddr ] . sep_spc . [ label "port" . sto_num ] . comment_or_eol ]
let virtual_server_group = named_block "virtual_server_group" virtual_server_group_field
contains subblocks of Virtual server group(s) and Virtual server(s)
let lvs_conf = virtual_server | virtual_server_group
The keepalived lens
let lns = ( empty | comment | global_conf | vrrpd_conf | lvs_conf )*