mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-05-02 23:31:25 -07:00
Add AWS boto3 error code exception function is_boto3_error_code (#41202)
* Add aws/core.py function to check for specific AWS error codes * Use sys.exc_info to get exception object if it isn't passed in * Allow catching exceptions with is_boto3_error_code * Replace from_code with is_boto3_error_code * Return a type that will never be raised to support stricter type comparisons in Python 3+ * Use is_boto3_error_code in aws_eks_cluster * Add duplicate-except to ignores when using is_boto3_error_code * Add is_boto3_error_code to module development guideline docs
This commit is contained in:
parent
269f404121
commit
40d2df0ef3
12 changed files with 84 additions and 41 deletions
|
@ -292,7 +292,7 @@ import json
|
|||
import re
|
||||
from time import sleep
|
||||
from collections import namedtuple
|
||||
from ansible.module_utils.aws.core import AnsibleAWSModule
|
||||
from ansible.module_utils.aws.core import AnsibleAWSModule, is_boto3_error_code
|
||||
from ansible.module_utils.aws.iam import get_aws_account_id
|
||||
from ansible.module_utils.aws.waiters import get_waiter
|
||||
from ansible.module_utils.ec2 import AWSRetry, camel_dict_to_snake_dict, compare_aws_tags
|
||||
|
@ -430,7 +430,7 @@ def get_security_groups_with_backoff(connection, **kwargs):
|
|||
def sg_exists_with_backoff(connection, **kwargs):
|
||||
try:
|
||||
return connection.describe_security_groups(**kwargs)
|
||||
except connection.exceptions.from_code('InvalidGroup.NotFound') as e:
|
||||
except is_boto3_error_code('InvalidGroup.NotFound'):
|
||||
return {'SecurityGroups': []}
|
||||
|
||||
|
||||
|
@ -519,10 +519,10 @@ def get_target_from_rule(module, client, rule, name, group, groups, vpc_id):
|
|||
# retry describing the group once
|
||||
try:
|
||||
auto_group = get_security_groups_with_backoff(client, Filters=ansible_dict_to_boto3_filter_list(filters)).get('SecurityGroups', [])[0]
|
||||
except (client.exceptions.from_code('InvalidGroup.NotFound'), IndexError) as e:
|
||||
except (is_boto3_error_code('InvalidGroup.NotFound'), IndexError):
|
||||
module.fail_json(msg="group %s will be automatically created by rule %s but "
|
||||
"no description was provided" % (group_name, rule))
|
||||
except ClientError as e:
|
||||
except ClientError as e: # pylint: disable=duplicate-except
|
||||
module.fail_json_aws(e)
|
||||
elif not module.check_mode:
|
||||
params = dict(GroupName=group_name, Description=rule['group_desc'])
|
||||
|
@ -535,7 +535,7 @@ def get_target_from_rule(module, client, rule, name, group, groups, vpc_id):
|
|||
).wait(
|
||||
GroupIds=[auto_group['GroupId']],
|
||||
)
|
||||
except client.exceptions.from_code('InvalidGroup.Duplicate') as e:
|
||||
except is_boto3_error_code('InvalidGroup.Duplicate'):
|
||||
# The group exists, but didn't show up in any of our describe-security-groups calls
|
||||
# Try searching on a filter for the name, and allow a retry window for AWS to update
|
||||
# the model on their end.
|
||||
|
@ -829,7 +829,7 @@ def group_exists(client, module, vpc_id, group_id, name):
|
|||
try:
|
||||
security_groups = sg_exists_with_backoff(client, **params).get('SecurityGroups', [])
|
||||
all_groups = get_security_groups_with_backoff(client).get('SecurityGroups', [])
|
||||
except (BotoCoreError, ClientError) as e:
|
||||
except (BotoCoreError, ClientError) as e: # pylint: disable=duplicate-except
|
||||
module.fail_json_aws(e, msg="Error in describe_security_groups")
|
||||
|
||||
if security_groups:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue