Hi

This adds an augeas lens to corosync (so you can configure corosync.conf
via augtool and python-augeas).

Here is my post to the augeas ML.
https://www.redhat.com/archives/augeas-devel/2010-February/msg00041.html

I have included rules to install the lens as the augeas maintainer suggests
(Steve I am not sure if that is what you want).
Note on my system I have the following
ls /usr/share/augeas/lenses/
corosync.aug  dist  libvirtd.aug  libvirtd_qemu.aug  tests


The test suite I will post soon needs this to configure corosync.

-Angus

Signed-off-by: Angus Salkeld <[email protected]>
---
 Makefile.am                         |    7 ++
 conf/lenses/corosync.aug            |  120 +++++++++++++++++++++++++++++++++++
 conf/lenses/tests/test_corosync.aug |   87 +++++++++++++++++++++++++
 3 files changed, 214 insertions(+), 0 deletions(-)
 create mode 100644 conf/lenses/corosync.aug
 create mode 100644 conf/lenses/tests/test_corosync.aug

diff --git a/Makefile.am b/Makefile.am
index 5cb90b8..076852f 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -48,6 +48,13 @@ corosysconfdir               = ${COROSYSCONFDIR}
 
 corosysconf_DATA       = conf/corosync.conf.example
 
+corolensdir            = ${datadir}/augeas/lenses
+corolens_DATA          = conf/lenses/corosync.aug
+
+corolenstestdir                = ${corolensdir}/tests
+corolenstest_DATA      = conf/lenses/tests/test_corosync.aug
+
+
 SUBDIRS                        = include lcr lib exec services tools test 
pkgconfig \
                          man init
 
