summaryrefslogtreecommitdiffstats
path: root/src/lib/Server/Plugins/Defaults.py
diff options
context:
space:
mode:
authorChris St. Pierre <chris.a.st.pierre@gmail.com>2011-09-19 11:04:03 -0400
committerChris St. Pierre <chris.a.st.pierre@gmail.com>2011-09-19 11:04:03 -0400
commitfe9b75662276326898458a68744b920ebd9d46b8 (patch)
tree999cf9ca885d38e23305408b37ff0b662686832d /src/lib/Server/Plugins/Defaults.py
parente6489338056d55805a66383bcd5cda6ed8caa22b (diff)
downloadbcfg2-fe9b75662276326898458a68744b920ebd9d46b8.tar.gz
bcfg2-fe9b75662276326898458a68744b920ebd9d46b8.tar.bz2
bcfg2-fe9b75662276326898458a68744b920ebd9d46b8.zip
added Defaults plugin
Diffstat (limited to 'src/lib/Server/Plugins/Defaults.py')
-rw-r--r--src/lib/Server/Plugins/Defaults.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/lib/Server/Plugins/Defaults.py b/src/lib/Server/Plugins/Defaults.py
new file mode 100644
index 000000000..23104946e
--- /dev/null
+++ b/src/lib/Server/Plugins/Defaults.py
@@ -0,0 +1,51 @@
+"""This generator provides rule-based entry mappings."""
+__revision__ = '$Revision$'
+
+import re
+import Bcfg2.Server.Plugin
+import Bcfg2.Server.Plugins.Rules
+
+class Defaults(Bcfg2.Server.Plugins.Rules.Rules,
+ Bcfg2.Server.Plugin.StructureValidator):
+ """Set default attributes on bound entries"""
+ name = 'Defaults'
+ __version__ = '$Id$'
+ __author__ = 'bcfg-dev@mcs.anl.gov'
+
+ # Rules is a Generator that happens to implement all of the
+ # functionality we want, so we overload it, but Defaults should
+ # _not_ handle any entries; it does its stuff in the structure
+ # validation phase. so we overload Handle(s)Entry and HandleEvent
+ # to ensure that Defaults handles no entries, even though it's a
+ # Generator.
+
+ def HandlesEntry(self, entry, metadata):
+ return False
+
+ def HandleEntry(self, entry, metadata):
+ raise PluginExecutionError
+
+ def HandleEvent(self, event):
+ Bcfg2.Server.Plugin.XMLDirectoryBacked.HandleEvent(self, event)
+
+ def validate_structures(self, metadata, structures):
+ """ Apply defaults """
+ for struct in structures:
+ for entry in struct.iter():
+ if entry.tag.startswith("Bound"):
+ is_bound = True
+ entry.tag = entry.tag[5:]
+ else:
+ is_bound = False
+ try:
+ try:
+ self.BindEntry(entry, metadata)
+ except Bcfg2.Server.Plugin.PluginExecutionError:
+ # either no matching defaults (which is okay),
+ # or multiple matching defaults (which is not
+ # okay, but is logged). either way, we don't
+ # care about the error.
+ pass
+ finally:
+ if is_bound:
+ entry.tag = "Bound" + entry.tag