diff options
author | Alexander Sulfrian <alexander@sulfrian.net> | 2013-03-01 03:29:05 +0100 |
---|---|---|
committer | Alexander Sulfrian <alexander@sulfrian.net> | 2013-03-01 04:10:01 +0100 |
commit | c876d0563bb92e5ce7d037ab6a89eb0e0bd69160 (patch) | |
tree | 1688502c44b53c200514b0293ec7ce5231b22ad7 /src/lib/Server/Plugins/Pinning.py | |
parent | 61bf996fd094b954b967829411121b9ef5922526 (diff) | |
download | bcfg2-c876d0563bb92e5ce7d037ab6a89eb0e0bd69160.tar.gz bcfg2-c876d0563bb92e5ce7d037ab6a89eb0e0bd69160.tar.bz2 bcfg2-c876d0563bb92e5ce7d037ab6a89eb0e0bd69160.zip |
Pinning: new pluing to handle the pinningsdebian/1.2.3-8
The pinnings of packages to a specific source are now handled
with a specific plugin. This has the advantage that genshi templates
could be generated out of the configured pinnings.
Diffstat (limited to 'src/lib/Server/Plugins/Pinning.py')
-rw-r--r-- | src/lib/Server/Plugins/Pinning.py | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/lib/Server/Plugins/Pinning.py b/src/lib/Server/Plugins/Pinning.py new file mode 100644 index 000000000..474ece41b --- /dev/null +++ b/src/lib/Server/Plugins/Pinning.py @@ -0,0 +1,49 @@ +import os +import re +import sys +import copy +import logging +import lxml.etree +import Bcfg2.Server.Plugin + +logger = logging.getLogger('Bcfg2.Plugins.Pinnings') + +class PinningFile(Bcfg2.Server.Plugin.StructFile): + """Class for pinning files.""" + def get_additional_data(self, meta): + data = self.Match(meta) + results = {} + for d in data: + name = d.get('name', '') + src = d.get('src', '') + results[name] = src + return results + +class PinDirectoryBacked(Bcfg2.Server.Plugin.DirectoryBacked): + __child__ = PinningFile + patterns = re.compile(r'.*\.xml$') + + def get_additional_data(self, meta): + results = {} + for files in self.entries: + results.update(self.entries[files].get_additional_data(meta)) + return results + +class Pinning(Bcfg2.Server.Plugin.Plugin, + Bcfg2.Server.Plugin.Connector): + name = 'Pinning' + version = '$Revision$' + + def __init__(self, core, datastore): + Bcfg2.Server.Plugin.Plugin.__init__(self, core, datastore) + Bcfg2.Server.Plugin.Connector.__init__(self) + try: + self.store = PinDirectoryBacked(self.data, core.fam) + except OSError: + e = sys.exc_info()[1] + self.logger.error("Error while creating Pinning store: %s %s" % + (e.strerror, e.filename)) + raise Bcfg2.Server.Plugin.PluginInitError + + def get_additional_data(self, meta): + return self.store.get_additional_data(meta) |