summaryrefslogtreecommitdiffstats
path: root/src/lib/Bcfg2/Server/Plugins/PkgVars.py
diff options
context:
space:
mode:
authorAlexander Sulfrian <alexander@sulfrian.net>2013-06-11 10:10:41 +0200
committerAlexander Sulfrian <asulfrian@zedat.fu-berlin.de>2022-01-23 19:57:46 +0100
commit4e1a98aec6afa273bda82e3f840d3ed27e42b3be (patch)
tree2e1f4d4975e5d1dfa80d329808db9037a6c5b617 /src/lib/Bcfg2/Server/Plugins/PkgVars.py
parentc22cd2a2fc8b909c08b1d8df8d5cc3909e8aeccc (diff)
downloadbcfg2-4e1a98aec6afa273bda82e3f840d3ed27e42b3be.tar.gz
bcfg2-4e1a98aec6afa273bda82e3f840d3ed27e42b3be.tar.bz2
bcfg2-4e1a98aec6afa273bda82e3f840d3ed27e42b3be.zip
PkgVars: Add new plugin to set vars for packages
This plugins allows the setting of varius flags per package. It should be used f.e. to specify pinnings for debian packages.
Diffstat (limited to 'src/lib/Bcfg2/Server/Plugins/PkgVars.py')
-rw-r--r--src/lib/Bcfg2/Server/Plugins/PkgVars.py59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/lib/Bcfg2/Server/Plugins/PkgVars.py b/src/lib/Bcfg2/Server/Plugins/PkgVars.py
new file mode 100644
index 000000000..a085ea17e
--- /dev/null
+++ b/src/lib/Bcfg2/Server/Plugins/PkgVars.py
@@ -0,0 +1,59 @@
+import os
+import re
+import sys
+import copy
+import logging
+import lxml.etree
+import Bcfg2.Server.Plugin
+
+logger = logging.getLogger('Bcfg2.Plugins.PkgVars')
+vars = ['pin', 'use', 'keywords']
+
+class PkgVarsFile(Bcfg2.Server.Plugin.StructFile):
+ def get_additional_data(self, meta):
+ data = self.Match(meta)
+ results = {}
+ for d in data:
+ name = d.get('name', '')
+
+ for v in vars:
+ value = d.get(v, None)
+ if value:
+ results[v][name] = value
+
+ return results
+
+class PkgVarsDirectoryBacked(Bcfg2.Server.Plugin.DirectoryBacked):
+ __child__ = PkgVarsFile
+ patterns = re.compile(r'.*\.xml$')
+
+ def get_additional_data(self, meta):
+ results = {}
+ for v in vars:
+ results[v] = {}
+
+ for files in self.entries:
+ new = self.entries[files].get_additional_data(meta)
+ for x in vars:
+ results[x].update(new[x])
+
+ return results
+
+class PkgVars(Bcfg2.Server.Plugin.Plugin,
+ Bcfg2.Server.Plugin.Connector):
+ name = 'PkgVars'
+ version = '$Revision$'
+
+ def __init__(self, core):
+ Bcfg2.Server.Plugin.Plugin.__init__(self, core)
+ Bcfg2.Server.Plugin.Connector.__init__(self)
+ try:
+ self.store = PkgVarsDirectoryBacked(self.data)
+ except OSError:
+ e = sys.exc_info()[1]
+ self.logger.error("Error while creating PkgVars 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)