1
0
mirror of https://github.com/krislamo/puppet-rsnapshot synced 2025-09-13 15:59:28 +00:00

50 Commits

Author SHA1 Message Date
Norbert Varzariu
16630094cb update README to reflect for v0.4.0 changes in backup_scripts 2016-01-22 10:40:17 +01:00
Norbert Varzariu
d57d87532b add note about range notation to README 2016-01-22 10:28:10 +01:00
Norbert Varzariu
bc3a33e6f0 fix merge conflict 2016-01-22 10:01:39 +01:00
Norbert Varzariu
0f6a6ebe31 fix template 2016-01-22 10:00:49 +01:00
Norbert Varzariu
c80ba48d4c templates/rsnapshot.erb 2016-01-22 09:58:57 +01:00
Norbert Varzariu
e823fef87c fix templates (do not create include/exclude file entries if no in/excludes given) 2016-01-22 09:56:33 +01:00
Norbert Varzariu
638ec858b0 Merge branch 'develop'
- restart cron service after config generation
2016-01-22 09:32:02 +01:00
Norbert Varzariu
d71239645f restart cron service after config change 2016-01-22 09:31:51 +01:00
Norbert Varzariu
7318f9b2dc Merge branch 'release/0.5.1' into develop 2016-01-22 09:18:03 +01:00
Norbert Varzariu
bf55ad97b6 Merge branch 'release/0.5.1' 2016-01-22 09:17:51 +01:00
Norbert Varzariu
4dedb43a22 bump version to 0.5.1 2016-01-22 09:17:49 +01:00
Norbert Varzariu
81ef65edca quick fix trailing slash in params.pp snapshot_root 2016-01-22 09:17:15 +01:00
Norbert Varzariu
9ed7f44a28 Merge branch 'release/0.5.0' into develop 2016-01-22 09:13:13 +01:00
Norbert Varzariu
d786e0088e fix merge issue 2016-01-22 09:12:32 +01:00
Norbert Varzariu
e8a287c4f8 bump version to 0.5.0 2016-01-22 09:10:12 +01:00
Norbert Varzariu
a28b27c505 Merge branch 'feature/rewrite_to_use_deep_merge' into develop
- rewrite large parts of cron file generation
- now using deep_merge to merge possible overrides into the default hash
  (eliminates a lit of spaghetti code)
