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