summaryrefslogtreecommitdiffstats
path: root/src/lib/Server/Plugins/Crontab.py
blob: fcdf58f42c20f9986567ea951d31b855081ceec5 (plain)
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]