diff --git a/internal/service/ec2/find.go b/internal/service/ec2/find.go index fb5a55ce968..b4f766b9b90 100644 --- a/internal/service/ec2/find.go +++ b/internal/service/ec2/find.go @@ -6010,8 +6010,8 @@ func FindManagedPrefixListEntryByIDAndCIDR(ctx context.Context, conn *ec2.EC2, i return nil, &resource.NotFoundError{} } -func FindNATGateway(conn *ec2.EC2, input *ec2.DescribeNatGatewaysInput) (*ec2.NatGateway, error) { - output, err := FindNATGateways(conn, input) +func FindNATGateway(ctx context.Context, conn *ec2.EC2, input *ec2.DescribeNatGatewaysInput) (*ec2.NatGateway, error) { + output, err := FindNATGateways(ctx, conn, input) if err != nil { return nil, err @@ -6028,10 +6028,10 @@ func FindNATGateway(conn *ec2.EC2, input *ec2.DescribeNatGatewaysInput) (*ec2.Na return output[0], nil } -func FindNATGateways(conn *ec2.EC2, input *ec2.DescribeNatGatewaysInput) ([]*ec2.NatGateway, error) { +func FindNATGateways(ctx context.Context, conn *ec2.EC2, input *ec2.DescribeNatGatewaysInput) ([]*ec2.NatGateway, error) { var output []*ec2.NatGateway - err := conn.DescribeNatGatewaysPages(input, func(page *ec2.DescribeNatGatewaysOutput, lastPage bool) bool { + err := conn.DescribeNatGatewaysPagesWithContext(ctx, input, func(page *ec2.DescribeNatGatewaysOutput, lastPage bool) bool { if page == nil { return !lastPage } @@ -6059,12 +6059,12 @@ func FindNATGateways(conn *ec2.EC2, input *ec2.DescribeNatGatewaysInput) ([]*ec2 return output, nil } -func FindNATGatewayByID(conn *ec2.EC2, id string) (*ec2.NatGateway, error) { +func FindNATGatewayByID(ctx context.Context, conn *ec2.EC2, id string) (*ec2.NatGateway, error) { input := &ec2.DescribeNatGatewaysInput{ NatGatewayIds: aws.StringSlice([]string{id}), } - output, err := FindNATGateway(conn, input) + output, err := FindNATGateway(ctx, conn, input) if err != nil { return nil, err diff --git a/internal/service/ec2/status.go b/internal/service/ec2/status.go index 0a80e2de0f4..2bea8beb255 100644 --- a/internal/service/ec2/status.go +++ b/internal/service/ec2/status.go @@ -334,9 +334,9 @@ func StatusInstanceRootBlockDeviceDeleteOnTermination(conn *ec2.EC2, id string) } } -func StatusNATGatewayState(conn *ec2.EC2, id string) resource.StateRefreshFunc { +func StatusNATGatewayState(ctx context.Context, conn *ec2.EC2, id string) resource.StateRefreshFunc { return func() (interface{}, string, error) { - output, err := FindNATGatewayByID(conn, id) + output, err := FindNATGatewayByID(ctx, conn, id) if tfresource.NotFound(err) { return nil, "", nil diff --git a/internal/service/ec2/vpc_nat_gateway.go b/internal/service/ec2/vpc_nat_gateway.go index f8e889e05b5..dffcb0644a8 100644 --- a/internal/service/ec2/vpc_nat_gateway.go +++ b/internal/service/ec2/vpc_nat_gateway.go @@ -1,12 +1,13 @@ package ec2 import ( - "fmt" + "context" "log" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/ec2" "github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" @@ -18,10 +19,10 @@ import ( func ResourceNATGateway() *schema.Resource { return &schema.Resource{ - Create: resourceNATGatewayCreate, - Read: resourceNATGatewayRead, - Update: resourceNATGatewayUpdate, - Delete: resourceNATGatewayDelete, + CreateWithoutTimeout: resourceNATGatewayCreate, + ReadWithoutTimeout: resourceNATGatewayRead, + UpdateWithoutTimeout: resourceNATGatewayUpdate, + DeleteWithoutTimeout: resourceNATGatewayDelete, Importer: &schema.ResourceImporter{ State: schema.ImportStatePassthrough, @@ -68,7 +69,7 @@ func ResourceNATGateway() *schema.Resource { } } -func resourceNATGatewayCreate(d *schema.ResourceData, meta interface{}) error { +func resourceNATGatewayCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { conn := meta.(*conns.AWSClient).EC2Conn defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig tags := defaultTagsConfig.MergeTags(tftags.New(d.Get("tags").(map[string]interface{}))) @@ -94,27 +95,27 @@ func resourceNATGatewayCreate(d *schema.ResourceData, meta interface{}) error { input.SubnetId = aws.String(v.(string)) } - output, err := conn.CreateNatGateway(input) + output, err := conn.CreateNatGatewayWithContext(ctx, input) if err != nil { - return fmt.Errorf("creating EC2 NAT Gateway: %w", err) + return diag.Errorf("creating EC2 NAT Gateway: %s", err) } d.SetId(aws.StringValue(output.NatGateway.NatGatewayId)) - if _, err := WaitNATGatewayCreated(conn, d.Id()); err != nil { - return fmt.Errorf("waiting for EC2 NAT Gateway (%s) create: %w", d.Id(), err) + if _, err := WaitNATGatewayCreated(ctx, conn, d.Id()); err != nil { + return diag.Errorf("waiting for EC2 NAT Gateway (%s) create: %s", d.Id(), err) } - return resourceNATGatewayRead(d, meta) + return resourceNATGatewayRead(ctx, d, meta) } -func resourceNATGatewayRead(d *schema.ResourceData, meta interface{}) error { +func resourceNATGatewayRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { conn := meta.(*conns.AWSClient).EC2Conn defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig ignoreTagsConfig := meta.(*conns.AWSClient).IgnoreTagsConfig - ng, err := FindNATGatewayByID(conn, d.Id()) + ng, err := FindNATGatewayByID(ctx, conn, d.Id()) if !d.IsNewResource() && tfresource.NotFound(err) { 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 { } if err != nil { - return fmt.Errorf("reading EC2 NAT Gateway (%s): %w", d.Id(), err) + return diag.Errorf("reading EC2 NAT Gateway (%s): %s", d.Id(), err) } address := ng.NatGatewayAddresses[0] @@ -138,35 +139,35 @@ func resourceNATGatewayRead(d *schema.ResourceData, meta interface{}) error { //lintignore:AWSR002 if err := d.Set("tags", tags.RemoveDefaultConfig(defaultTagsConfig).Map()); err != nil { - return fmt.Errorf("setting tags: %w", err) + return diag.Errorf("setting tags: %s", err) } if err := d.Set("tags_all", tags.Map()); err != nil { - return fmt.Errorf("setting tags_all: %w", err) + return diag.Errorf("setting tags_all: %s", err) } return nil } -func resourceNATGatewayUpdate(d *schema.ResourceData, meta interface{}) error { +func resourceNATGatewayUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { conn := meta.(*conns.AWSClient).EC2Conn if d.HasChange("tags_all") { o, n := d.GetChange("tags_all") - if err := UpdateTags(conn, d.Id(), o, n); err != nil { - return fmt.Errorf("updating EC2 NAT Gateway (%s) tags: %w", d.Id(), err) + if err := UpdateTagsWithContext(ctx, conn, d.Id(), o, n); err != nil { + return diag.Errorf("updating EC2 NAT Gateway (%s) tags: %s", d.Id(), err) } } - return resourceNATGatewayRead(d, meta) + return resourceNATGatewayRead(ctx, d, meta) } -func resourceNATGatewayDelete(d *schema.ResourceData, meta interface{}) error { +func resourceNATGatewayDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { conn := meta.(*conns.AWSClient).EC2Conn log.Printf("[INFO] Deleting EC2 NAT Gateway: %s", d.Id()) - _, err := conn.DeleteNatGateway(&ec2.DeleteNatGatewayInput{ + _, err := conn.DeleteNatGatewayWithContext(ctx, &ec2.DeleteNatGatewayInput{ NatGatewayId: aws.String(d.Id()), }) @@ -175,11 +176,11 @@ func resourceNATGatewayDelete(d *schema.ResourceData, meta interface{}) error { } if err != nil { - return fmt.Errorf("deleting EC2 NAT Gateway (%s): %w", d.Id(), err) + return diag.Errorf("deleting EC2 NAT Gateway (%s): %s", d.Id(), err) } - if _, err := WaitNATGatewayDeleted(conn, d.Id()); err != nil { - return fmt.Errorf("waiting for EC2 NAT Gateway (%s) delete: %w", d.Id(), err) + if _, err := WaitNATGatewayDeleted(ctx, conn, d.Id()); err != nil { + return diag.Errorf("waiting for EC2 NAT Gateway (%s) delete: %s", d.Id(), err) } return nil diff --git a/internal/service/ec2/vpc_nat_gateway_data_source.go b/internal/service/ec2/vpc_nat_gateway_data_source.go index 8f6af12d64a..8393f43eac2 100644 --- a/internal/service/ec2/vpc_nat_gateway_data_source.go +++ b/internal/service/ec2/vpc_nat_gateway_data_source.go @@ -1,11 +1,12 @@ package ec2 import ( - "fmt" + "context" "time" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/ec2" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-provider-aws/internal/conns" tftags "github.com/hashicorp/terraform-provider-aws/internal/tags" @@ -14,7 +15,7 @@ import ( func DataSourceNATGateway() *schema.Resource { return &schema.Resource{ - Read: dataSourceNATGatewayRead, + ReadWithoutTimeout: dataSourceNATGatewayRead, Timeouts: &schema.ResourceTimeout{ Read: schema.DefaultTimeout(20 * time.Minute), @@ -67,7 +68,7 @@ func DataSourceNATGateway() *schema.Resource { } } -func dataSourceNATGatewayRead(d *schema.ResourceData, meta interface{}) error { +func dataSourceNATGatewayRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { conn := meta.(*conns.AWSClient).EC2Conn ignoreTagsConfig := meta.(*conns.AWSClient).IgnoreTagsConfig @@ -99,10 +100,10 @@ func dataSourceNATGatewayRead(d *schema.ResourceData, meta interface{}) error { input.Filter = nil } - ngw, err := FindNATGateway(conn, input) + ngw, err := FindNATGateway(ctx, conn, input) if err != nil { - return tfresource.SingularDataSourceFindError("EC2 NAT Gateway", err) + return diag.FromErr(tfresource.SingularDataSourceFindError("EC2 NAT Gateway", err)) } d.SetId(aws.StringValue(ngw.NatGatewayId)) @@ -122,7 +123,7 @@ func dataSourceNATGatewayRead(d *schema.ResourceData, meta interface{}) error { } if err := d.Set("tags", KeyValueTags(ngw.Tags).IgnoreAWS().IgnoreConfig(ignoreTagsConfig).Map()); err != nil { - return fmt.Errorf("error setting tags: %w", err) + return diag.Errorf("error setting tags: %s", err) } return nil diff --git a/internal/service/ec2/vpc_nat_gateway_test.go b/internal/service/ec2/vpc_nat_gateway_test.go index 0c281a66558..6a332d27103 100644 --- a/internal/service/ec2/vpc_nat_gateway_test.go +++ b/internal/service/ec2/vpc_nat_gateway_test.go @@ -1,6 +1,7 @@ package ec2_test import ( + "context" "fmt" "testing" @@ -186,7 +187,7 @@ func testAccCheckNATGatewayDestroy(s *terraform.State) error { continue } - _, err := tfec2.FindNATGatewayByID(conn, rs.Primary.ID) + _, err := tfec2.FindNATGatewayByID(context.Background(), conn, rs.Primary.ID) if tfresource.NotFound(err) { continue @@ -215,7 +216,7 @@ func testAccCheckNATGatewayExists(n string, v *ec2.NatGateway) resource.TestChec conn := acctest.Provider.Meta().(*conns.AWSClient).EC2Conn - output, err := tfec2.FindNATGatewayByID(conn, rs.Primary.ID) + output, err := tfec2.FindNATGatewayByID(context.Background(), conn, rs.Primary.ID) if err != nil { return err diff --git a/internal/service/ec2/vpc_nat_gateways_data_source.go b/internal/service/ec2/vpc_nat_gateways_data_source.go index 3894c8a8630..cb3525ae933 100644 --- a/internal/service/ec2/vpc_nat_gateways_data_source.go +++ b/internal/service/ec2/vpc_nat_gateways_data_source.go @@ -1,11 +1,12 @@ package ec2 import ( - "fmt" + "context" "time" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/ec2" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-provider-aws/internal/conns" tftags "github.com/hashicorp/terraform-provider-aws/internal/tags" @@ -13,7 +14,7 @@ import ( func DataSourceNATGateways() *schema.Resource { return &schema.Resource{ - Read: dataSourceNATGatewaysRead, + ReadWithoutTimeout: dataSourceNATGatewaysRead, Timeouts: &schema.ResourceTimeout{ Read: schema.DefaultTimeout(20 * time.Minute), @@ -35,7 +36,7 @@ func DataSourceNATGateways() *schema.Resource { } } -func dataSourceNATGatewaysRead(d *schema.ResourceData, meta interface{}) error { +func dataSourceNATGatewaysRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { conn := meta.(*conns.AWSClient).EC2Conn input := &ec2.DescribeNatGatewaysInput{} @@ -62,10 +63,10 @@ func dataSourceNATGatewaysRead(d *schema.ResourceData, meta interface{}) error { input.Filter = nil } - output, err := FindNATGateways(conn, input) + output, err := FindNATGateways(ctx, conn, input) if err != nil { - return fmt.Errorf("error reading EC2 NAT Gateways: %w", err) + return diag.Errorf("error reading EC2 NAT Gateways: %s", err) } var natGatewayIDs []string diff --git a/internal/service/ec2/wait.go b/internal/service/ec2/wait.go index bd6c9eb16e0..7f892303b89 100644 --- a/internal/service/ec2/wait.go +++ b/internal/service/ec2/wait.go @@ -2037,15 +2037,15 @@ const ( natGatewayDeletedTimeout = 30 * time.Minute ) -func WaitNATGatewayCreated(conn *ec2.EC2, id string) (*ec2.NatGateway, error) { +func WaitNATGatewayCreated(ctx context.Context, conn *ec2.EC2, id string) (*ec2.NatGateway, error) { stateConf := &resource.StateChangeConf{ Pending: []string{ec2.NatGatewayStatePending}, Target: []string{ec2.NatGatewayStateAvailable}, - Refresh: StatusNATGatewayState(conn, id), + Refresh: StatusNATGatewayState(ctx, conn, id), Timeout: natGatewayCreatedTimeout, } - outputRaw, err := stateConf.WaitForState() + outputRaw, err := stateConf.WaitForStateContext(ctx) if output, ok := outputRaw.(*ec2.NatGateway); ok { if state := aws.StringValue(output.State); state == ec2.NatGatewayStateFailed { @@ -2058,17 +2058,17 @@ func WaitNATGatewayCreated(conn *ec2.EC2, id string) (*ec2.NatGateway, error) { return nil, err } -func WaitNATGatewayDeleted(conn *ec2.EC2, id string) (*ec2.NatGateway, error) { +func WaitNATGatewayDeleted(ctx context.Context, conn *ec2.EC2, id string) (*ec2.NatGateway, error) { stateConf := &resource.StateChangeConf{ Pending: []string{ec2.NatGatewayStateDeleting}, Target: []string{}, - Refresh: StatusNATGatewayState(conn, id), + Refresh: StatusNATGatewayState(ctx, conn, id), Timeout: natGatewayDeletedTimeout, Delay: 10 * time.Second, MinTimeout: 10 * time.Second, } - outputRaw, err := stateConf.WaitForState() + outputRaw, err := stateConf.WaitForStateContext(ctx) if output, ok := outputRaw.(*ec2.NatGateway); ok { if state := aws.StringValue(output.State); state == ec2.NatGatewayStateFailed {