diff --git a/manifests/cron/db_purge.pp b/manifests/cron/db_purge.pp new file mode 100644 index 00000000..4add69c8 --- /dev/null +++ b/manifests/cron/db_purge.pp @@ -0,0 +1,89 @@ +# +# Copyright (C) 2020 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. +# +# == Class: manila::cron::db_purge +# +# Remove deleted records from database +# +# === Parameters +# +# [*minute*] +# (optional) Defaults to '1'. +# +# [*hour*] +# (optional) Defaults to '0'. +# +# [*monthday*] +# (optional) Defaults to '*'. +# +# [*month*] +# (optional) Defaults to '*'. +# +# [*weekday*] +# (optional) Defaults to '*'. +# +# [*user*] +# (optional) User with access to manila files. +# Defaults to 'manila'. +# +# [*age*] +# (optional) Number of days prior to today for deletion, +# e.g. value 60 means to purge deleted rows that have the "deleted_at" +# column greater than 60 days ago. +# Defaults to 0 +# +# [*destination*] +# (optional) Path to file to which rows should be archived +# Defaults to '/var/log/manila/manila-rowsflush.log'. +# +# [*maxdelay*] +# (optional) In Seconds. 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. +# Defaults to 0. +# +# +class manila::cron::db_purge ( + $minute = 1, + $hour = 0, + $monthday = '*', + $month = '*', + $weekday = '*', + $user = 'manila', + $age = 0, + $destination = '/var/log/manila/manila-rowsflush.log', + $maxdelay = 0, +) { + + include ::manila::deps + + if $maxdelay == 0 { + $sleep = '' + } else { + $sleep = "sleep `expr \${RANDOM} \\% ${maxdelay}`; " + } + + cron { 'manila-manage db purge': + command => "${sleep}manila-manage db purge ${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, + require => Anchor['manila::install::end'], + } +} diff --git a/releasenotes/notes/cron-db_purge-749e862ad2d40647.yaml b/releasenotes/notes/cron-db_purge-749e862ad2d40647.yaml new file mode 100644 index 00000000..5bcdd08a --- /dev/null +++ b/releasenotes/notes/cron-db_purge-749e862ad2d40647.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + The new ``manila::cron::db_purge`` class has been added. This class can be + used to set up cron job to purge soft-deleted records from database. diff --git a/spec/acceptance/basic_manila_spec.rb b/spec/acceptance/basic_manila_spec.rb index cd05457d..ab1a6f2e 100644 --- a/spec/acceptance/basic_manila_spec.rb +++ b/spec/acceptance/basic_manila_spec.rb @@ -57,6 +57,7 @@ describe 'basic manila' do ssl => false, } class { '::manila::scheduler': } + class { '::manila::cron::db_purge': } # missing: backends, share, service_instance EOS @@ -71,5 +72,8 @@ describe 'basic manila' do it { is_expected.to be_listening } end + describe cron do + it { is_expected.to have_entry('1 0 * * * manila-manage db purge 0 >>/var/log/manila/manila-rowsflush.log 2>&1').with_user('manila') } + end end end diff --git a/spec/classes/manila_cron_db_purge_spec.rb b/spec/classes/manila_cron_db_purge_spec.rb new file mode 100644 index 00000000..4ab578a4 --- /dev/null +++ b/spec/classes/manila_cron_db_purge_spec.rb @@ -0,0 +1,65 @@ +require 'spec_helper' + +describe 'manila::cron::db_purge' do + let :params do + { + :minute => 1, + :hour => 0, + :monthday => '*', + :month => '*', + :weekday => '*', + :user => 'manila', + :age => '0', + :maxdelay => 0, + :destination => '/var/log/manila/manila-rowsflush.log' + } + end + + shared_examples 'manila::cron::db_purge' do + context 'with required parameters' do + it { is_expected.to contain_cron('manila-manage db purge').with( + :command => "manila-manage db purge #{params[:age]} >>#{params[:destination]} 2>&1", + :environment => 'PATH=/bin:/usr/bin:/usr/sbin SHELL=/bin/sh', + :user => params[:user], + :minute => params[:minute], + :hour => params[:hour], + :monthday => params[:monthday], + :month => params[:month], + :weekday => params[:weekday], + :require => 'Anchor[manila::install::end]' + )} + end + + context 'with required parameters with max delay enabled' do + before :each do + params.merge!( + :maxdelay => 600 + ) + end + + it { should contain_cron('manila-manage db purge').with( + :command => "sleep `expr ${RANDOM} \\% #{params[:maxdelay]}`; manila-manage db purge #{params[:age]} >>#{params[:destination]} 2>&1", + :environment => 'PATH=/bin:/usr/bin:/usr/sbin SHELL=/bin/sh', + :user => params[:user], + :minute => params[:minute], + :hour => params[:hour], + :monthday => params[:monthday], + :month => params[:month], + :weekday => params[:weekday], + :require => 'Anchor[manila::install::end]' + )} + end + end + + on_supported_os({ + :supported_os => OSDefaults.get_supported_os + }).each do |os,facts| + context "on #{os}" do + let (:facts) do + facts.merge!(OSDefaults.get_facts()) + end + + it_behaves_like 'manila::cron::db_purge' + end + end +end