diff --git a/conf/lenses/corosync.aug b/conf/lenses/corosync.aug
new file mode 100644
index 0000000..a7ff421
--- /dev/null
+++ b/conf/lenses/corosync.aug
@@ -0,0 +1,120 @@
+(* Process /etc/corosync/corosync.conf                             *)
+(* The lens is based on the corosync.conf(5) man page     *)
+module Corosync =
+
+autoload xfm
+
+let comment = Util.comment
+let empty = Util.empty
+let dels = Util.del_str
+let eol = Util.eol
+
+let ws = del /[ \t]+/ " "
+let wsc = del /:[ \t]+/ ": "
+let indent = del /[ \t]*/ ""
+(* We require that braces are always followed by a newline *)
+let obr = del /\{([ \t]*)\n/ "{\n"
+let cbr = del /[ \t]*}[ \t]*\n/ "}\n"
+
+let ikey (k:regexp) = indent . key k
+
+let section (n:regexp) (b:lens) =
+  [ ikey n . ws . obr . (b|empty|comment)* . cbr ]
+
+let kv (k:regexp) (v:regexp) =
+  [ ikey k .  wsc . store v . eol ]
+
+(* FIXME: it would be much more concise to write                       *)
+(* [ key k . ws . (bare | quoted) ]                                    *)
+(* but the typechecker trips over that                                 *)
+let qstr (k:regexp) =
+  let delq = del /['"]/ "\"" in
+  let bare = del /["']?/ "" . store /[^"' \t\n]+/ . del /["']?/ "" in
+  let quoted = delq . store /.*[ \t].*/ . delq in
+  [ ikey k . wsc . bare . eol ]
+ |[ ikey k . wsc . quoted . eol ]
+
+(* The compatibility option *)
+let compatibility = kv "compatibility" /whitetank|none/
+
+
+(* A integer subsection *)
+let interface =
+  let setting =
+    kv "ringnumber" Rx.integer
+    |kv "mcastport" Rx.integer
+    |qstr /bindnetaddr|mcastaddr/ in
+  section "interface" setting
+
+(* The totem section *)
+let totem =
+  let setting =
+    kv "clear_node_high_bit" /yes|no/
+    |kv "rrp_mode" /none|active|passive/
+    |kv "vsftype" /none|ykd/
+    |kv "secauth" /on|off/
+    |kv "transport" /udp|iba/
+    |kv "version" Rx.integer
+    |kv "nodeid" Rx.integer
+    |kv "threads" Rx.integer
+    |kv "netmtu" Rx.integer
+    |kv "token" Rx.integer
+    |kv "token_retransmit" Rx.integer
+    |kv "hold" Rx.integer
+    |kv "token_retransmits_before_loss_const" Rx.integer
+    |kv "join" Rx.integer
+    |kv "send_join" Rx.integer
+    |kv "consensus" Rx.integer
+    |kv "merge" Rx.integer
+    |kv "downcheck" Rx.integer
+    |kv "fail_to_recv_const" Rx.integer
+    |kv "seqno_unchanged_const" Rx.integer
+    |kv "heartbeat_failures_allowed" Rx.integer
+    |kv "max_network_delay" Rx.integer
+    |kv "max_messages" Rx.integer
+    |kv "window_size" Rx.integer
+    |kv "rrp_problem_count_timeout" Rx.integer
+    |kv "rrp_problem_count_threshold" Rx.integer
+    |kv "rrp_token_expired_timeout" Rx.integer
+    |interface in
+  section "totem" setting
+
+let common_logging =
+   kv "to_syslog" /yes|no|on|off/
+   |kv "to_stderr" /yes|no|on|off/
+   |kv "to_logfile" /yes|no|on|off/
+   |kv "debug" /yes|no|on|off/
+   |kv "logfile_priority" /alert|crit|debug|emerg|err|info|notice|warning/
+   |kv "syslog_priority" /alert|crit|debug|emerg|err|info|notice|warning/
+   |kv "syslog_facility" 
/daemon|local0|local1|local2|local3|local4|local5|local6|local7/
+   |qstr /logfile|tags/
+
+(* A logger_subsys subsection *)
+let logger_subsys =
+  let setting =
+    qstr /subsys/
+   |common_logging in
+  section "logger_subsys" setting
+
+
+(* The logging section *)
+let logging =
+  let setting =
+   kv "fileline" /yes|no|on|off/
+   |kv "function_name" /yes|no|on|off/
+   |kv "timestamp" /yes|no|on|off/
+   |common_logging
+   |logger_subsys in
+  section "logging" setting
+
+
+(* The amf section *)
+let amf =
+  let setting =
+   kv "mode" /enabled|disabled/ in
+  section "amf" setting
+
+
+let lns = (comment|empty|compatibility|totem|logging|amf)*
+
+let xfm = transform lns (incl "/etc/corosync/corosync.conf")
diff --git a/conf/lenses/tests/test_corosync.aug 
b/conf/lenses/tests/test_corosync.aug
new file mode 100644
index 0000000..0bf3277
--- /dev/null
+++ b/conf/lenses/tests/test_corosync.aug
@@ -0,0 +1,87 @@
+module Test_corosync =
+
+  let conf = "# Please read the corosync.conf.5 manual page
+compatibility: whitetank
+
+totem {
+       version: 2
+       secauth: off
+       threads: 0
+    clear_node_high_bit: no
+    rrp_mode: none
+    transport: udp
+    token: 1000
+       interface {
+               ringnumber: 0
+               bindnetaddr: 192.168.122.1
+               mcastaddr: 226.94.1.1
+               mcastport: 5405
+       }
+}
+
+logging {
+       fileline: off
+    function_name: on
+       to_stderr: yes
+       to_logfile: yes
+       to_syslog: yes
+       logfile: /tmp/corosync.log
+       debug: off
+       timestamp: on
+       logger_subsys {
+           to_syslog: no
+               subsys: CPG
+               debug: on
+       }
+       logger_subsys {
+           to_stderr: no
+           logfile: /tmp/corosync-msg.log
+               subsys: MSG
+               debug: on
+       }
+}
+
+amf {
+       mode: disabled
+}\n"
+
+test Corosync.lns get conf =
+
+  { "#comment" = "Please read the corosync.conf.5 manual page" }
+  { "compatibility" = "whitetank" }
+  { }
+  { "totem"
+       { "version" = "2" }
+       { "secauth" = "off" }
+       { "threads" = "0" }
+    { "clear_node_high_bit" = "no" }
+    { "rrp_mode" = "none" }
+    { "transport" = "udp" }
+    { "token" = "1000" }
+       { "interface"
+               { "ringnumber" = "0" }
+               { "bindnetaddr" = "192.168.122.1" }
+               { "mcastaddr" = "226.94.1.1" }
+               { "mcastport" = "5405" } } }
+  { }
+  { "logging"
+       { "fileline" = "off" }
+       { "function_name" = "on" }
+       { "to_stderr" = "yes" }
+       { "to_logfile" = "yes" }
+       { "to_syslog" = "yes" }
+       { "logfile" = "/tmp/corosync.log" }
+       { "debug" = "off" }
+       { "timestamp" = "on" }
+       { "logger_subsys"
+           { "to_syslog" = "no" }
+               { "subsys" = "CPG" }
+               { "debug" = "on" } }
+       { "logger_subsys"
+           { "to_stderr" = "no" }
+           { "logfile" = "/tmp/corosync-msg.log" }
+               { "subsys" = "MSG" }
+               { "debug" = "on" } } }
+  { }
+  { "amf"
+       { "mode" = "disabled" } }
-- 
1.6.6


_______________________________________________
Openais mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/openais

Reply via email to