def determine_stack_failure_event()

in lambdas/custom_resources/CTE_CrossAccountCloudFormation/src/cfn_helper.py [0:0]


def determine_stack_failure_event(stack_name, session=None):
    """Gets the ResourceStatusReason of the provided stack name and prints it

    Args:
        stack_name (str): Name of the stack to check
        session (object, optional): boto3 session object

    Returns:
        None
    """
    err_msg = None
    cfn_failure_list = [
        'CREATE_FAILED',
        'ROLLBACK_COMPLETE',
        'ROLLBACK_FAILED',
        'UPDATE_FAILED',
        'UPDATE_ROLLBACK_COMPLETE',
        'UPDATE_ROLLBACK_FAILED',
        'UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS'
    ]

    response = describe_stack_events(stack_name=stack_name, session=session)
    # logger.info(f"StackEvents:{response['StackEvents']}")
    for x in response['StackEvents']:
        if x['ResourceStatus'] in cfn_failure_list:
            # logger.info(f"Found stack ResourceStatus in failure list")
            if x.get('ResourceStatusReason'):
                err_msg = f"{x['LogicalResourceId']} - {x['ResourceStatusReason']}"
                logger.info(
                    f"Stack:{stack_name} - Error:{x['ResourceStatusReason']} LogicalResourceId:{x['LogicalResourceId']}"
                )

    return err_msg