mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-04-24 19:31:26 -07:00
[cloud]Add aws_ses_identity_policy module for managing SES sending policies (#36623)
* Add aws_ses_identity_policy module for managing SES sending policies * Add option to AnsibleAWSModule for applying a retry decorator to all calls. * Add per-callsite opt in to retry behaviours in AnsibleAWSModule * Update aws_ses_identity_policy module to opt in to retries at all callsites. * Add test for aws_ses_identity_policy module with inline policy. * Remove implicit retrys on boto resources since they're not working yet.
This commit is contained in:
parent
95d40bcd0a
commit
0d31d1cd24
8 changed files with 582 additions and 3 deletions
|
@ -47,6 +47,7 @@ or
|
|||
|
||||
"""
|
||||
|
||||
from functools import wraps
|
||||
from ansible.module_utils.basic import AnsibleModule
|
||||
from ansible.module_utils._text import to_native
|
||||
from ansible.module_utils.ec2 import HAS_BOTO3, camel_dict_to_snake_dict, ec2_argument_spec, boto3_conn, get_aws_connection_info
|
||||
|
@ -119,10 +120,11 @@ class AnsibleAWSModule(object):
|
|||
def warn(self, *args, **kwargs):
|
||||
return self._module.warn(*args, **kwargs)
|
||||
|
||||
def client(self, service):
|
||||
def client(self, service, retry_decorator=None):
|
||||
region, ec2_url, aws_connect_kwargs = get_aws_connection_info(self, boto3=True)
|
||||
return boto3_conn(self, conn_type='client', resource=service,
|
||||
conn = boto3_conn(self, conn_type='client', resource=service,
|
||||
region=region, endpoint=ec2_url, **aws_connect_kwargs)
|
||||
return conn if retry_decorator is None else _RetryingBotoClientWrapper(conn, retry_decorator)
|
||||
|
||||
def resource(self, service):
|
||||
region, ec2_url, aws_connect_kwargs = get_aws_connection_info(self, boto3=True)
|
||||
|
@ -159,3 +161,29 @@ class AnsibleAWSModule(object):
|
|||
else:
|
||||
self._module.fail_json(msg=message, exception=last_traceback,
|
||||
**camel_dict_to_snake_dict(response))
|
||||
|
||||
|
||||
class _RetryingBotoClientWrapper(object):
|
||||
def __init__(self, client, retry):
|
||||
self.client = client
|
||||
self.retry = retry
|
||||
|
||||
def _create_optional_retry_wrapper_function(self, unwrapped):
|
||||
retrying_wrapper = self.retry(unwrapped)
|
||||
|
||||
@wraps(unwrapped)
|
||||
def deciding_wrapper(aws_retry=False, *args, **kwargs):
|
||||
if aws_retry:
|
||||
return retrying_wrapper(*args, **kwargs)
|
||||
else:
|
||||
return unwrapped(*args, **kwargs)
|
||||
return deciding_wrapper
|
||||
|
||||
def __getattr__(self, name):
|
||||
unwrapped = getattr(self.client, name)
|
||||
if callable(unwrapped):
|
||||
wrapped = self._create_optional_retry_wrapper_function(unwrapped)
|
||||
setattr(self, name, wrapped)
|
||||
return wrapped
|
||||
else:
|
||||
return unwrapped
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue