-
-
Notifications
You must be signed in to change notification settings - Fork 92
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support hourly logrotate directory on EL9 again. #221
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -19,13 +19,8 @@ | |
) { | ||
assert_private() | ||
|
||
$dir_ensure = $logrotate::ensure_cron_hourly ? { | ||
'absent' => $logrotate::ensure_cron_hourly, | ||
'present' => 'directory' | ||
} | ||
|
||
file { "${logrotate::rules_configdir}/hourly": | ||
ensure => $dir_ensure, | ||
ensure => 'directory', | ||
owner => $logrotate::root_user, | ||
group => $logrotate::root_group, | ||
mode => $logrotate::rules_configdir_mode, | ||
|
@@ -38,4 +33,66 @@ | |
require => File["${logrotate::rules_configdir}/hourly"], | ||
} | ||
} | ||
|
||
# Make copies of the rpm provided unit and timers | ||
if $logrotate::manage_systemd_timer { | ||
$_lockfile = '/run/lock/logrotate.service' | ||
$_timeout = 21600 | ||
systemd::manage_dropin { 'hourly-service.conf': | ||
ensure => $logrotate::ensure_systemd_timer, | ||
unit => 'logrotate-hourly.service', | ||
unit_entry => { | ||
'Description' => [ | ||
'', | ||
'Extra service to run hourly logrotates only', | ||
], | ||
}, | ||
service_entry => { | ||
'ExecStart' => ['', "/usr/bin/flock --wait ${_timeout} ${_lockfile} /usr/sbin/logrotate ${logrotate::rules_configdir}/hourly"], | ||
}, | ||
before => Systemd::Unit_file['logrotate-hourly.service'], | ||
} | ||
|
||
# Once logrotate >= 3.21.1 replace flock with the `--wait-for-state-lock` option. | ||
systemd::manage_dropin { 'logrotate-flock.conf': | ||
ensure => $logrotate::ensure_systemd_timer, | ||
unit => 'logrotate.service', | ||
service_entry => { | ||
'ExecStart' => ['', "/usr/bin/flock --wait ${_timeout} ${_lockfile} /usr/sbin/logrotate /etc/logrotate.conf"], | ||
}, | ||
} | ||
|
||
systemd::unit_file { 'logrotate-hourly.service': | ||
traylenator marked this conversation as resolved.
Show resolved
Hide resolved
|
||
ensure => $logrotate::ensure_systemd_timer, | ||
source => 'file:///lib/systemd/system/logrotate.service', | ||
before => Systemd::Unit_file['logrotate-hourly.timer'], | ||
} | ||
|
||
systemd::manage_dropin { 'hourly-timer.conf': | ||
ensure => $logrotate::ensure_systemd_timer, | ||
unit => 'logrotate-hourly.timer', | ||
unit_entry => { | ||
'Description' => [ | ||
'', | ||
'Extra timer to run hourly logrotates only', | ||
], | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Would it be worth doing to make this timer also trigger There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Hi, I don't think hourly and daily can call the same service. They have different exec lines as they operate on different config files. As for the hourly and daily overlapping I can't immediately see why it would matter but if we could then yes makes sense to avoid it. Quick search around systemd does not have anything obvious to mutex a couple of units. Only suggestions I can see are an external Should check if logrotate maintains it's own lock.... There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Logrotate has a
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If that wait lock doesn't work it could be done with like There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. flock is the way to do that - better to do that than maintain your own lock always with external commands. i.e
this also solves the timeout problem since the waiting unit will enter a failed state after 6 hours which seems perfect. Unfortuantly the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
}, | ||
timer_entry => { | ||
'OnCalendar' => ['', 'hourly'], | ||
}, | ||
before => Systemd::Unit_file['logrotate-hourly.timer'], | ||
} | ||
|
||
$_timer = $logrotate::ensure_systemd_timer ? { | ||
'present' => true, | ||
default => false, | ||
} | ||
|
||
systemd::unit_file { 'logrotate-hourly.timer': | ||
ensure => $logrotate::ensure_systemd_timer, | ||
source => 'file:///lib/systemd/system/logrotate.timer', | ||
active => $_timer, | ||
enable => $_timer, | ||
} | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why not allow this to be removed when hourly is ensure=absent?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
When which parameter is set not /set ?
$logrotate::manage_cron_hourly
controls if the crons are managed.Just noticed this confusion in the class:
In
logrotate::rule
it includes logrotate::daily if and only if there is a rule which ishourly
.However there is also a
contain
in logrotate::init - that contain seems wrong to me. Should we be creating these units, crons and directories if there are no hourly rules.In reference to the
"${logrotate::rules_configdir}/hourly":
I don't see how you can know up front that the directory need to be created or not - certainly not that it can be deleted.I would remove that contain from manifests::init myself so for the default case the extra cron, timer and directory never get created.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looking at this ancient MR https://github.com/voxpupuli/puppet-logrotate/pull/174/files it looks to be quite deliberate
that the
${logrotate::rules_configdir}/hourly"
is always created in all circumstances.Either that should go or the one here in
logrotate::rule
one of these is definitely redundant.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could split hourly in two files.
Move the directory management into its own file to create and purge always.
Existing file without that could be included iff there an hourly logrotate rule.