Add logrotate-crond configuration
Generate a cron job and a config for logrotate to be run against containerized services logs. Related-bug: #1700912 Change-Id: Ib9d5d8ca236296179182613e1ff625deea168614 Signed-off-by: Bogdan Dobrelya <bdobreli@redhat.com>
This commit is contained in:
parent
1b82fe40fe
commit
70987c80c1
112
manifests/profile/base/logging/logrotate.pp
Normal file
112
manifests/profile/base/logging/logrotate.pp
Normal file
@ -0,0 +1,112 @@
|
||||
# Copyright 2017 Red Hat, Inc.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# == Class: tripleo::profile::base::logging::logrotate
|
||||
#
|
||||
# Installs a cron job that rotates containerized services logs.
|
||||
#
|
||||
# === Parameters
|
||||
#
|
||||
# [*step*]
|
||||
# (Optional) String. The current step of the deployment
|
||||
# Defaults to hiera('step')
|
||||
#
|
||||
# [*ensure*]
|
||||
# (optional) Defaults to present.
|
||||
# Valid values are present, absent.
|
||||
#
|
||||
# [*minute*]
|
||||
# (optional) Defaults to '0'. Configures cron job for logrotate.
|
||||
#
|
||||
# [*hour*]
|
||||
# (optional) Defaults to '*'. Configures cron job for logrotate.
|
||||
#
|
||||
# [*monthday*]
|
||||
# (optional) Defaults to '*'. Configures cron job for logrotate.
|
||||
#
|
||||
# [*month*]
|
||||
# (optional) Defaults to '*'. Configures cron job for logrotate.
|
||||
#
|
||||
# [*weekday*]
|
||||
# (optional) Defaults to '*'. Configures cron job for logrotate.
|
||||
#
|
||||
# [*maxdelay*]
|
||||
# (optional) Seconds. Defaults to 90. Should be a positive integer.
|
||||
# Induces a random delay before running the cronjob to avoid running all
|
||||
# cron jobs at the same time on all hosts this job is configured.
|
||||
#
|
||||
# [*user*]
|
||||
# (optional) Defaults to 'root'. Configures cron job for logrotate.
|
||||
#
|
||||
# [*delaycompress*]
|
||||
# (optional) Defaults to True.
|
||||
# Configures the logrotate delaycompress parameter.
|
||||
#
|
||||
# [*size*]
|
||||
# (optional) Defaults to '10M'.
|
||||
# Configures the logrotate size parameter.
|
||||
#
|
||||
# [*rotate*]
|
||||
# (optional) Defaults to 14.
|
||||
# Configures the logrotate rotate parameter.
|
||||
#
|
||||
class tripleo::profile::base::logging::logrotate (
|
||||
$step = Integer(hiera('step')),
|
||||
$ensure = present,
|
||||
$minute = 0,
|
||||
$hour = '*',
|
||||
$monthday = '*',
|
||||
$month = '*',
|
||||
$weekday = '*',
|
||||
Integer $maxdelay = 90,
|
||||
$user = 'root',
|
||||
$delaycompress = true,
|
||||
$size = '10M',
|
||||
$rotate = 14,
|
||||
) {
|
||||
|
||||
if $step >= 4 {
|
||||
if $maxdelay == 0 {
|
||||
$sleep = ''
|
||||
} else {
|
||||
$sleep = "sleep `expr \${RANDOM} \\% ${maxdelay}`; "
|
||||
}
|
||||
|
||||
$svc = 'logrotate-crond'
|
||||
$config = "/etc/${svc}.conf"
|
||||
$state = "/var/lib/logrotate/${svc}.status"
|
||||
$cmd = "${sleep}/usr/sbin/logrotate -s ${state} ${config}"
|
||||
|
||||
file { "${config}":
|
||||
ensure => $ensure,
|
||||
owner => $user,
|
||||
group => $user,
|
||||
mode => '0640',
|
||||
content => template('tripleo/logrotate/containers_logrotate.conf.erb'),
|
||||
}
|
||||
|
||||
cron { "${svc}":
|
||||
ensure => $ensure,
|
||||
command => "${cmd} 2>&1|logger -t ${svc}",
|
||||
environment => 'PATH=/bin:/usr/bin:/usr/sbin SHELL=/bin/sh',
|
||||
user => $user,
|
||||
minute => $minute,
|
||||
hour => $hour,
|
||||
monthday => $monthday,
|
||||
month => $month,
|
||||
weekday => $weekday,
|
||||
}
|
||||
}
|
||||
}
|
59
spec/classes/tripleo_profile_base_logging_logrotate_spec.rb
Normal file
59
spec/classes/tripleo_profile_base_logging_logrotate_spec.rb
Normal file
@ -0,0 +1,59 @@
|
||||
#
|
||||
# Copyright (C) 2017 Red Hat, Inc.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
describe 'tripleo::profile::base::logging::logrotate' do
|
||||
shared_examples_for 'tripleo::profile::base::logging::logrotate' do
|
||||
|
||||
context 'with step less than 4' do
|
||||
let(:params) { { :step => 3 } }
|
||||
|
||||
it 'should do nothing' do
|
||||
is_expected.to contain_class('tripleo::profile::base::logging::logrotate')
|
||||
is_expected.to_not contain_cron('logrotate-crond')
|
||||
is_expected.to_not contain_file('/etc/logrotate-crond.conf')
|
||||
end
|
||||
end
|
||||
|
||||
context 'with defaults and step greater than 3' do
|
||||
let(:params) { { :step => 4 } }
|
||||
|
||||
it { is_expected.to contain_class('tripleo::profile::base::logging::logrotate') }
|
||||
it { is_expected.to contain_cron('logrotate-crond').with(
|
||||
:ensure => 'present',
|
||||
:command => 'sleep `expr ${RANDOM} \\% 90`; /usr/sbin/logrotate -s ' +
|
||||
'/var/lib/logrotate/logrotate-crond.status ' +
|
||||
'/etc/logrotate-crond.conf 2>&1|logger -t logrotate-crond',
|
||||
:user => 'root',
|
||||
:minute => 0,
|
||||
:hour => '*',
|
||||
:monthday => '*',
|
||||
:month => '*',
|
||||
:weekday => '*') }
|
||||
it { is_expected.to contain_file('/etc/logrotate-crond.conf') }
|
||||
end
|
||||
end
|
||||
|
||||
on_supported_os.each do |os, facts|
|
||||
context "on #{os}" do
|
||||
let (:facts) {
|
||||
facts
|
||||
}
|
||||
it_behaves_like 'tripleo::profile::base::logging::logrotate'
|
||||
end
|
||||
end
|
||||
end
|
14
templates/logrotate/containers_logrotate.conf.erb
Normal file
14
templates/logrotate/containers_logrotate.conf.erb
Normal file
@ -0,0 +1,14 @@
|
||||
/var/log/containers/*/*.log {
|
||||
rotate <%= @rotate %>
|
||||
size <%= @size %>
|
||||
missingok
|
||||
notifempty
|
||||
<%- if @delaycompress %>
|
||||
delaycompress
|
||||
<%- end %>
|
||||
postrotate
|
||||
/sbin/lsof -nPs +L1 +D /var/log 2>&1|\
|
||||
/bin/perl -ne '/\S+\s+(\d+).*\/var\/log\/.*\(deleted\)/ && print "$1\n"' |\
|
||||
/bin/xargs -n1 -r -t kill -HUP
|
||||
endscript
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user