From 8cd29c1a058fff13f7da8ba8820642e7a44b57ca Mon Sep 17 00:00:00 2001
From: Dominic Cleal <dcleal@redhat.com>
Date: Tue, 9 Sep 2014 09:12:28 +0100
Subject: [PATCH] Kdump: parse new options, permit EOL comments, refactor
Fixes RHBZ#1139298
(cherry picked from commit a8d43f617a8238107b71c498136800cb561b6246)
Conflicts:
NEWS
Test_Kdump: fix test of complete config file
(cherry picked from commit 0951590aa50c37f0ea89f71e9509a7ccff587cd2)
---
doc/naturaldocs/conf/lenses/Menu.txt | 1 +
lenses/kdump.aug | 64 +++++++++++++----------
lenses/tests/test_kdump.aug | 99 ++++++++++++++++++++++++++++--------
3 files changed, 116 insertions(+), 48 deletions(-)
diff --git a/doc/naturaldocs/conf/lenses/Menu.txt b/doc/naturaldocs/conf/lenses/Menu.txt
index 2a9af26..af0d421 100644
--- a/doc/naturaldocs/conf/lenses/Menu.txt
+++ b/doc/naturaldocs/conf/lenses/Menu.txt
@@ -208,6 +208,7 @@ Group: Tests and Examples {
File: Test_JettyRealm (tests/test_jettyrealm.aug)
File: Test_JMXAccess (tests/test_jmxaccess.aug)
File: Test_JMXPassword (tests/test_jmxpassword.aug)
+ File: Test_Kdump (tests/test_kdump.aug)
File: Test_Keepalived (tests/test_keepalived.aug)
File: Test_Ldso (tests/test_ldso.aug)
File: Test_Lightdm (tests/test_lightdm.aug)
diff --git a/lenses/kdump.aug b/lenses/kdump.aug
index b8f4055..ddf50ed 100644
--- a/lenses/kdump.aug
+++ b/lenses/kdump.aug
@@ -17,16 +17,36 @@ About: Configuration files
module Kdump =
autoload xfm
+(************************************************************************
+ * Group: USEFUL PRIMITIVES
+ *************************************************************************)
+
let empty = Util.empty
let comment = Util.comment
-let value_to_eol = store Rx.space_in
+let value_to_eol = store /[^ \t\n#][^\n#]*[^ \t\n#]|[^ \t\n#]/
+let int_to_eol = store Rx.integer
let delimiter = Util.del_ws_spc
let eol = Util.eol
-let value_to_spc = store Rx.no_spaces
+let value_to_spc = store Rx.neg1
let key_to_space = key /[A-Za-z0-9_.\$-]+/
-let eq = Util.del_str "="
+let eq = Sep.equal
+
+(************************************************************************
+ * Group: ENTRY TYPES
+ *************************************************************************)
+
+let list (kw:string) = counter kw
+ . Build.key_value_line_comment kw delimiter
+ (Build.opt_list [ seq kw . value_to_spc ] delimiter)
+ comment
+
+let mdl_key_value = [ delimiter . key_to_space . ( eq . value_to_spc)? ]
+let mdl_options = [ key_to_space . mdl_key_value+ ]
+let mod_options = [ key "options" . delimiter . mdl_options . (comment|eol) ]
-let simple_entry (kw:string) = [ key kw . delimiter . value_to_eol . eol ]
+(************************************************************************
+ * Group: ENTRIES
+ *************************************************************************)
(* Got from mount(8) *)
let fs_types = "adfs" | "affs" | "autofs" | "cifs" | "coda" | "coherent"
@@ -37,32 +57,20 @@ let fs_types = "adfs" | "affs" | "autofs" | "cifs" | "coda" | "coherent"
| "smbfs" | "sysv" | "tmpfs" | "ubifs" | "udf" | "ufs" | "umsdos"
| "usbfs" | "vfat" | "xenix" | "xfs" | "xiafs"
-let fs = [ key fs_types . delimiter . value_to_eol . eol ]
-
-let bin = [ seq "bin" . delimiter . value_to_spc ]
-let extra_bins = [ key "extra_bins" . (bin)+ . eol ]
-
-let mdl = [ seq "module" . delimiter . value_to_spc ]
-let extra_modules = [ key "extra_modules" . (mdl)+ . eol ]
+let simple_kws = "raw" | "net" | "path" | "core_collector" | "kdump_post"
+ | "kdump_pre" | "default" | "ssh" | "sshkey" | "dracut_args"
+ | "fence_kdump_args"
+let int_kws = "force_rebuild" | "override_resettable" | "debug_mem_level"
+ | "link_delay" | "disk_timeout"
-let mdl_key_value = [ delimiter . key_to_space . ( eq . value_to_spc)? ]
-let mdl_options = [ key_to_space . mdl_key_value+ ]
-let mod_options = [ key "options" . delimiter . mdl_options . eol ]
-
-
-let option = simple_entry "raw"
- | simple_entry "net"
- | simple_entry "path"
- | simple_entry "disk_timeout"
- | simple_entry "core_collector"
- | simple_entry "link_delay"
- | simple_entry "kdump_post"
- | simple_entry "kdump_pre"
- | simple_entry "default"
- | fs
- | extra_bins
- | extra_modules
+let option = Build.key_value_line_comment ( simple_kws | fs_types )
+ delimiter value_to_eol comment
+ | Build.key_value_line_comment int_kws delimiter int_to_eol comment
+ | list "extra_bins"
+ | list "extra_modules"
+ | list "blacklist"
+ | list "fence_kdump_nodes"
| mod_options
(* View: lns
diff --git a/lenses/tests/test_kdump.aug b/lenses/tests/test_kdump.aug
index 7057782..51c79a3 100644
--- a/lenses/tests/test_kdump.aug
+++ b/lenses/tests/test_kdump.aug
@@ -1,6 +1,9 @@
-(* Test for kdump lens *)
+(*
+Module: Test_Kdump
+ Provides unit tests and examples for the <Kdump> lens.
+*)
-module Test_kdump =
+module Test_Kdump =
let conf = "# this is a comment
#another commented line
@@ -8,36 +11,92 @@ module Test_kdump =
#comment after empty line
#
#comment after empty comment
-path /var/crash
+path /var/crash #comment after entry
core_collector makedumpfile -c
default poweroff
raw /dev/sda5
ext3 /dev/sda3
net my.server.com:/export/tmp
+nfs my.server.com:/export/tmp
net user@my.server.com
+ssh user@my.server.com
link_delay 60
+kdump_pre /var/crash/scripts/kdump-pre.sh
kdump_post /var/crash/scripts/kdump-post.sh
#extra_bins /usr/bin/lftp /a/b/c
-extra_bins /usr/bin/lftp /a/b/c
+extra_bins /usr/bin/lftp /a/b/c # comment
disk_timeout 30
extra_modules gfs2 extra modules more
options babla labl kbak df=dfg
options babla labl kbak df=dfg
-options babla labl kbak df=dfg
-"
-
- let conf2 = "#comment
-kdump_post /var/crash/scripts/kdump-post.sh
-extra_modules gfs2 extra modules more
+options babla labl kbak df=dfg # comment
+sshkey /root/.ssh/kdump_id_rsa
+force_rebuild 1
+override_resettable 1
+dracut_args --omit-drivers \"cfg80211 snd\" --add-drivers \"ext2 ext3\"
+fence_kdump_args -p 7410 -f auto
+fence_kdump_nodes 192.168.1.10 10.34.63.155
+debug_mem_level 3
+blacklist gfs2
"
-(* test Kdump.lns get conf = ?*)
- test Kdump.lns get conf2 =
- { "#comment" = "comment" }
- { "kdump_post" = "/var/crash/scripts/kdump-post.sh" }
- { "extra_modules"
- { "1" = "gfs2" }
- { "2" = "extra" }
- { "3" = "modules" }
- { "4" = "more" }
- }
+ (* Test: Kdump.lns
+ Check whole config file *)
+ test Kdump.lns get conf =
+ { "#comment" = "this is a comment" }
+ { "#comment" = "another commented line" }
+ { }
+ { "#comment" = "comment after empty line" }
+ { }
+ { "#comment" = "comment after empty comment" }
+ { "path" = "/var/crash"
+ { "#comment" = "comment after entry" } }
+ { "core_collector" = "makedumpfile -c" }
+ { "default" = "poweroff" }
+ { "raw" = "/dev/sda5" }
+ { "ext3" = "/dev/sda3" }
+ { "net" = "my.server.com:/export/tmp" }
+ { "nfs" = "my.server.com:/export/tmp" }
+ { "net" = "user@my.server.com" }
+ { "ssh" = "user@my.server.com" }
+ { "link_delay" = "60" }
+ { "kdump_pre" = "/var/crash/scripts/kdump-pre.sh" }
+ { "kdump_post" = "/var/crash/scripts/kdump-post.sh" }
+ { "#comment" = "extra_bins /usr/bin/lftp /a/b/c" }
+ { "extra_bins"
+ { "1" = "/usr/bin/lftp" }
+ { "2" = "/a/b/c" }
+ { "#comment" = "comment" } }
+ { "disk_timeout" = "30" }
+ { "extra_modules"
+ { "1" = "gfs2" }
+ { "2" = "extra" }
+ { "3" = "modules" }
+ { "4" = "more" } }
+ { "options"
+ { "babla"
+ { "labl" }
+ { "kbak" }
+ { "df" = "dfg" } } }
+ { "options"
+ { "babla"
+ { "labl" }
+ { "kbak" }
+ { "df" = "dfg" } } }
+ { "options"
+ { "babla"
+ { "labl" }
+ { "kbak" }
+ { "df" = "dfg" } }
+ { "#comment" = "comment" } }
+ { "sshkey" = "/root/.ssh/kdump_id_rsa" }
+ { "force_rebuild" = "1" }
+ { "override_resettable" = "1" }
+ { "dracut_args" = "--omit-drivers \"cfg80211 snd\" --add-drivers \"ext2 ext3\"" }
+ { "fence_kdump_args" = "-p 7410 -f auto" }
+ { "fence_kdump_nodes"
+ { "1" = "192.168.1.10" }
+ { "2" = "10.34.63.155" } }
+ { "debug_mem_level" = "3" }
+ { "blacklist"
+ { "1" = "gfs2" } }