diff options
-rw-r--r-- | doc/server/plugins/generators/rules.txt | 4 | ||||
-rw-r--r-- | src/lib/Server/Plugins/Rules.py | 10 |
2 files changed, 7 insertions, 7 deletions
diff --git a/doc/server/plugins/generators/rules.txt b/doc/server/plugins/generators/rules.txt index 70d894958..6bc407371 100644 --- a/doc/server/plugins/generators/rules.txt +++ b/doc/server/plugins/generators/rules.txt @@ -369,6 +369,10 @@ do:: </Group> </Rules> +Regular expressions are anchored at both ends, so ``<Service +name="bcfg2".../>`` will *not* match a Service named ``bcfg2-server``; +you'd have to explicitly specify ``<Service name="bcfg2.*".../>``. + Note that only one Rule can apply to any abstract entry, so you cannot specify multiple regexs to match the same rule. In the use case above, you would have to specify the services fully (except for type) diff --git a/src/lib/Server/Plugins/Rules.py b/src/lib/Server/Plugins/Rules.py index e8412c6f1..a146dca6a 100644 --- a/src/lib/Server/Plugins/Rules.py +++ b/src/lib/Server/Plugins/Rules.py @@ -12,12 +12,8 @@ class Rules(Bcfg2.Server.Plugin.PrioDir): def HandlesEntry(self, entry, metadata): if entry.tag in self.Entries: - if entry.get("name") in self.Entries[entry.tag]: - return True - else: - for rule in self.Entries[entry.tag].keys(): - if re.search(rule, entry.get('name')): - return True + return self._matches(entry, metadata, + self.Entries[entry.tag].keys()) return False def HandleEntry(self, entry, metadata): @@ -35,7 +31,7 @@ class Rules(Bcfg2.Server.Plugin.PrioDir): else: # attempt regular expression matching for rule in rules: - if re.search(rule, entry.get('name')): + if re.match("%s$" % rule, entry.get('name')): return True return False |