From d87a489f9585d10f0a185beb59ae16a10f27a7bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isma=C3=ABl=20Bouya?= Date: Fri, 16 Mar 2018 20:40:27 +0100 Subject: Add backup role --- modules/role/manifests/backup.pp | 122 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 modules/role/manifests/backup.pp (limited to 'modules/role/manifests/backup.pp') diff --git a/modules/role/manifests/backup.pp b/modules/role/manifests/backup.pp new file mode 100644 index 0000000..edfd5e0 --- /dev/null +++ b/modules/role/manifests/backup.pp @@ -0,0 +1,122 @@ +class role::backup ( + String $user, + String $group, + String $mailto, + Optional[Array] $backups = [], + Optional[String] $mountpoint = "/backup1", + Optional[String] $backup_script = "/usr/local/bin/backup.sh", +) { + include "base_installation" + + include "profile::mail" + include "profile::tools" + include "profile::xmr_stak" + include "profile::known_hosts" + + ssh_keygen { $user: + notify => Notify_refresh["notify-backup-sshkey-change"] + } + + $hosts = $backups.map |$backup| { $backup["host"] } + + notify_refresh { "notify-backup-sshkey-change": + message => template("role/backup/ssh_key_changed.info.erb"), + refreshonly => true + } + + $hosts.each |$host| { + notify_refresh { "notify-backup-sshhost-$host-changed": + message => template("role/backup/ssh_host_changed.info.erb"), + refreshonly => true, + subscribe => Sshkey[$host], + } + } + + concat { $backup_script: + ensure => "present", + ensure_newline => true, + mode => "0755", + } + + cron { "backup": + ensure => present, + command => $backup_script, + user => $user, + minute => 25, + hour => 3, + require => Concat[$backup_script], + } + + concat::fragment { "backup_head": + target => $backup_script, + content => template("role/backup/backup_head.sh.erb"), + order => "01-50", + } + + concat::fragment { "backup_tail": + target => $backup_script, + content => template("role/backup/backup_tail.sh.erb"), + order => "99-50", + } + + $backups.each |$infos| { + $dirname = $infos["name"] + $login = $infos["login"] + $host = $infos["host"] + $dest = "$login@$host" + $base = "$mountpoint/$dirname" + $nbr = $infos["nbr"] + $order_dirname = $infos["order"] + + file { $base: + ensure => "directory", + owner => $user, + group => $group, + require => Mount[$mountpoint], + } -> + file { "$base/older": + ensure => "directory", + owner => $user, + group => $group, + } -> + file { "$base/rsync_output": + ensure => "directory", + owner => $user, + group => $group, + } + + concat::fragment { "backup_${dirname}_head": + target => $backup_script, + content => template("role/backup/backup_dirname_head.sh.erb"), + order => "$order_dirname-01", + } + + concat::fragment { "backup_${dirname}_tail": + target => $backup_script, + content => template("role/backup/backup_dirname_tail.sh.erb"), + order => "$order_dirname-99", + } + + $infos["parts"].each |$part| { + $local_folder = $part["local_folder"] + $remote_folder = $part["remote_folder"] + $exclude_from = $part["exclude_from"] + $files_from = $part["files_from"] + $args = $part["args"] + $order_part = $part["order"] + + file { "$base/$local_folder": + ensure => "directory", + owner => $user, + group => $group, + require => File[$base], + } + + concat::fragment { "backup_${dirname}_${local_folder}": + target => $backup_script, + content => template("role/backup/backup_dirname_part.sh.erb"), + order => "$order_dirname-$order_part", + } + } + } +} -- cgit v1.2.3