summaryrefslogtreecommitdiffstats
path: root/src/lib/Server/Generators
diff options
context:
space:
mode:
authorNarayan Desai <desai@mcs.anl.gov>2004-12-15 02:17:35 +0000
committerNarayan Desai <desai@mcs.anl.gov>2004-12-15 02:17:35 +0000
commit984b1f247a6d9c6b8eba1e74f9398292c91819ff (patch)
tree6ea2e14a6d467d4ea150672fe4b598db0ca4253a /src/lib/Server/Generators
parent6cd7e084604d0fd5c844782a8b48460799eabd5d (diff)
downloadbcfg2-984b1f247a6d9c6b8eba1e74f9398292c91819ff.tar.gz
bcfg2-984b1f247a6d9c6b8eba1e74f9398292c91819ff.tar.bz2
bcfg2-984b1f247a6d9c6b8eba1e74f9398292c91819ff.zip
unify Cfg generator and Repository
2004/12/14 18:40:03-06:00 anl.gov!desai switch to GeneratorError for Cfg Repo failures (Logical change 1.160) git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@710 ce84e21b-d406-0410-9b95-82705330c041
Diffstat (limited to 'src/lib/Server/Generators')
-rw-r--r--src/lib/Server/Generators/Cfg.py60
1 files changed, 21 insertions, 39 deletions
diff --git a/src/lib/Server/Generators/Cfg.py b/src/lib/Server/Generators/Cfg.py
index 41be594c5..c66596e7e 100644
--- a/src/lib/Server/Generators/Cfg.py
+++ b/src/lib/Server/Generators/Cfg.py
@@ -7,11 +7,7 @@ from re import compile as regcompile
from stat import S_ISDIR, ST_MODE
from syslog import syslog, LOG_INFO, LOG_ERR
-from Bcfg2.Server.Generator import Generator, FileBacked
-
-class CfgFileException(Exception):
- '''Raised for repository errors'''
- pass
+from Bcfg2.Server.Generator import Generator, GeneratorError, FileBacked
class FileEntry(FileBacked):
'''The File Entry class pertains to the config files contained in a particular directory.
@@ -128,7 +124,8 @@ class ConfigFileEntry(object):
try:
basefile = [bfile for bfile in self.basefiles if metadata.Applies(bfile)][-1]
except IndexError:
- raise CfgFileException, ('basefile', name)
+ syslog(LOG_ERR, "Failed to locate basefile for %s" % name)
+ raise GeneratorError, ('basefile', name)
filedata += basefile.data
# find applicable deltas
@@ -146,17 +143,19 @@ class ConfigFileEntry(object):
else:
entry.text = filedata
-class ConfigFileRepository(object):
- '''This class implements repos and all change handling'''
+class Cfg(Generator):
+ '''This generator in the configuration file repository for bcfg2'''
+ __name__ = 'Cfg'
+ __version__ = '$Id$'
+ __author__ = 'bcfg-dev@mcs.anl.gov'
- def __init__(self, name, fam):
- self.name = name
- self.fam = fam
+ def __init__(self, core, datastore):
+ Generator.__init__(self, core, datastore)
self.entries = {}
- self.provides = {}
+ self.__provides__ = {'ConfigFile':{}}
self.famID = {}
self.directories = []
- self.AddDirectoryMonitor(self.name)
+ self.AddDirectoryMonitor(self.data)
# eventually flush fam events here so that all entries built here
# ready to go
@@ -166,9 +165,9 @@ class ConfigFileRepository(object):
try:
stat(name)
except OSError:
- syslog(LOG_ERR, "Failed to open directory %s" % (name))
+ self.LogError("Failed to open directory %s" % (name))
return
- reqid = self.fam.AddMonitor(name, self)
+ reqid = self.core.fam.AddMonitor(name, self)
self.famID[reqid] = name
self.directories.append(name)
@@ -183,10 +182,10 @@ class ConfigFileRepository(object):
self.AddDirectoryMonitor(name)
else:
# file entries shouldn't contain path-to-repo
- shortname = '/'+ '/'.join(name[len(self.name)+1:].split('/')[:-1])
+ shortname = '/'+ '/'.join(name[len(self.data)+1:].split('/')[:-1])
if not self.entries.has_key(shortname):
self.entries[shortname] = ConfigFileEntry(shortname)
- self.provides[shortname] = self.entries[shortname].GetConfigFile
+ self.__provides__['ConfigFile'][shortname] = self.entries[shortname].GetConfigFile
self.entries[shortname].AddEntry(name)
#self.entries[shortname].HandleEvent()
@@ -197,41 +196,24 @@ class ConfigFileRepository(object):
filename = "%s/%s" % (self.famID[event.requestID], event.filename)
else:
filename = event.filename
+ configfile = filename[len(self.data):-(len(event.filename)+1)]
- if ((action == 'exists') and (filename != self.name)):
- self.AddEntry(filename)
- elif action == 'created':
+ if ((action in ['exists', 'created']) and (filename != self.data)):
self.AddEntry(filename)
elif action == 'changed':
# pass the event down the chain to the ConfigFileEntry
- configfile = filename[len(self.name):-(len(event.filename)+1)]
if event.filename == ':info':
event.filename = filename
if self.entries.has_key(configfile):
self.entries[configfile].HandleEvent(event)
else:
- if filename != self.name:
+ if filename != self.data:
self.AddEntry(filename)
else:
- syslog(LOG_INFO, "Ignoring event for %s"%(configfile))
+ self.LogError("Ignoring event for %s"%(configfile))
elif action == 'deleted':
- configfile = filename[len(self.name):-(len(event.filename)+1)]
self.entries[configfile].HandleEvent(event)
elif action in ['exists', 'endExist']:
pass
else:
- syslog(LOG_ERR, "Got unknown event %s %s:%s" % (action, event.requestID, event.filename))
-
-class Cfg(Generator):
- '''This generator manages the configuration file repository for bcfg2'''
- __name__ = 'Cfg'
- __version__ = '$Id$'
- __author__ = 'bcfg-dev@mcs.anl.gov'
- __provides__ = {}
-
- def __init__(self, core, datastore):
- Generator.__init__(self, core, datastore)
- self.repo = ConfigFileRepository(self.data, self.core.fam)
- self.__provides__ = {'ConfigFile':self.repo.provides}
-
-
+ self.LogError("Got unknown event %s %s:%s" % (action, event.requestID, event.filename))