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