Weidong Shao 486c596323 Replace cookbooks for IceHouse release
Change-Id: Ibb6bdd3ed7795b86f773f9cb6ce1dfffb9b79faf
2014-08-07 08:36:02 +00:00

94 lines
2.9 KiB
Ruby

#
# Cookbook Name:: logrotate
# Library:: CookbookLogrotate
#
# Copyright 2013, Opscode
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Helper module for Logrotate configuration
module CookbookLogrotate
DIRECTIVES = %w[
compress copy copytruncate daily dateext
delaycompress ifempty mailfirst maillast missingok
monthly nocompress nocopy nocopytruncate nocreate
nodelaycompress nodateext nomail nomissingok noolddir
nosharedscripts noshred notifempty sharedscripts shred
weekly yearly
] unless const_defined?(:DIRECTIVES)
VALUES = %w[
compresscmd uncompresscmd compressext compressoptions
create dateformat include mail
maxage minsize rotate size
shredcycles start tabooext
] unless const_defined?(:VALUES)
SCRIPTS = %w[firstaction prerotate postrotate lastaction] unless const_defined?(:SCRIPTS)
DIRECTIVES_AND_VALUES = DIRECTIVES + VALUES unless const_defined?(:DIRECTIVES_AND_VALUES)
# Helper class for creating configurations
class LogrotateConfiguration
attr_reader :directives, :values, :paths
class << self
def from_hash(hash)
new(hash)
end
def directives_from(hash)
hash.select { |k, v| DIRECTIVES.include?(k) && v }.keys
end
def values_from(hash)
hash.select { |k| VALUES.include?(k) }
end
def paths_from(hash)
hash.select { |k| !(DIRECTIVES_AND_VALUES.include?(k)) }.reduce({}) do | accum_paths, (path, config) |
accum_paths[path] = {
'directives' => directives_from(config),
'values' => values_from(config),
'scripts' => scripts_from(config)
}
accum_paths
end
end
def scripts_from(hash)
defined_scripts = hash.select { |k| SCRIPTS.include?(k) }
defined_scripts.reduce({}) 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
end
end
private
def initialize(hash)
@directives = LogrotateConfiguration.directives_from(hash)
@values = LogrotateConfiguration.values_from(hash)
@paths = LogrotateConfiguration.paths_from(hash)
end
end
end