def generate_config_impl()

in reference-artifacts/Custom-Scripts/Conformance-Pack-Converter/generate-config-rules.py [0:0]


def generate_config_impl(data):
    parameters = data.get("Parameters", [])
    resources = data.get("Resources", {})
    for name, props in resources.items():
        rule = {}
        if props['Type'] != "AWS::Config::ConfigRule":
            continue
        if not props["Properties"]["Source"] or props["Properties"]["Source"]["Owner"] != 'AWS':
            continue
        rule['name'] = props["Properties"]["Source"]["SourceIdentifier"]
        ruleNames.append(props["Properties"]["Source"]["SourceIdentifier"])
        for param_name, value in props["Properties"].get("InputParameters", {}).items():
            if 'parameters' not in rule:
                rule['parameters'] = {}
            if not isinstance(value, dict):
                rule['parameters'][param_name] = value
            else:
                if 'Ref' in value:
                    if parameters.get(value['Ref']) and parameters.get(value['Ref']).get('Default'):
                        rule['parameters'][param_name] = parameters[value['Ref']]['Default']
                elif 'Fn::If' in value:
                    true_val = value['Fn::If'][1]
                    false_val = value['Fn::If'][2] if len(
                        value['Fn::If']) > 2 else None
                    if isinstance(true_val, dict) and 'Ref' in true_val:
                        if parameters.get(true_val['Ref']):
                            if true_val['Ref'] in pseudo_params:
                                rule['parameters'][param_name] = true_val['Ref']
                            elif parameters.get(true_val['Ref']).get('Default'):
                                rule['parameters'][param_name] = parameters[true_val['Ref']]['Default']
                    elif isinstance(true_val, str):
                        rule['parameters'][param_name] = true_val
                    elif isinstance(false_val, dict):
                        if parameters.get(false_val['Ref']):
                            if false_val['Ref'] in pseudo_params:
                                rule['parameters'][param_name] = false_val['Ref']
                            elif parameters.get(false_val['Ref']).get('Default'):
                                rule['parameters'][param_name] = parameters[false_val['Ref']]['Default']
                    elif isinstance(false_val, str):
                        rule['parameters'][param_name] = false_val
                if param_name not in rule["parameters"]:
                    rule['parameters'][param_name] = "${REPLACE::%s}" % param_name
        rules.append(rule)
    return