]> git.immae.eu Git - perso/Immae/Projets/Puppet.git/blob - modules/role/manifests/backup.pp
Don’t mount unavailables mounts
[perso/Immae/Projets/Puppet.git] / modules / role / manifests / backup.pp
1 class role::backup (
2 String $user,
3 String $group,
4 String $mailto,
5 Optional[Array] $backups = [],
6 Optional[String] $mountpoint = "/backup1",
7 Optional[String] $backup_script = "/usr/local/bin/backup.sh",
8 ) {
9 include "base_installation"
10
11 include "profile::fstab"
12 include "profile::mail"
13 include "profile::tools"
14 include "profile::xmr_stak"
15 include "profile::known_hosts"
16
17 ssh_keygen { $user:
18 notify => Notify_refresh["notify-backup-sshkey-change"]
19 }
20
21 $hosts = $backups.map |$backup| { $backup["host"] }
22
23 notify_refresh { "notify-backup-sshkey-change":
24 message => template("role/backup/ssh_key_changed.info.erb"),
25 refreshonly => true
26 }
27
28 $hosts.each |$host| {
29 notify_refresh { "notify-backup-sshhost-$host-changed":
30 message => template("role/backup/ssh_host_changed.info.erb"),
31 refreshonly => true,
32 subscribe => Sshkey[$host],
33 }
34 }
35
36 concat { $backup_script:
37 ensure => "present",
38 ensure_newline => true,
39 mode => "0755",
40 }
41
42 cron { "backup":
43 ensure => present,
44 command => $backup_script,
45 user => $user,
46 minute => 25,
47 hour => 3,
48 require => Concat[$backup_script],
49 }
50
51 concat::fragment { "backup_head":
52 target => $backup_script,
53 content => template("role/backup/backup_head.sh.erb"),
54 order => "01-50",
55 }
56
57 concat::fragment { "backup_tail":
58 target => $backup_script,
59 content => template("role/backup/backup_tail.sh.erb"),
60 order => "99-50",
61 }
62
63 $backups.each |$infos| {
64 $dirname = $infos["name"]
65 $login = $infos["login"]
66 $host = $infos["host"]
67 $dest = "$login@$host"
68 $base = "$mountpoint/$dirname"
69 $nbr = $infos["nbr"]
70 $order_dirname = $infos["order"]
71
72 file { $base:
73 ensure => "directory",
74 owner => $user,
75 group => $group,
76 require => Mount[$mountpoint],
77 } ->
78 file { "$base/older":
79 ensure => "directory",
80 owner => $user,
81 group => $group,
82 } ->
83 file { "$base/rsync_output":
84 ensure => "directory",
85 owner => $user,
86 group => $group,
87 }
88
89 concat::fragment { "backup_${dirname}_head":
90 target => $backup_script,
91 content => template("role/backup/backup_dirname_head.sh.erb"),
92 order => "$order_dirname-01",
93 }
94
95 concat::fragment { "backup_${dirname}_tail":
96 target => $backup_script,
97 content => template("role/backup/backup_dirname_tail.sh.erb"),
98 order => "$order_dirname-99",
99 }
100
101 $infos["parts"].each |$part| {
102 $local_folder = $part["local_folder"]
103 $remote_folder = $part["remote_folder"]
104 $exclude_from = $part["exclude_from"]
105 $files_from = $part["files_from"]
106 $args = $part["args"]
107 $order_part = $part["order"]
108
109 file { "$base/$local_folder":
110 ensure => "directory",
111 owner => $user,
112 group => $group,
113 require => File[$base],
114 }
115
116 concat::fragment { "backup_${dirname}_${local_folder}":
117 target => $backup_script,
118 content => template("role/backup/backup_dirname_part.sh.erb"),
119 order => "$order_dirname-$order_part",
120 }
121 }
122 }
123 }