[augeas-devel] augeas: master - Cobblersettings: new lens and test

David Lutterkort lutter at fedoraproject.org
Mon Jan 4 22:57:29 UTC 2010


Gitweb:        http://git.fedorahosted.org/git/augeas.git?p=augeas.git;a=commitdiff;h=3674bf7334b965cccd6e255ad4de4572b093b785
Commit:        3674bf7334b965cccd6e255ad4de4572b093b785
Parent:        23aa2ded7d2e1deffe380c49e2284d8f40ca7285
Author:        Bryan Kearney <bkearney at localhost.localdomain>
AuthorDate:    Mon Jan 4 13:49:40 2010 -0500
Committer:     David Lutterkort <lutter at redhat.com>
CommitterDate: Mon Jan 4 14:54:12 2010 -0800

Cobblersettings: new lens and test

---
 lenses/cobblersettings.aug            |   72 +++++++++++++++++++++++++++++++++
 lenses/tests/test_cobblersettings.aug |   46 +++++++++++++++++++++
 tests/Makefile.am                     |    1 +
 3 files changed, 119 insertions(+), 0 deletions(-)

diff --git a/lenses/cobblersettings.aug b/lenses/cobblersettings.aug
new file mode 100644
index 0000000..66edbca
--- /dev/null
+++ b/lenses/cobblersettings.aug
@@ -0,0 +1,72 @@
+(*
+    Parse the /etc/cobbler/settings file  which is in
+    YAML 1.0 format.
+
+    The lens can handle the following contructs
+    * key: value
+    * key: "value"
+    * key: 'value'
+    * key: [value1, value2]
+    * key:
+       - value1
+       - value2
+    * key:
+       key2: value1
+       key3: value2
+
+    Author: Bryan Kearney
+
+    About: License
+      This file is licensed under the LGPLv2+, like the rest of Augeas.
+*)
+module CobblerSettings =
+    autoload xfm
+
+    let kw = /[a-zA-Z0-9_]+/
+    (* TODO Would be better if this stripped off the "" and '' chracters *)
+    let kv = /([^]['", \t\n#:@-]+|"[^"\n]*"|'[^'\n]*')/
+
+    let lbr = del /\[/ "["
+    let rbr = del /\]/ "]"
+    let colon = del /[ \t]*:[ \t]*/ ": "
+    let dash = del /-[ \t]*/ "- "
+    (* let comma = del /,[ \t]*(\n[ \t]+)?/ ", " *)
+    let comma = del /[ \t]*,[ \t]*/ ", "
+
+    let eol_only = del /\n/ "\n"
+
+    (* TODO Would be better to make items a child of a document *)
+    let docmarker = /-{3}/
+
+    let eol   = Util.eol
+    let comment = Util.comment
+    let empty   = Util.empty
+    let indent = del /[ \t]+/ "\t"
+    let ws = del /[ \t]*/ " "
+
+    let value_list = Build.opt_list [label "item" . store kv] comma
+    let setting = [key kw . colon . store kv] . eol
+    let simple_setting_suffix = store kv . eol
+    let setting_list_suffix =  [label "sequence" . lbr . ws . (value_list . ws)? . rbr ] . eol
+    let indendented_setting_list_suffix =  eol_only . (indent . setting)+
+    let indented_list_suffix =  [label "list" . eol_only . ([ label "value" . indent . dash  . store kv] . eol)+]
+
+    (* Break out setting because of a current bug in augeas *)
+    let nested_setting = [key kw . colon . (
+                                            (* simple_setting_suffix | *)
+                                            setting_list_suffix |
+                                            indendented_setting_list_suffix |
+                                            indented_list_suffix
+                                            )
+                        ]
+
+    let document = [label "---" . store docmarker] . eol
+
+    let lns = (document | comment | empty | setting | nested_setting )*
+
+    let xfm = transform lns (incl "/etc/cobbler/settings")
+
+
+(* Local Variables: *)
+(* mode: caml *)
+(* End: *)
diff --git a/lenses/tests/test_cobblersettings.aug b/lenses/tests/test_cobblersettings.aug
new file mode 100644
index 0000000..9646741
--- /dev/null
+++ b/lenses/tests/test_cobblersettings.aug
@@ -0,0 +1,46 @@
+module Test_cobblersettings =
+
+test Cobblersettings.lns get "Simple_Setting: Value \n" =
+  { "Simple_Setting" = "Value" }
+
+test Cobblersettings.lns get "Simple_Setting2: 'Value2 at acme.com' \n" =
+  { "Simple_Setting2" = "'Value2 at acme.com'" }
+
+test Cobblersettings.lns get "Simple_Setting3: ''\n" =
+  { "Simple_Setting3" = "''" }
+
+test Cobblersettings.lns get "Simple_Setting4: \"\"\n" =
+  { "Simple_Setting4" = "\"\"" }
+
+test Cobblersettings.lns get "Simple_Setting_Trailing_Space : Value \n" =
+  { "Simple_Setting_Trailing_Space" = "Value" }
+
+test Cobblersettings.lns get "Setting_List:[Value1, Value2, Value3]\n" =
+  { "Setting_List"
+      { "sequence"
+          { "item" = "Value1" }
+          { "item" = "Value2" }
+          { "item" = "Value3" } } }
+
+test Cobblersettings.lns get "Empty_Setting_List: []\n" =
+  { "Empty_Setting_List"
+      { "sequence" } }
+
+test Cobblersettings.lns get "# Commented_Out_Setting: 'some value'\n" =
+  { "#comment" = "Commented_Out_Setting: 'some value'" }
+
+test Cobblersettings.lns get "---\n" =
+  { "---" = "---"}
+
+test Cobblersettings.lns get "Nested_Setting:\n Test: Value\n" =
+  { "Nested_Setting"
+      { "Test" = "Value" } }
+
+test Cobblersettings.lns get "Nested_Setting:\n - Test \n" =
+  { "Nested_Setting"
+      { "list"
+          { "value" = "Test" } } }
+
+(* Local Variables: *)
+(* mode: caml       *)
+(* End:             *)
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 567461e..91bf4af 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -15,6 +15,7 @@ lens_tests =			\
   lens-aptpreferences.sh	\
   lens-aptsource.sh		\
   lens-bbhosts.sh		\
+  lens-cobblersettings.sh	\
   lens-cron.sh			\
   lens-darkice.sh		\
   lens-dhclient.sh		\




More information about the augeas-devel mailing list