define profile::postgresql::backup_dump (
String $pg_user = "postgres",
String $pg_group = "postgres",
Optional[Variant[String, Integer]] $pg_port = undef,
) {
$base_path = $title
$pg_path = "$base_path/postgresql"
$pg_backup_path = "$base_path/postgresql_backup"
$pg_host = split($base_path, "/")[-1]
ensure_packages(["python", "python-pip"])
ensure_resource("package", "pylog2rotate", {
source => "git+https://github.com/avian2/pylog2rotate",
ensure => present,
provider => "pip3",
require => Package["python-pip"],
})
file { $pg_backup_path:
ensure => directory,
owner => $pg_user,
group => $pg_group,
mode => "0700",
require => File[$base_path],
}
if $pg_port and !empty($pg_port) {
$pg_port_arg = " -p $pg_port"
} else {
$pg_port_arg = ""
}
cron::job::multiple { "backup_psql_$pg_host":
ensure => "present",
require => [File[$pg_backup_path], File[$pg_path]],
jobs => [
{
command => "/usr/bin/pg_dumpall -h $pg_path$pg_port_arg -f $pg_backup_path/\$(date -Iseconds).sql",
user => $pg_user,
hour => "22,4,10,16",
minute => 0,
description => "Backup the database",
},
{
command => "/usr/bin/rm -f $(ls -1 $pg_backup_path/*.sql | grep -v 'T22:' | sort -r | sed -e '1,12d')",
user => $pg_user,
hour => 3,
minute => 0,
description => "Cleanup the database backups",
},
{
command => "cd $pg_backup_path ; /usr/bin/rm -f $(ls -1 *T22*.sql | log2rotate --skip 7 --fuzz 7 --delete --format='%Y-%m-%dT%H:%M:%S+02:00.sql')",
user => $pg_user,
hour => 3,
minute => 1,
description => "Cleanup the database backups exponentially",
},
]
}
@profile::monitoring::local_service { "Last postgresql dump in $pg_backup_path is not too old":
sudos => {
"naemon-postgresql-dumps-$pg_host" => "naemon ALL=($pg_user) NOPASSWD: /usr/bin/find $pg_backup_path -mindepth 1 -maxdepth 1 -printf %T@?n",
},
local => {
check_command => "check_last_file_date!$pg_backup_path!10!$pg_user",
}
}
}