Fallback to templating when only one source exists
This is a backwards compatability improvement, since it was previously permitted to have a config file that templated to invalid yaml/ini. Change-Id: I53a0894cc64e83c7342a82ad987b7e5a4696ece2 Closes-Bug: #2042690
This commit is contained in:
parent
9836fa7e6c
commit
86d9a533e8
@ -77,13 +77,27 @@ class ConfigCollector(object):
|
|||||||
result = set(self.files_in_destination) - ignored
|
result = set(self.files_in_destination) - ignored
|
||||||
return list(result)
|
return list(result)
|
||||||
|
|
||||||
def _find_matching_rule(self, relative_path):
|
def _find_matching_rule(self, relative_path, sources):
|
||||||
# First match wins
|
# First match wins
|
||||||
for rule in self.rules:
|
for rule in self.rules:
|
||||||
if not rule.get('enabled', True):
|
if not rule.get('enabled', True):
|
||||||
continue
|
continue
|
||||||
glob_ = rule["glob"]
|
glob_ = rule["glob"]
|
||||||
if glob.globmatch(relative_path, glob_, flags=glob.GLOBSTAR):
|
if glob.globmatch(relative_path, glob_, flags=glob.GLOBSTAR):
|
||||||
|
requires_merge = (rule["strategy"] in
|
||||||
|
["merge_configs", "merge_yaml"])
|
||||||
|
# Fallback to templating when there is only one source. This
|
||||||
|
# allows you to have config files that template to invalid
|
||||||
|
# yaml/ini. This was allowed prior to config merging so
|
||||||
|
# improves backwards compatibility.
|
||||||
|
if requires_merge and len(sources) == 1:
|
||||||
|
# The rule can be used again to match a different file
|
||||||
|
# so don't modify in place.
|
||||||
|
rule = rule.copy()
|
||||||
|
rule["strategy"] = 'template'
|
||||||
|
# Strip parameters as they may not be compatible with
|
||||||
|
# template module.
|
||||||
|
rule['params'] = {}
|
||||||
return rule
|
return rule
|
||||||
|
|
||||||
def partition_into_actions(self):
|
def partition_into_actions(self):
|
||||||
@ -114,7 +128,7 @@ class ConfigCollector(object):
|
|||||||
if not os.path.exists(dirname):
|
if not os.path.exists(dirname):
|
||||||
missing_directories.add(dirname)
|
missing_directories.add(dirname)
|
||||||
|
|
||||||
rule = self._find_matching_rule(relative_path)
|
rule = self._find_matching_rule(relative_path, sources)
|
||||||
|
|
||||||
if not rule:
|
if not rule:
|
||||||
continue
|
continue
|
||||||
|
@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
fixes:
|
||||||
|
- |
|
||||||
|
When merging kolla config, fallback to templating when only one source file
|
||||||
|
exists. This allows you to use config that templates to invalid yaml/ini as
|
||||||
|
long as there isn't an environment override. This improves backwards
|
||||||
|
compatability where it was permitted to use such constructs.
|
Loading…
x
Reference in New Issue
Block a user