Merge master branch to get tar component.
[slapos.git] / slapos / recipe / logrotate.py
1 ##############################################################################
2 #
3 # Copyright (c) 2010 Vifib SARL and Contributors. All Rights Reserved.
4 #
5 # WARNING: This program as such is intended to be used by professional
6 # programmers who take the whole responsibility of assessing all potential
7 # consequences resulting from its eventual inadequacies and bugs
8 # End users who are looking for a ready-to-use solution with commercial
9 # guarantees and support are strongly adviced to contract a Free Software
10 # Service Company
11 #
12 # This program is Free Software; you can redistribute it and/or
13 # modify it under the terms of the GNU General Public License
14 # as published by the Free Software Foundation; either version 3
15 # of the License, or (at your option) any later version.
16 #
17 # This program is distributed in the hope that it will be useful,
18 # but WITHOUT ANY WARRANTY; without even the implied warranty of
19 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 # GNU General Public License for more details.
21 #
22 # You should have received a copy of the GNU General Public License
23 # along with this program; if not, write to the Free Software
24 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
25 #
26 ##############################################################################
27 import os
28
29 from slapos.recipe.librecipe import GenericBaseRecipe
30
31 class Recipe(GenericBaseRecipe):
32
33 def install(self):
34 logrotate_d = self.options['logrotate-entries']
35 logrotate_conf_file = self.options['conf']
36
37 logrotate_conf = [
38 'compresscmd %s' % self.options['gzip-binary'],
39 'compressoptions -9',
40 'uncompresscmd %s' % self.options['gunzip-binary'],
41 'include %s' % logrotate_d,
42 ]
43
44 logrotate_conf_file = self.createFile(logrotate_conf_file,
45 '\n'.join(logrotate_conf))
46
47 state_file = self.options['state-file']
48
49 logrotate = self.createPythonScript(
50 self.options['wrapper'],
51 'slapos.recipe.librecipe.execute.execute',
52 [self.options['logrotate-binary'], '-s', state_file, logrotate_conf_file, ]
53 )
54
55 return [logrotate, logrotate_conf_file]
56
57 class Part(GenericBaseRecipe):
58
59 def install(self):
60
61 logrotate_d = self.options['logrotate-entries']
62
63 conf = [
64 'daily',
65 'dateext',
66 'rotate 3650',
67 'compress',
68 'notifempty',
69 'sharedscripts',
70 'create',
71 'olddir %s' % self.options['backup'],
72 ]
73
74 if 'post' in self.options:
75 conf.append("postrotate\n%s\nendscript" % self.options['post'])
76 if 'pre' in self.options:
77 conf.append("prerotate\n%s\nendscript" % self.options['pre'])
78
79 log = self.options['log']
80
81 part_path = self.createFile(os.path.join(logrotate_d, self.options['name']),
82 "%(logfiles)s {\n%(conf)s\n}" % {
83 'logfiles': log,
84 'conf': '\n'.join(conf),
85 }
86 )
87
88 return [part_path]