def update_parameters()

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