diff --git a/README.md b/README.md index 77c6d55..158109c 100644 --- a/README.md +++ b/README.md @@ -358,6 +358,53 @@ 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 => 'myFancyPassWord', + }, + 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: + 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` + + ### rsnapshot configuration variables Please read up on the following in the [rsnapshot manpage](http://linux.die.net/man/1/rsnapshot) @@ -493,9 +540,6 @@ Default is: 1 #### `$use_lazy_deletes` Default is: false -#### `$backup_scripts` -Default is: {} - ## Limitations Currently, this module support CentOS, Fedora, Ubuntu and Debian. diff --git a/manifests/config.pp b/manifests/config.pp index 4854a42..81900d3 100644 --- a/manifests/config.pp +++ b/manifests/config.pp @@ -9,7 +9,7 @@ class rsnapshot::config ( $config_version = $rsnapshot::params::config_version $lockpath = pick($rsnapshot::lockpath, $rsnapshot::params::config_lockpath, '/var/run/rsnapshot') $conf_d = pick($rsnapshot::conf_d, $rsnapshot::params::conf_d, '/etc/rsnapshot') - $snapshot_root = pick($hosts['snapshot_root'], $rsnapshot::params::config_snapshot_root, '/backup') + $snapshot_root = pick($hosts['snapshot_root'], $rsnapshot::snapshot_root, '/backup') $default_cron = assert_empty_hash($::rsnapshot::cron) # make sure lock path and conf path exist file { $conf_d: @@ -30,7 +30,7 @@ class rsnapshot::config ( # { foo => } and converts those to { foo => {} } $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) $default_backup_dirs = pick($rsnapshot::default_backup, $rsnapshot::params::config_default_backup) $backup_levels = pick($hash['backup_levels'], $rsnapshot::params::config_backup_levels, 'weekly') @@ -74,7 +74,7 @@ class rsnapshot::config ( $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) $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}" $config = "${conf_d}/${host}.rsnapshot.conf" @@ -114,21 +114,49 @@ class rsnapshot::config ( content => template('rsnapshot/include.erb'), } } - + if $exclude != '' { file { $exclude_file: ensure => 'file', content => template('rsnapshot/exclude.erb'), } } - - file { $config: + concat { $config: + } + concat::fragment { "${config} for ${host}": + target => $config, 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}" concat { $cronfile: } - # create cron files for each backup level $backup_levels.each |String $level| { diff --git a/manifests/init.pp b/manifests/init.pp index 5c9e950..aed59b6 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -13,8 +13,13 @@ class rsnapshot ( $package_name = $rsnapshot::params::package_name, $package_ensure = $rsnapshot::params::package_ensure, $cron = $rsnapshot::params::cron, + $backup_scripts = $rsnapshot::params::backup_scripts, + $exclude = $rsnapshot::params::config_exclude, + $snapshot_root = $rsnapshot::params::config_snapshot_root, ) inherits rsnapshot::params { - + + $default_backup_scripts = $rsnapshot::params::backup_scripts + $backup_scripts + $default_exclude = $rsnapshot::params::config_exclude + $exclude if $hosts { class { '::rsnapshot::install': }-> class { '::rsnapshot::config': } diff --git a/manifests/params.pp b/manifests/params.pp index 8765280..2f9315b 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -8,7 +8,7 @@ class rsnapshot::params { $package_name = 'rsnapshot' $package_ensure = 'present' $cron_dir = '/etc/cron.d' - $config_backup_levels = [ 'daily', 'weekly', ] + $config_backup_levels = [ 'daily', 'weekly', 'monthly' ] $config_backup_defaults = true $config_version = '1.2' $config_cmd_cp = '/bin/cp' @@ -91,4 +91,15 @@ class rsnapshot::params { weekday => '*', }, } + $backup_scripts = { + mysql => { + dbbackup_user => 'root', + dbbackup_password => 'myFancyPassWord', + }, + psql => { + dbbackup_user => 'postgres', + dbbackup_password => '', + }, + misc => {}, + } } diff --git a/metadata.json b/metadata.json index f0873e1..61ca00a 100644 --- a/metadata.json +++ b/metadata.json @@ -1,6 +1,6 @@ { "name": "loomsen-rsnapshot", - "version": "0.3.2", + "version": "0.4.0", "author": "loomsen", "summary": "Configures rsnapshot.", "license": "Apache-2.0", diff --git a/templates/rsnapshot.erb b/templates/rsnapshot.erb index 8b088ad..f6d6868 100644 --- a/templates/rsnapshot.erb +++ b/templates/rsnapshot.erb @@ -1,8 +1,8 @@ # This file is being managed by puppet -# Module 'rsnaphost' +# Module 'rsnapshot' config_version <%= @config_version %> -snapshot_root <%= @snapshot_root %> +snapshot_root <%= @snapshot_root -%>/<%=@host%> <% if @no_create_root != '' -%> no_create_root <%= @no_create_root %> <% end -%> @@ -130,9 +130,3 @@ backup <%= @backup_user %>@<%=@host%>:<%= source %> <%=dest%> backup <%=@host%>:<%= source %> <%=dest%> <% end -%> <% end -%> -<% if @backup_scripts != '' -%> -<% @backup_scripts.each_pair do |source, dest| -%> -backup_script <%= source %> <%= dest %> -<% end -%> -<%end-%> -