[cloud] Add jittered backoff+retries to CloudFormation module (#27907)
This commit is contained in:
parent
4070a22c5b
commit
587ab33415
1 changed files with 13 additions and 4 deletions
|
@ -417,13 +417,10 @@ def stack_operation(cfn, stack_name, operation):
|
||||||
time.sleep(5)
|
time.sleep(5)
|
||||||
return {'failed': True, 'output':'Failed for unknown reasons.'}
|
return {'failed': True, 'output':'Failed for unknown reasons.'}
|
||||||
|
|
||||||
@AWSRetry.backoff(tries=3, delay=5)
|
|
||||||
def describe_stacks(cfn, stack_name):
|
|
||||||
return cfn.describe_stacks(StackName=stack_name)
|
|
||||||
|
|
||||||
def get_stack_facts(cfn, stack_name):
|
def get_stack_facts(cfn, stack_name):
|
||||||
try:
|
try:
|
||||||
stack_response = describe_stacks(cfn, stack_name)
|
stack_response = cfn.describe_stacks(StackName=stack_name)
|
||||||
stack_info = stack_response['Stacks'][0]
|
stack_info = stack_response['Stacks'][0]
|
||||||
#except AmazonCloudFormationException as e:
|
#except AmazonCloudFormationException as e:
|
||||||
except (botocore.exceptions.ValidationError,botocore.exceptions.ClientError) as err:
|
except (botocore.exceptions.ValidationError,botocore.exceptions.ClientError) as err:
|
||||||
|
@ -509,6 +506,18 @@ def main():
|
||||||
except botocore.exceptions.NoCredentialsError as e:
|
except botocore.exceptions.NoCredentialsError as e:
|
||||||
module.fail_json(msg=boto_exception(e))
|
module.fail_json(msg=boto_exception(e))
|
||||||
|
|
||||||
|
# Wrap the cloudformation client methods that this module uses with
|
||||||
|
# automatic backoff / retry for throttling error codes
|
||||||
|
backoff_wrapper = AWSRetry.jittered_backoff(retries=10, delay=3, max_delay=30)
|
||||||
|
cfn.describe_stack_events = backoff_wrapper(cfn.describe_stack_events)
|
||||||
|
cfn.create_stack = backoff_wrapper(cfn.create_stack)
|
||||||
|
cfn.list_change_sets = backoff_wrapper(cfn.list_change_sets)
|
||||||
|
cfn.create_change_set = backoff_wrapper(cfn.create_change_set)
|
||||||
|
cfn.update_stack = backoff_wrapper(cfn.update_stack)
|
||||||
|
cfn.describe_stacks = backoff_wrapper(cfn.describe_stacks)
|
||||||
|
cfn.list_stack_resources = backoff_wrapper(cfn.list_stack_resources)
|
||||||
|
cfn.delete_stack = backoff_wrapper(cfn.delete_stack)
|
||||||
|
|
||||||
stack_info = get_stack_facts(cfn, stack_params['StackName'])
|
stack_info = get_stack_facts(cfn, stack_params['StackName'])
|
||||||
|
|
||||||
if state == 'present':
|
if state == 'present':
|
||||||
|
|
Loading…
Reference in a new issue