Skip to content

Instantly share code, notes, and snippets.

@mvanholsteijn
Created February 8, 2018 12:57
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mvanholsteijn/74d2a5de132b261f11197059e0b7936f to your computer and use it in GitHub Desktop.
Save mvanholsteijn/74d2a5de132b261f11197059e0b7936f to your computer and use it in GitHub Desktop.
Reports the failed resources in the last AWS CloudFormation stack operations.
#!/usr/bin/env python
#
# reports errors on the last stack operations
#
import sys
import boto3
def report_errors(stackname):
cfn = boto3.client('cloudformation')
paginator = cfn.get_paginator('describe_stack_events')
page_iterator = paginator.paginate(StackName='devapi-auth0rules')
events = []
paginator = cfn.get_paginator('describe_stack_events')
page_iterator = paginator.paginate(StackName=stackname)
for page in page_iterator:
events.extend(page['StackEvents'])
sorted(events, key=lambda event: event['Timestamp'], reverse=True)
for i, event in enumerate(events):
if event['ResourceType'] == 'AWS::CloudFormation::Stack':
status = event['ResourceStatus']
if status.endswith('IN_PROGRESS'):
if status.endswith('CLEANUP_IN_PROGRESS') or status.endswith('ROLLBACK_IN_PROGRESS'):
continue
else:
break
for event in events[:i+1]:
if event['ResourceStatus'].endswith('FAILED'):
if 'ResourceStatusReason' not in event:
sys.sterr.write('ERROR: {LogicalResourceId} {ResourceType} {ResourceStatus}\n'.format(**event))
else:
sys.stderr.write('ERROR: {LogicalResourceId} {ResourceType} {ResourceStatus}\n\t{ResourceStatusReason}\n'.format(**event))
if __name__ == '__main__':
if len(sys.argv) == 2:
report_errors(sys.argv[1])
else:
sys.stderr.write('Usage: report-cloudformation-stack-errors stack-name\n')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment