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

Compare commits

..

No commits in common. "master" and "1.2.0" have entirely different histories.

11 changed files with 59 additions and 205 deletions

1
.gitignore vendored
View File

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

View File

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

115
README.md
View File

@ -42,7 +42,6 @@ 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
@ -151,13 +150,11 @@ rsnapshot::hosts:
The defaults are pretty reasonable, I hope. However, you may override pretty much anything. Available parameters are discussed below.
#### Specials
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.
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.
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:
@ -329,7 +326,7 @@ Default is:
monthly => {
minute => '0..59',
hour => '0..23', # you could also do: ['21..23','0..4','5'],
monthday => '1..28',
monthday => '0..28',
month => '*',
weekday => '*',
},
@ -339,15 +336,6 @@ 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:
@ -358,11 +346,15 @@ 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:
@ -377,10 +369,8 @@ Default is:
#### `$package_ensure`
(Default: present)
#### `$package_name`
(Default: rsnapshot)
#### `$snapshot_root`
global. the directory holding your backups.
(Default: /backup)
@ -647,25 +637,9 @@ Default is: undef
#### `$cmd_postexec`
Default is: undef
#### `$du_args`
#### `$use_lvm`
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'
@ -691,9 +665,6 @@ Default is: undef
#### `$linux_lvm_mountpath`
Default is: undef
#### `$lockpath`
Default is: '/var/run/rsnapshot'
#### `$logpath`
Default is: '/var/log/rsnapshot'
@ -701,22 +672,26 @@ Default is: '/var/log/rsnapshot'
unused, we are logging to $logpath/$host.log
Default is: '/var/log/rsnapshot.log'
#### `$loglevel`
Default is: '4'
#### `$lockpath`
Default is: '/var/run/rsnapshot'
#### `$manage_cron`
Should this module manage the cron service?
Default is: true
#### `$snapshot_root`
Default is: '/backup/'
#### `$no_create_root`
Boolean: true or false
Default is: undef
#### `$one_fs`
Default is: undef
#### `$verbose`
Default is: '2'
#### `$retain`
Default is: { }
#### `$loglevel`
Default is: '4'
#### `$stop_on_stale_lockfile`
Boolean: true or false
Default is: undef
#### `$rsync_short_args`
Default is: '-az'
@ -725,31 +700,45 @@ Default is: '-az'
rsync defaults are: --delete --numeric-ids --relative --delete-excluded
Default is: undef
#### `$rsync_numtries`
Default is: 1
#### `$snapshot_root`
Default is: '/backup/'
#### `$ssh_args`
Default is: undef
#### `$stop_on_stale_lockfile`
Boolean: true or false
#### `$du_args`
Default is: undef
#### `$one_fs`
Default is: undef
#### `$retain`
Default is: { }
#### `$include`
Default is: []
#### `$exclude`
Default is: []
#### `$include_file`
Default is: undef
#### `$exclude_file`
Other than this might suggest, the default behavior is to create an exclude file per host.
Default is: undef
#### `$link_dest`
Default is: false
#### `$sync_first`
Default is: false
#### `$use_lvm`
Default is: undef
#### `$rsync_numtries`
Default is: 1
#### `$use_lazy_deletes`
Default is: false
#### `$verbose`
Default is: '2'
## Limitations
Currently, this module support CentOS, Fedora, Ubuntu and Debian.
@ -761,5 +750,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-rsnapshot/graphs/contributors)
Please see the [list of contributors.](https://github.com/loomsen/puppet-bloonix_agent/graphs/contributors)
A big thank you to Hendrik Horeis <hendrik.horeis@gmail.com> for all his input and testing of this module.

View File

@ -103,7 +103,6 @@ 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)
@ -114,9 +113,6 @@ 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

@ -10,18 +10,5 @@ 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

@ -96,7 +96,7 @@ class rsnapshot::params {
monthly => {
minute => '0..59',
hour => '0..23', # you could also do: ['21..23','0..4','5'],
monthday => '1..28',
monthday => '0..28',
month => '*',
weekday => '*',
},

View File

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

View File

@ -1,63 +0,0 @@
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

@ -1,15 +0,0 @@
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,26 +0,0 @@
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