1
0
mirror of https://github.com/krislamo/puppet-rsnapshot synced 2025-04-04 05:54:21 +00:00

Compare commits

...

81 Commits

Author SHA1 Message Date
512130b0d8
Bump version 2020-05-26 15:56:38 -04:00
f3cd595a8f
Add bool2num conversion for missing one_fs_num var 2020-05-21 16:05:23 -04:00
Administrator
03c31b78c2 Merge branch 'release/1.2.4'
* release/1.2.4:
  bump version
2018-04-16 17:39:49 +02:00
Administrator
679c742fd3 bump version 2018-04-16 17:39:47 +02:00
Administrator
9327c68d59 fix README, monthday cannot be 0 2018-04-16 17:36:26 +02:00
Norbert Varzariu
b72f1dfb36
Merge pull request #13 from hellp/patch-1
Fix: monthday in cronjob cannot be 0
2018-04-15 23:09:36 +02:00
Fabian Neumann
4820ededfa
Fix: monthday in cronjob cannot be 0
At least according to `man 5 cronjob` (and also Wikipedia ;) the day of month can only be 1-31. When the script created a cron.d file with a 0 at that position the script would not run at all.
2018-04-11 09:21:37 +02:00
Norbert Varzariu
c7e02c53dd Merge branch 'develop' 2017-04-24 20:46:46 +02:00
Norbert Varzariu
43cd819749 add test for tmpfiles.d dir 2017-04-24 20:46:04 +02:00
Norbert Varzariu
ab20bea159 Merge branch 'hotfix/create_tmpfiles_d' into develop 2017-04-24 20:44:18 +02:00
Norbert Varzariu
8aba7d0782 Merge branch 'hotfix/create_tmpfiles_d'
- create tmpfiles.d dir on hosts without systemd
2017-04-24 20:43:57 +02:00
Norbert Varzariu
a774e8b360 create /etc/tmpfiles.d dir on OS without systemd 2017-04-24 20:43:49 +02:00
Norbert Varzariu
02b61e2180 Merge branch 'release/1.2.2' into develop 2017-04-24 20:08:50 +02:00
Norbert Varzariu
063df85094 Merge branch 'release/1.2.2'
- fix issue#12: add /etc/tmpfiles.d/rsnapshot.conf to create run dir
  after reboot
