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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
#!/usr/bin/env python
# $Id$
from Error import GeneratorError
from syslog import syslog, LOG_ERR
class Generator(object):
'''This is a class that generators can be subclassed from.
__name__, __version__, and __author__ must be set for the module
__build__ is a dictionary mapping filename to generator function
__requires__ is a set of external published data needed for operation'''
__name__ = None
__version__ = None
__datastore__ = '/home/desai/data/b2'
__build__ = {}
__requires__ = []
def __init__(self, core):
self.core=core
self.data="%s/%s"%(self.__datastore__,self.__name__)
self.PublishAll()
def CompleteSetup(self):
self.ReadAll()
print "%s loaded"%(self.__version__)
def Cron(self):
'''Cron defines periodic tasks to maintain data coherence'''
pass
def Build(self,filename,client):
'''Build will construct a Config File object for client.'''
if self.__build__.has_key(filename):
return getattr(self,self.__build__[filename])(filename,client)
else:
raise GeneratorError, ("Key",filename)
def Publish(self,key,value):
self.core.Publish(self.__name__,key,value)
def PublishAll(self):
pass
def Read(self,key):
self.core.ReadValue(key)
def ReadAll(self):
self.external = {}
for field in self.__requires__:
self.external[field] = self.Read(field)
def GetMetadata(self,client,field):
'''GetMetadata returns current metadata file client. Field can be one of:
image, tags, bundles'''
pass
def Notify(self,region):
'''Generate change notification for region'''
pass
|