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