diff options
author | Chris St. Pierre <chris.a.st.pierre@gmail.com> | 2012-01-13 08:09:22 -0500 |
---|---|---|
committer | Chris St. Pierre <chris.a.st.pierre@gmail.com> | 2012-01-13 08:09:22 -0500 |
commit | 238f6446d09ca8e3b7a082876920922ee1eda4d2 (patch) | |
tree | 7a59ba455180c9950631334180af64ba68eeadee /src/lib/Server/Plugins/Rules.py | |
parent | 8c9b825595174455242b3b2f6ca96ddcbdcfff2e (diff) | |
parent | b6654dd316f9cd4f6a6673a89cdd48cc1b38b82a (diff) | |
download | bcfg2-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.py | 16 |
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) |