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 diff --git a/manifests/config.pp b/manifests/config.pp index 702765f..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', @@ -31,7 +33,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 +137,7 @@ class rsnapshot::config ( content => template('rsnapshot/rsnapshot.erb'), } - + if has_key($hash, backup_scripts) { $hash[backup_scripts].each |$script, $scriptconf| { @@ -158,17 +160,37 @@ class rsnapshot::config ( content => template("rsnapshot/${script}.sh.erb"), mode => '0755', } - + + } + } + + 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) + 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}" } } - $cronfile = "${cron_dir}/${host}" concat { $cronfile: } # 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, @@ -190,4 +212,3 @@ class rsnapshot::config ( } } } - diff --git a/manifests/init.pp b/manifests/init.pp index a011f10..f586bcc 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -5,22 +5,24 @@ # === 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, - $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, + $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 { $default_backup_scripts = $rsnapshot::params::backup_scripts + $backup_scripts diff --git a/manifests/params.pp b/manifests/params.pp index e905945..b106631 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -43,6 +43,8 @@ class rsnapshot::params { $config_verbose = '2' $config_loglevel = '4' $config_stop_on_stale_lockfile = undef # bool + $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 @@ -125,6 +127,6 @@ class rsnapshot::params { ], default => [], }, - } + }, } } diff --git a/metadata.json b/metadata.json index c160005..38dad5c 100644 --- a/metadata.json +++ b/metadata.json @@ -12,14 +12,10 @@ "backup", "rsync" ], - "requirements": [ - { "name": "pe", "version_requirement": ">= 4.0.0" }, - { "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": [ {