2017-04-24 20:07:49 +02:00
Norbert Varzariu
765ed614b7 bump version 2017-04-24 20:07:43 +02:00
Norbert Varzariu
94b890df6d Merge branch 'feature/create_run_dir-issue#12' into develop
fix issue#12
2017-04-24 20:04:17 +02:00
Norbert Varzariu
a2dfd903c3 fix regex 2017-04-24 19:57:24 +02:00
Norbert Varzariu
3ae826a0e0 remove cron test, add file content match 2017-04-24 19:51:57 +02:00
Norbert Varzariu
efa6ef8808 add some tests 2017-04-24 19:42:31 +02:00
Norbert Varzariu
e1f5fa7ebe add tmpfiles.d config - issue#12 2017-04-24 19:25:16 +02:00
Norbert Varzariu
2590264764 Merge branch 'master' into develop 2017-04-24 18:57:57 +02:00
Norbert Varzariu
165bcd0766 Merge branch 'master' into develop 2017-04-24 18:56:39 +02:00
Norbert Varzariu
434afe708b Merge pull request #11 from martialblog/add_beaker
Add beaker test to module
2017-04-20 08:32:03 +02:00
Markus Opolka
395efceea9 Add beaker test to module 2017-04-19 22:55:18 +02:00
Norbert Varzariu
8f25dab414 Merge branch 'hotfix/1.2.1' into develop 2017-04-09 10:18:47 +02:00
Norbert Varzariu
4d810759ac Merge branch 'hotfix/1.2.1'
- fix link to contributors
2017-04-09 10:18:29 +02:00
Norbert Varzariu
090cf17370 bump version 2017-04-09 10:18:23 +02:00
Norbert Varzariu
1a68a16c79 Merge branch 'master' into develop 2017-04-09 10:16:14 +02:00
Norbert Varzariu
4124d18885 fix wrong link to list of contributors 2017-04-09 10:16:07 +02:00
Norbert Varzariu
8fb1b403e0 Merge branch 'release/1.2.0' into develop 2017-04-09 09:59:07 +02:00
Norbert Varzariu
e681cc959e Merge branch 'release/1.2.0'
- add option to unmanage cron
- fix undefined variables (when running puppet in strict mode)
2017-04-09 09:58:12 +02:00
Norbert Varzariu
9d42f4d0cd bump version 2017-04-09 09:58:04 +02:00
Norbert Varzariu
e999869e8c update docs 2017-04-09 09:55:54 +02:00
Norbert Varzariu
3089c49a66 Merge branch 'master' into develop 2017-04-09 09:55:29 +02:00
Norbert Varzariu
92a466d90a Merge pull request #10 from runejuhl/unmanage_cron
- Add option to unmanage cron
- Fix undefined vars (for running puppet in strict mode)
2017-04-09 09:41:55 +02:00
Rune Juhl Jacobsen
d2cf15621b Add option to avoid managing cron 2017-04-06 09:20:32 +02:00
Rune Juhl Jacobsen
450474165f Fix undefined variables 2017-04-06 09:19:17 +02:00
Norbert Varzariu
33f7031f2c Merge branch 'release/1.1.1' into develop 2017-04-02 10:55:15 +02:00
Norbert Varzariu
3821db2c4f Merge branch 'release/1.1.1' 2017-04-02 10:55:07 +02:00
Norbert Varzariu
d1a262800f bump version and bugfix 2017-04-02 10:54:52 +02:00
Norbert Varzariu
a78ccc1e43 Merge branch 'master' into develop 2017-04-02 10:46:35 +02:00
Administrator
6f92da8a17 add quotes to ssh command (misc script) 2017-04-02 10:45:25 +02:00
Administrator
a67dd7ea29 fix order of params 2017-04-02 10:40:07 +02:00
Norbert Varzariu
1be930d6cf Merge branch 'release/1.1.0' into develop 2017-04-02 10:20:36 +02:00
Norbert Varzariu
cbf6a3db52 Merge branch 'release/1.1.0'
- Feature: rsnapshot_prefix
- Feature: check_mk options
2017-04-02 10:19:52 +02:00
Norbert Varzariu
283ade9782 bump version 2017-04-02 10:19:18 +02:00
Norbert Varzariu
f92a8814ac Merge pull request #8 from loomsen/monotek-issue/2-cron_and_dots
Monotek issue/2 cron and dots
2017-04-02 10:10:59 +02:00
Administrator
85532a73b2 update readme 2017-04-02 09:24:14 +02:00
Administrator
87775af5c7 add prefix feature 2017-04-02 09:14:46 +02:00
Administrator
960b0090e4 try and fix travis build 2017-04-02 08:42:15 +02:00
Administrator
46c96d9b6c try and fix travis build 2017-04-02 08:40:45 +02:00
André Bauer
6e7d8e02f3 use prefix not by default 2017-04-01 23:27:18 +02:00
André Bauer
7dd4b98f1a fixed typo 2017-03-14 23:52:08 +01:00
André Bauer
5c35e8378b some fixes 2017-03-14 23:51:18 +01:00
Norbert Varzariu
c5de50bd71 Merge pull request #6 from monotek/check_mk_job
added check_mk mk-job support
2017-03-13 16:54:00 +01:00
André Bauer
9f0fdf0547 removed superfluous line 2017-02-27 12:00:54 +01:00
André Bauer
90ee92acb8 fix crontabs with dots on debian & added rsnapshot_prefix var 2017-02-27 11:58:18 +01:00
André Bauer
d7436ed582 added check_mk mk-job support 2017-02-27 09:49:59 +01:00
Norbert Varzariu
59cdc23ca1 add travis build status to readme 2017-02-07 18:08:10 +01:00
Norbert Varzariu
a394973d4a fix matrix build in travis.yml 2017-02-07 17:45:23 +01:00
Norbert Varzariu
a32ddcf208 remove jruby from travis.yml 2017-02-07 17:37:24 +01:00
Norbert Varzariu
7d39968e12 remove jruby from travis.yml 2017-02-07 17:37:02 +01:00
Norbert Varzariu
c6b7caefb7 add fixed ruby version to travis.yml 2017-02-07 17:33:01 +01:00
Norbert Varzariu
75e778ad9c Merge pull request #4 from jhoblitt/plumbing/concat-dep
missing dep on concat module
2016-12-21 22:19:45 +01:00
Norbert Varzariu
3dea0ba9e1 Merge pull request #3 from jhoblitt/plumbing/updates
plumbing updates to get tests working
2016-12-21 22:18:54 +01:00
Joshua Hoblitt
feb0898c01 add metadata-json-lint gem 2016-12-21 10:51:37 -07:00
Joshua Hoblitt
f6e32dd53b add missing dep on concat module 2016-12-21 10:51:37 -07:00
Joshua Hoblitt
cb04f5e70f add trivial .gitignore 2016-12-21 10:42:29 -07:00
Joshua Hoblitt
cf50ff6251 fix validation warning
Logic error
2016-12-21 10:36:49 -07:00
Joshua Hoblitt
decccb771f fix rspec tests
Missing ::osfamily fact.
2016-12-21 10:34:57 -07:00
Norbert Varzariu
1feea03aaa removed single quotes in misc script template 2016-06-27 13:21:03 +02:00
Norbert Varzariu
a37c7f71ea Merge branch 'release/1.0.3' into develop
- fix ordering of monthday and month in cron
2016-03-29 16:17:58 +02:00
Norbert Varzariu
f5003e3758 Merge branch 'release/1.0.3' 2016-03-29 16:17:43 +02:00
Norbert Varzariu
93be1c12ac bump version 2016-03-29 16:16:19 +02:00
Norbert Varzariu
ea87bf924a Merge pull request #1 from nerdlich/patch-1
Correct order of monthday/month
2016-03-28 13:36:54 +02:00
nerdlich
c79d1c7fc6 Correct order of monthday/month 2016-03-24 22:53:52 +01:00
Norbert Varzariu
98519a8ebc Merge branch 'develop' 2016-01-26 08:29:52 +01:00
Norbert Varzariu
a386a710b7 quote psql password in scripts 2016-01-26 08:29:42 +01:00
Norbert Varzariu
0c5afff356 Merge branch 'release/1.0.2' into develop 2016-01-25 09:48:38 +01:00
Norbert Varzariu
3c9357f3fe Merge branch 'release/1.0.2'
- Update README
2016-01-25 09:48:18 +01:00
Norbert Varzariu
1fe21e5bba Merge branch 'release/1.0.1'
- small fixes to psql backup script
2016-01-25 09:41:03 +01:00
19 changed files with 335 additions and 146 deletions

