From 5fc3effb174ff6e9fbfd05346134ac8861477884 Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Fri, 30 Dec 2011 09:50:05 -0500 Subject: added SimpleConfig plugin for easy config files; made Packages and Rules use SimpleConfig; made regex in rules off by default, but configurable in rules.conf --- src/lib/Server/Plugins/Rules.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'src/lib/Server/Plugins/Rules.py') diff --git a/src/lib/Server/Plugins/Rules.py b/src/lib/Server/Plugins/Rules.py index a146dca6a..fde0f3d59 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, @@ -28,10 +36,14 @@ class Rules(Bcfg2.Server.Plugin.PrioDir): def _matches(self, entry, metadata, rules): if Bcfg2.Server.Plugin.PrioDir._matches(self, entry, metadata, rules): 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) -- cgit v1.2.3-1-g7c22