Skip to content

Commit

Permalink
Add jittered_backoff to the iam_policy & iam_policy_info modules to h…
Browse files Browse the repository at this point in the history
…andle AWS rate limiting (ansible-collections#324)

* Add jittered_backoff to handle AWS rate limiting
* Fix for failing test
* Add changelog fragment
  • Loading branch information
marknet15 authored and danielcotton committed Nov 23, 2021
1 parent 1df676d commit b32d987
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 21 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
bugfixes:
- iam_policy - Added jittered_backoff to handle AWS rate limiting (https://github.com/ansible-collections/community.aws/pull/324).
- iam_policy_info - Added jittered_backoff to handle AWS rate limiting (https://github.com/ansible-collections/community.aws/pull/324).
28 changes: 14 additions & 14 deletions plugins/modules/iam_policy.py
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@
pass

from ansible_collections.amazon.aws.plugins.module_utils.core import AnsibleAWSModule
from ansible_collections.amazon.aws.plugins.module_utils.ec2 import compare_policies
from ansible_collections.amazon.aws.plugins.module_utils.ec2 import compare_policies, AWSRetry
from ansible.module_utils.six import string_types


Expand Down Expand Up @@ -236,16 +236,16 @@ def _iam_type():
return 'user'

def _list(self, name):
return self.client.list_user_policies(UserName=name)
return self.client.list_user_policies(aws_retry=True, UserName=name)

def _get(self, name, policy_name):
return self.client.get_user_policy(UserName=name, PolicyName=policy_name)
return self.client.get_user_policy(aws_retry=True, UserName=name, PolicyName=policy_name)

def _put(self, name, policy_name, policy_doc):
return self.client.put_user_policy(UserName=name, PolicyName=policy_name, PolicyDocument=policy_doc)
return self.client.put_user_policy(aws_retry=True, UserName=name, PolicyName=policy_name, PolicyDocument=policy_doc)

def _delete(self, name, policy_name):
return self.client.delete_user_policy(UserName=name, PolicyName=policy_name)
return self.client.delete_user_policy(aws_retry=True, UserName=name, PolicyName=policy_name)


class RolePolicy(Policy):
Expand All @@ -255,16 +255,16 @@ def _iam_type():
return 'role'

def _list(self, name):
return self.client.list_role_policies(RoleName=name)
return self.client.list_role_policies(aws_retry=True, RoleName=name)

def _get(self, name, policy_name):
return self.client.get_role_policy(RoleName=name, PolicyName=policy_name)
return self.client.get_role_policy(aws_retry=True, RoleName=name, PolicyName=policy_name)

def _put(self, name, policy_name, policy_doc):
return self.client.put_role_policy(RoleName=name, PolicyName=policy_name, PolicyDocument=policy_doc)
return self.client.put_role_policy(aws_retry=True, RoleName=name, PolicyName=policy_name, PolicyDocument=policy_doc)

def _delete(self, name, policy_name):
return self.client.delete_role_policy(RoleName=name, PolicyName=policy_name)
return self.client.delete_role_policy(aws_retry=True, RoleName=name, PolicyName=policy_name)


class GroupPolicy(Policy):
Expand All @@ -274,16 +274,16 @@ def _iam_type():
return 'group'

def _list(self, name):
return self.client.list_group_policies(GroupName=name)
return self.client.list_group_policies(aws_retry=True, GroupName=name)

def _get(self, name, policy_name):
return self.client.get_group_policy(GroupName=name, PolicyName=policy_name)
return self.client.get_group_policy(aws_retry=True, GroupName=name, PolicyName=policy_name)

def _put(self, name, policy_name, policy_doc):
return self.client.put_group_policy(GroupName=name, PolicyName=policy_name, PolicyDocument=policy_doc)
return self.client.put_group_policy(aws_retry=True, GroupName=name, PolicyName=policy_name, PolicyDocument=policy_doc)

def _delete(self, name, policy_name):
return self.client.delete_group_policy(GroupName=name, PolicyName=policy_name)
return self.client.delete_group_policy(aws_retry=True, GroupName=name, PolicyName=policy_name)


def main():
Expand Down Expand Up @@ -314,7 +314,7 @@ def main():
date='2022-06-01', collection_name='community.aws')

args = dict(
client=module.client('iam'),
client=module.client('iam', retry_decorator=AWSRetry.jittered_backoff()),
name=module.params.get('iam_name'),
policy_name=module.params.get('policy_name'),
policy_document=module.params.get('policy_document'),
Expand Down
15 changes: 8 additions & 7 deletions plugins/modules/iam_policy_info.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@
pass

from ansible_collections.amazon.aws.plugins.module_utils.core import AnsibleAWSModule
from ansible_collections.amazon.aws.plugins.module_utils.ec2 import AWSRetry
from ansible.module_utils.six import string_types


Expand Down Expand Up @@ -147,10 +148,10 @@ def _iam_type():
return 'user'

def _list(self, name):
return self.client.list_user_policies(UserName=name)
return self.client.list_user_policies(aws_retry=True, UserName=name)

def _get(self, name, policy_name):
return self.client.get_user_policy(UserName=name, PolicyName=policy_name)
return self.client.get_user_policy(aws_retry=True, UserName=name, PolicyName=policy_name)


class RolePolicy(Policy):
Expand All @@ -160,10 +161,10 @@ def _iam_type():
return 'role'

def _list(self, name):
return self.client.list_role_policies(RoleName=name)
return self.client.list_role_policies(aws_retry=True, RoleName=name)

def _get(self, name, policy_name):
return self.client.get_role_policy(RoleName=name, PolicyName=policy_name)
return self.client.get_role_policy(aws_retry=True, RoleName=name, PolicyName=policy_name)


class GroupPolicy(Policy):
Expand All @@ -173,10 +174,10 @@ def _iam_type():
return 'group'

def _list(self, name):
return self.client.list_group_policies(GroupName=name)
return self.client.list_group_policies(aws_retry=True, GroupName=name)

def _get(self, name, policy_name):
return self.client.get_group_policy(GroupName=name, PolicyName=policy_name)
return self.client.get_group_policy(aws_retry=True, GroupName=name, PolicyName=policy_name)


def main():
Expand All @@ -189,7 +190,7 @@ def main():
module = AnsibleAWSModule(argument_spec=argument_spec, supports_check_mode=True)

args = dict(
client=module.client('iam'),
client=module.client('iam', retry_decorator=AWSRetry.jittered_backoff()),
name=module.params.get('iam_name'),
policy_name=module.params.get('policy_name'),
)
Expand Down

0 comments on commit b32d987

Please sign in to comment.