View File

@ -1,8 +1,10 @@
fixtures:
forge_modules:
stdlib:
stdlib:
repo: "puppetlabs/stdlib"
epel:
epel:
repo: "stahnma/epel"
concat:
repo: "puppetlabs/concat"
symlinks:
"rsnapshot": "#{source_dir}"

5
.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
.bundle
Gemfile.lock
pkg/
vendor/
log/

View File

@ -2,11 +2,20 @@
sudo: false
language: ruby
cache: bundler
bundler_args: --without system_tests
script: "bundle exec rake validate && bundle exec rake spec SPEC_OPTS='--format documentation'"
matrix:
fast_finish: true
include:
- rvm: 2.1
env: PUPPET_GEM_VERSION="~> 4.0"
script: "bundle exec rake validate"
- rvm: 2.1
env: PUPPET_GEM_VERSION="~> 4.0"
script: "bundle exec rake spec SPEC_OPTS='--format documentation'"
- rvm: 2.1
env: PUPPET_GEM_VERSION="~> 4.0"
script: "bundle exec rake beaker"
services: docker
sudo: required
notifications:
email: false

View File

@ -5,3 +5,10 @@ gem 'puppet', puppetversion
gem 'puppetlabs_spec_helper', '>= 0.8.2'
gem 'puppet-lint', '>= 1.0.0'
gem 'facter', '>= 1.7.0'
gem 'metadata-json-lint'
group :acceptance do
gem 'beaker-rspec', '5.6.0'
gem 'serverspec', require: false
gem 'specinfra', require: false
end

200
README.md
View File

