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