diff --git a/plugins/module_utils/ec2.py b/plugins/module_utils/ec2.py index f8335300e8..8f29e3f9bb 100644 --- a/plugins/module_utils/ec2.py +++ b/plugins/module_utils/ec2.py @@ -1309,20 +1309,11 @@ def _is_missing(cls): @EC2TransitGatewayVPCAttachmentErrorHandler.common_error_handler("describe transit gateway attachments") @AWSRetry.jittered_backoff() -def paginated_describe_transit_gateway_vpc_attachments( +def describe_vpc_attachments( client, **params: Dict[str, Union[List[str], bool, List[Dict[str, Union[str, List[str]]]]]] ) -> Dict[str, Any]: paginator = client.get_paginator("describe_transit_gateway_vpc_attachments") - return paginator.paginate(**params).build_full_result() - - -@EC2TransitGatewayVPCAttachmentErrorHandler.common_error_handler("describe transit gateway attachments") -@AWSRetry.jittered_backoff() -def describe_vpc_attachments( - client, **params: Dict[str, Union[List[str], bool, List[Dict[str, Union[str, List[str]]]]]] -) -> Optional[List[Dict[str, Any]]]: - result = client._paginated_describe_transit_gateway_vpc_attachments(**params) - return result.get("TransitGatewayVpcAttachments", None) + return paginator.paginate(**params).build_full_result()["TransitGatewayVpcAttachments"] @EC2TransitGatewayVPCAttachmentErrorHandler.common_error_handler("create transit gateway vpc attachment") @@ -1352,10 +1343,14 @@ def delete_vpc_attachment( return result.get("TransitGatewayVpcAttachment", None) -def get_tgw_vpc_attachment(client, **params: Any) -> Optional[Dict[str, Any]]: +def get_tgw_vpc_attachment(client, module, **params: Any) -> Optional[Dict[str, Any]]: # Only for use with a single attachment, use describe_vpc_attachments for # multiple tables. - attachments = client.describe_vpc_attachments(**params) + try: + attachments = describe_vpc_attachments(client, **params) + except AnsibleEC2Error as e: + module.fail_json_aws_error(e) + if not attachments: return None diff --git a/plugins/module_utils/waiters.py b/plugins/module_utils/waiters.py index 15ba4d1af9..c718b21f41 100644 --- a/plugins/module_utils/waiters.py +++ b/plugins/module_utils/waiters.py @@ -59,8 +59,14 @@ { "expected": "available", "matcher": "pathAll", - "state": "available", - "argument": "TransitGatewayAttachments[].State", + "state": "success", + "argument": "TransitGatewayVpcAttachments[].State", + }, + { + "state": "retry", + "matcher": "pathAny", + "argument": "TransitGatewayVpcAttachments[].State", + "expected": "pending", }, {"matcher": "error", "expected": "InvalidRouteTableID.NotFound", "state": "retry"}, ], @@ -71,24 +77,24 @@ "maxAttempts": 120, "acceptors": [ { - "expected": "retry", + "state": "retry", "matcher": "pathAll", - "state": "deleting", - "argument": "TransitGatewayAttachments[].State", + "argument": "TransitGatewayVpcAttachments[].State", + "expected": "deleting", }, { - "expected": "success", + "state": "success", + "expected": "deleted", "matcher": "pathAll", - "state": "deleted", - "argument": "TransitGatewayAttachments[].State", + "argument": "TransitGatewayVpcAttachments[].State", }, { - "expected": "success", - "matcher": "pathAll", - "state": True, - "argument": "length(TransitGatewayAttachments[]) == `0`", + "expected": True, + "matcher": "path", + "state": "success", + "argument": "length(TransitGatewayVpcAttachments[]) == `0`", }, - {"matcher": "success", "expected": "InvalidRouteTableID.NotFound", "state": "retry"}, + {"matcher": "error", "expected": "InvalidRouteTableID.NotFound", "state": "retry"}, ], }, "NetworkInterfaceAttached": { @@ -817,12 +823,12 @@ def route53_model(name): ("EC2", "transit_gateway_vpc_attachment_available"): lambda ec2: core_waiter.Waiter( "transit_gateway_vpc_attachment_available", ec2_model("TGWVpcAttachmentAvailable"), - core_waiter.NormalizedOperationMethod(ec2.describe_vpc_attachments), + core_waiter.NormalizedOperationMethod(ec2.describe_transit_gateway_vpc_attachments), ), ("EC2", "transit_gateway_vpc_attachment_deleted"): lambda ec2: core_waiter.Waiter( "transit_gateway_vpc_attachment_deleted", ec2_model("TGWVpcAttachmentDeleted"), - core_waiter.NormalizedOperationMethod(ec2.describe_vpc_attachments), + core_waiter.NormalizedOperationMethod(ec2.describe_transit_gateway_vpc_attachments), ), ("EC2", "network_interface_attached"): lambda ec2: core_waiter.Waiter( "network_interface_attached",