1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
'''This module manages the crontab file for bcfg2'''
__revision__ = '$Revision: 1887 $'
import binascii, os, socket, Bcfg2.Server.Plugin, random
class Crontab(Bcfg2.Server.Plugin.Plugin):
'''This Generates a random set of times for the cron.daily entries to run.
The goal is to ensure that our Configuration Server/network does get crushed
all in a 5-10 minute period.
'''
__name__ = 'Crontab'
__version__ = '$Id: Crontab 1887 2006-06-18 02:35:54Z desai $'
__author__ = 'bcfg-dev@mcs.anl.gov'
def __init__(self, core, datastore):
Bcfg2.Server.Plugin.Plugin.__init__(self, core, datastore)
try:
self.repository = Bcfg2.Server.Plugin.DirectoryBacked(self.data, self.core.fam)
except OSError, ioerr:
self.logger.error("Failed to load Crontab repository from %s" % (self.data))
self.logger.error(ioerr)
raise Bcfg2.Server.Plugin.PluginInitError
try:
prefix = open("%s/prefix" % (self.data)).read().strip()
except IOError:
prefix = ''
self.Entries = {'ConfigFile':
{prefix + '/etc/crontab':self.build_crontab}}
def build_crontab(self, entry, metadata):
'''This function builds builds a crontab file with a random time for cron.daily'''
random.seed(metadata.hostname)
hour = random.randrange(0,6)
minute = random.randrange(0,59)
entry.text = self.repository.entries['crontab.template'].data% (minute, hour)
permdata = {'owner':'root', 'group':'root', 'perms':'0644'}
[entry.attrib.__setitem__(key, permdata[key]) for key in permdata]
|