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

Compare commits

...

39 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
13 changed files with 221 additions and 69 deletions

1
.gitignore vendored
View File

@ -2,3 +2,4 @@
Gemfile.lock
pkg/
vendor/
log/

View File

@ -2,13 +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
- 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

@ -6,3 +6,9 @@ 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

117
README.md
View File

@ -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:
@ -326,7 +329,7 @@ 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 => '*',
},
@ -336,6 +339,15 @@ Default is:
#### `$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:
@ -346,15 +358,11 @@ Default is:
'/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:
@ -369,8 +377,10 @@ Default is:
#### `$package_ensure`
(Default: present)
#### `$package_name`
(Default: rsnapshot)
#### `$snapshot_root`
global. the directory holding your backups.
(Default: /backup)
@ -637,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'
@ -665,6 +691,9 @@ Default is: undef
#### `$linux_lvm_mountpath`
Default is: undef
#### `$lockpath`
Default is: '/var/run/rsnapshot'
#### `$logpath`
Default is: '/var/log/rsnapshot'
@ -672,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.
@ -750,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

@ -12,8 +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, '')
$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',
@ -82,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"
@ -103,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)
@ -113,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) {

View File

@ -18,7 +18,9 @@ class rsnapshot (
$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,

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,6 +12,7 @@ class rsnapshot::params {
'Debian' => 'cron',
default => '',
}
$manage_cron = true
$cron_dir = '/etc/cron.d'
$config_backup_levels = [ 'daily', 'weekly', 'monthly' ]
$config_backup_defaults = true
@ -95,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 => '*',
},

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.1.1",
"version": "1.2.5",
"author": "loomsen",
"summary": "Configures rsnapshot.",
"license": "Apache-2.0",
@ -28,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

@ -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