2016-01-22 09:08:28 +01:00
Norbert Varzariu
0235f202b4 rewrite cron file generation using deep_merge (why is this function undocumented?) 2016-01-22 09:08:12 +01:00
Norbert Varzariu
a5558bf329 Merge branch 'master' of gitlab.flx.bn:devops/puppet-rsnapshot 2016-01-21 16:13:35 +01:00
Norbert Varzariu
d4cd5282f7 quick fixes 2016-01-21 16:12:07 +01:00
Norbert Varzariu
0a489a4eb8 quick fixes 2016-01-21 16:11:56 +01:00
Norbert Varzariu
80d1756087 Merge branch 'release/0.4.2' into develop 2016-01-21 15:19:31 +01:00
Norbert Varzariu
8f7da1a1ee Merge branch 'release/0.4.2'
- add db backup template scripts
2016-01-21 15:19:06 +01:00
Norbert Varzariu
413ca69760 bump version to 0.4.2 2016-01-21 15:19:02 +01:00
Norbert Varzariu
c7756458f1 Merge branch 'feature/rewrite_to_use_deep_merge' 2016-01-21 15:15:12 +01:00
Norbert Varzariu
d5e4ebbb9c add backup script templates 2016-01-21 15:11:10 +01:00
Norbert Varzariu
d6ea0821c0 Merge branch 'release/0.4.1' into develop 2016-01-20 11:45:58 +01:00
Norbert Varzariu
2cccc86433 Merge branch 'release/0.4.1' 2016-01-20 11:45:41 +01:00
Norbert Varzariu
e39f638dfa bump version to 0.4.1 2016-01-20 11:45:31 +01:00
Norbert Varzariu
ab9ec44ced ensure in-/exclude file is absent if no in-/excludes given 2016-01-20 11:41:59 +01:00
Norbert Varzariu
941036d986 testing 2016-01-20 10:38:27 +01:00
Norbert Varzariu
396d71cb8e testing 2016-01-20 10:27:29 +01:00
Norbert Varzariu
d1008c99eb add warning to README about configuration change in 0.4.0 2016-01-19 17:39:46 +01:00
Norbert Varzariu
ed9de1e8cd Merge branch 'release/0.4.0' into develop 2016-01-19 17:38:14 +01:00
Norbert Varzariu
d5d7507fa9 Merge branch 'release/0.4.0' 2016-01-19 17:38:03 +01:00
Norbert Varzariu
e68374cf43 bump version and update README 2016-01-19 17:37:59 +01:00
Norbert Varzariu
53e34799f5 Merge branch 'feature/create_backup_scripts' into develop 2016-01-19 17:23:45 +01:00
Norbert Varzariu
455ba13572 add backup script feature, a lot of fixes 2016-01-19 17:23:40 +01:00
Norbert Varzariu
5fe01d46e1 add routine to create mysql, psql and misc scripts 2016-01-19 16:01:54 +01:00
Norbert Varzariu
5f65000606 Merge branch 'develop' 2016-01-18 20:53:46 +01:00
Norbert Varzariu
09b6b4431c add basic tests 2016-01-18 20:53:24 +01:00
Norbert Varzariu
fce58cf09a Merge branch 'develop' 2016-01-18 19:58:32 +01:00
Norbert Varzariu
03c73285ca fix metadata 2016-01-18 19:58:19 +01:00
Norbert Varzariu
549905f750 Merge branch 'release/0.3.2' into develop 2016-01-18 19:57:35 +01:00
Norbert Varzariu
5cccf8200d Merge branch 'release/0.3.2' 2016-01-18 19:56:18 +01:00
Norbert Varzariu
ff8962cf47 bump version to 0.3.2 2016-01-18 19:56:05 +01:00
Norbert Varzariu
0b21f0e751 remove class inheritance in install.pp 2016-01-18 19:54:53 +01:00
Norbert Varzariu
ae2083c6ee Merge branch 'develop' 2016-01-18 12:11:28 +01:00
Norbert Varzariu
abae53b1ad fix travis.yml 2016-01-18 12:10:53 +01:00
Norbert Varzariu
743cecfc2d Merge branch 'release/0.3.1' into develop 2016-01-18 11:23:41 +01:00
Norbert Varzariu
8e62ff526e Merge branch 'release/0.3.1' 2016-01-18 11:23:21 +01:00
18 changed files with 253 additions and 162 deletions

3
.bundle/config Normal file
View File

@@ -0,0 +1,3 @@
---
BUNDLE_PATH: vendor/bundle
BUNDLE_DISABLE_SHARED_GEMS: '1'

View File

@@ -1,5 +1,8 @@
fixtures: fixtures:
repositories: forge_modules:
"stdlib": "git://github.com/puppetlabs/puppetlabs-stdlib.git" stdlib:
repo: "puppetlabs/stdlib"
epel:
repo: "stahnma/epel"
symlinks: symlinks:
"rsnapshot": "#{source_dir}" "rsnapshot": "#{source_dir}"

View File

@@ -3,17 +3,10 @@ sudo: false
language: ruby language: ruby
cache: bundler cache: bundler
bundler_args: --without system_tests bundler_args: --without system_tests
script: "bundle exec rake validate && bundle exec rake lint && bundle exec rake spec SPEC_OPTS='--format documentation'" script: "bundle exec rake validate && bundle exec rake spec SPEC_OPTS='--format documentation'"
matrix: matrix:
fast_finish: true fast_finish: true
include: include:
- rvm: 1.8.7
env: PUPPET_GEM_VERSION="~> 3.0"
- rvm: 1.9.3
env: PUPPET_GEM_VERSION="~> 3.0"
- rvm: 2.0.0
env: PUPPET_GEM_VERSION="~> 3.0"
- rvm: 2.1.6
env: PUPPET_GEM_VERSION="~> 4.0" env: PUPPET_GEM_VERSION="~> 4.0"
notifications: notifications:
email: false email: false

37
Gemfile
View File

