Use previous parameter merge strategy

We don't allow different parameter merge strategies
in different environment files for a parameter. If
a merge strategy has already been provided in one
environment file, let's use that for subsequent ones
unless a different merge strategy has been provided.

Task: 45578
Change-Id: Iec3367667248d0b46196a6d569f3cbb3b200d842
(cherry picked from commit 94f32ee39f)
This commit is contained in:
rabi 2022-06-09 09:13:09 +05:30 committed by Takashi Kajinami
parent eefb921612
commit f050798058
2 changed files with 19 additions and 3 deletions

View File

@ -22,14 +22,19 @@ ALLOWED_PARAM_MERGE_STRATEGIES = (OVERWRITE, MERGE, DEEP_MERGE) = (
'overwrite', 'merge', 'deep_merge')
def get_param_merge_strategy(merge_strategies, param_key):
def get_param_merge_strategy(merge_strategies, param_key,
available_strategies=None):
if not available_strategies:
available_strategies = {}
if merge_strategies is None:
return OVERWRITE
env_default = merge_strategies.get('default', OVERWRITE)
merge_strategy = merge_strategies.get(
param_key, available_strategies.get(
param_key, env_default))
merge_strategy = merge_strategies.get(param_key, env_default)
if merge_strategy in ALLOWED_PARAM_MERGE_STRATEGIES:
return merge_strategy
@ -114,7 +119,7 @@ def merge_parameters(old, new, param_schemata, strategies_in_file,
# if key not in param_schemata ignore it
if key in param_schemata and value is not None:
param_merge_strategy = get_param_merge_strategy(
strategies_in_file, key)
strategies_in_file, key, available_strategies)
if key not in available_strategies:
new_strategies[key] = param_merge_strategy

View File

@ -202,7 +202,13 @@ class TestMergeEnvironments(common.HeatTestCase):
'lst_value1': "merge",
'json_value1': "deep_merge"}
env3_merge_strategies = {
'default': "overwrite",
'lst_value1': "deep_merge",
'json_value1': "merge"}
self.env_2['parameter_merge_strategies'] = merge_strategies
self.env_3['parameter_merge_strategies'] = env3_merge_strategies
files = {'env_1': json.dumps(self.env_1),
'env_2': json.dumps(self.env_2),
@ -221,7 +227,12 @@ class TestMergeEnvironments(common.HeatTestCase):
'default': "overwrite",
'lst_value2': "merge"}
env4_merge_strategies = {
'default': "overwrite",
'lst_value2': "overwrite"}
self.env_2['parameter_merge_strategies'] = merge_strategies
self.env_4['parameter_merge_strategies'] = env4_merge_strategies
files = {'env_1': json.dumps(self.env_1),
'env_2': json.dumps(self.env_2),