Implement crontab to purge deleted data
heat-manage provides a tool to purge Heat deleted data [1]. This patch implements a crontab using the same interface as other modules. By default, it will purge that are more than 1 day old. [1] http://docs.openstack.org/developer/heat/man/heat-manage.html Change-Id: Ia2b80e5003450cd794ebb0c9ca72200ec8616e81
This commit is contained in:
parent
ae2e7760b3
commit
019883ba1d
86
manifests/cron/purge_deleted.pp
Normal file
86
manifests/cron/purge_deleted.pp
Normal file
@ -0,0 +1,86 @@
|
||||
# == Class: heat::cron::purge_deleted
|
||||
#
|
||||
# Installs a cron job to purge db entries marked as deleted and older than $age.
|
||||
# Default will be 1 day.
|
||||
#
|
||||
# === Parameters
|
||||
#
|
||||
# [*ensure*]
|
||||
# (optional) Defaults to present.
|
||||
# Valid values are present, absent.
|
||||
#
|
||||
# [*minute*]
|
||||
# (optional) Defaults to '1'.
|
||||
#
|
||||
# [*hour*]
|
||||
# (optional) Defaults to '0'.
|
||||
#
|
||||
# [*monthday*]
|
||||
# (optional) Defaults to '*'.
|
||||
#
|
||||
# [*month*]
|
||||
# (optional) Defaults to '*'.
|
||||
#
|
||||
# [*weekday*]
|
||||
# (optional) Defaults to '*'.
|
||||
#
|
||||
# [*maxdelay*]
|
||||
# (optional) Seconds. Defaults to 0. 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) User with access to heat files.
|
||||
# Defaults to 'heat'.
|
||||
#
|
||||
# [*age*]
|
||||
# (optional) Age value for $age_type.
|
||||
# Defaults to '1'.
|
||||
#
|
||||
# [*age_type*]
|
||||
# (optional) Age type.
|
||||
# Can be days, hours, minutes, seconds
|
||||
# Defaults to 'days'.
|
||||
#
|
||||
# [*destination*]
|
||||
# (optional) Path to file to which rows should be archived
|
||||
# Defaults to '/var/log/heat/heat-purge_deleted.log'.
|
||||
#
|
||||
class heat::cron::purge_deleted (
|
||||
$ensure = present,
|
||||
$minute = 1,
|
||||
$hour = 0,
|
||||
$monthday = '*',
|
||||
$month = '*',
|
||||
$weekday = '*',
|
||||
$maxdelay = 0,
|
||||
$user = 'heat',
|
||||
$age = 1,
|
||||
$age_type = 'days',
|
||||
$destination = '/var/log/heat/heat-purge_deleted.log'
|
||||
) {
|
||||
|
||||
if ! member(['days', 'hours', 'minutes', 'seconds'], $age_type) {
|
||||
fail('age_type possible values are only days, hours, minutes, or seconds.')
|
||||
}
|
||||
|
||||
if $maxdelay == 0 {
|
||||
$sleep = ''
|
||||
} else {
|
||||
$sleep = "sleep `expr \${RANDOM} \\% ${maxdelay}`; "
|
||||
}
|
||||
|
||||
cron { 'heat-manage purge_deleted':
|
||||
ensure => $ensure,
|
||||
command => "${sleep}heat-manage purge_deleted -g ${age_type} ${age} >>${destination} 2>&1",
|
||||
environment => 'PATH=/bin:/usr/bin:/usr/sbin SHELL=/bin/sh',
|
||||
user => $user,
|
||||
minute => $minute,
|
||||
hour => $hour,
|
||||
monthday => $monthday,
|
||||
month => $month,
|
||||
weekday => $weekday
|
||||
}
|
||||
|
||||
Package['heat-common'] -> Cron['heat-manage purge_deleted']
|
||||
}
|
@ -55,6 +55,7 @@ describe 'basic heat' do
|
||||
}
|
||||
class { '::heat::api_cloudwatch': }
|
||||
class { '::heat::api_cfn': }
|
||||
class { '::heat::cron::purge_deleted': }
|
||||
EOS
|
||||
|
||||
|
||||
@ -75,5 +76,8 @@ describe 'basic heat' do
|
||||
it { is_expected.to be_listening.with('tcp') }
|
||||
end
|
||||
|
||||
describe cron do
|
||||
it { is_expected.to have_entry('1 0 * * * heat-manage purge_deleted -g days 1 >>/var/log/heat/heat-purge_deleted.log 2>&1').with_user('heat') }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
99
spec/classes/heat_cron_purge_deleted_spec.rb
Normal file
99
spec/classes/heat_cron_purge_deleted_spec.rb
Normal file
@ -0,0 +1,99 @@
|
||||
require 'spec_helper'
|
||||
|
||||
describe 'heat::cron::purge_deleted' do
|
||||
|
||||
let :facts do
|
||||
@default_facts.merge({ :osfamily => 'Debian' })
|
||||
end
|
||||
|
||||
let :params do
|
||||
{ :ensure => 'present',
|
||||
:minute => 1,
|
||||
:hour => 0,
|
||||
:monthday => '*',
|
||||
:month => '*',
|
||||
:weekday => '*',
|
||||
:maxdelay => 0,
|
||||
:user => 'heat',
|
||||
:age => 1,
|
||||
:age_type => 'days',
|
||||
:destination => '/var/log/heat/heat-purge_deleted.log' }
|
||||
end
|
||||
|
||||
let :pre_condition do
|
||||
'include ::heat'
|
||||
end
|
||||
|
||||
describe 'with default parameters' do
|
||||
it 'configures a cron' do
|
||||
is_expected.to contain_cron('heat-manage purge_deleted').with(
|
||||
:ensure => params[:ensure],
|
||||
:command => "heat-manage purge_deleted -g days 1 >>#{params[:destination]} 2>&1",
|
||||
:environment => 'PATH=/bin:/usr/bin:/usr/sbin SHELL=/bin/sh',
|
||||
:user => 'heat',
|
||||
:minute => params[:minute],
|
||||
:hour => params[:hour],
|
||||
:monthday => params[:monthday],
|
||||
:month => params[:month],
|
||||
:weekday => params[:weekday]
|
||||
)
|
||||
is_expected.to contain_package('heat-common').that_comes_before('Cron[heat-manage purge_deleted]')
|
||||
end
|
||||
end
|
||||
|
||||
describe 'when specifying a maxdelay param' do
|
||||
before :each do
|
||||
params.merge!(
|
||||
:maxdelay => 600
|
||||
)
|
||||
end
|
||||
|
||||
it 'configures a cron with delay' do
|
||||
is_expected.to contain_cron('heat-manage purge_deleted').with(
|
||||
:ensure => params[:ensure],
|
||||
:command => "sleep `expr ${RANDOM} \\% #{params[:maxdelay]}`; heat-manage purge_deleted -g days 1 >>#{params[:destination]} 2>&1",
|
||||
:environment => 'PATH=/bin:/usr/bin:/usr/sbin SHELL=/bin/sh',
|
||||
:user => 'heat',
|
||||
:minute => params[:minute],
|
||||
:hour => params[:hour],
|
||||
:monthday => params[:monthday],
|
||||
:month => params[:month],
|
||||
:weekday => params[:weekday]
|
||||
)
|
||||
is_expected.to contain_package('heat-common').that_comes_before('Cron[heat-manage purge_deleted]')
|
||||
end
|
||||
end
|
||||
|
||||
describe 'when disabling cron job' do
|
||||
before :each do
|
||||
params.merge!(
|
||||
:ensure => 'absent'
|
||||
)
|
||||
end
|
||||
|
||||
it 'configures a cron with delay' do
|
||||
is_expected.to contain_cron('heat-manage purge_deleted').with(
|
||||
:ensure => params[:ensure],
|
||||
:command => "heat-manage purge_deleted -g days 1 >>#{params[:destination]} 2>&1",
|
||||
:environment => 'PATH=/bin:/usr/bin:/usr/sbin SHELL=/bin/sh',
|
||||
:user => 'heat',
|
||||
:minute => params[:minute],
|
||||
:hour => params[:hour],
|
||||
:monthday => params[:monthday],
|
||||
:month => params[:month],
|
||||
:weekday => params[:weekday]
|
||||
)
|
||||
is_expected.to contain_package('heat-common').that_comes_before('Cron[heat-manage purge_deleted]')
|
||||
end
|
||||
end
|
||||
|
||||
describe 'when setting a wrong age_type' do
|
||||
before :each do
|
||||
params.merge!(
|
||||
:age_type => 'foobar'
|
||||
)
|
||||
end
|
||||
|
||||
it_raises 'a Puppet::Error', /age_type possible values are only days, hours, minutes, or seconds./
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue
Block a user