From af6427bf401fe66b1f3b1229044841b32c4b4bf5 Mon Sep 17 00:00:00 2001 From: Ryan Brown Date: Thu, 29 Nov 2018 08:54:16 -0500 Subject: [PATCH] VPC peer module unhandled exception on bad peering ID (#45306) * Improve error handling for VPC peer module when a bad peering-id is specified * changelog --- ...pc_peer_describe_peer_with_exception_handling.yaml | 2 ++ lib/ansible/modules/cloud/amazon/ec2_vpc_peer.py | 11 +++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 changelogs/fragments/ec2_vpc_peer_describe_peer_with_exception_handling.yaml diff --git a/changelogs/fragments/ec2_vpc_peer_describe_peer_with_exception_handling.yaml b/changelogs/fragments/ec2_vpc_peer_describe_peer_with_exception_handling.yaml new file mode 100644 index 00000000000..4e757cad691 --- /dev/null +++ b/changelogs/fragments/ec2_vpc_peer_describe_peer_with_exception_handling.yaml @@ -0,0 +1,2 @@ +bugfixes: + - Handle ClientError exceptions when describing VPC peering connections. diff --git a/lib/ansible/modules/cloud/amazon/ec2_vpc_peer.py b/lib/ansible/modules/cloud/amazon/ec2_vpc_peer.py index 9c9497758e7..6840b4fcb47 100644 --- a/lib/ansible/modules/cloud/amazon/ec2_vpc_peer.py +++ b/lib/ansible/modules/cloud/amazon/ec2_vpc_peer.py @@ -220,9 +220,11 @@ except ImportError: pass # caught by imported HAS_BOTO3 import distutils.version +import traceback from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.ec2 import boto3_conn, ec2_argument_spec, get_aws_connection_info, HAS_BOTO3 +from ansible.module_utils.aws.core import is_boto3_error_code def tags_changed(pcx_id, client, module): @@ -328,8 +330,13 @@ def remove_peer_connection(client, module): def peer_status(client, module): params = dict() params['VpcPeeringConnectionIds'] = [module.params.get('peering_id')] - vpc_peering_connection = client.describe_vpc_peering_connections(**params) - return vpc_peering_connection['VpcPeeringConnections'][0]['Status']['Code'] + try: + vpc_peering_connection = client.describe_vpc_peering_connections(**params) + return vpc_peering_connection['VpcPeeringConnections'][0]['Status']['Code'] + except is_boto3_error_code('InvalidVpcPeeringConnectionId.Malformed') as e: # pylint: disable=duplicate-except + module.fail_json(msg='Malformed connection ID: {0}'.format(e), traceback=traceback.format_exc()) + except botocore.exceptions.ClientError as e: # pylint: disable=duplicate-except + module.fail_json(msg='Error while describing peering connection by peering_id: {0}'.format(e), traceback=traceback.format_exc()) def accept_reject(state, client, module):