From 90ee92acb88d32e544b3118b8edd3a0f410a1264 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Bauer?= Date: Mon, 27 Feb 2017 11:58:18 +0100 Subject: [PATCH 1/8] fix crontabs with dots on debian & added rsnapshot_prefix var --- manifests/config.pp | 23 ++++++++++++++++++----- manifests/init.pp | 3 ++- manifests/params.pp | 3 ++- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/manifests/config.pp b/manifests/config.pp index 702765f..0f9edaf 100644 --- a/manifests/config.pp +++ b/manifests/config.pp @@ -31,7 +31,7 @@ class rsnapshot::config ( # custom function, if only a hostname is given as a param, this is an empty hash # the next loop would break as puppet does not allow to reassign variables - # the function checks $hosts for elements like: + # the function checks $hosts for elements like: # { foo => } and converts those to { foo => {} } $hosts_clean = assert_empty_hash($hosts) @@ -135,7 +135,7 @@ class rsnapshot::config ( content => template('rsnapshot/rsnapshot.erb'), } - + if has_key($hash, backup_scripts) { $hash[backup_scripts].each |$script, $scriptconf| { @@ -158,11 +158,25 @@ class rsnapshot::config ( content => template("rsnapshot/${script}.sh.erb"), mode => '0755', } - + } } - $cronfile = "${cron_dir}/${host}" + # cron on Debian seems to ignore files that have dots in their name; replace + # them with underscores (issue #2) + if $::osfamily == 'Debian' { + $cron_name = regsubst("${host}", '\.', '_') + $cronfile = "${cron_dir}/${rsnapshot_prefix}${cron_name}" + } + else { + $cronfile = "${cron_dir}/${rsnapshot_prefix}${host}" + } + + # Make sure old cron files without rsnapshot_prefix are removed + file { "${cron_dir}/${host}": + ensure => absent, + } + concat { $cronfile: } # create cron files for each backup level @@ -190,4 +204,3 @@ class rsnapshot::config ( } } } - diff --git a/manifests/init.pp b/manifests/init.pp index 46bb154..3e7845a 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -19,6 +19,8 @@ class rsnapshot ( $snapshot_root = $rsnapshot::params::config_snapshot_root, $backup_levels = $rsnapshot::params::config_backup_levels, $cron_service_name = $rsnapshot::params::cron_service_name, + $rsnapshot_prefix = $rsnapshot::params::config_rsnapshot_prefix, + ) inherits rsnapshot::params { $default_backup_scripts = $rsnapshot::params::backup_scripts + $backup_scripts @@ -32,4 +34,3 @@ class rsnapshot ( contain '::rsnapshot::service' } } - diff --git a/manifests/params.pp b/manifests/params.pp index 3cff43b..c5efa35 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -42,8 +42,9 @@ class rsnapshot::params { $config_verbose = '2' $config_loglevel = '4' $config_stop_on_stale_lockfile = undef # bool + $config_rsnapshot_prefix = 'rsnapshot_' $config_rsync_short_args = '-az' - $config_rsync_long_args = undef # defaults are --delete --numeric-ids --relative --delete-excluded + $config_rsync_long_args = undef # defaults are --delete --numeric-ids --relative --delete-excluded $config_ssh_args = undef $config_du_args = undef $config_one_fs = undef From 9f0fdf0547bc421512bf3623a113aeb6b73bb84f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Bauer?= Date: Mon, 27 Feb 2017 12:00:54 +0100 Subject: [PATCH 2/8] removed superfluous line --- manifests/init.pp | 1 - 1 file changed, 1 deletion(-) diff --git a/manifests/init.pp b/manifests/init.pp index 3e7845a..e93f9d1 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -20,7 +20,6 @@ class rsnapshot ( $backup_levels = $rsnapshot::params::config_backup_levels, $cron_service_name = $rsnapshot::params::cron_service_name, $rsnapshot_prefix = $rsnapshot::params::config_rsnapshot_prefix, - ) inherits rsnapshot::params { $default_backup_scripts = $rsnapshot::params::backup_scripts + $backup_scripts From 7dd4b98f1ac98cd3ad64669c28d9afdba2bb6e06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Bauer?= Date: Tue, 14 Mar 2017 23:52:08 +0100 Subject: [PATCH 3/8] fixed typo --- manifests/params.pp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifests/params.pp b/manifests/params.pp index fa86a3c..40d5680 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -93,7 +93,7 @@ class rsnapshot::params { }, monthly => { minute => '0..59', - hour => '0..23', # you could also do: ['21..2 3','0..4','5'], + hour => '0..23', # you could also do: ['21..23','0..4','5'], monthday => '0..28', month => '*', weekday => '*', From 6e7d8e02f336e7e899d08c4e6ab17262fd8c81e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Bauer?= Date: Sat, 1 Apr 2017 23:27:18 +0200 Subject: [PATCH 4/8] use prefix not by default --- manifests/config.pp | 8 ++++++-- manifests/init.pp | 33 +++++++++++++++++---------------- manifests/params.pp | 1 + 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/manifests/config.pp b/manifests/config.pp index 0f9edaf..86c5b94 100644 --- a/manifests/config.pp +++ b/manifests/config.pp @@ -162,10 +162,14 @@ class rsnapshot::config ( } } + if rsnapshot_prefix_use == false { + $rsnapshot_prefix = '' + } + # cron on Debian seems to ignore files that have dots in their name; replace # them with underscores (issue #2) if $::osfamily == 'Debian' { - $cron_name = regsubst("${host}", '\.', '_') + $cron_name = regsubst($host, '\.', '_', 'G') $cronfile = "${cron_dir}/${rsnapshot_prefix}${cron_name}" } else { @@ -182,7 +186,7 @@ class rsnapshot::config ( # create cron files for each backup level # merge possible cron definitions to one $real_cron = deep_merge($rsnapshot::params::cron, $rsnapshot::cron, $hash[cron]) - concat::fragment { "mailto for $host": + concat::fragment { "mailto for ${host}": content => "#This file is managed by puppet\nMAILTO=${real_cron[mailto]}\n\n", target => $cronfile, order => 1, diff --git a/manifests/init.pp b/manifests/init.pp index 5f17c91..74f970e 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -5,22 +5,23 @@ # === Parameters # class rsnapshot ( - $hosts = $rsnapshot::params::hosts, - $conf_d = $rsnapshot::params::conf_d, - $logpath = $rsnapshot::params::config_logpath, - $lockpath = $rsnapshot::params::config_lockpath, - $default_backup = $rsnapshot::params::config_default_backup, - $package_name = $rsnapshot::params::package_name, - $package_ensure = $rsnapshot::params::package_ensure, - $cron = $rsnapshot::params::cron, - $backup_scripts = $rsnapshot::params::backup_scripts, - $include = $rsnapshot::params::config_include, - $exclude = $rsnapshot::params::config_exclude, - $snapshot_root = $rsnapshot::params::config_snapshot_root, - $backup_levels = $rsnapshot::params::config_backup_levels, - $cron_service_name = $rsnapshot::params::cron_service_name, - $rsnapshot_prefix = $rsnapshot::params::config_rsnapshot_prefix, - $check_mk_job = $rsnapshot::params::config_check_mk_job, + $hosts = $rsnapshot::params::hosts, + $conf_d = $rsnapshot::params::conf_d, + $logpath = $rsnapshot::params::config_logpath, + $lockpath = $rsnapshot::params::config_lockpath, + $default_backup = $rsnapshot::params::config_default_backup, + $package_name = $rsnapshot::params::package_name, + $package_ensure = $rsnapshot::params::package_ensure, + $cron = $rsnapshot::params::cron, + $backup_scripts = $rsnapshot::params::backup_scripts, + $include = $rsnapshot::params::config_include, + $exclude = $rsnapshot::params::config_exclude, + $snapshot_root = $rsnapshot::params::config_snapshot_root, + $backup_levels = $rsnapshot::params::config_backup_levels, + $cron_service_name = $rsnapshot::params::cron_service_name, + $rsnapshot_prefix = $rsnapshot::params::config_rsnapshot_prefix, + $rsnapshot_prefix_use = $rsnapshot::params::config_rsnapshot_prefix_use, + $check_mk_job = $rsnapshot::params::config_check_mk_job, ) inherits rsnapshot::params { diff --git a/manifests/params.pp b/manifests/params.pp index 40d5680..61c6a52 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -44,6 +44,7 @@ class rsnapshot::params { $config_loglevel = '4' $config_stop_on_stale_lockfile = undef # bool $config_rsnapshot_prefix = 'rsnapshot_' + $config_rsnapshot_prefix_use = false $config_rsync_short_args = '-az' $config_rsync_long_args = undef # defaults are --delete --numeric-ids --relative --delete-excluded $config_ssh_args = undef From 46c96d9b6c1355c44e2e3fe4402822fd11361710 Mon Sep 17 00:00:00 2001 From: Administrator Date: Sun, 2 Apr 2017 08:40:45 +0200 Subject: [PATCH 5/8] try and fix travis build --- metadata.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/metadata.json b/metadata.json index c160005..3b20c01 100644 --- a/metadata.json +++ b/metadata.json @@ -17,9 +17,9 @@ { "name": "puppet", "version_requirement": ">= 4.0.0" } ], "dependencies": [ - { "name": "puppetlabs-stdlib","version_range": ">= 1.0.0" }, - { "name": "stahnma-epel","version_range": ">= 1.0.0" }, - { "name": "puppetlabs-concat","version_range": ">= 2.0.0 < 3.0.0" } + { "name": "puppetlabs-stdlib","version_requirement": ">= 1.0.0" }, + { "name": "stahnma-epel","version_requirement": ">= 1.0.0" }, + { "name": "puppetlabs-concat","version_requirement": ">= 2.0.0 < 3.0.0" } ], "operatingsystem_support": [ { From 960b0090e4952b985828eddde75d13e1aeef3fc9 Mon Sep 17 00:00:00 2001 From: Administrator Date: Sun, 2 Apr 2017 08:42:15 +0200 Subject: [PATCH 6/8] try and fix travis build --- metadata.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/metadata.json b/metadata.json index 3b20c01..38dad5c 100644 --- a/metadata.json +++ b/metadata.json @@ -12,10 +12,6 @@ "backup", "rsync" ], - "requirements": [ - { "name": "pe", "version_requirement": ">= 4.0.0" }, - { "name": "puppet", "version_requirement": ">= 4.0.0" } - ], "dependencies": [ { "name": "puppetlabs-stdlib","version_requirement": ">= 1.0.0" }, { "name": "stahnma-epel","version_requirement": ">= 1.0.0" }, From 87775af5c7c731d2a0625621698c8612dfac40fc Mon Sep 17 00:00:00 2001 From: Administrator Date: Sun, 2 Apr 2017 09:14:46 +0200 Subject: [PATCH 7/8] add prefix feature --- manifests/config.pp | 34 +++++++++++++++++++--------------- manifests/init.pp | 4 ++-- manifests/params.pp | 6 +++--- 3 files changed, 24 insertions(+), 20 deletions(-) diff --git a/manifests/config.pp b/manifests/config.pp index 86c5b94..e5237c2 100644 --- a/manifests/config.pp +++ b/manifests/config.pp @@ -2,8 +2,8 @@ # # manage host configs class rsnapshot::config ( - $hosts = $rsnapshot::hosts, - $cron_dir = $rsnapshot::cron_dir, + $hosts = $rsnapshot::hosts, + $cron_dir = $rsnapshot::cron_dir, ) { # these are global settings, no point in setting them per host @@ -12,6 +12,8 @@ class rsnapshot::config ( $conf_d = pick($rsnapshot::conf_d, $rsnapshot::params::conf_d, '/etc/rsnapshot') $snapshot_root = pick($hosts['snapshot_root'], $rsnapshot::snapshot_root, '/backup') $logpath = pick($rsnapshot::logpath, $rsnapshot::params::config_logpath) + $cronfile_prefix_use = pick($rsnapshot::cronfile_prefix_use, $rsnapshot::params::cronfile_prefix_use, false) + $cronfile_prefix = pick($rsnapshot::cronfile_prefix, $rsnapshot::params::cronfile_prefix, '') # make sure lock path and conf path exist file { $conf_d: ensure => 'directory', @@ -162,23 +164,25 @@ class rsnapshot::config ( } } - if rsnapshot_prefix_use == false { - $rsnapshot_prefix = '' + if $cronfile_prefix_use { + $rsnapshot_prefix = $rsnapshot::cronfile_prefix + } else { + $rsnapshot_prefix = '' } # cron on Debian seems to ignore files that have dots in their name; replace # them with underscores (issue #2) - if $::osfamily == 'Debian' { - $cron_name = regsubst($host, '\.', '_', 'G') - $cronfile = "${cron_dir}/${rsnapshot_prefix}${cron_name}" - } - else { - $cronfile = "${cron_dir}/${rsnapshot_prefix}${host}" - } - - # Make sure old cron files without rsnapshot_prefix are removed - file { "${cron_dir}/${host}": - ensure => absent, + case $::osfamily { + 'Debian': { + $cron_name = regsubst($host, '\.', '_', 'G') + $cronfile = "${cron_dir}/${rsnapshot_prefix}${cron_name}" + } + 'RedHat': { + $cronfile = "${cron_dir}/${rsnapshot_prefix}${host}" + } + default: { + $cronfile = "${cron_dir}/${rsnapshot_prefix}${host}" + } } concat { $cronfile: diff --git a/manifests/init.pp b/manifests/init.pp index 74f970e..f586bcc 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -19,8 +19,8 @@ class rsnapshot ( $snapshot_root = $rsnapshot::params::config_snapshot_root, $backup_levels = $rsnapshot::params::config_backup_levels, $cron_service_name = $rsnapshot::params::cron_service_name, - $rsnapshot_prefix = $rsnapshot::params::config_rsnapshot_prefix, - $rsnapshot_prefix_use = $rsnapshot::params::config_rsnapshot_prefix_use, + $cronfile_prefix = $rsnapshot::params::config_cronfile_prefix, + $cronfile_prefix_use = $rsnapshot::params::config_cronfile_prefix_use, $check_mk_job = $rsnapshot::params::config_check_mk_job, ) inherits rsnapshot::params { diff --git a/manifests/params.pp b/manifests/params.pp index 61c6a52..b106631 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -43,8 +43,8 @@ class rsnapshot::params { $config_verbose = '2' $config_loglevel = '4' $config_stop_on_stale_lockfile = undef # bool - $config_rsnapshot_prefix = 'rsnapshot_' - $config_rsnapshot_prefix_use = false + $config_cronfile_prefix = 'rsnapshot_' + $config_cronfile_prefix_use = false $config_rsync_short_args = '-az' $config_rsync_long_args = undef # defaults are --delete --numeric-ids --relative --delete-excluded $config_ssh_args = undef @@ -127,6 +127,6 @@ class rsnapshot::params { ], default => [], }, - } + }, } } From 85532a73b2b9b58531180c571726c13f8ae565ca Mon Sep 17 00:00:00 2001 From: Administrator Date: Sun, 2 Apr 2017 09:24:14 +0200 Subject: [PATCH 8/8] update readme --- README.md | 91 +++++++++++++++++++++++++++++-------------------------- 1 file changed, 48 insertions(+), 43 deletions(-) diff --git a/README.md b/README.md index 0198c76..cc0eb5c 100644 --- a/README.md +++ b/README.md @@ -205,41 +205,20 @@ Takes an Integer, a String or an Array as input, and returns a random entry from The following parameters are available in the `::rsnapshot` class: -#### `$hosts` -Hash containing the hosts to be backed up and optional overrides per host -(Default: undef (do nothing when no host given)) -#### `$conf_d` -The place where the configs will be dropped -(Default: /etc/rsnapshot (will be created if it doesn't exist)) -#### `$backup_user` -The user to run the backup scripts as -(Default: root, also the user used for ssh connections, if you change this make sure you have proper key deployed and the user exists in the nodes to be backed up.) -#### `$package_name` -(Default: rsnapshot) -#### `$package_ensure` -(Default: present) -#### `$cron_dir` -Directory to drop the cron files to. Crons will be created per host. -(Default: /etc/cron.d) -#### `$backup_levels` -Array containing the backup levels (hourly, daily, weekly, monthly) -Configure the backup_levels (valid per host and global, so you may either set: rsnapshot::backup_levels for all hosts or override default backup_levels for specific hosts) -(Default: [ 'daily', 'weekly', ] ) #### `$backup_defaults` Boolean. Backup default backup dirs or not. (Default: true) -#### `$default_backup` -The default backup directories. This will apply to all hosts unless you set [backup_defaults](#backup_defaults) = false -Default is: - -```puppet - $default_backup = { - '/etc' => './', - '/home' => './', - } -``` - +#### `$backup_levels` +Array containing the backup levels (hourly, daily, weekly, monthly) +Configure the backup_levels (valid per host and global, so you may either set: rsnapshot::backup_levels for all hosts or override default backup_levels for specific hosts) +(Default: [ 'daily', 'weekly', ] ) +#### `$backup_user` +The user to run the backup scripts as +(Default: root, also the user used for ssh connections, if you change this make sure you have proper key deployed and the user exists in the nodes to be backed up.) +#### `$conf_d` +The place where the configs will be dropped +(Default: /etc/rsnapshot (will be created if it doesn't exist)) #### `$cron` Hash. Set time ranges for different backup levels. Each item (minute, hour...) allows for cron notation, an array to pick a random time from and a range to pick a random time from. The range notation is '$start..$end', so to pick a random hour from 8 pm to 2 am, you could set the hour of your desired backup level to @@ -354,6 +333,44 @@ Default is: } ``` +#### `$cron_dir` +Directory to drop the cron files to. Crons will be created per host. +(Default: /etc/cron.d) +#### `$default_backup` +The default backup directories. This will apply to all hosts unless you set [backup_defaults](#backup_defaults) = false +Default is: + +```puppet + $default_backup = { + '/etc' => './', + '/home' => './', + } +``` +#### `$cronfile_prefix_use` +Bool. Set this to true if you want your cronfiles to have a prefix. +(Default: false) +#### `$cronfile_prefix` +Optional prefix to add to the cronfiles name. Your files will be named: prefix_hostname +(Default: 'rsnapshot_' only if you set $cronfile_prefix_use = true) +#### `$hosts` +Hash containing the hosts to be backed up and optional overrides per host +(Default: undef (do nothing when no host given)) +#### `$interval` +How many backups of each level to keep. +Default is: + +```puppet + $interval = { + 'daily' => '7', + 'weekly' => '4', + 'monthly' => '6', + } +``` + +#### `$package_ensure` +(Default: present) +#### `$package_name` +(Default: rsnapshot) #### `$snapshot_root` global. the directory holding your backups. (Default: /backup) @@ -377,18 +394,6 @@ You will end up with a structure like: └── weekly.0 ``` -#### `$interval` -How many backups of each level to keep. -Default is: - -```puppet - $interval = { - 'daily' => '7', - 'weekly' => '4', - 'monthly' => '6', - } -``` - #### `$backup_scripts` Additional scripts to create, possible values are: mysql, psql, misc