@@ -1,32 +1,7 @@
source ENV['GEM_SOURCE'] || 'https://rubygems.org' source 'https://rubygems.org'
group :development, :unit_tests do puppetversion = ENV.key?('PUPPET_VERSION') ? "#{ENV['PUPPET_VERSION']}" : ['>= 4.0']
gem 'rspec-core', '~> 3.1.7', :require => false gem 'puppet', puppetversion
gem 'rspec-puppet', '~> 2.1', :require => false gem 'puppetlabs_spec_helper', '>= 0.8.2'
gem 'puppetlabs_spec_helper', :require => false gem 'puppet-lint', '>= 1.0.0'
gem 'simplecov', :require => false gem 'facter', '>= 1.7.0'
gem 'puppet_facts', :require => false
gem 'json', :require => false
gem 'metadata-json-lint', :require => false
gem 'puppet-lint', '< 1.1.0', :require => false
end
group :system_tests do
gem 'beaker-rspec', :require => false
gem 'serverspec', :require => false
gem 'beaker-puppet_install_helper', :require => false
end
if facterversion = ENV['FACTER_GEM_VERSION']
gem 'facter', facterversion, :require => false
else
gem 'facter', :require => false
end
if puppetversion = ENV['PUPPET_GEM_VERSION']
gem 'puppet', puppetversion, :require => false
else
gem 'puppet', :require => false
end
# vim:ft=ruby

View File

