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