diff --git a/changelogs/fragments/748-iam_role_info-jittered-backoff.yaml b/changelogs/fragments/748-iam_role_info-jittered-backoff.yaml new file mode 100644 index 00000000000..12c27b23945 --- /dev/null +++ b/changelogs/fragments/748-iam_role_info-jittered-backoff.yaml @@ -0,0 +1,2 @@ +bugfixes: + - iam_role_info - switch to jittered backoff to reduce rate limiting failures (https://github.com/ansible-collections/community.aws/pull/748). diff --git a/plugins/modules/iam_role_info.py b/plugins/modules/iam_role_info.py index 0a627d10cc7..a08df455fad 100644 --- a/plugins/modules/iam_role_info.py +++ b/plugins/modules/iam_role_info.py @@ -159,25 +159,25 @@ from ansible_collections.amazon.aws.plugins.module_utils.ec2 import boto3_tag_list_to_ansible_dict -@AWSRetry.exponential_backoff() +@AWSRetry.jittered_backoff() def list_iam_roles_with_backoff(client, **kwargs): paginator = client.get_paginator('list_roles') return paginator.paginate(**kwargs).build_full_result() -@AWSRetry.exponential_backoff() +@AWSRetry.jittered_backoff() def list_iam_role_policies_with_backoff(client, role_name): paginator = client.get_paginator('list_role_policies') return paginator.paginate(RoleName=role_name).build_full_result()['PolicyNames'] -@AWSRetry.exponential_backoff() +@AWSRetry.jittered_backoff() def list_iam_attached_role_policies_with_backoff(client, role_name): paginator = client.get_paginator('list_attached_role_policies') return paginator.paginate(RoleName=role_name).build_full_result()['AttachedPolicies'] -@AWSRetry.exponential_backoff() +@AWSRetry.jittered_backoff() def list_iam_instance_profiles_for_role_with_backoff(client, role_name): paginator = client.get_paginator('list_instance_profiles_for_role') return paginator.paginate(RoleName=role_name).build_full_result()['InstanceProfiles'] @@ -210,7 +210,7 @@ def describe_iam_roles(module, client): path_prefix = module.params['path_prefix'] if name: try: - roles = [client.get_role(RoleName=name)['Role']] + roles = [client.get_role(RoleName=name, aws_retry=True)['Role']] except is_boto3_error_code('NoSuchEntity'): return [] except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e: # pylint: disable=duplicate-except @@ -245,7 +245,7 @@ def main(): if module._name == 'iam_role_facts': module.deprecate("The 'iam_role_facts' module has been renamed to 'iam_role_info'", date='2021-12-01', collection_name='community.aws') - client = module.client('iam') + client = module.client('iam', retry_decorator=AWSRetry.jittered_backoff()) module.exit_json(changed=False, iam_roles=describe_iam_roles(module, client))