[augeas-devel] How can I reverse the order of the parsed keys?

Steve Shipway steve at steveshipway.org
Wed Feb 9 23:44:59 UTC 2011


> Truth be told, I never thought people would use augeas directly through
> the augeas type; I always thought augeas would be used to write puppet
> types in ruby more easily. For more complicated abstractions, that's
> what you might have to resort to - of course, there's nothing wrong
> with using the augeas type directly for the cases where it is adequate.

I'm more a Perler than Rubyer, so easier to write new classes and definitions over the top of the Augeas type in Puppet.  Still, in many cases it's not necessary to resort to Augeas for simple config files, an Exec with an 'unless' works equally well (and faster).

> > In the meantime, I've created lens files for MRTG/Routers2 config
> files.
> 
> Cool - did I miss the patches flying by ? ;)

They're still going through a bit of testing, then I was going to post them to the MRTG project, since they are tied in with Puppet modules.  Managing MRTG via Augeas is a bit painful (due to the previously mentioned key precedence issue) and Puppet modules with Exec's of cfgmaker with appropriate templates and so on work better in many cases.  

However I'm happy to pass them on to the Augeas project.

Steve

Routers2.aug
----------------
(* routers2.conf module for Augeas                    *)
module Routers2 =
  autoload xfm
let comment  = IniFile.comment "#" "#"
let sep      = IniFile.sep /[ \t]*=[ \t]*/ " = "
let value  = (  Util.del_opt_ws "" . store /[^\n]*/ )
let entry_re = ( /[a-zA-Z0-9_\.-]+/ )
let var_entry =  [ key entry_re . sep . value . IniFile.eol ]
let path_entry =  [ label "path" . [ label "path" . Util.del_opt_ws "" . store /\/[A-Za-z0-9_\.\:\/-]+/ ] . sep . [ label "value" . value . IniFile.eol ] ]
let entry    = var_entry | path_entry | comment
let title   = IniFile.title IniFile.record_re
let record  = IniFile.record title entry
let lns    = IniFile.lns record comment
let filter = incl "/u01/etc/routers2.conf" . incl "routers2.conf" . Util.stdexcl
let xfm = transform lns filter
------------------
MRTG.aug
------------------
module MRTG =
  autoload xfm
(* MRTG configuration file Augeas lens
Possible formats:
directive: value
directive[target]: value
external*directive: value
external*directive[target]: value
Options[target]: value value value ...
 continuationline
# comment
blankline
*)
let obrkt = del /\[/ "["
let cbrkt = del /\]/ "]"
let nl = del /\n/ "\n"
let sep = del /[ \t]*:[ \t]*/ ": "
(* this should be able to handle continuation lines *)
let val = store /([^ \t\n][^\n]*|)(\n[ \t]+[^\n]*)*/ . nl
let comment = [ label "#comment" . del /^#/ "#" . store /[^\n]*/ . nl ]
let empty = Util.empty
let global = [ key /[a-zA-Z0-9]+/ . sep . val ]
let externglobal = [ key /[^ \t\n\/\*]+/ . del /\*/ "*" . global ]
let target = [ key /[a-zA-Z0-9]+/ . del / */ "" . [ obrkt . key /([a-zA-Z0-9_\.-]+|_|\$|\^)/ . cbrkt . sep . val ] ]
let externtarget = [ key /[^ \t\n\/\*]+/ . del /\*/ "*" . target ]
let lns = ( global | target | externglobal | externtarget | comment | empty ) *
let filter = Util.stdexcl .
    incl "/etc/mrtg/conf/*.cfg" . incl "/usr/local/mrtg*/conf/*.cfg" 
let xfm = transform lns filter
---------------

Steve Shipway
steve at steveshipway.org
Routers2.cgi web frontend for MRTG/RRD; NagEventLog Nagios agent for Windows Event Log monitoring; check_vmware plugin for VMWare monitoring in Nagios and MRTG; and other Open Source projects.
Web: http://www.steveshipway.org/software
 Please consider the environment before printing this e-mail 







More information about the augeas-devel mailing list