summaryrefslogtreecommitdiffstats
path: root/src/lib/Server/Plugins/Rules.py
diff options
context:
space:
mode:
authorChris St. Pierre <chris.a.st.pierre@gmail.com>2012-01-13 08:09:22 -0500
committerChris St. Pierre <chris.a.st.pierre@gmail.com>2012-01-13 08:09:22 -0500
commit238f6446d09ca8e3b7a082876920922ee1eda4d2 (patch)
tree7a59ba455180c9950631334180af64ba68eeadee /src/lib/Server/Plugins/Rules.py
parent8c9b825595174455242b3b2f6ca96ddcbdcfff2e (diff)
parentb6654dd316f9cd4f6a6673a89cdd48cc1b38b82a (diff)
downloadbcfg2-238f6446d09ca8e3b7a082876920922ee1eda4d2.tar.gz
bcfg2-238f6446d09ca8e3b7a082876920922ee1eda4d2.tar.bz2
bcfg2-238f6446d09ca8e3b7a082876920922ee1eda4d2.zip
merged branch rules_regex
Diffstat (limited to 'src/lib/Server/Plugins/Rules.py')
-rw-r--r--src/lib/Server/Plugins/Rules.py16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/lib/Server/Plugins/Rules.py b/src/lib/Server/Plugins/Rules.py
index 32552f25f..c66276179 100644
--- a/src/lib/Server/Plugins/Rules.py
+++ b/src/lib/Server/Plugins/Rules.py
@@ -4,12 +4,20 @@ __revision__ = '$Revision$'
import re
import Bcfg2.Server.Plugin
+class RulesConfig(Bcfg2.Server.Plugin.SimpleConfig):
+ _required = False
+
class Rules(Bcfg2.Server.Plugin.PrioDir):
"""This is a generator that handles service assignments."""
name = 'Rules'
__version__ = '$Id$'
__author__ = 'bcfg-dev@mcs.anl.gov'
+ def __init__(self, core, datastore):
+ Bcfg2.Server.Plugin.PrioDir.__init__(self, core, datastore)
+ self.config = RulesConfig(self)
+ self._regex_cache = dict()
+
def HandlesEntry(self, entry, metadata):
if entry.tag in self.Entries:
return self._matches(entry, metadata,
@@ -36,10 +44,14 @@ class Rules(Bcfg2.Server.Plugin.PrioDir):
# special case for Path tags:
# http://trac.mcs.anl.gov/projects/bcfg2/ticket/967
return True
- else:
+ elif self._regex_enabled:
# attempt regular expression matching
for rule in rules:
- if re.match("%s$" % rule, entry.get('name')):
+ if rule not in self._regex_cache:
+ self._regex_cache[rule] = re.compile("%s$" % rule)
+ if self._regex_cache[rule].match(entry.get('name')):
return True
return False
+ def _regex_enabled(self):
+ return self.config.getboolean("rules", "regex", default=False)