diff options
author | Sol Jerome <sol.jerome@gmail.com> | 2015-09-01 10:23:10 -0500 |
---|---|---|
committer | Sol Jerome <sol.jerome@gmail.com> | 2015-09-01 10:23:10 -0500 |
commit | 75466a831a92ab136a9cc2b6b875d20f0b00a889 (patch) | |
tree | e83728ee5a1f67e072e4d6fba0b7c71ecb352253 /src/lib/Bcfg2/Server/Plugins/Rules.py | |
parent | 824879eb85a1065e842930485778a594b914c77f (diff) | |
parent | 3259a1611edf97241b3a2d1bd585185907fe4e9c (diff) | |
download | bcfg2-75466a831a92ab136a9cc2b6b875d20f0b00a889.tar.gz bcfg2-75466a831a92ab136a9cc2b6b875d20f0b00a889.tar.bz2 bcfg2-75466a831a92ab136a9cc2b6b875d20f0b00a889.zip |
Merge branch 'rules-replace_name' of https://github.com/AlexanderS/bcfg2
Diffstat (limited to 'src/lib/Bcfg2/Server/Plugins/Rules.py')
-rw-r--r-- | src/lib/Bcfg2/Server/Plugins/Rules.py | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/src/lib/Bcfg2/Server/Plugins/Rules.py b/src/lib/Bcfg2/Server/Plugins/Rules.py index a3f682ed6..cf659251c 100644 --- a/src/lib/Bcfg2/Server/Plugins/Rules.py +++ b/src/lib/Bcfg2/Server/Plugins/Rules.py @@ -1,10 +1,17 @@ """This generator provides rule-based entry mappings.""" +import copy import re +import string import Bcfg2.Options import Bcfg2.Server.Plugin +class NameTemplate(string.Template): + """Simple subclass of string.Template with a custom delimiter.""" + delimiter = '%' + + class Rules(Bcfg2.Server.Plugin.PrioDir): """This is a generator that handles service assignments.""" __author__ = 'bcfg-dev@mcs.anl.gov' @@ -12,7 +19,10 @@ class Rules(Bcfg2.Server.Plugin.PrioDir): options = Bcfg2.Server.Plugin.PrioDir.options + [ Bcfg2.Options.BooleanOption( cf=("rules", "regex"), dest="rules_regex", - help="Allow regular expressions in Rules")] + help="Allow regular expressions in Rules"), + Bcfg2.Options.BooleanOption( + cf=("rules", "replace_name"), dest="rules_replace_name", + help="Replace %{name} in attributes with name of target entry")] def __init__(self, core): Bcfg2.Server.Plugin.PrioDir.__init__(self, core) @@ -46,7 +56,22 @@ class Rules(Bcfg2.Server.Plugin.PrioDir): return True return False + def _apply(self, entry, data): + if self._replace_name_enabled: + data = copy.deepcopy(data) + for key, val in list(data.attrib.items()): + data.attrib[key] = NameTemplate(val).safe_substitute( + name=entry.get('name')) + + Bcfg2.Server.Plugin.PrioDir._apply(self, entry, data) + @property def _regex_enabled(self): """ Return True if rules regexes are enabled, False otherwise """ return Bcfg2.Options.setup.rules_regex + + @property + def _replace_name_enabled(self): + """ Return True if the replace_name feature is enabled, + False otherwise """ + return Bcfg2.Options.setup.rules_replace_name |