@ -1,6 +1,6 @@
# rsnapshot
[![Build Status](https://travis-ci.org/loomsen/puppet-rsnapshot.svg?branch=master)](https://travis-ci.org/loomsen/puppet-rsnapshot)
## NOTE: ! Configuration for backup_scripts changed with version 0.4.0 (it was pretty useless in prior versions) !
# rsnapshot
#### Table of Contents
@ -42,6 +42,7 @@ This module is best used with an ENC like hiera. It will make your config much e
* This module will install the rsnapshot package on your system
* This module will manage the rsnapshot config on your system
* This module will manage cron entries for your configured nodes
* This module will manage the cron service on your system
### Setup Requirements
@ -150,11 +151,13 @@ rsnapshot::hosts:
The defaults are pretty reasonable, I hope. However, you may override pretty much anything. Available parameters are discussed below.
#### Specials
As mentioned, this module will generate random time entries for your hosts. The random number generator is hashed with hostname and backup_level, so the randomness will be repeatable per host.level. This is important so puppet won't override the crons with each run.
This module will generate random time entries for your hosts. The random number generator is hashed with hostname and backup_level, so the randomness will be repeatable per host.level. This is important so puppet won't override the crons with each run.
You may specify time ranges as follows:
* default cron syntax
* an array with allowed values, for example, if you want the backup for a host to run between 1am and 5am, you would override the hours setting for the host in question.
in hiera this would look like: (Explanation see below)
* an array with allowed values
- for example, if you want the backup for a host to run between 1am and 5am, you would override the hours setting for the host in question.
In hiera this would look like: (Explanation see below)
```yaml
rsnapshot::hosts:
@ -205,41 +208,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
@ -347,13 +329,58 @@ Default is:
monthly => {
minute => '0..59',
hour => '0..23', # you could also do: ['21..23','0..4','5'],
monthday => '0..28',
monthday => '1..28',
month => '*',
weekday => '*',
},
}
```
#### `$cron_dir`
Directory to drop the cron files to. Crons will be created per host.
(Default: /etc/cron.d)
#### `$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)
#### `$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' => './',
}
```
#### `$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 +404,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
@ -632,9 +647,25 @@ Default is: undef
#### `$cmd_postexec`
Default is: undef
#### `$use_lvm`
#### `$du_args`
Default is: undef
#### `$exclude`
Default is: []
#### `$exclude_file`
Other than this might suggest, the default behavior is to create an exclude file per host.
Default is: undef
#### `$include`
Default is: []
#### `$include_file`
Default is: undef
#### `$link_dest`
Default is: false
#### `$linux_lvm_cmd_lvcreate`
Default is: undef # '/sbin/lvcreate'
@ -660,6 +691,9 @@ Default is: undef
#### `$linux_lvm_mountpath`
Default is: undef
#### `$lockpath`
Default is: '/var/run/rsnapshot'
#### `$logpath`
Default is: '/var/log/rsnapshot'
@ -667,73 +701,55 @@ Default is: '/var/log/rsnapshot'
unused, we are logging to $logpath/$host.log
Default is: '/var/log/rsnapshot.log'
#### `$lockpath`
Default is: '/var/run/rsnapshot'
#### `$snapshot_root`
Default is: '/backup/'
#### `$no_create_root`
Boolean: true or false
Default is: undef
#### `$verbose`
Default is: '2'
#### `$loglevel`
Default is: '4'
#### `$stop_on_stale_lockfile`
#### `$manage_cron`
Should this module manage the cron service?
Default is: true
#### `$no_create_root`
Boolean: true or false
Default is: undef
#### `$rsync_short_args`
Default is: '-az'
#### `$rsync_long_args`
rsync defaults are: --delete --numeric-ids --relative --delete-excluded
Default is: undef
#### `$ssh_args`
Default is: undef
#### `$du_args`
Default is: undef
#### `$one_fs`
Default is: undef
#### `$retain`
Default is: { }
#### `$include`
Default is: []
#### `$exclude`
Default is: []
#### `$include_file`
#### `$rsync_short_args`
Default is: '-az'
#### `$rsync_long_args`
rsync defaults are: --delete --numeric-ids --relative --delete-excluded
Default is: undef
#### `$exclude_file`
Other than this might suggest, the default behavior is to create an exclude file per host.
#### `$rsync_numtries`
Default is: 1
#### `$snapshot_root`
Default is: '/backup/'
#### `$ssh_args`
Default is: undef
#### `$link_dest`
Default is: false
#### `$stop_on_stale_lockfile`
Boolean: true or false
Default is: undef
#### `$sync_first`
Default is: false
#### `$rsync_numtries`
Default is: 1
#### `$use_lvm`
Default is: undef
#### `$use_lazy_deletes`
Default is: false
#### `$verbose`
Default is: '2'
## Limitations
Currently, this module support CentOS, Fedora, Ubuntu and Debian.
@ -745,5 +761,5 @@ want it off the face of the planet, feel free to get in touch with me.
Norbert Varzariu (loomsen)
## Contributors
Please see the [list of contributors.](https://github.com/loomsen/puppet-bloonix_agent/graphs/contributors)
Please see the [list of contributors.](https://github.com/loomsen/puppet-rsnapshot/graphs/contributors)
A big thank you to Hendrik Horeis <hendrik.horeis@gmail.com> for all his input and testing of this module.

View File

@ -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::config_cronfile_prefix_use, false)
$cronfile_prefix = pick($rsnapshot::cronfile_prefix, $rsnapshot::params::config_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)
@ -80,7 +82,7 @@ class rsnapshot::config (
$rsync_numtries = pick_undef($hash['rsync_numtries'], $rsnapshot::params::config_rsync_numtries)
#$backup_scripts = pick_undef($hash['backup_scripts'], $rsnapshot::params::config_backup_scripts)
$snapshot_dir = "${config_snapshot_root}/${host}"
$snapshot_dir = "${snapshot_root}/${host}"
$config = "${conf_d}/${host}.rsnapshot.conf"
$lockfile = "${lockpath}/${host}.pid"
$logfile = "${logpath}/${host}.log"
@ -101,6 +103,7 @@ class rsnapshot::config (
if ! ( $interval and $retain ) {
$interval = pick($hash['interval'], $rsnapshot::params::config_interval)
}
# rsnapshot wants numeric values
if $link_dest {
$link_dest_num = bool2num($link_dest)
@ -111,6 +114,9 @@ class rsnapshot::config (
if $use_lazy_deletes {
$use_lazy_deletes_num = bool2num($use_lazy_deletes)
}
if $one_fs {
$one_fs_num = bool2num($one_fs)
}
$real_include = $rsnapshot::include + $include
unless empty($real_include) {
@ -135,7 +141,7 @@ class rsnapshot::config (
content => template('rsnapshot/rsnapshot.erb'),
}
if has_key($hash, backup_scripts) {
$hash[backup_scripts].each |$script, $scriptconf| {
@ -158,17 +164,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 +216,3 @@ class rsnapshot::config (
}
}
}

View File

@ -5,20 +5,26 @@
# === 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,
$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,
$backup_user = $rsnapshot::params::config_backup_user,
$cron_service_name = $rsnapshot::params::cron_service_name,
$manage_cron = $rsnapshot::params::manage_cron,
$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
@ -32,4 +38,3 @@ class rsnapshot (
contain '::rsnapshot::service'
}
}

View File

@ -10,5 +10,18 @@ class rsnapshot::install {
ensure => $rsnapshot::package_ensure,
}
# ensure run directory exists (systemd clears /var/run, so rsnapshot can't create PID files after reboot - issue#12)
$lockpath = pick($rsnapshot::lockpath, $rsnapshot::params::config_lockpath, '/var/run/rsnapshot')
$tmpfiles_d = '/etc/tmpfiles.d'
file { "${tmpfiles_d}":
ensure => directory,
}
file { "${tmpfiles_d}/rsnapshot.conf":
ensure => present,
content => "D ${lockpath} 0755 root root -",
}
}

View File

@ -12,10 +12,12 @@ class rsnapshot::params {
'Debian' => 'cron',
default => '',
}
$manage_cron = true
$cron_dir = '/etc/cron.d'
$config_backup_levels = [ 'daily', 'weekly', 'monthly' ]
$config_backup_defaults = true
$config_version = '1.2'
$config_check_mk_job = false
$config_cmd_cp = '/bin/cp'
$config_cmd_rm = '/bin/rm'
$config_cmd_rsync = '/usr/bin/rsync'
@ -25,6 +27,8 @@ class rsnapshot::params {
$config_cmd_rsnapshot_diff = '/usr/bin/rsnapshot-diff'
$config_cmd_preexec = undef
$config_cmd_postexec = undef
$config_cronfile_prefix = 'rsnapshot_'
$config_cronfile_prefix_use = false
$config_use_lvm = undef
$config_linux_lvm_cmd_lvcreate = undef # '/sbin/lvcreate'
$config_linux_lvm_cmd_lvremove = undef # '/sbin/lvremove'
@ -43,7 +47,7 @@ class rsnapshot::params {
$config_loglevel = '4'
$config_stop_on_stale_lockfile = undef # bool
$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
@ -92,7 +96,7 @@ class rsnapshot::params {
monthly => {
minute => '0..59',
hour => '0..23', # you could also do: ['21..23','0..4','5'],
monthday => '0..28',
monthday => '1..28',
month => '*',
weekday => '*',
},
@ -124,6 +128,6 @@ class rsnapshot::params {
],
default => [],
},
}
},
}
}

View File

@ -1,10 +1,13 @@
# == Class: rsnapshot::service
#
# Reloads cron
class rsnapshot::service {
service { $rsnapshot::cron_service_name:
ensure => running,
# Reloads cron
class rsnapshot::service (
$manage_cron = $rsnapshot::manage_cron
) {
if $manage_cron {
service { $rsnapshot::cron_service_name:
ensure => running,
}
}
}

View File

@ -1,6 +1,6 @@
{
"name": "loomsen-rsnapshot",
"version": "1.0.2",
"version": "1.2.5",
"author": "loomsen",
"summary": "Configures rsnapshot.",
"license": "Apache-2.0",
@ -12,13 +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-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": [
{
@ -31,11 +28,11 @@
},
{
"operatingsystem": "Ubuntu",
"operatingsystemrelease": [ "12.04", "10.04", "14.04" ]
"operatingsystemrelease": [ "12.04", "12.10", "13.04", "13.10", "14.04", "14.10", "15.04", "15.10", "16.04", "16.10", "17.04" ]
},
{
"operatingsystem": "Fedora",
"operatingsystemrelease": [ "17", "18", "19", "20", "21", "22", "23", "24" ]
"operatingsystemrelease": [ "17", "18", "19", "20", "21", "22", "23", "24", "25" ]
}
]
}

View File

@ -0,0 +1,63 @@
require 'spec_helper_acceptance'
describe 'rsnapshot' do
context 'with defaults' do
it 'run idempotently' do
pp = <<-EOS
class { 'rsnapshot':
hosts => {
'localhost' => {},
'example.com' => {
backup_defaults => false,
backup => {
'/var/' => './'
}
}
}
}
EOS
apply_manifest(pp, catch_failures: true)
apply_manifest(pp, catch_changes: true)
end
end
context 'packages installed' do
describe package('rsnapshot') do
it { is_expected.to be_installed }
end
end
context 'files provisioned' do
describe file('/etc/tmpfiles.d') do
it { should be_directory }
end
describe file('/etc/tmpfiles.d/rsnapshot.conf') do
it { is_expected.to exist }
its(:content) { is_expected.to match 'D /var/run/rsnapshot 0755 root root -' }
end
describe file('/var/run/rsnapshot') do
it { should be_directory }
end
describe file('/etc/rsnapshot/localhost.rsnapshot.conf') do
it { is_expected.to exist }
its(:content) { is_expected.to match 'backup' }
end
describe file('/etc/rsnapshot/example.com.rsnapshot.conf') do
it { is_expected.to exist }
its(:content) { is_expected.to match 'backup\troot@example.com:/var/\t./' }
end
describe file('/etc/rsnapshot.conf') do
it { is_expected.to exist }
its(:content) { is_expected.to match 'localhost' }
its(:content) { is_expected.to match 'example.com' }
end
describe file('/etc/rsnapshot/localhost.rsnapshot.conf') do
it { is_expected.to exist }
its(:content) { is_expected.to match 'backup' }
end
describe file('/etc/cron.d/example_com') do
it { is_expected.to exist }
its(:content) { is_expected.to match 'example.com' }
end
end
end

View File

@ -0,0 +1,15 @@
HOSTS:
debian-8-x64:
platform: debian-8-amd64
hypervisor: docker
image: debian:8
docker_container_name: puppet_rsnapshot
docker_preserve_image: true
docker_cmd: '["/sbin/init"]'
docker_image_commands:
- 'echo deb http://ftp.debian.org/debian jessie-backports main >> /etc/apt/sources.list'
- 'apt-get update && apt-get install -y cron locales-all net-tools wget'
- 'rm -f /usr/sbin/policy-rc.d'
CONFIG:
trace_limit: 200
masterless: true

View File

@ -1,5 +1,7 @@
require 'spec_helper'
describe 'rsnapshot' do
let(:facts) {{ :osfamily => 'RedHat' }}
it { should contain_class('rsnapshot::params') }
it { is_expected.to compile }
end

View File

@ -0,0 +1,26 @@
require 'puppet'
require 'beaker-rspec'
require 'yaml'
install_puppet_agent_on hosts, {}
RSpec.configure do |c|
# Module root and settings
module_root = File.expand_path(File.join(File.dirname(__FILE__), '..'))
module_name = module_root.split('/').last.sub('-', '_').split('_').last()
c.formatter = :documentation
c.max_displayed_failure_line_count = 5
c.before :suite do
puts 'Install module'
puppet_module_install(source: module_root, module_name: module_name)
hosts.each do |host|
puts 'Install fixtures'
on host, puppet('module','install','stahnma/epel')
on host, puppet('module','install','puppetlabs/stdlib')
on host, puppet('module','install','puppetlabs/concat')
end
end
end

View File

@ -1 +1 @@
<%= @minute %> <%= @hour %> <%= @month %> <%= @monthday %> <%= @weekday %> root /usr/bin/rsnapshot -c <%= @config %> <%= @level %>
<%= @minute %> <%= @hour %> <%= @monthday %> <%= @month %> <%= @weekday %> root<% if scope['rsnapshot::check_mk_job'] == true -%> mk-job rsnapshot_<%= @host %>_<%= @level %><% end -%> /usr/bin/rsnapshot -c <%= @config %> <%= @level %>

View File

@ -2,6 +2,6 @@
#This file is managed by puppet
#
<%@commands.each do |command| -%>
ssh -l <%=@backup_user-%> <%=@host-%> '<%=command-%>'
ssh -l <%=@backup_user-%> <%=@host-%> <%=command-%>
<%end-%>

View File

@ -5,7 +5,6 @@
#
host=<%=@host%>
user=<%=@dbbackup_user%>
pass=<%=@dbbackup_password%>
<% if (@dbbackup_user == 'root' && @dbbackup_password == '') -%>
dbs=(
@ -17,7 +16,7 @@ dbs=(
)
<%end-%>
for db in "${dbs[@]}"; do
<% if (@dbbackup_user == 'root' && @dbbackup_password = '' )-%>
<% if (@dbbackup_user == 'root' && @dbbackup_password == '' )-%>
ssh -l <%=@backup_user-%> "$host" "<%=@dumper-%> <%=@dump_flags-%> ${db}" > "$db".sql
<%else-%>
ssh -l <%=@backup_user-%> "$host" "<%=@dumper-%> --user=<%=@dbbackup_user-%> --password='<%=@dbbackup_password-%>' <%=@dump_flags-%> ${db}" > "$db".sql

View File

@ -5,14 +5,12 @@
#
host=<%=@host%>
user=<%=@dbbackup_user%>
pass=<%=@dbbackup_password%>
#PGPASSWORD="$pass"
dbs=(
$(ssh -l <%=@backup_user-%> "$host" "PGPASSWORD=${pass} psql -U ${user} -Atc \"SELECT datname FROM pg_database WHERE NOT datistemplate AND NOT datname ~ '<%@ignore_dbs.each do |db|-%><%if db == @ignore_dbs.last-%><%=db-%><%else-%><%=db-%>|<%end-%><%end-%>'\"")
$(ssh -l <%=@backup_user-%> "$host" "PGPASSWORD='<%=@dbbackup_password%>' psql -U ${user} -Atc \"SELECT datname FROM pg_database WHERE NOT datistemplate AND NOT datname ~ '<%@ignore_dbs.each do |db|-%><%if db == @ignore_dbs.last-%><%=db-%><%else-%><%=db-%>|<%end-%><%end-%>'\"")
)
for db in "${dbs[@]}"; do
ssh -l <%=@backup_user-%> "$host" "PGPASSWORD=${pass} <%=@dumper-%> -U ${user} <%=@dump_flags-%> ${db}" > "$db".sql
ssh -l <%=@backup_user-%> "$host" "PGPASSWORD='<%=@dbbackup_password%>' <%=@dumper-%> -U ${user} <%=@dump_flags-%> ${db}" > "$db".sql
wait
<% if @compress != '' -%>
<%=@compress-%> "$db".sql