Skip to content

Commit 4281e0f

Browse files
committed
r/aws_nat_gateway: Switch to 'WithoutTimeout' CRUD handlers (#15090).
1 parent 4d62028 commit 4281e0f

7 files changed

+56
-52
lines changed

internal/service/ec2/find.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -6010,8 +6010,8 @@ func FindManagedPrefixListEntryByIDAndCIDR(ctx context.Context, conn *ec2.EC2, i
60106010
return nil, &resource.NotFoundError{}
60116011
}
60126012

6013-
func FindNATGateway(conn *ec2.EC2, input *ec2.DescribeNatGatewaysInput) (*ec2.NatGateway, error) {
6014-
output, err := FindNATGateways(conn, input)
6013+
func FindNATGateway(ctx context.Context, conn *ec2.EC2, input *ec2.DescribeNatGatewaysInput) (*ec2.NatGateway, error) {
6014+
output, err := FindNATGateways(ctx, conn, input)
60156015

60166016
if err != nil {
60176017
return nil, err
@@ -6028,10 +6028,10 @@ func FindNATGateway(conn *ec2.EC2, input *ec2.DescribeNatGatewaysInput) (*ec2.Na
60286028
return output[0], nil
60296029
}
60306030

6031-
func FindNATGateways(conn *ec2.EC2, input *ec2.DescribeNatGatewaysInput) ([]*ec2.NatGateway, error) {
6031+
func FindNATGateways(ctx context.Context, conn *ec2.EC2, input *ec2.DescribeNatGatewaysInput) ([]*ec2.NatGateway, error) {
60326032
var output []*ec2.NatGateway
60336033

6034-
err := conn.DescribeNatGatewaysPages(input, func(page *ec2.DescribeNatGatewaysOutput, lastPage bool) bool {
6034+
err := conn.DescribeNatGatewaysPagesWithContext(ctx, input, func(page *ec2.DescribeNatGatewaysOutput, lastPage bool) bool {
60356035
if page == nil {
60366036
return !lastPage
60376037
}
@@ -6059,12 +6059,12 @@ func FindNATGateways(conn *ec2.EC2, input *ec2.DescribeNatGatewaysInput) ([]*ec2
60596059
return output, nil
60606060
}
60616061

6062-
func FindNATGatewayByID(conn *ec2.EC2, id string) (*ec2.NatGateway, error) {
6062+
func FindNATGatewayByID(ctx context.Context, conn *ec2.EC2, id string) (*ec2.NatGateway, error) {
60636063
input := &ec2.DescribeNatGatewaysInput{
60646064
NatGatewayIds: aws.StringSlice([]string{id}),
60656065
}
60666066

6067-
output, err := FindNATGateway(conn, input)
6067+
output, err := FindNATGateway(ctx, conn, input)
60686068

60696069
if err != nil {
60706070
return nil, err

internal/service/ec2/status.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -334,9 +334,9 @@ func StatusInstanceRootBlockDeviceDeleteOnTermination(conn *ec2.EC2, id string)
334334
}
335335
}
336336

337-
func StatusNATGatewayState(conn *ec2.EC2, id string) resource.StateRefreshFunc {
337+
func StatusNATGatewayState(ctx context.Context, conn *ec2.EC2, id string) resource.StateRefreshFunc {
338338
return func() (interface{}, string, error) {
339-
output, err := FindNATGatewayByID(conn, id)
339+
output, err := FindNATGatewayByID(ctx, conn, id)
340340

341341
if tfresource.NotFound(err) {
342342
return nil, "", nil

internal/service/ec2/vpc_nat_gateway.go

+26-25
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
package ec2
22

33
import (
4-
"fmt"
4+
"context"
55
"log"
66

77
"github.com/aws/aws-sdk-go/aws"
88
"github.com/aws/aws-sdk-go/service/ec2"
99
"github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr"
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1011
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
1112
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1213
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
@@ -18,10 +19,10 @@ import (
1819

1920
func ResourceNATGateway() *schema.Resource {
2021
return &schema.Resource{
21-
Create: resourceNATGatewayCreate,
22-
Read: resourceNATGatewayRead,
23-
Update: resourceNATGatewayUpdate,
24-
Delete: resourceNATGatewayDelete,
22+
CreateWithoutTimeout: resourceNATGatewayCreate,
23+
ReadWithoutTimeout: resourceNATGatewayRead,
24+
UpdateWithoutTimeout: resourceNATGatewayUpdate,
25+
DeleteWithoutTimeout: resourceNATGatewayDelete,
2526

2627
Importer: &schema.ResourceImporter{
2728
State: schema.ImportStatePassthrough,
@@ -68,7 +69,7 @@ func ResourceNATGateway() *schema.Resource {
6869
}
6970
}
7071

71-
func resourceNATGatewayCreate(d *schema.ResourceData, meta interface{}) error {
72+
func resourceNATGatewayCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
7273
conn := meta.(*conns.AWSClient).EC2Conn
7374
defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig
7475
tags := defaultTagsConfig.MergeTags(tftags.New(d.Get("tags").(map[string]interface{})))
@@ -94,27 +95,27 @@ func resourceNATGatewayCreate(d *schema.ResourceData, meta interface{}) error {
9495
input.SubnetId = aws.String(v.(string))
9596
}
9697

97-
output, err := conn.CreateNatGateway(input)
98+
output, err := conn.CreateNatGatewayWithContext(ctx, input)
9899

99100
if err != nil {
100-
return fmt.Errorf("creating EC2 NAT Gateway: %w", err)
101+
return diag.Errorf("creating EC2 NAT Gateway: %s", err)
101102
}
102103

103104
d.SetId(aws.StringValue(output.NatGateway.NatGatewayId))
104105

105-
if _, err := WaitNATGatewayCreated(conn, d.Id()); err != nil {
106-
return fmt.Errorf("waiting for EC2 NAT Gateway (%s) create: %w", d.Id(), err)
106+
if _, err := WaitNATGatewayCreated(ctx, conn, d.Id()); err != nil {
107+
return diag.Errorf("waiting for EC2 NAT Gateway (%s) create: %s", d.Id(), err)
107108
}
108109

109-
return resourceNATGatewayRead(d, meta)
110+
return resourceNATGatewayRead(ctx, d, meta)
110111
}
111112

112-
func resourceNATGatewayRead(d *schema.ResourceData, meta interface{}) error {
113+
func resourceNATGatewayRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
113114
conn := meta.(*conns.AWSClient).EC2Conn
114115
defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig
115116
ignoreTagsConfig := meta.(*conns.AWSClient).IgnoreTagsConfig
116117

117-
ng, err := FindNATGatewayByID(conn, d.Id())
118+
ng, err := FindNATGatewayByID(ctx, conn, d.Id())
118119

119120
if !d.IsNewResource() && tfresource.NotFound(err) {
120121
log.Printf("[WARN] EC2 NAT Gateway (%s) not found, removing from state", d.Id())
@@ -123,7 +124,7 @@ func resourceNATGatewayRead(d *schema.ResourceData, meta interface{}) error {
123124
}
124125

125126
if err != nil {
126-
return fmt.Errorf("reading EC2 NAT Gateway (%s): %w", d.Id(), err)
127+
return diag.Errorf("reading EC2 NAT Gateway (%s): %s", d.Id(), err)
127128
}
128129

129130
address := ng.NatGatewayAddresses[0]
@@ -138,35 +139,35 @@ func resourceNATGatewayRead(d *schema.ResourceData, meta interface{}) error {
138139

139140
//lintignore:AWSR002
140141
if err := d.Set("tags", tags.RemoveDefaultConfig(defaultTagsConfig).Map()); err != nil {
141-
return fmt.Errorf("setting tags: %w", err)
142+
return diag.Errorf("setting tags: %s", err)
142143
}
143144

144145
if err := d.Set("tags_all", tags.Map()); err != nil {
145-
return fmt.Errorf("setting tags_all: %w", err)
146+
return diag.Errorf("setting tags_all: %s", err)
146147
}
147148

148149
return nil
149150
}
150151

151-
func resourceNATGatewayUpdate(d *schema.ResourceData, meta interface{}) error {
152+
func resourceNATGatewayUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
152153
conn := meta.(*conns.AWSClient).EC2Conn
153154

154155
if d.HasChange("tags_all") {
155156
o, n := d.GetChange("tags_all")
156157

157-
if err := UpdateTags(conn, d.Id(), o, n); err != nil {
158-
return fmt.Errorf("updating EC2 NAT Gateway (%s) tags: %w", d.Id(), err)
158+
if err := UpdateTagsWithContext(ctx, conn, d.Id(), o, n); err != nil {
159+
return diag.Errorf("updating EC2 NAT Gateway (%s) tags: %s", d.Id(), err)
159160
}
160161
}
161162

162-
return resourceNATGatewayRead(d, meta)
163+
return resourceNATGatewayRead(ctx, d, meta)
163164
}
164165

165-
func resourceNATGatewayDelete(d *schema.ResourceData, meta interface{}) error {
166+
func resourceNATGatewayDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
166167
conn := meta.(*conns.AWSClient).EC2Conn
167168

168169
log.Printf("[INFO] Deleting EC2 NAT Gateway: %s", d.Id())
169-
_, err := conn.DeleteNatGateway(&ec2.DeleteNatGatewayInput{
170+
_, err := conn.DeleteNatGatewayWithContext(ctx, &ec2.DeleteNatGatewayInput{
170171
NatGatewayId: aws.String(d.Id()),
171172
})
172173

@@ -175,11 +176,11 @@ func resourceNATGatewayDelete(d *schema.ResourceData, meta interface{}) error {
175176
}
176177

177178
if err != nil {
178-
return fmt.Errorf("deleting EC2 NAT Gateway (%s): %w", d.Id(), err)
179+
return diag.Errorf("deleting EC2 NAT Gateway (%s): %s", d.Id(), err)
179180
}
180181

181-
if _, err := WaitNATGatewayDeleted(conn, d.Id()); err != nil {
182-
return fmt.Errorf("waiting for EC2 NAT Gateway (%s) delete: %w", d.Id(), err)
182+
if _, err := WaitNATGatewayDeleted(ctx, conn, d.Id()); err != nil {
183+
return diag.Errorf("waiting for EC2 NAT Gateway (%s) delete: %s", d.Id(), err)
183184
}
184185

185186
return nil

internal/service/ec2/vpc_nat_gateway_data_source.go

+7-6
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
package ec2
22

33
import (
4-
"fmt"
4+
"context"
55
"time"
66

77
"github.com/aws/aws-sdk-go/aws"
88
"github.com/aws/aws-sdk-go/service/ec2"
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
910
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1011
"github.com/hashicorp/terraform-provider-aws/internal/conns"
1112
tftags "github.com/hashicorp/terraform-provider-aws/internal/tags"
@@ -14,7 +15,7 @@ import (
1415

1516
func DataSourceNATGateway() *schema.Resource {
1617
return &schema.Resource{
17-
Read: dataSourceNATGatewayRead,
18+
ReadWithoutTimeout: dataSourceNATGatewayRead,
1819

1920
Timeouts: &schema.ResourceTimeout{
2021
Read: schema.DefaultTimeout(20 * time.Minute),
@@ -67,7 +68,7 @@ func DataSourceNATGateway() *schema.Resource {
6768
}
6869
}
6970

70-
func dataSourceNATGatewayRead(d *schema.ResourceData, meta interface{}) error {
71+
func dataSourceNATGatewayRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
7172
conn := meta.(*conns.AWSClient).EC2Conn
7273
ignoreTagsConfig := meta.(*conns.AWSClient).IgnoreTagsConfig
7374

@@ -99,10 +100,10 @@ func dataSourceNATGatewayRead(d *schema.ResourceData, meta interface{}) error {
99100
input.Filter = nil
100101
}
101102

102-
ngw, err := FindNATGateway(conn, input)
103+
ngw, err := FindNATGateway(ctx, conn, input)
103104

104105
if err != nil {
105-
return tfresource.SingularDataSourceFindError("EC2 NAT Gateway", err)
106+
return diag.FromErr(tfresource.SingularDataSourceFindError("EC2 NAT Gateway", err))
106107
}
107108

108109
d.SetId(aws.StringValue(ngw.NatGatewayId))
@@ -122,7 +123,7 @@ func dataSourceNATGatewayRead(d *schema.ResourceData, meta interface{}) error {
122123
}
123124

124125
if err := d.Set("tags", KeyValueTags(ngw.Tags).IgnoreAWS().IgnoreConfig(ignoreTagsConfig).Map()); err != nil {
125-
return fmt.Errorf("error setting tags: %w", err)
126+
return diag.Errorf("error setting tags: %s", err)
126127
}
127128

128129
return nil

internal/service/ec2/vpc_nat_gateway_test.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package ec2_test
22

33
import (
4+
"context"
45
"fmt"
56
"testing"
67

@@ -186,7 +187,7 @@ func testAccCheckNATGatewayDestroy(s *terraform.State) error {
186187
continue
187188
}
188189

189-
_, err := tfec2.FindNATGatewayByID(conn, rs.Primary.ID)
190+
_, err := tfec2.FindNATGatewayByID(context.Background(), conn, rs.Primary.ID)
190191

191192
if tfresource.NotFound(err) {
192193
continue
@@ -215,7 +216,7 @@ func testAccCheckNATGatewayExists(n string, v *ec2.NatGateway) resource.TestChec
215216

216217
conn := acctest.Provider.Meta().(*conns.AWSClient).EC2Conn
217218

218-
output, err := tfec2.FindNATGatewayByID(conn, rs.Primary.ID)
219+
output, err := tfec2.FindNATGatewayByID(context.Background(), conn, rs.Primary.ID)
219220

220221
if err != nil {
221222
return err

internal/service/ec2/vpc_nat_gateways_data_source.go

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
11
package ec2
22

33
import (
4-
"fmt"
4+
"context"
55
"time"
66

77
"github.com/aws/aws-sdk-go/aws"
88
"github.com/aws/aws-sdk-go/service/ec2"
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
910
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1011
"github.com/hashicorp/terraform-provider-aws/internal/conns"
1112
tftags "github.com/hashicorp/terraform-provider-aws/internal/tags"
1213
)
1314

1415
func DataSourceNATGateways() *schema.Resource {
1516
return &schema.Resource{
16-
Read: dataSourceNATGatewaysRead,
17+
ReadWithoutTimeout: dataSourceNATGatewaysRead,
1718

1819
Timeouts: &schema.ResourceTimeout{
1920
Read: schema.DefaultTimeout(20 * time.Minute),
@@ -35,7 +36,7 @@ func DataSourceNATGateways() *schema.Resource {
3536
}
3637
}
3738

38-
func dataSourceNATGatewaysRead(d *schema.ResourceData, meta interface{}) error {
39+
func dataSourceNATGatewaysRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
3940
conn := meta.(*conns.AWSClient).EC2Conn
4041

4142
input := &ec2.DescribeNatGatewaysInput{}
@@ -62,10 +63,10 @@ func dataSourceNATGatewaysRead(d *schema.ResourceData, meta interface{}) error {
6263
input.Filter = nil
6364
}
6465

65-
output, err := FindNATGateways(conn, input)
66+
output, err := FindNATGateways(ctx, conn, input)
6667

6768
if err != nil {
68-
return fmt.Errorf("error reading EC2 NAT Gateways: %w", err)
69+
return diag.Errorf("error reading EC2 NAT Gateways: %s", err)
6970
}
7071

7172
var natGatewayIDs []string

internal/service/ec2/wait.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -2037,15 +2037,15 @@ const (
20372037
natGatewayDeletedTimeout = 30 * time.Minute
20382038
)
20392039

2040-
func WaitNATGatewayCreated(conn *ec2.EC2, id string) (*ec2.NatGateway, error) {
2040+
func WaitNATGatewayCreated(ctx context.Context, conn *ec2.EC2, id string) (*ec2.NatGateway, error) {
20412041
stateConf := &resource.StateChangeConf{
20422042
Pending: []string{ec2.NatGatewayStatePending},
20432043
Target: []string{ec2.NatGatewayStateAvailable},
2044-
Refresh: StatusNATGatewayState(conn, id),
2044+
Refresh: StatusNATGatewayState(ctx, conn, id),
20452045
Timeout: natGatewayCreatedTimeout,
20462046
}
20472047

2048-
outputRaw, err := stateConf.WaitForState()
2048+
outputRaw, err := stateConf.WaitForStateContext(ctx)
20492049

20502050
if output, ok := outputRaw.(*ec2.NatGateway); ok {
20512051
if state := aws.StringValue(output.State); state == ec2.NatGatewayStateFailed {
@@ -2058,17 +2058,17 @@ func WaitNATGatewayCreated(conn *ec2.EC2, id string) (*ec2.NatGateway, error) {
20582058
return nil, err
20592059
}
20602060

2061-
func WaitNATGatewayDeleted(conn *ec2.EC2, id string) (*ec2.NatGateway, error) {
2061+
func WaitNATGatewayDeleted(ctx context.Context, conn *ec2.EC2, id string) (*ec2.NatGateway, error) {
20622062
stateConf := &resource.StateChangeConf{
20632063
Pending: []string{ec2.NatGatewayStateDeleting},
20642064
Target: []string{},
2065-
Refresh: StatusNATGatewayState(conn, id),
2065+
Refresh: StatusNATGatewayState(ctx, conn, id),
20662066
Timeout: natGatewayDeletedTimeout,
20672067
Delay: 10 * time.Second,
20682068
MinTimeout: 10 * time.Second,
20692069
}
20702070

2071-
outputRaw, err := stateConf.WaitForState()
2071+
outputRaw, err := stateConf.WaitForStateContext(ctx)
20722072

20732073
if output, ok := outputRaw.(*ec2.NatGateway); ok {
20742074
if state := aws.StringValue(output.State); state == ec2.NatGatewayStateFailed {

0 commit comments

Comments
 (0)