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