[augeas-devel] [PATCH] Add a cobbler settings lens

bkearney at redhat.com bkearney at redhat.com
Mon Jan 4 18:49:40 UTC 2010


From: Bryan Kearney <bkearney at localhost.localdomain>

---
 lenses/cobblersettings.aug            |   73 +++++++++++++++++++++++++++++++++
 lenses/tests/test_cobblersettings.aug |   47 +++++++++++++++++++++
 2 files changed, 120 insertions(+), 0 deletions(-)
 create mode 100644 lenses/cobblersettings.aug
 create mode 100644 lenses/tests/test_cobblersettings.aug

diff --git a/lenses/cobblersettings.aug b/lenses/cobblersettings.aug
new file mode 100644
index 0000000..89e0127
--- /dev/null
+++ b/lenses/cobblersettings.aug
@@ -0,0 +1,73 @@
+(*
+    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..f9df744
--- /dev/null
+++ b/lenses/tests/test_cobblersettings.aug
@@ -0,0 +1,47 @@
+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:             *)
-- 
1.6.5.2




More information about the augeas-devel mailing list