Clean up the source:
    * Replace use of Fn::Join with Fn::Sub

def clean(source):
    """
    Clean up the source:
    * Replace use of Fn::Join with Fn::Sub
    """

    if isinstance(source, dict):
        for key, value in source.items():
            if key == "Fn::Join":
                return convert_join(value)
            else:
                source[key] = clean(value)

    elif isinstance(source, list):
        return [clean(item) for item in source]

    return source