in lambdas/custom_resources/CTE_CrossAccountCloudFormation/src/cfn_helper.py [0:0]
def update_parameters(override_parameters=None, current_parameters=None):
"""This will diff 2 sets of CloudFormation Parameters and will set any duplicate ones to
the Override value
Args:
override_parameters (dict or list, optional): Override Parameters to deploy a CloudFormation Template
current_parameters (list, optional): Path to the template file on disk to create stack with
Returns:
list: A list of CloudFormation Parameters
"""
# Parameters with override values
parameters = list()
logger.info(f"Override Parameters:{override_parameters}")
logger.info(f"Current Parameters:{current_parameters}")
if current_parameters:
for c_param in current_parameters:
parameters.append({"ParameterKey": c_param['ParameterKey'], "ParameterValue": c_param['ParameterValue']})
if override_parameters and isinstance(override_parameters, dict):
if override_parameters.get('Parameters'):
logger.info('Found "Parameters" section in dict, using that value for all parameters.')
override_parameters = override_parameters['Parameters']
for key, value in override_parameters.items():
# Parse through list to see if it needs to be updated.
for parameter in parameters:
if key == parameter['ParameterKey'] and value != parameter['ParameterValue']:
logger.info(f'Removing {{"ParameterKey": {key}, "ParameterValue": {parameter["ParameterValue"]} }}')
parameters.remove({"ParameterKey": key, "ParameterValue": parameter["ParameterValue"]})
logger.info(f'Adding {{"ParameterKey": {str(key)}, "ParameterValue": {str(value)}}})')
temp = {"ParameterKey": str(key), "ParameterValue": str(value)}
parameters.append(temp)
elif override_parameters and isinstance(override_parameters, list):
if not current_parameters:
parameters = override_parameters
else:
for o_param in override_parameters:
# Parse through list to see if it needs to be updated.
for c_param in parameters:
if o_param['ParameterKey'] == c_param['ParameterKey'] and \
o_param['ParameterValue'] != c_param['ParameterValue']:
logger.info(
f"Replacing Parameter:{o_param['ParameterKey']} with Value:{o_param['ParameterValue']}")
parameters.remove(
{"ParameterKey": c_param['ParameterKey'], "ParameterValue": c_param['ParameterValue']})
parameters.append(
{"ParameterKey": o_param['ParameterKey'], "ParameterValue": o_param['ParameterValue']})
logger.info(f"New Deployment Parameters:{parameters}")
return parameters