@@ -1,5 +1,7 @@
# rsnapshot # rsnapshot
## NOTE: ! Configuration for backup_scripts changed with version 0.4.0 (it was pretty useless in prior versions) !
#### Table of Contents #### Table of Contents
1. [Overview](#overview) 1. [Overview](#overview)
@@ -238,6 +240,9 @@ Default is:
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. 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 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
`[ '20..23','0..2' ]` `[ '20..23','0..2' ]`
For the range feature to work, hours >0 and <10 must not have a preceding zero.
Wrong: `00.09`
Correct: `0..9`
Example: Example:
```puppet ```puppet
@@ -358,6 +363,92 @@ Default is:
} }
``` ```
#### `$backup_scripts`
Additional scripts to create, possible values are: mysql, psql, misc
Default is:
```puppet
$backup_scripts = {
mysql => {
dbbackup_user => 'root',
dbbackup_password => 'myPassWord',
},
psql => {
dbbackup_user => 'postgres',
dbbackup_password => '',
},
misc => {},
}
```
Configuration example:
```yaml
rsnapshot::backup_scripts:
mysql:
dbbackup_user: 'dbbackup'
dbbackup_password: 'hunter2'
psql:
dbbackup_user: 'dbbackup'
dbbackup_password: 'yeshorsebatterystaple'
rsnapshot::hosts:
foobar.com:
backup_scripts:
mysql:
psql:
dbbackup_user: 'backupuser'
dbbackup_password: 'password'
bazqux:de:
backup_scripts:
mysql:
dbbackup_user: 'myuser'
dbbackup_password: 'mypassword'
```
This creates
- a mysql and a psql backup script for `foobar.com` using the credentials `dbbackup:hunter2` for mysql and `dbbackup:yeshorsebatterystaple` for psql
- a mysql backup script for `bazqux.de` using the credentials `myuser:mypassword`
The scripts look like this:
mysql:
```bash
#!/bin/bash
host=bazqux.de
user=myuser
pass=mypassword
dbs=( $(mysql -h "$host" -u "$user" -p"$pass" -e 'show databases' | sed '1d;/information_schema/d;/performance_schema/d') )
for db in "${dbs[@]}"; do
mysqldump --host="$host" --user="$user" --password="$pass" --single-transaction --quick --routines --ignore-table=mysql.event "$db" > "$db".sql
wait
pbzip2 -p3 "$db".sql
done
```
psql:
```bash
#!/bin/bash
host=foobar.com
user=backupuser
pass=password
PGPASSWORD="$pass"
dbs=( $(psql -h "$host" -U "$user" -Atc "SELECT datname FROM pg_database WHERE NOT datistemplate AND datname <> 'postgres'") )
for db in "${dbs[@]}"; do
ssh -l root "$host" "pg_dump -U ${user} -Fc ${db}" > "$db".sql
wait
pbzip2 -p3 "$db".sql
done
```
### rsnapshot configuration variables ### rsnapshot configuration variables
Please read up on the following in the [rsnapshot manpage](http://linux.die.net/man/1/rsnapshot) Please read up on the following in the [rsnapshot manpage](http://linux.die.net/man/1/rsnapshot)
@@ -493,9 +584,6 @@ Default is: 1
#### `$use_lazy_deletes` #### `$use_lazy_deletes`
Default is: false Default is: false
#### `$backup_scripts`
Default is: {}
## Limitations ## Limitations
Currently, this module support CentOS, Fedora, Ubuntu and Debian. Currently, this module support CentOS, Fedora, Ubuntu and Debian.

View File

@@ -5,12 +5,13 @@ class rsnapshot::config (
$hosts = $rsnapshot::hosts, $hosts = $rsnapshot::hosts,
$cron_dir = $rsnapshot::cron_dir, $cron_dir = $rsnapshot::cron_dir,
) { ) {
# these are global settings, no point in setting them per host # these are global settings, no point in setting them per host
$config_version = $rsnapshot::params::config_version $config_version = $rsnapshot::params::config_version
$lockpath = pick($rsnapshot::lockpath, $rsnapshot::params::config_lockpath) $lockpath = pick($rsnapshot::lockpath, $rsnapshot::params::config_lockpath, '/var/run/rsnapshot')
$conf_d = pick($rsnapshot::conf_d, $rsnapshot::params::conf_d) $conf_d = pick($rsnapshot::conf_d, $rsnapshot::params::conf_d, '/etc/rsnapshot')
$snapshot_root = pick($hosts['snapshot_root'], $rsnapshot::params::config_snapshot_root) $snapshot_root = pick($hosts['snapshot_root'], $rsnapshot::snapshot_root, '/backup')
$default_cron = assert_empty_hash($::rsnapshot::cron) $logpath = pick($rsnapshot::logpath, $rsnapshot::params::config_logpath)
# make sure lock path and conf path exist # make sure lock path and conf path exist
file { $conf_d: file { $conf_d:
ensure => 'directory', ensure => 'directory',
@@ -24,16 +25,20 @@ class rsnapshot::config (
file { $snapshot_root: file { $snapshot_root:
ensure => 'directory', ensure => 'directory',
} }
file { $logpath:
ensure => directory,
}
# custom function, if only a hostname is given as a param, this is an empty hash # 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 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 => {} } # { foo => } and converts those to { foo => {} }
$hosts_clean = assert_empty_hash($hosts) $hosts_clean = assert_empty_hash($hosts)
$hosts_clean.each |String $host, Hash $hash | { $hosts_clean.each |String $host, $hash | {
$backup_user = pick($hash['backup_user'], $rsnapshot::params::config_backup_user) $backup_user = pick($hash['backup_user'], $rsnapshot::params::config_backup_user)
$default_backup_dirs = pick($rsnapshot::default_backup, $rsnapshot::params::config_default_backup) $default_backup_dirs = pick($rsnapshot::default_backup, $rsnapshot::params::config_default_backup)
$backup_levels = pick($hash['backup_levels'], $rsnapshot::params::config_backup_levels, 'weekly') $backup_levels = pick($hash['backup_levels'], $rsnapshot::backup_levels, 'weekly')
$backup = $hash['backup'] $backup = $hash['backup']
$backup_defaults = pick($hash['backup_defaults'], $rsnapshot::params::config_backup_defaults) $backup_defaults = pick($hash['backup_defaults'], $rsnapshot::params::config_backup_defaults)
$cmd_cp = pick($hash['cmd_cp'], $rsnapshot::params::config_cmd_cp) $cmd_cp = pick($hash['cmd_cp'], $rsnapshot::params::config_cmd_cp)
@@ -55,7 +60,6 @@ class rsnapshot::config (
$linux_lvm_vgpath = pick_undef($hash['linux_lvm_vgpath'], $rsnapshot::params::config_linux_lvm_vgpath) $linux_lvm_vgpath = pick_undef($hash['linux_lvm_vgpath'], $rsnapshot::params::config_linux_lvm_vgpath)
$linux_lvm_mountpath = pick_undef($hash['linux_lvm_mountpath'], $rsnapshot::params::config_linux_lvm_mountpath) $linux_lvm_mountpath = pick_undef($hash['linux_lvm_mountpath'], $rsnapshot::params::config_linux_lvm_mountpath)
$no_create_root = pick_undef($hash['no_create_root'], $rsnapshot::params::config_no_create_root) $no_create_root = pick_undef($hash['no_create_root'], $rsnapshot::params::config_no_create_root)
$logpath = pick($hash['logpath'], $rsnapshot::logpath, $rsnapshot::params::config_logpath)
$verbose = pick($hash['verbose'], $rsnapshot::params::config_verbose) $verbose = pick($hash['verbose'], $rsnapshot::params::config_verbose)
$loglevel = pick($hash['loglevel'], $rsnapshot::params::config_loglevel) $loglevel = pick($hash['loglevel'], $rsnapshot::params::config_loglevel)
$stop_on_stale_lockfile = pick_undef($hash['stop_on_stale_lockfile'], $rsnapshot::params::config_stop_on_stale_lockfile) $stop_on_stale_lockfile = pick_undef($hash['stop_on_stale_lockfile'], $rsnapshot::params::config_stop_on_stale_lockfile)
@@ -66,15 +70,15 @@ class rsnapshot::config (
$one_fs = pick_undef($hash['one_fs'], $rsnapshot::params::config_one_fs) $one_fs = pick_undef($hash['one_fs'], $rsnapshot::params::config_one_fs)
$interval = pick($hash['interval'], $rsnapshot::params::config_interval) $interval = pick($hash['interval'], $rsnapshot::params::config_interval)
$retain = pick_undef($hash['retain'], $rsnapshot::params::config_retain) $retain = pick_undef($hash['retain'], $rsnapshot::params::config_retain)
$include = pick_undef($hash['include'], $rsnapshot::params::config_include) $include = pick($hash['include'], [])
$exclude = pick_undef($hash['exclude'], $rsnapshot::params::config_exclude) $exclude = pick($hash['exclude'], [])
$include_file = pick_undef($hash['include_file'], $rsnapshot::params::config_include_file) $include_file = pick($hash['include_file'], $rsnapshot::params::config_include_file, "${conf_d}/${host}.include")
$exclude_file = pick($hash['exclude_file'], $rsnapshot::params::config_exclude_file, "${conf_d}/${host}.exclude") $exclude_file = pick($hash['exclude_file'], $rsnapshot::params::config_exclude_file, "${conf_d}/${host}.exclude")
$link_dest = pick_undef($hash['link_dest'], $rsnapshot::params::config_link_dest) $link_dest = pick_undef($hash['link_dest'], $rsnapshot::params::config_link_dest)
$sync_first = pick_undef($hash['sync_first'], $rsnapshot::params::config_sync_first) $sync_first = pick_undef($hash['sync_first'], $rsnapshot::params::config_sync_first)
$use_lazy_deletes = pick_undef($hash['use_lazy_deletes'], $rsnapshot::params::config_use_lazy_deletes) $use_lazy_deletes = pick_undef($hash['use_lazy_deletes'], $rsnapshot::params::config_use_lazy_deletes)
$rsync_numtries = pick_undef($hash['rsync_numtries'], $rsnapshot::params::config_rsync_numtries) $rsync_numtries = pick_undef($hash['rsync_numtries'], $rsnapshot::params::config_rsync_numtries)
$backup_scripts = pick_undef($hash['backup_scripts'], $rsnapshot::params::config_backup_scripts) #$backup_scripts = pick_undef($hash['backup_scripts'], $rsnapshot::params::config_backup_scripts)
$snapshot_dir = "${config_snapshot_root}/${host}" $snapshot_dir = "${config_snapshot_root}/${host}"
$config = "${conf_d}/${host}.rsnapshot.conf" $config = "${conf_d}/${host}.rsnapshot.conf"
@@ -108,79 +112,69 @@ class rsnapshot::config (
$use_lazy_deletes_num = bool2num($use_lazy_deletes) $use_lazy_deletes_num = bool2num($use_lazy_deletes)
} }
if $include != '' { $real_include = $rsnapshot::include + $include
unless empty($real_include) {
file { $include_file: file { $include_file:
ensure => 'file', ensure => 'file',
content => template('rsnapshot/include.erb'), content => template('rsnapshot/include.erb'),
} }
} }
if $exclude != '' { $real_exclude = $rsnapshot::exclude + $exclude
unless empty($real_exclude) {
file { $exclude_file: file { $exclude_file:
ensure => 'file', ensure => 'file',
content => template('rsnapshot/exclude.erb'), content => template('rsnapshot/exclude.erb'),
} }
} }
file { $config: concat { $config:
}
concat::fragment { "${config} for ${host}":
target => $config,
content => template('rsnapshot/rsnapshot.erb'), content => template('rsnapshot/rsnapshot.erb'),
} }
if has_key($hash, backup_scripts) {
$hash[backup_scripts].each |$script, $credentials| {
if is_hash($credentials) {
$dbbackup_user = $credentials['dbbackup_user']
$dbbackup_password = $credentials['dbbackup_password']
} else {
$dbbackup_user = $rsnapshot::default_backup_scripts[$script]['dbbackup_user']
$dbbackup_password = $rsnapshot::default_backup_scripts[$script]['dbbackup_password']
}
concat::fragment { "${host}_${script}_backup":
target => $config,
content => "backup_script ${conf_d}/${host}.${script}.sh ./${script}\n",
}
file { "${conf_d}/${host}.${script}.sh":
ensure => present,
content => template("rsnapshot/${script}.sh.erb"),
mode => '0755',
}
}
}
$cronfile = "${cron_dir}/${host}" $cronfile = "${cron_dir}/${host}"
concat { $cronfile: concat { $cronfile:
} }
# create cron files for each backup level # create cron files for each backup level
# merge possible cron definitions to one
$real_cron = deep_merge($rsnapshot::params::cron, $rsnapshot::cron, $hash[cron])
$backup_levels.each |String $level| { $backup_levels.each |String $level| {
$minute = rand_from_array($real_cron[$level][minute], "${host}.${level}.minute")
$hour = rand_from_array($real_cron[$level][hour], "${host}.${level}.hour")
$monthday = rand_from_array($real_cron[$level][monthday], "${host}.${level}.monthday")
$month = rand_from_array($real_cron[$level][month], "${host}.${level}.month")
$weekday = rand_from_array($real_cron[$level][weekday], "${host}.${level}.weekday")
# allow to globally override ranges, create random numbers for backup_levels daily, weekly, monthly
if has_key($hash,cron){
if has_key($hash[cron], $level) {
$cron = $hash[cron][$level]
} else {
if has_key($default_cron, $level) {
$cron = $default_cron[$level]
} else {
$cron = $rsnapshot::params::cron[$level]
}
}
} else {
if has_key($default_cron, $level) {
$cron = $default_cron[$level]
} else {
$cron = $rsnapshot::params::cron[$level]
}
}
if has_key($cron, minute) {
$c_min = $cron[minute]
} else {
$c_min = $rsnapshot::params::cron[$level][minute]
}
if has_key($cron, hour) {
$c_hour = $cron[hour]
} else {
$c_hour = $rsnapshot::params::cron[$level][hour]
}
if has_key($cron, monthday) {
$c_monthday = $cron[monthday]
} else {
$c_monthday = $rsnapshot::params::cron[$level][monthday]
}
if has_key($cron, month) {
$c_month = $cron[month]
} else {
$c_month = $rsnapshot::params::cron[$level][month]
}
if has_key($cron, weekday) {
$c_weekday = $cron[weekday]
} else {
$c_weekday = $rsnapshot::params::cron[$level][weekday]
}
$minute = rand_from_array($c_min, "${host}.${level}.minute")
$hour = rand_from_array($c_hour, "${host}.${level}.hour")
$monthday = rand_from_array($c_monthday, "${host}.${level}.monthday")
$month = rand_from_array($c_month, "${host}.${level}.month")
$weekday = rand_from_array($c_weekday, "${host}.${level}.weekday")
concat::fragment { "${host}.${level}": concat::fragment { "${host}.${level}":
target => $cronfile, target => $cronfile,
content => template('rsnapshot/cron.erb'), content => template('rsnapshot/cron.erb'),

View File

@@ -13,15 +13,23 @@ class rsnapshot (
$package_name = $rsnapshot::params::package_name, $package_name = $rsnapshot::params::package_name,
$package_ensure = $rsnapshot::params::package_ensure, $package_ensure = $rsnapshot::params::package_ensure,
$cron = $rsnapshot::params::cron, $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,
) inherits rsnapshot::params { ) inherits rsnapshot::params {
if $::puppetversion =~ /^(1|2|3)/ {
fail('This module requires Puppet 4') $default_backup_scripts = $rsnapshot::params::backup_scripts + $backup_scripts
} $default_exclude = $rsnapshot::params::config_exclude + $exclude
if $hosts { if $hosts {
class { '::rsnapshot::install': }-> class { '::rsnapshot::install': }->
class { '::rsnapshot::config': } class { '::rsnapshot::config': }~>
class { '::rsnapshot::service': }
contain '::rsnapshot::install' contain '::rsnapshot::install'
contain '::rsnapshot::config' contain '::rsnapshot::config'
contain '::rsnapshot::service'
} }
} }

View File

@@ -1,7 +1,7 @@
# == Class: rsnapshot::install # == Class: rsnapshot::install
# #
# Installs the rsnapshot package. # Installs the rsnapshot package.
class rsnapshot::install inherits rsnapshot { class rsnapshot::install {
case $::operatingsystem { case $::operatingsystem {
/^CentOS$/: { include epel } /^CentOS$/: { include epel }
default: {} default: {}

View File

@@ -7,8 +7,9 @@ class rsnapshot::params {
$config_backup_user = 'root' $config_backup_user = 'root'
$package_name = 'rsnapshot' $package_name = 'rsnapshot'
$package_ensure = 'present' $package_ensure = 'present'
$cron_service_name = 'crond'
$cron_dir = '/etc/cron.d' $cron_dir = '/etc/cron.d'
$config_backup_levels = [ 'daily', 'weekly', ] $config_backup_levels = [ 'daily', 'weekly', 'monthly' ]
$config_backup_defaults = true $config_backup_defaults = true
$config_version = '1.2' $config_version = '1.2'
$config_cmd_cp = '/bin/cp' $config_cmd_cp = '/bin/cp'
@@ -32,7 +33,7 @@ class rsnapshot::params {
$config_logpath = '/var/log/rsnapshot' $config_logpath = '/var/log/rsnapshot'
$config_logfile = '/var/log/rsnapshot.log' # unused, we are logging to $logpath/$host.log $config_logfile = '/var/log/rsnapshot.log' # unused, we are logging to $logpath/$host.log
$config_lockpath = '/var/run/rsnapshot' $config_lockpath = '/var/run/rsnapshot'
$config_snapshot_root = '/backup/' $config_snapshot_root = '/backup'
$config_no_create_root = undef # bool, true or false $config_no_create_root = undef # bool, true or false
$config_verbose = '2' $config_verbose = '2'
$config_loglevel = '4' $config_loglevel = '4'
@@ -91,4 +92,15 @@ class rsnapshot::params {
weekday => '*', weekday => '*',
}, },
} }
$backup_scripts = {
mysql => {
dbbackup_user => 'root',
dbbackup_password => 'myFancyPassWord',
},
psql => {
dbbackup_user => 'postgres',
dbbackup_password => '',
},
misc => {},
}
} }

10
manifests/service.pp Normal file
View File

@@ -0,0 +1,10 @@
# == Class: rsnapshot::service
#
# Reloads cron
class rsnapshot::service {
service { $rsnapshot::cron_service_name:
ensure => running,
}
}

View File

@@ -1,6 +1,6 @@
{ {
"name": "loomsen-rsnapshot", "name": "loomsen-rsnapshot",
"version": "0.3.1", "version": "0.5.1",
"author": "loomsen", "author": "loomsen",
"summary": "Configures rsnapshot.", "summary": "Configures rsnapshot.",
"license": "Apache-2.0", "license": "Apache-2.0",

View File

@@ -1,37 +1,5 @@
require 'spec_helper' require 'spec_helper'
describe 'rsnapshot' do describe 'rsnapshot' do
it { should contain_class('rsnapshot::params') }
{'Ubuntu' => 'Debian', 'Debian' => 'Debian'}.each do |system, family| it { is_expected.to compile }
context "when on system #{system} no lvm" do
let :facts do
{
:osfamily => family,
:operatingsystem => system,
}
end
it { should contain_class('rsnapshot') }
it { should contain_class('rsnapshot::install') }
it { should contain_class('rsnapshot::config') }
end
context "when on system #{system} with lvm" do
let :facts do
{
:osfamily => family,
:operatingsystem => system,
}
end
let(:params) { {:use_lvm => true} }
it { should contain_class('rsnapshot') }
it { should contain_class('rsnapshot::install') }
it { should contain_class('rsnapshot::config') }
it {
should contain_file('/etc/rsnapshot.conf').with_content(/^linux_lvm_((\w|_)+)\t(.*)$/)
}
end
end
end end

View File

@@ -1,3 +1,3 @@
<% @exclude.each do |exc| -%> <% @real_exclude.each do |exc| -%>
<%= exc %> <%= exc %>
<% end %> <% end %>

View File

@@ -1,3 +1,3 @@
<% @include.each do |inc| -%> <% @real_include.each do |inc| -%>
<%= inc %> <%= inc %>
<% end %> <% end %>

10
templates/misc.sh.erb Normal file
View File

@@ -0,0 +1,10 @@
#!/bin/bash
# add custom stuff here
# FIXME: remember to concat for custom stuff after the last line of the puppet generated script
<% if @osfamily == 'RedHat' -%>
ssh <%=@host-%> rpm -qa --qf='%{name},' > packages.txt
<%end-%>
#
#
#
# ++++++++++++++++++++++++++++++++++++++++++++

16
templates/mysql.sh.erb Normal file
View File

@@ -0,0 +1,16 @@
#!/bin/bash
# written by Norbert Varzariu <loomsen@gmail.com>
# This Script is triggered by rsnapshot and dumps the specified dbs on the configured host.
#
host=<%=@host%>
user=<%=@dbbackup_user%>
pass=<%=@dbbackup_password%>
dbs=( $(mysql -h "$host" -u "$user" -p"$pass" -e 'show databases' | sed '1d;/information_schema/d;/performance_schema/d') )
for db in "${dbs[@]}"; do
mysqldump --host="$host" --user="$user" --password="$pass" --single-transaction --quick --routines --ignore-table=mysql.event "$db" > "$db".sql
wait
pbzip2 -p3 "$db".sql
done

17
templates/psql.sh.erb Normal file
View File

@@ -0,0 +1,17 @@
#!/bin/bash
# written by Norbert Varzariu <loomsen@gmail.com>
# This Script is triggered by rsnapshot and dumps the specified dbs on the configured host.
#
host=<%=@host%>
user=<%=@dbbackup_user%>
pass=<%=@dbbackup_password%>
PGPASSWORD="$pass"
dbs=( $(psql -h "$host" -U "$user" -Atc "SELECT datname FROM pg_database WHERE NOT datistemplate AND datname <> 'postgres'") )
for db in "${dbs[@]}"; do
ssh -l root "$host" "pg_dump -U ${user} -Fc ${db}" > "$db".sql
wait
pbzip2 -p3 "$db".sql
done

View File

@@ -1,8 +1,8 @@
# This file is being managed by puppet # This file is being managed by puppet
# Module 'rsnaphost' # Module 'rsnapshot'
config_version <%= @config_version %> config_version <%= @config_version %>
snapshot_root <%= @snapshot_root %> snapshot_root <%= @snapshot_root -%>/<%=@host%>
<% if @no_create_root != '' -%> <% if @no_create_root != '' -%>
no_create_root <%= @no_create_root %> no_create_root <%= @no_create_root %>
<% end -%> <% end -%>
@@ -85,12 +85,12 @@ du_args <%= @du_args %>
<% if @one_fs != '' -%> <% if @one_fs != '' -%>
one_fs <%= @one_fs_num %> one_fs <%= @one_fs_num %>
<% end -%> <% end -%>
<% if @include != '' -%> <% unless @real_include.empty? -%>
<% if @include_file != '' -%> <% if @include_file != '' -%>
include_file <%= @include_file %> include_file <%= @include_file %>
<% end -%> <% end -%>
<% end -%> <% end -%>
<% if @exclude != '' -%> <% unless @real_exclude.empty? -%>
<% if @exclude_file != '' -%> <% if @exclude_file != '' -%>
exclude_file <%= @exclude_file %> exclude_file <%= @exclude_file %>
<% end -%> <% end -%>
@@ -130,9 +130,3 @@ backup <%= @backup_user %>@<%=@host%>:<%= source %> <%=dest%>
backup <%=@host%>:<%= source %> <%=dest%> backup <%=@host%>:<%= source %> <%=dest%>
<% end -%> <% end -%>
<% end -%> <% end -%>
<% if @backup_scripts != '' -%>
<% @backup_scripts.each_pair do |source, dest| -%>
backup_script <%= source %> <%= dest %>
<% end -%>
<%end-%>