There is a great cookbook posted on GitHub to configure logrotation with Chef though, it may work on Ruby 1.9 or greater. My server Ruby1.8 installed couldn’t run its recipes.
I fixed a part of the cookbook so that it can also work on Ruby1.8:
https://gist.github.com/noradaiko/5219337.js
Diff is as follows:
--- a/cookbooks/logrotate/libraries/logrotate_config.rb +++ b/cookbooks/logrotate/libraries/logrotate_config.rb @@ -28,36 +28,46 @@ module CookbookLogrotate end def directives_from hash - hash.select { |k, v| DIRECTIVES.include?(k) && v }.keys + Hash[ hash.select { |k, v| DIRECTIVES.include?(k) && v } ].keys end def values_from hash - hash.select { |k| VALUES.include? k } + Hash[ hash.select { |k, v| + VALUES.include? k + } + ] end def paths_from hash - hash.select { |k| !(DIRECTIVES_AND_VALUES.include? k) }.inject({}) do | accum_paths, (path, config) | - accum_paths[path] = { - 'directives' => directives_from(config), - 'values' => values_from(config), - 'scripts' => scripts_from(config) - } + pp hash + Hash[ hash.select { |k| !(DIRECTIVES_AND_VALUES.include? k) } ].inject({}) do | accum_paths, (path, config) | + pp "----" + if config.instance_of?(Mash) + accum_paths[path] = { + 'directives' => directives_from(config), + 'values' => values_from(config), + 'scripts' => scripts_from(config) + } - accum_paths + pp accum_paths[path] + accum_paths + else + accum_paths + end end end def scripts_from hash - defined_scripts = hash.select { |k| SCRIPTS.include? k } - defined_scripts.inject({}) do | accum_scripts, (script, lines) | - if lines.respond_to? :join - accum_scripts[script] = lines.join "n" - else - accum_scripts[script] = lines - end + defined_scripts = hash.select { |k| SCRIPTS.include? k } + defined_scripts.inject({}) do | accum_scripts, (script, lines) | + if lines.respond_to? :join + accum_scripts[script] = lines.join "n" + else + accum_scripts[script] = lines + end - accum_scripts - end + accum_scripts + end end end
Hope it helps.